... | ... |
@@ -58,6 +58,7 @@ sub filters : Attr { type => 'hash', deref => 1, auto_build => sub { shift->filt |
58 | 58 |
sub add_filter { shift->filters(@_) } |
59 | 59 |
|
60 | 60 |
sub dbh : Attr { auto_build => sub { shift->connect } } |
61 |
+sub sql_template : Attr { auto_build => sub { shift->sql_template(DBI::Custom::SQLTemplate->new) } } |
|
61 | 62 |
|
62 | 63 |
our %VALID_CONNECT_INFO = map {$_ => 1} qw/data_source user password options/; |
63 | 64 |
|
... | ... |
@@ -66,7 +67,8 @@ sub connect { |
66 | 67 |
my $connect_info = $self->connect_info; |
67 | 68 |
|
68 | 69 |
foreach my $key (keys %{$self->connect_info}) { |
69 |
- |
|
70 |
+ croak("connect_info '$key' is invald") |
|
71 |
+ unless $VALID_CONNECT_INFO{$key}; |
|
70 | 72 |
} |
71 | 73 |
|
72 | 74 |
my $dbh = DBI->connect( |
... | ... |
@@ -84,15 +86,44 @@ sub connect { |
84 | 86 |
$self->dbh($dbh); |
85 | 87 |
} |
86 | 88 |
|
89 |
+sub create_sql { |
|
90 |
+ my $self = shift; |
|
91 |
+ |
|
92 |
+ my ($sql, @bind) = $self->sql_template->create_sql(@_); |
|
93 |
+ |
|
94 |
+ return ($sql, @bind); |
|
95 |
+} |
|
96 |
+ |
|
87 | 97 |
sub query { |
98 |
+ my $self = shift; |
|
99 |
+ my ($sql, @bind) = $self->creqte_sql(@_); |
|
100 |
+ $self->prepare($sql); |
|
101 |
+ $self->execute(@bind); |
|
102 |
+} |
|
103 |
+ |
|
104 |
+sub query_raw_sql { |
|
105 |
+ my ($self, $sql, @bind) = @_; |
|
106 |
+ $self->prepare($sql); |
|
107 |
+ $self->execute(@bind); |
|
108 |
+} |
|
109 |
+ |
|
110 |
+Object::Simple->build_class; |
|
111 |
+ |
|
112 |
+package DBI::Custom::SQLTemplate; |
|
113 |
+use Object::Simple; |
|
114 |
+ |
|
115 |
+sub create_sql { |
|
88 | 116 |
|
89 | 117 |
} |
90 | 118 |
|
119 |
+ |
|
120 |
+ |
|
121 |
+ |
|
91 | 122 |
Object::Simple->build_class; |
92 | 123 |
|
93 | 124 |
=head1 NAME |
94 | 125 |
|
95 |
-DBI::Custom - The great new DBI::Custom! |
|
126 |
+DBI::Custom - Customizable simple DBI |
|
96 | 127 |
|
97 | 128 |
=head1 VERSION |
98 | 129 |
|
... | ... |
@@ -130,6 +161,12 @@ Version 0.0101 |
130 | 161 |
|
131 | 162 |
=head2 query |
132 | 163 |
|
164 |
+=head2 create_sql |
|
165 |
+ |
|
166 |
+=head2 query_raw_sql |
|
167 |
+ |
|
168 |
+=head2 sql_template |
|
169 |
+ |
|
133 | 170 |
=head1 AUTHOR |
134 | 171 |
|
135 | 172 |
Yuki Kimoto, C<< <kimoto.yuki at gmail.com> >> |
... | ... |
@@ -159,8 +159,17 @@ our ($U, $P, $D) = connect_info(); |
159 | 159 |
|
160 | 160 |
ok(blessed $dbi->dbh); |
161 | 161 |
can_ok($dbi->dbh, qw/prepare/); |
162 |
+} |
|
163 |
+ |
|
164 |
+{ |
|
165 |
+ my $dbi = DBI::Custom->new( |
|
166 |
+ connect_info => { |
|
167 |
+ no_exist => 1, |
|
168 |
+ } |
|
169 |
+ ); |
|
170 |
+ eval{$dbi->connect}; |
|
162 | 171 |
|
163 |
- |
|
172 |
+ like($@, qr/connect_info 'no_exist' is invald/, 'no exist'); |
|
164 | 173 |
} |
165 | 174 |
|
166 | 175 |
sub connect_info { |