Showing 8 changed files with 319 additions and 252 deletions
+4
Changes
... ...
@@ -1,3 +1,7 @@
1
+0.1645
2
+  removed experimental base_table() for class expandability.
3
+  experimental table() can't set table object any more.
4
+  added experimental include_table().
1 5
 0.1644
2 6
   update pod
3 7
 0.1643
+73 -26
lib/DBIx/Custom.pm
... ...
@@ -1,6 +1,6 @@
1 1
 package DBIx::Custom;
2 2
 
3
-our $VERSION = '0.1644';
3
+our $VERSION = '0.1645';
4 4
 
5 5
 use 5.008001;
6 6
 use strict;
... ...
@@ -24,7 +24,6 @@ __PACKAGE__->attr(
24 24
     dbi_option    => sub { {} },
25 25
     query_builder => sub { DBIx::Custom::QueryBuilder->new },
26 26
     result_class  => 'DBIx::Custom::Result',
27
-    base_table    => sub { DBIx::Custom::Table->new(dbi => shift) },
28 27
     safety_column_name => sub { qr/^[\w\.]*$/ },
29 28
     stash => sub { {} }
30 29
 );
... ...
@@ -588,36 +587,53 @@ sub select {
588 587
 }
589 588
 
590 589
 sub table {
591
-    my $self = shift;
592
-    my $name = shift;
590
+    my ($self, $name, $table) = @_;
591
+    
592
+    # Set
593
+    $self->{table} ||= {};
594
+    if ($table) {
595
+        $self->{table}{$name} = $table;
596
+        return $self;
597
+    }
598
+    
599
+    # Check table existance
600
+    croak qq{Table "$name" is not included}
601
+      unless $self->{table}{$name};
602
+    
603
+    # Get
604
+    return $self->{table}{$name};
605
+}
606
+
607
+sub include_table {
608
+    my ($self, $name_space, $table_infos) = @_;
593 609
     
594
-    # Create table
595
-    $self->{_tables} ||= {};
596
-    unless (defined $self->{_tables}->{$name}) {
597
-        # Base table
598
-        my $base_table = $self->base_table;
610
+    foreach my $table_info (@$table_infos) {
599 611
         
600
-        # Base methods
601
-        my $bmethods = ref $base_table->{_methods} eq 'HASH'
602
-                     ? $base_table->{_methods}
603
-                     : {};
612
+        # Table name and class
613
+        my $table_name;
614
+        my $table_class;
615
+        if (ref $table_info eq 'HASH') {
616
+            $table_name = (keys %$table_info)[0];
617
+            $table_class = $table_info->{$table_name};
618
+        }
619
+        else { $table_name = $table_class = $table_info }
620
+        my $tclass = "${name_space}::$table_class";
604 621
         
605
-        # Copy Methods
606
-        my $methods = {};
607
-        $methods->{$_} = $bmethods->{$_} for keys %$bmethods;
608
-        $methods->{"base_$_"} = $bmethods->{$_} for keys %$bmethods;
622
+        # Load
623
+        croak qq{"$tclass" is invalid class name}
624
+          if $tclass =~ /[^\w:]/;
625
+        unless ($tclass->can('isa')) {
626
+            eval "use $tclass";
627
+            croak $@ if $@;
628
+        }
609 629
         
610
-        # Create table
611
-        my $table = $base_table->new(
612
-            dbi      => $self,
613
-            name     => $name,
614
-        );
615
-        $table->method($methods);
630
+        # Instantiate
631
+        my $table = $tclass->new(dbi => $self, name => $table_name);
616 632
         
617
-        $self->{_tables}->{$name} = $table;
633
+        # Set
634
+        $self->table($table_name, $table);
618 635
     }
619
-    
620
-    return $self->{_tables}{$name};
636
+    return $self;
621 637
 }
622 638
 
623 639
 our %VALID_UPDATE_ARGS
... ...
@@ -1165,6 +1181,37 @@ You can do anything in callback.
1165 1181
 Callback receive four arguments, dbi object, table name,
1166 1182
 column name and columninformation.
1167 1183
 
1184
+=head2 C<(experimental) include_table>
1185
+
1186
+    $dbi->include_table(
1187
+        'MyTable' => [
1188
+            'book', 'person', 'company'
1189
+        ]
1190
+    );
1191
+
1192
+Include tables. First argument is name space.
1193
+Second argument is array reference of class base names.
1194
+
1195
+The following table is instantiated and included.
1196
+
1197
+    MyTable::book
1198
+    MyTable::person
1199
+    MyTable::company
1200
+
1201
+You can get these instance by C<table()>.
1202
+
1203
+    my $book_table = $dbi->table('book');
1204
+
1205
+If you want to other name as table class,
1206
+you can do like this.
1207
+
1208
+    $dbi->include_table(
1209
+        'MyTable' => [
1210
+            {'book' => 'Book'},
1211
+            {'person' => 'Person'}
1212
+        ]
1213
+    );
1214
+
1168 1215
 =head2 C<(experimental) method>
1169 1216
 
1170 1217
     $dbi->method(
+52 -75
lib/DBIx/Custom/Guide.pod
... ...
@@ -959,43 +959,51 @@ L<DBIx::Custom::Where> object is embedded into SQL.
959 959
 
960 960
     $dbi->execute($sql, param => $param);
961 961
 
962
-=head2 7. Table object
962
+=head2 7. Table class
963 963
 
964
-=head3 Create table object C<table()>
964
+=head3 Define table clas
965 965
 
966
-You can create table object to access table in database.
967
-use C<tabel()> to create table object.
966
+You can define table class extending L<DBIx::Custom::Table>
967
+to improve source code view.
968 968
 
969
-    my $table = $dbi->table('book');
969
+    package MyTable::book;
970
+    use base 'DBIx::Custom::Table';
971
+    
972
+    sub insert { ... }
973
+    sub list { ... }
970 974
 
971
-Return value is L<DBIx::Custom::Table>.
972
-From table object, you can call C<insert()>, C<update()>, C<update_all()>�A
973
-C<delete()>, C<delete_all()>, C<select()>.
974
-You don't have to specify table name.
975
+You can include and instantiate this class.
975 976
 
976
-    $table->insert(param => $param);
977
+    $dbi->include_table(
978
+        MyTable => [
979
+            'book',
980
+        ]
981
+    );
977 982
 
978
-You can add any method to table object.
983
+First argument is name space.
984
+Second argument is array reference of class base names.
979 985
 
980
-    $table->method(
981
-        register => sub {
982
-            my $self = shift;
983
-            my $table_name = $self->name;
984
-            # ...
985
-        },
986
-        list => sub { ... }
987
-    );
986
+You can use this table like this.
987
+
988
+    my $result = $dbi->table('book')->list;
989
+
990
+Table class is a little more useful than L<DBIx::Custom>,
991
+because you can use method C<insert()>, C<update()>, C<update_all()>,
992
+C<delete()>, C<delete_all()>, C<select()> without table name.
993
+
994
+    $dbi->table('book')->insert(param => $param);
988 995
 
989
-You can get table name by C<name()>.
996
+This table is L<DBIx::Custom::Table> object.
990 997
 
991
-You can call these method from table object.
998
+If you need table name, you can get C<name()>.
992 999
 
993
-    $table->register(...);
994
-    $table->list(...);
1000
+    my $name = $table->name;
995 1001
 
996
-=head2 Use L<DBIx::Custom> and <DBI> methods
1002
+You can get L<DBIx::Custom> object.
997 1003
 
998
-You can call all methods of L<DBIx::Custom> and L<DBI>
1004
+    my $dbi = $table->dbi;
1005
+
1006
+You can also call all methods of L<DBIx::Custom> and L<DBI>.
999 1007
 
1000 1008
     # DBIx::Custom method
1001 1009
     $table->execute($sql);
... ...
@@ -1004,40 +1012,9 @@ You can call all methods of L<DBIx::Custom> and L<DBI>
1004 1012
     $table->begin_work;
1005 1013
     $table->commit;
1006 1014
 
1007
-=head2 Add table shared method
1008
-
1009
-To share methods in all tables,
1010
-add method to base table.
1011
-You can get base table by C<base_table()>.
1015
+=head2 Table class example
1012 1016
 
1013
-    $dbi->base_table->method(
1014
-        count => sub {
1015
-            my $self = shift;
1016
-            return $self->select(column => ['count(*)']);
1017
-        }
1018
-    );
1019
-
1020
-This method is used by all talbes.
1021
-
1022
-    $dbi->table('book')->count(...);
1023
-
1024
-Even if same method name is added to table,
1025
-You can use base table method by C<base_METHOD()>.
1026
-
1027
-    $table->method(
1028
-        count => sub {
1029
-            my $self = shift;
1030
-            
1031
-            $self->base_count(...);
1032
-            
1033
-            # ...
1034
-        }
1035
-    );
1036
-
1037
-=head2 Model example
1038
-
1039
-Generally, it is good to create model in constructor
1040
-in the class extending L<DBIx::Custom>.
1017
+Model example.
1041 1018
 
1042 1019
     package MyDBI;
1043 1020
     
... ...
@@ -1046,25 +1023,25 @@ in the class extending L<DBIx::Custom>.
1046 1023
     sub connect {
1047 1024
         my $self = shift->SUPER::connect(@_);
1048 1025
         
1049
-        $self->base_table->method(
1050
-            delete_multi => sub { ... }
1051
-        );
1052
-        
1053
-        $self->table('book')->method(
1054
-            register => sub { ... },
1055
-            remove   => sub { ... },
1056
-        );
1057
-        
1058
-        $self->table('company')->method(
1059
-            register => sub { ... },
1060
-            remove   => sub { ... },
1026
+        $self->include_table(
1027
+            MyTable => [
1028
+                'book',
1029
+                'company'
1030
+            ]
1061 1031
         );
1062 1032
     }
1063
-
1064
-You can use this class in the following way.
1065
-
1066
-    my $dbi = MyDBI->connect(...);
1067
-    $dbi->table('book')->delete_multi(...);
1033
+    
1034
+    package MyTable::book;
1035
+    use base 'DBIx::Custom::Table';
1036
+    
1037
+    sub insert { ... }
1038
+    sub list { ... }
1039
+    
1040
+    package MyTable::company;
1041
+    use base 'DBIx::Custom::Table';
1042
+    
1043
+    sub insert { ... }
1044
+    sub list { ... }
1068 1045
 
1069 1046
 =head2 8. Improve performance
1070 1047
 
+53 -77
lib/DBIx/Custom/Guide/Ja.pod
... ...
@@ -986,45 +986,53 @@ C<execute()>との連携です。SQLを作成するときに埋め込むこと
986 986
 
987 987
     $dbi->execute($sql, param => $param);
988 988
 
989
-=head2 7. テーブルオブジェクト
989
+=head2 7. テーブルクラス
990 990
 
991
-=head3 テーブルオブジェクトの作成 C<table()>
991
+=head3 テーブルクラス
992 992
 
993
-データベースのテーブルにアクセスするための
994
-テーブルオブジェクトを作成することができます。
993
+ソースコードの見通しをよくするために、
994
+L<DBIx::Custom::Table>を継承してテーブルクラスを作成することができます。
995 995
 
996
-テーブルオブジェクトを生成するにはC<table()>を使用します。
996
+    package MyTable::book;
997
+    use base 'DBIx::Custom::Table';
998
+    
999
+    sub insert { ... }
1000
+    sub list { ... }
997 1001
 
998
-    my $table = $dbi->table('book');
1002
+このクラスを取り込んで、インスタンス化することができます。
999 1003
 
1000
-戻り値はL<DBIx::Custom::Table>オブジェクトです。
1001
-テーブルオブジェクトからはC<insert()>、C<update()>、C<update_all()>、
1002
-C<delete()>、C<delete_all()>、C<select()>などのメソッド呼び出すことができます。
1003
-C<table>を指定する必要はありません。
1004
+    $dbi->include_table(
1005
+        MyTable => [
1006
+            'book',
1007
+        ]
1008
+    );
1004 1009
 
1005
-    $table->insert(param => $param);
1010
+最初の引数は名前空間です。第二引数は、クラスの末尾の名前を含む
1011
+配列のリファレンスです。
1006 1012
 
1007
-テーブルオブジェクトには任意のメソッドを追加することができます。
1013
+このテーブルは次のように利用することができます。
1008 1014
 
1009
-    $table->method(
1010
-        register => sub {
1011
-            my $self = shift;
1012
-            my $table_name = $self->name;
1013
-            # something
1014
-        },
1015
-        list => sub { ... },
1016
-    );
1015
+    my $result = $dbi->table('book')->list;
1016
+
1017
+テーブルクラスでは、テーブル名を指定することなしに
1018
+C<insert()>, C<update()>, C<update_all()>,
1019
+C<delete()>, C<delete_all()>, C<select()>などのメソッドを
1020
+利用できるので
1021
+L<DBIx::Custom>よりも少し便利です。
1022
+
1023
+    $dbi->table('book')->insert(param => $param);
1024
+
1025
+テーブルクラスはL<DBIx::Custom::Table>です。
1017 1026
 
1018
-C<name()>を使用して、テーブル名を取得することができます。
1027
+必要であれば、C<name()>でテーブル名を取得することができます。
1019 1028
 
1020
-このようにして登録したメソッドはテーブルオブジェクトから呼び出すことができます。
1029
+    my $name = $table->name;
1021 1030
 
1022
-    $table->register(...);
1023
-    $table->list(...);
1031
+L<DBIx::Custom>オブジェクトを取得することもできます。
1024 1032
 
1025
-=head2 L<DBIx::Custom>と<DBI>のメソッドの利用
1033
+    my $dbi = $table->dbi;
1026 1034
 
1027
-テーブルからはL<DBIx::Custom>とL<DBI>のすべてのメソッドを呼び出すことができます。
1035
+L<DBIx::Custom>とL<DBI>のすべてのメソッドを呼び出すこともできます。
1028 1036
 
1029 1037
     # DBIx::Custom method
1030 1038
     $table->execute($sql);
... ...
@@ -1033,40 +1041,9 @@ C<name()>を使用して、テーブル名を取得することができます
1033 1041
     $table->begin_work;
1034 1042
     $table->commit;
1035 1043
 
1036
-=head2 テーブルで共有のメソッドの追加
1037
-
1038
-すべてのテーブルでメソッドを共有するには
1039
-ベーステーブルにメソッドを登録します。
1040
-ベーステーブルを取得するにはC<base_table>を使用します。
1041
-
1042
-    $dbi->base_table->method(
1043
-        count => sub {
1044
-            my $self = shift;
1045
-            return $self->select(column => ['count(*)']);
1046
-        }
1047
-    );
1048
-
1049
-このメソッドはすべてのテーブルから利用することができます。
1050
-
1051
-    $dbi->table('book')->count(...);
1052
-
1053
-また同名のメソッドをテーブルに追加して、ベーステーブルの
1054
-メソッドを利用したい場合はC<base_METHOD()>と記述します。
1044
+=head2 テーブルクラスのサンプル
1055 1045
 
1056
-    $table->method(
1057
-        count => sub {
1058
-            my $self = shift;
1059
-            
1060
-            $self->base_count(...);
1061
-            
1062
-            # ...
1063
-        }
1064
-    );
1065
-
1066
-=head2 モデルのサンプル
1067
-
1068
-一般的には、L<DBIx::Custom>を継承してコンストラクタの中に、モデルを作成
1069
-するのがよいでしょう。
1046
+テーブルクラスのサンプルです。
1070 1047
 
1071 1048
     package MyDBI;
1072 1049
     
... ...
@@ -1075,26 +1052,25 @@ C<name()>を使用して、テーブル名を取得することができます
1075 1052
     sub connect {
1076 1053
         my $self = shift->SUPER::connect(@_);
1077 1054
         
1078
-        $self->base_table->method(
1079
-            delete_multi => sub { ... }
1080
-        );
1081
-        
1082
-        $self->table('book')->method(
1083
-            register => sub { ... },
1084
-            remove   => sub { ... },
1085
-        );
1086
-        
1087
-        $self->table('company')->method(
1088
-            register => sub { ... },
1089
-            remove   => sub { ... },
1055
+        $self->include_table(
1056
+            MyTable => [
1057
+                'book',
1058
+                'company'
1059
+            ]
1090 1060
         );
1091 1061
     }
1092
-
1093
-次のようにこのクラスを利用することができます。
1094
-
1095
-    my $dbi = MyDBI->connect(...);
1096
-    $dbi->table('book')->delete_multi(...);
1097
-    $dbi->table('book')->register(...);
1062
+    
1063
+    package MyTable::book;
1064
+    use base 'DBIx::Custom::Table';
1065
+    
1066
+    sub insert { ... }
1067
+    sub list { ... }
1068
+    
1069
+    package MyTable::company;
1070
+    use base 'DBIx::Custom::Table';
1071
+    
1072
+    sub insert { ... }
1073
+    sub list { ... }
1098 1074
 
1099 1075
 =head2 8. パフォーマンスの改善
1100 1076
 
+85 -74
t/dbix-custom-core-sqlite.t
... ...
@@ -15,6 +15,9 @@ BEGIN {
15 15
     use_ok('DBIx::Custom');
16 16
 }
17 17
 
18
+use FindBin;
19
+use lib "$FindBin::Bin/dbix-custom-core-sqlite";
20
+
18 21
 # Function for test name
19 22
 sub test { print "# $_[0]\n" }
20 23
 
... ...
@@ -732,54 +735,6 @@ is_deeply($infos,
732 735
     
733 736
 );
734 737
 
735
-test 'table';
736
-$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
737
-$dbi->execute($CREATE_TABLE->{0});
738
-$table = $dbi->table('table1');
739
-$table->insert(param => {key1 => 1, key2 => 2});
740
-$table->insert(param => {key1 => 3, key2 => 4});
741
-$rows = $table->select->fetch_hash_all;
742
-is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}],
743
-                 "select");
744
-$rows = $table->select(where => {key2 => 2}, append => 'order by key1',
745
-                              column => ['key1', 'key2'])->fetch_hash_all;
746
-is_deeply($rows, [{key1 => 1, key2 => 2}],
747
-                 "insert insert select");
748
-$table->update(param => {key1 => 3}, where => {key2 => 2});
749
-$table->update(param => {key1 => 5}, where => {key2 => 4});
750
-$rows = $table->select(where => {key2 => 2})->fetch_hash_all;
751
-is_deeply($rows, [{key1 => 3, key2 => 2}],
752
-                 "update");
753
-$table->delete(where => {key2 => 2});
754
-$rows = $table->select->fetch_hash_all;
755
-is_deeply($rows, [{key1 => 5, key2 => 4}], "delete");
756
-$table->update_all(param => {key1 => 3});
757
-$rows = $table->select->fetch_hash_all;
758
-is_deeply($rows, [{key1 => 3, key2 => 4}], "update_all");
759
-$table->delete_all;
760
-$rows = $table->select->fetch_hash_all;
761
-is_deeply($rows, [], "delete_all");
762
-
763
-$dbi->dbh->do($CREATE_TABLE->{2});
764
-$dbi->table('table2')->method(
765
-    ppp => sub {
766
-        my $self = shift;
767
-    
768
-        return $self->name;
769
-    }
770
-);
771
-is($dbi->table('table2')->ppp, 'table2', "method");
772
-
773
-$dbi->table('table2')->method({
774
-    qqq => sub {
775
-        my $self = shift;
776
-    
777
-        return $self->name;
778
-    }
779
-});
780
-is($dbi->table('table2')->qqq, 'table2', "method");
781
-
782
-
783 738
 test 'limit';
784 739
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
785 740
 $dbi->execute($CREATE_TABLE->{0});
... ...
@@ -1272,10 +1227,6 @@ ok(!defined $result->default_filter);
1272 1227
 $result->default_filter('one');
1273 1228
 is($result->default_filter->(), 1);
1274 1229
 
1275
-$dbi->table('book');
1276
-eval{$dbi->table('book')->no_exists};
1277
-like($@, qr/locate/);
1278
-
1279 1230
 test 'dbi_option';
1280 1231
 $dbi = DBIx::Custom->connect(data_source => 'dbi:SQLite:dbname=:memory:',
1281 1232
                              dbi_option => {PrintError => 1});
... ...
@@ -1290,28 +1241,6 @@ is_deeply($result->stash, {}, 'default');
1290 1241
 $result->stash->{foo} = 1;
1291 1242
 is($result->stash->{foo}, 1, 'get and set');
1292 1243
 
1293
-test 'base_table';
1294
-$dbi = DBIx::Custom->new;
1295
-$dbi->base_table->method(
1296
-    twice => sub {
1297
-        my $self = shift;
1298
-        
1299
-        return $_[0] * 2;
1300
-    }
1301
-);
1302
-$table = $dbi->table('book');
1303
-$table->method(
1304
-    three_times => sub {
1305
-        my $self = shift;
1306
-        return  $_[0] * 3;
1307
-    }
1308
-);
1309
-is($table->base_twice(1), 2, 'method');
1310
-is($table->twice(1), 2, 'inherit method');
1311
-is($table->three_times(1), 3, 'child table method');
1312
-eval {$dbi->base_two};
1313
-ok($@);
1314
-
1315 1244
 test 'filter __ expression';
1316 1245
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
1317 1246
 $dbi->execute('create table company (id, name, location_id)');
... ...
@@ -1335,3 +1264,85 @@ $dbi->execute($CREATE_TABLE->{0});
1335 1264
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
1336 1265
 $result = $dbi->select(selection => '* from table1', where => {key1 => 1});
1337 1266
 is_deeply($result->fetch_hash_all, [{key1 => 1, key2 => 2}]);
1267
+
1268
+test 'Table class';
1269
+use MyDBI1;
1270
+$dbi = MyDBI1->connect($NEW_ARGS->{0});
1271
+$dbi->execute("create table book (title, author)");
1272
+$table = $dbi->table('book');
1273
+$table->insert({title => 'a', author => 'b'});
1274
+is_deeply($table->list->fetch_hash_all, [{title => 'a', author => 'b'}], 'basic');
1275
+$dbi->execute("create table company (name)");
1276
+$table = $dbi->table('company');
1277
+$table->insert({name => 'a'});
1278
+is_deeply($table->list->fetch_hash_all, [{name => 'a'}], 'basic');
1279
+
1280
+$dbi->table('book');
1281
+eval{$dbi->table('book')->no_exists};
1282
+like($@, qr/locate/);
1283
+
1284
+{
1285
+    package MyDBI4;
1286
+
1287
+    use strict;
1288
+    use warnings;
1289
+
1290
+    use base 'DBIx::Custom';
1291
+
1292
+    sub connect {
1293
+        my $self = shift->SUPER::connect(@_);
1294
+        
1295
+        $self->include_table(
1296
+            MyTable2 => [
1297
+                'book',
1298
+                {company => 'Company'}
1299
+            ]
1300
+        );
1301
+    }
1302
+
1303
+    package MyTable2::Base1;
1304
+
1305
+    use strict;
1306
+    use warnings;
1307
+
1308
+    use base 'DBIx::Custom::Table';
1309
+
1310
+    package MyTable2::book;
1311
+
1312
+    use strict;
1313
+    use warnings;
1314
+
1315
+    use base 'MyTable2::Base1';
1316
+
1317
+    sub insert {
1318
+        my ($self, $param) = @_;
1319
+        
1320
+        return $self->SUPER::insert(param => $param);
1321
+    }
1322
+
1323
+    sub list { shift->select; }
1324
+
1325
+    package MyTable2::Company;
1326
+
1327
+    use strict;
1328
+    use warnings;
1329
+
1330
+    use base 'MyTable2::Base1';
1331
+
1332
+    sub insert {
1333
+        my ($self, $param) = @_;
1334
+        
1335
+        return $self->SUPER::insert(param => $param);
1336
+    }
1337
+
1338
+    sub list { shift->select; }
1339
+}
1340
+$dbi = MyDBI4->connect($NEW_ARGS->{0});
1341
+$dbi->execute("create table book (title, author)");
1342
+$table = $dbi->table('book');
1343
+$table->insert({title => 'a', author => 'b'});
1344
+is_deeply($table->list->fetch_hash_all, [{title => 'a', author => 'b'}], 'basic');
1345
+$dbi->execute("create table company (name)");
1346
+$table = $dbi->table('company');
1347
+$table->insert({name => 'a'});
1348
+is_deeply($table->list->fetch_hash_all, [{name => 'a'}], 'basic');
+19
t/dbix-custom-core-sqlite/MyDBI1.pm
... ...
@@ -0,0 +1,19 @@
1
+package MyDBI1;
2
+
3
+use strict;
4
+use warnings;
5
+
6
+use base 'DBIx::Custom';
7
+
8
+sub connect {
9
+    my $self = shift->SUPER::connect(@_);
10
+    
11
+    $self->include_table(
12
+        MyTable1 => [
13
+            'book',
14
+            {company => 'Company'}
15
+        ]
16
+    );
17
+}
18
+
19
+1;
+17
t/dbix-custom-core-sqlite/MyTable1/Company.pm
... ...
@@ -0,0 +1,17 @@
1
+package MyTable1::Company;
2
+
3
+use strict;
4
+use warnings;
5
+
6
+use base 'DBIx::Custom::Table';
7
+
8
+
9
+sub insert {
10
+    my ($self, $param) = @_;
11
+    
12
+    return $self->SUPER::insert(param => $param);
13
+}
14
+
15
+sub list { shift->select; }
16
+
17
+1;
+16
t/dbix-custom-core-sqlite/MyTable1/book.pm
... ...
@@ -0,0 +1,16 @@
1
+package MyTable1::book;
2
+
3
+use strict;
4
+use warnings;
5
+
6
+use base 'DBIx::Custom::Table';
7
+
8
+sub insert {
9
+    my ($self, $param) = @_;
10
+    
11
+    return $self->SUPER::insert(param => $param);
12
+}
13
+
14
+sub list { shift->select; }
15
+
16
+1;