... | ... |
@@ -1,3 +1,5 @@ |
1 |
+0.1683 |
|
2 |
+ - data_source is DEPRECATED! It is renamed to dsn |
|
1 | 3 |
0.1682 |
2 | 4 |
- improved debug message |
3 | 5 |
- fixed merge_param bug |
... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
package DBIx::Custom; |
2 | 2 |
|
3 |
-our $VERSION = '0.1682'; |
|
3 |
+our $VERSION = '0.1683'; |
|
4 | 4 |
|
5 | 5 |
use 5.008001; |
6 | 6 |
use strict; |
... | ... |
@@ -25,7 +25,7 @@ use constant DEBUG_ENCODING => $ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8'; |
25 | 25 |
our @COMMON_ARGS = qw/table query filter type/; |
26 | 26 |
|
27 | 27 |
__PACKAGE__->attr( |
28 |
- [qw/connector data_source password pid user/], |
|
28 |
+ [qw/connector dsn password user/], |
|
29 | 29 |
cache => 0, |
30 | 30 |
cache_method => sub { |
31 | 31 |
sub { |
... | ... |
@@ -192,9 +192,6 @@ sub connect { |
192 | 192 |
# Connect |
193 | 193 |
$self->dbh; |
194 | 194 |
|
195 |
- # Set process ID |
|
196 |
- $self->pid($$); |
|
197 |
- |
|
198 | 195 |
return $self; |
199 | 196 |
} |
200 | 197 |
|
... | ... |
@@ -1209,16 +1206,16 @@ sub _connect { |
1209 | 1206 |
my $self = shift; |
1210 | 1207 |
|
1211 | 1208 |
# Attributes |
1212 |
- my $data_source = $self->data_source; |
|
1213 |
- croak qq{"data_source" must be specified } . _subname |
|
1214 |
- unless $data_source; |
|
1209 |
+ my $dsn = $self->data_source || $self->dsn; |
|
1210 |
+ croak qq{"dsn" must be specified } . _subname |
|
1211 |
+ unless $dsn; |
|
1215 | 1212 |
my $user = $self->user; |
1216 | 1213 |
my $password = $self->password; |
1217 | 1214 |
my $dbi_option = {%{$self->dbi_options}, %{$self->dbi_option}}; |
1218 | 1215 |
|
1219 | 1216 |
# Connect |
1220 | 1217 |
my $dbh = eval {DBI->connect( |
1221 |
- $data_source, |
|
1218 |
+ $dsn, |
|
1222 | 1219 |
$user, |
1223 | 1220 |
$password, |
1224 | 1221 |
{ |
... | ... |
@@ -1375,6 +1372,9 @@ sub _where_to_obj { |
1375 | 1372 |
return $obj; |
1376 | 1373 |
} |
1377 | 1374 |
|
1375 |
+# DEPRECATED! |
|
1376 |
+__PACKAGE__->attr('data_source'); |
|
1377 |
+ |
|
1378 | 1378 |
# DEPRECATED! |
1379 | 1379 |
__PACKAGE__->attr( |
1380 | 1380 |
dbi_options => sub { {} }, |
... | ... |
@@ -1492,7 +1492,7 @@ DBIx::Custom - Useful database access, respecting SQL! |
1492 | 1492 |
|
1493 | 1493 |
# Connect |
1494 | 1494 |
my $dbi = DBIx::Custom->connect( |
1495 |
- data_source => "dbi:mysql:database=dbname", |
|
1495 |
+ dsn => "dbi:mysql:database=dbname", |
|
1496 | 1496 |
user => 'ken', |
1497 | 1497 |
password => '!LFKD%$&', |
1498 | 1498 |
dbi_option => {mysql_enable_utf8 => 1} |
... | ... |
@@ -1619,12 +1619,14 @@ C<default_dbi_option> to L<DBIx::Connector>. |
1619 | 1619 |
|
1620 | 1620 |
my $dbi = DBIx::Custom->new(connector => $connector); |
1621 | 1621 |
|
1622 |
-=head2 C<data_source> |
|
1622 |
+=head2 C<dsn> |
|
1623 |
+ |
|
1624 |
+ my $dsn = $dbi->dsn; |
|
1625 |
+ $dbi = $dbi->dsn("DBI:mysql:database=dbname"); |
|
1623 | 1626 |
|
1624 |
- my $data_source = $dbi->data_source; |
|
1625 |
- $dbi = $dbi->data_source("DBI:mysql:database=dbname"); |
|
1627 |
+Data source name, used when C<connect()> is executed. |
|
1626 | 1628 |
|
1627 |
-Data source, used when C<connect()> is executed. |
|
1629 |
+C<data_source> is DEPRECATED! It is renamed to C<dsn>. |
|
1628 | 1630 |
|
1629 | 1631 |
=head2 C<dbi_option> |
1630 | 1632 |
|
... | ... |
@@ -1769,7 +1771,7 @@ This is equal to C<update_param_tag> exept that set is not added. |
1769 | 1771 |
=head2 C<connect> |
1770 | 1772 |
|
1771 | 1773 |
my $dbi = DBIx::Custom->connect( |
1772 |
- data_source => "dbi:mysql:database=dbname", |
|
1774 |
+ dsn => "dbi:mysql:database=dbname", |
|
1773 | 1775 |
user => 'ken', |
1774 | 1776 |
password => '!LFKD%$&', |
1775 | 1777 |
dbi_option => {mysql_enable_utf8 => 1} |
... | ... |
@@ -2297,7 +2299,7 @@ Create column clause for myself. The follwoing column clause is created. |
2297 | 2299 |
=head2 C<new> |
2298 | 2300 |
|
2299 | 2301 |
my $dbi = DBIx::Custom->new( |
2300 |
- data_source => "dbi:mysql:database=dbname", |
|
2302 |
+ dsn => "dbi:mysql:database=dbname", |
|
2301 | 2303 |
user => 'ken', |
2302 | 2304 |
password => '!LFKD%$&', |
2303 | 2305 |
dbi_option => {mysql_enable_utf8 => 1} |
... | ... |
@@ -162,13 +162,13 @@ use C<connect()> to connect to database. |
162 | 162 |
Return value is L<DBIx::Custom> object. |
163 | 163 |
|
164 | 164 |
my $dbi = DBIx::Custom->connect( |
165 |
- data_source => "dbi:mysql:database=bookstore", |
|
165 |
+ dsn => "dbi:mysql:database=bookstore", |
|
166 | 166 |
user => 'ken', |
167 | 167 |
password => '!LFKD%$&', |
168 | 168 |
dbi_options => {mysql_enable_utf8 => 1} |
169 | 169 |
); |
170 | 170 |
|
171 |
-C<data_source> must be one corresponding to the database system. |
|
171 |
+C<dsn> must be one corresponding to the database system. |
|
172 | 172 |
The following ones are data source example. |
173 | 173 |
|
174 | 174 |
B<MySQL> |
... | ... |
@@ -1018,7 +1018,7 @@ You can pass L<DBIx::Custom::Where> object to C<where> of C<select()>. |
1018 | 1018 |
$where->param({title => 'Perl'}); |
1019 | 1019 |
my $result = $dbi->select(table => 'book', where => $where); |
1020 | 1020 |
|
1021 |
-You can also pass it to C<where> of C<update()>�AC<delete()> |
|
1021 |
+You can also pass it to C<where> of C<update()>AC<delete()> |
|
1022 | 1022 |
|
1023 | 1023 |
=head3 With C<execute()> |
1024 | 1024 |
|
... | ... |
@@ -1093,7 +1093,7 @@ without C<table> option. |
1093 | 1093 |
|
1094 | 1094 |
Model is L<DBIx::Custom::Model>. |
1095 | 1095 |
|
1096 |
-If you need table name�Ayou can get it by C<table()>. |
|
1096 |
+If you need table nameAyou can get it by C<table()>. |
|
1097 | 1097 |
|
1098 | 1098 |
my $table = $model->table; |
1099 | 1099 |
|
... | ... |
@@ -1186,7 +1186,7 @@ Valude of C<table> and C<columns> is used. |
1186 | 1186 |
|
1187 | 1187 |
my $column_clause = $model->mycolumn; |
1188 | 1188 |
|
1189 |
-If C<table> is 'book'�AC<column> is ['id', 'name'], |
|
1189 |
+If C<table> is 'book'AC<column> is ['id', 'name'], |
|
1190 | 1190 |
the following clause is created. |
1191 | 1191 |
|
1192 | 1192 |
book.id as id, book.name as name |
... | ... |
@@ -1197,7 +1197,7 @@ You can create column clause from columns of other table. |
1197 | 1197 |
|
1198 | 1198 |
my $column_clause = $model->column('company'); |
1199 | 1199 |
|
1200 |
-If C<table> is 'company'�AC<column> is ['id', 'name'], |
|
1200 |
+If C<table> is 'company'AC<column> is ['id', 'name'], |
|
1201 | 1201 |
the following clause is created. |
1202 | 1202 |
|
1203 | 1203 |
company.id as company__id, company.name as company__name |
... | ... |
@@ -1209,7 +1209,7 @@ Valude of C<table> and C<columns> is used. |
1209 | 1209 |
|
1210 | 1210 |
my $column_clause = $model->column_clause; |
1211 | 1211 |
|
1212 |
-If C<table> is 'book'�AC<column> is ['id', 'name'], |
|
1212 |
+If C<table> is 'book'AC<column> is ['id', 'name'], |
|
1213 | 1213 |
the following clause is created. |
1214 | 1214 |
|
1215 | 1215 |
book.id as id, book.name as name |
... | ... |
@@ -170,13 +170,13 @@ L<DBIx::Custom>を読み込みます。 |
170 | 170 |
戻り値はL<DBIx::Custom>オブジェクトです。 |
171 | 171 |
|
172 | 172 |
my $dbi = DBIx::Custom->connect( |
173 |
- data_source => "dbi:mysql:database=bookstore", |
|
173 |
+ dsn => "dbi:mysql:database=bookstore", |
|
174 | 174 |
user => 'ken', |
175 | 175 |
password => '!LFKD%$&', |
176 | 176 |
dbi_options => {mysql_enable_utf8 => 1} |
177 | 177 |
); |
178 | 178 |
|
179 |
-C<data_source>はデータベースシステムに応じたものである必要があります。 |
|
179 |
+C<dsn>はデータベースシステムに応じたものである必要があります。 |
|
180 | 180 |
以下はデータソースのサンプルです。 |
181 | 181 |
|
182 | 182 |
B<MySQL> |
... | ... |
@@ -15,7 +15,7 @@ use Scalar::Util 'blessed'; |
15 | 15 |
my $dbi = DBIx::Custom->connect( |
16 | 16 |
user => $USER, |
17 | 17 |
password => $PASSWORD, |
18 |
- data_source => "dbi:mysql:dbname=$DATABASE" |
|
18 |
+ dsn => "dbi:mysql:dbname=$DATABASE" |
|
19 | 19 |
); |
20 | 20 |
$dbi->connect; |
21 | 21 |
|
... | ... |
@@ -29,7 +29,7 @@ use Scalar::Util 'blessed'; |
29 | 29 |
my $dbi = DBIx::Custom->connect( |
30 | 30 |
user => $USER, |
31 | 31 |
password => $PASSWORD, |
32 |
- data_source => "dbi:mysql:dbname=$DATABASE", |
|
32 |
+ dsn => "dbi:mysql:dbname=$DATABASE", |
|
33 | 33 |
dbi_options => {AutoCommit => 0, mysql_enable_utf8 => 1} |
34 | 34 |
); |
35 | 35 |
$dbi->connect; |
... | ... |
@@ -42,7 +42,7 @@ my $DROP_TABLE = { |
42 | 42 |
}; |
43 | 43 |
|
44 | 44 |
my $NEW_ARGS = { |
45 |
- 0 => {data_source => 'dbi:SQLite:dbname=:memory:'} |
|
45 |
+ 0 => {dsn => 'dbi:SQLite:dbname=:memory:'} |
|
46 | 46 |
}; |
47 | 47 |
|
48 | 48 |
# Variables |
... | ... |
@@ -205,7 +205,7 @@ is_deeply($rows, [{key1 => 1, key2 => 1, key3 => 1, key4 => 1, key5 => 5}, |
205 | 205 |
{key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}], "basic"); |
206 | 206 |
|
207 | 207 |
test 'Error case'; |
208 |
-eval {DBIx::Custom->connect(data_source => 'dbi:SQLit')}; |
|
208 |
+eval {DBIx::Custom->connect(dsn => 'dbi:SQLit')}; |
|
209 | 209 |
ok($@, "connect error"); |
210 | 210 |
|
211 | 211 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
... | ... |
@@ -1371,10 +1371,10 @@ $result->default_filter('one'); |
1371 | 1371 |
is($result->default_filter->(), 1); |
1372 | 1372 |
|
1373 | 1373 |
test 'dbi_option'; |
1374 |
-$dbi = DBIx::Custom->connect(data_source => 'dbi:SQLite:dbname=:memory:', |
|
1374 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:', |
|
1375 | 1375 |
dbi_option => {PrintError => 1}); |
1376 | 1376 |
ok($dbi->dbh->{PrintError}); |
1377 |
-$dbi = DBIx::Custom->connect(data_source => 'dbi:SQLite:dbname=:memory:', |
|
1377 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:', |
|
1378 | 1378 |
dbi_options => {PrintError => 1}); |
1379 | 1379 |
ok($dbi->dbh->{PrintError}); |
1380 | 1380 |
|
... | ... |
@@ -1991,6 +1991,26 @@ is_deeply($rows, [{table1_key1 => 1, table2_key1 => 1, key2 => 2, key3 => 5}], |
1991 | 1991 |
} |
1992 | 1992 |
} |
1993 | 1993 |
|
1994 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
|
1995 |
+$dbi->execute($CREATE_TABLE->{0}); |
|
1996 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
|
1997 |
+$sql = <<"EOS"; |
|
1998 |
+left outer join ( |
|
1999 |
+ select * from table1 as t1 |
|
2000 |
+ where t1.key2 = ( |
|
2001 |
+ select max(t2.key2) from table1 as t2 |
|
2002 |
+ where t1.key1 = t2.key1 |
|
2003 |
+ ) |
|
2004 |
+) as latest_table1 on table1.key1 = latest_table1.key1 |
|
2005 |
+EOS |
|
2006 |
+$join = [$sql]; |
|
2007 |
+$rows = $dbi->select( |
|
2008 |
+ table => 'table1', |
|
2009 |
+ column => 'latest_table1.key1 as latest_table1__key1', |
|
2010 |
+ join => $join |
|
2011 |
+)->fetch_hash_all; |
|
2012 |
+is_deeply($rows, [{latest_table1__key1 => 1}]); |
|
2013 |
+ |
|
1994 | 2014 |
test 'mycolumn'; |
1995 | 2015 |
$dbi = MyDBI8->connect($NEW_ARGS->{0}); |
1996 | 2016 |
$dbi->execute($CREATE_TABLE->{0}); |
... | ... |
@@ -18,7 +18,7 @@ $query_builder = DBIx::Custom::QueryBuilder->new; |
18 | 18 |
$dbi = DBIx::Custom->new( |
19 | 19 |
user => 'a', |
20 | 20 |
password => 'b', |
21 |
- data_source => 'c', |
|
21 |
+ dsn => 'c', |
|
22 | 22 |
filters => { |
23 | 23 |
f => 3, |
24 | 24 |
}, |
... | ... |
@@ -27,7 +27,7 @@ $dbi = DBIx::Custom->new( |
27 | 27 |
result_class => 'g', |
28 | 28 |
query_builder => $query_builder, |
29 | 29 |
); |
30 |
-is_deeply($dbi,{user => 'a', password => 'b', data_source => 'c', |
|
30 |
+is_deeply($dbi,{user => 'a', password => 'b', dsn => 'c', |
|
31 | 31 |
filters => {f => 3}, default_bind_filter => 'f', |
32 | 32 |
default_fetch_filter => 'g', result_class => 'g', |
33 | 33 |
query_builder => $query_builder}); |
... | ... |
@@ -51,15 +51,15 @@ my $result; |
51 | 51 |
my $self = ref $proto ? $proto : $proto->new(@_); |
52 | 52 |
|
53 | 53 |
# Data source |
54 |
- if (!$self->data_source) { |
|
54 |
+ if (!$self->dsn) { |
|
55 | 55 |
my $database = $self->database; |
56 | 56 |
my $host = $self->host; |
57 | 57 |
my $port = $self->port; |
58 |
- my $data_source = "dbi:mysql:"; |
|
59 |
- $data_source .= "database=$database;" if $database; |
|
60 |
- $data_source .= "host=$host;" if $host; |
|
61 |
- $data_source .= "port=$port;" if $port; |
|
62 |
- $self->data_source($data_source); |
|
58 |
+ my $dsn = "dbi:mysql:"; |
|
59 |
+ $dsn .= "database=$database;" if $database; |
|
60 |
+ $dsn .= "host=$host;" if $host; |
|
61 |
+ $dsn .= "port=$port;" if $port; |
|
62 |
+ $self->dsn($dsn); |
|
63 | 63 |
} |
64 | 64 |
|
65 | 65 |
return $self->SUPER::connect; |
... | ... |
@@ -72,7 +72,7 @@ test 'connect'; |
72 | 72 |
$dbi = DBIx::Custom::MySQL->new(user => $USER, password => $PASSWORD, |
73 | 73 |
database => $DATABASE, host => 'localhost', port => '10000'); |
74 | 74 |
$dbi->connect; |
75 |
-like($dbi->data_source, qr/dbi:mysql:database=.*;host=localhost;port=10000;/, "created data source"); |
|
75 |
+like($dbi->dsn, qr/dbi:mysql:database=.*;host=localhost;port=10000;/, "created data source"); |
|
76 | 76 |
is(ref $dbi->dbh, 'DBI::db'); |
77 | 77 |
|
78 | 78 |
test 'attributes'; |
... | ... |
@@ -84,7 +84,7 @@ is($dbi->port, 'b', "port"); |
84 | 84 |
|
85 | 85 |
test 'limit'; |
86 | 86 |
$dbi = DBIx::Custom->connect( |
87 |
- data_source => "dbi:mysql:database=$DATABASE", |
|
87 |
+ dsn => "dbi:mysql:database=$DATABASE", |
|
88 | 88 |
user => $USER, |
89 | 89 |
password => $PASSWORD |
90 | 90 |
); |