Showing 4 changed files with 89 additions and 53 deletions
+2 -1
Changes
... ...
@@ -1,6 +1,7 @@
1 1
 0.1622
2 2
   deprecated DBIx::Custom::SQLite and DBIx::Custom::MySQL
3
-  
3
+  added dbi_options attribute
4
+  checked attributes passed to connect method
4 5
 0.1621
5 6
   cleanup (removed undocumented features)
6 7
 0.1620
+32 -13
lib/DBIx/Custom.pm
... ...
@@ -84,19 +84,6 @@ sub helper {
84 84
     return $self;
85 85
 }
86 86
 
87
-#sub new {
88
-#    my $self = shift->SUPER::new(@_);
89
-#    
90
-#    # Check attribute names
91
-#    my @attrs = keys %$self;
92
-#    foreach my $attr (@attrs) {
93
-#        croak qq{"$attr" is invalid attribute name"}
94
-#          unless $self->can($attr);
95
-#    }
96
-#    
97
-#    return $self;
98
-#}
99
-
100 87
 sub connect {
101 88
     my $proto = shift;
102 89
     
... ...
@@ -111,6 +98,9 @@ sub connect {
111 98
     
112 99
     my $user        = $self->user;
113 100
     my $password    = $self->password;
101
+    my $dbi_options = $self->dbi_options || {};
102
+    
103
+    $DB::single = 1;
114 104
     
115 105
     # Connect
116 106
     my $dbh = eval {DBI->connect(
... ...
@@ -121,6 +111,7 @@ sub connect {
121 111
             RaiseError => 1,
122 112
             PrintError => 0,
123 113
             AutoCommit => 1,
114
+            %$dbi_options
124 115
         }
125 116
     )};
126 117
     
... ...
@@ -317,6 +308,19 @@ sub insert {
317 308
     return $ret_val;
318 309
 }
319 310
 
311
+sub new {
312
+    my $self = shift->SUPER::new(@_);
313
+    
314
+    # Check attribute names
315
+    my @attrs = keys %$self;
316
+    foreach my $attr (@attrs) {
317
+        croak qq{"$attr" is invalid attribute name}
318
+          unless $self->can($attr);
319
+    }
320
+    
321
+    return $self;
322
+}
323
+
320 324
 sub register_filter {
321 325
     my $invocant = shift;
322 326
     
... ...
@@ -735,6 +739,14 @@ C<connect()> method use this value to connect the database.
735 739
 
736 740
 L<DBI> object. You can call all methods of L<DBI>.
737 741
 
742
+=head2 C<dbi_options>
743
+
744
+    my $dbi_options = $dbi->dbi_options;
745
+    $dbi            = $dbi->dbi_options($dbi_options);
746
+
747
+DBI options.
748
+C<connect()> method use this value to connect the database.
749
+
738 750
 =head2 C<default_bind_filter>
739 751
 
740 752
     my $default_bind_filter = $dbi->default_bind_filter
... ...
@@ -960,6 +972,13 @@ B<Example:>
960 972
                  append => "some statement",
961 973
                  filter => {title => 'encode_utf8'})
962 974
 
975
+=head2 C<new>
976
+
977
+    my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=dbname",
978
+                                    user => 'ken', password => '!LFKD%$&');
979
+
980
+Create a new L<DBIx::Custom> object.
981
+
963 982
 =head2 C<register_filter>
964 983
 
965 984
     $dbi->register_filter(%filters);
+50 -36
t/dbix-custom-core-mysql-private.t
... ...
@@ -1,36 +1,50 @@
1
-use Test::More;
2
-use strict;
3
-use warnings;
4
-
5
-# user password database
6
-our ($USER, $PASSWORD, $DATABASE) = connect_info();
7
-
8
-plan skip_all => 'private MySQL test' unless $USER;
9
-
10
-plan 'no_plan';
11
-
12
-use DBIx::Custom;
13
-use Scalar::Util 'blessed';
14
-{
15
-    my $dbi = DBIx::Custom->connect(
16
-        user => $USER,
17
-        password => $PASSWORD,
18
-        data_source => "dbi:mysql:dbname=$DATABASE"
19
-    );
20
-    $dbi->connect;
21
-    
22
-    ok(blessed $dbi->dbh);
23
-    can_ok($dbi->dbh, qw/prepare/);
24
-}
25
-
26
-sub connect_info {
27
-    my $file = 'password.tmp';
28
-    open my $fh, '<', $file
29
-      or return;
30
-    
31
-    my ($user, $password, $database) = split(/\s/, (<$fh>)[0]);
32
-    
33
-    close $fh;
34
-    
35
-    return ($user, $password, $database);
36
-}
1
+use Test::More;
2
+use strict;
3
+use warnings;
4
+
5
+# user password database
6
+our ($USER, $PASSWORD, $DATABASE) = connect_info();
7
+
8
+plan skip_all => 'private MySQL test' unless $USER;
9
+
10
+plan 'no_plan';
11
+
12
+use DBIx::Custom;
13
+use Scalar::Util 'blessed';
14
+{
15
+    my $dbi = DBIx::Custom->connect(
16
+        user => $USER,
17
+        password => $PASSWORD,
18
+        data_source => "dbi:mysql:dbname=$DATABASE"
19
+    );
20
+    $dbi->connect;
21
+    
22
+    ok(blessed $dbi->dbh);
23
+    can_ok($dbi->dbh, qw/prepare/);
24
+    ok($dbi->dbh->{AutoCommit});
25
+    ok(!$dbi->dbh->{mysql_enable_utf8});
26
+}
27
+
28
+{
29
+    my $dbi = DBIx::Custom->connect(
30
+        user => $USER,
31
+        password => $PASSWORD,
32
+        data_source => "dbi:mysql:dbname=$DATABASE",
33
+        dbi_options => {AutoCommit => 0, mysql_enable_utf8 => 1}
34
+    );
35
+    $dbi->connect;
36
+    ok(!$dbi->dbh->{AutoCommit});
37
+    ok($dbi->dbh->{mysql_enable_utf8});
38
+}
39
+
40
+sub connect_info {
41
+    my $file = 'password.tmp';
42
+    open my $fh, '<', $file
43
+      or return;
44
+    
45
+    my ($user, $password, $database) = split(/\s/, (<$fh>)[0]);
46
+    
47
+    close $fh;
48
+    
49
+    return ($user, $password, $database);
50
+}
+5 -3
t/dbix-custom-core.t
... ...
@@ -1,4 +1,4 @@
1
-use Test::More tests => 11;
1
+use Test::More tests => 12;
2 2
 use strict;
3 3
 use warnings;
4 4
 
... ...
@@ -19,7 +19,6 @@ test 'Constructor';
19 19
 $query_builder = DBIx::Custom::QueryBuilder->new;
20 20
 $dbi = DBIx::Custom->new(
21 21
     user => 'a',
22
-    database => 'a',
23 22
     password => 'b',
24 23
     data_source => 'c',
25 24
     filters => {
... ...
@@ -30,7 +29,7 @@ $dbi = DBIx::Custom->new(
30 29
     result_class => 'g',
31 30
     query_builder => $query_builder,
32 31
 );
33
-is_deeply($dbi,{user => 'a', database => 'a', password => 'b', data_source => 'c', 
32
+is_deeply($dbi,{user => 'a', password => 'b', data_source => 'c', 
34 33
                 filters => {f => 3}, default_bind_filter => 'f',
35 34
                 default_fetch_filter => 'g', result_class => 'g',
36 35
                 query_builder => $query_builder}, $test);
... ...
@@ -101,3 +100,6 @@ test 'expand';
101 100
               {'books.title' => 'Perl', 'books.author' => 'Ken'});
102 101
 }
103 102
 
103
+test 'invalid attribute name';
104
+eval {$dbi = DBIx::Custom->new(a => 1) };
105
+like ($@, qr/"a" is invalid attribute name/, $test);