Showing 1 changed files with 72 additions and 5 deletions
+72 -5
lib/DBI/Custom.pm
... ...
@@ -46,6 +46,7 @@ sub clone {
46 46
     $new->filters(%{$self->filters || {}});
47 47
     $new->bind_filter($self->bind_filter);
48 48
     $new->fetch_filter($self->fetch_filter);
49
+    $new->result_class($self->result_class);
49 50
 }
50 51
 
51 52
 # Attribute
... ...
@@ -56,12 +57,15 @@ sub fetch_filter : Attr {}
56 57
 
57 58
 sub filters : Attr { type => 'hash', deref => 1, auto_build => sub { shift->filters({}) } }
58 59
 sub add_filter { shift->filters(@_) }
60
+sub result_class : Attr { default => 'DBI::Custom::Result' }
59 61
 
60 62
 sub dbh          : Attr { auto_build => sub { shift->connect } }
61 63
 sub sql_template : Attr { auto_build => sub { shift->sql_template(DBI::Custom::SQLTemplate->new) } }
62 64
 
65
+
63 66
 our %VALID_CONNECT_INFO = map {$_ => 1} qw/data_source user password options/;
64 67
 
68
+# Connect
65 69
 sub connect {
66 70
     my $self = shift;
67 71
     my $connect_info = $self->connect_info;
... ...
@@ -83,9 +87,33 @@ sub connect {
83 87
         }
84 88
     );
85 89
     
90
+    $self->auto_commit($self->dbh->{AutoCommit});
86 91
     $self->dbh($dbh);
87 92
 }
88 93
 
94
+# Is connected?
95
+sub connected {
96
+    my $self = shift;
97
+    return exists $sefl->{dbh};
98
+}
99
+
100
+# Disconnect
101
+sub disconnect {
102
+    my $self = shift;
103
+    if ($self->conneced) {
104
+        $self->dbh->disconnect;
105
+        delete $self->{dbh};
106
+    }
107
+}
108
+
109
+# Reconnect
110
+sub reconnect {
111
+    my $self = shift;
112
+    $sefl->disconnect if $self->connected;
113
+    $self->connect;
114
+}
115
+
116
+
89 117
 sub create_sql {
90 118
     my $self = shift;
91 119
     
... ...
@@ -99,19 +127,55 @@ sub query {
99 127
     
100 128
     $filter ||= $self->bind_filter;
101 129
     
102
-    my ($sql, @bind) = $self->creqte_sql($template, $values, $filter);
103
-    $self->prepare($sql);
104
-    $self->execute(@bind);
130
+    my ($sql, @bind) = $self->create_sql($template, $values, $filter);
131
+    my (
132
+    my $sth = $self->dbh->prepare($sql);
133
+    $sth->execute(@bind);
134
+    
135
+    # Select
136
+    if ($sth->{NUM_OF_FIELDS}) {
137
+        my $result_class = $self->result_class;
138
+        my $result = $result_class->new({sth => $sth});
139
+        return $result;
140
+    }
141
+    return;
105 142
 }
106 143
 
107 144
 sub query_raw_sql {
108 145
     my ($self, $sql, @bind) = @_;
109
-    $self->prepare($sql);
110
-    $self->execute(@bind);
146
+    my $sth = $self->dbh->prepare($sql);
147
+    $sth->execute(@bind);
148
+    return $sth;
111 149
 }
112 150
 
151
+sub auto_commit : Attr {
152
+
113 153
 Object::Simple->build_class;
114 154
 
155
+package DBI::Custom::Result;
156
+use Object::Simple;
157
+
158
+sub sth : Attr {};
159
+
160
+sub fetchrow_arrayref {
161
+    my $self = shift;
162
+    $self->sth;
163
+    
164
+    
165
+}
166
+
167
+
168
+*fetch = \&fetchrow_arrayref;
169
+
170
+sub err    { shift->sth->err }
171
+sub errstr { shift->sth->errstr }
172
+sub finish { shift->sth->finish }
173
+sub rows   { shift->sth->rows }
174
+sub state  { shift->sth->state }
175
+
176
+Object::Simple->build_class;
177
+
178
+
115 179
 package DBI::Custom::SQLTemplate;
116 180
 use Object::Simple;
117 181
 use Carp 'croak';
... ...
@@ -285,6 +349,9 @@ sub build_sql {
285 349
 
286 350
 Object::Simple->build_class;
287 351
 
352
+package DBI::Custom;
353
+1;
354
+
288 355
 =head1 NAME
289 356
 
290 357
 DBI::Custom - Customizable simple DBI