| ... | ... |
@@ -1,4 +1,6 @@ |
| 1 | 1 |
0.1722 |
| 2 |
+ - insert_param, update_param, and assign param can |
|
| 3 |
+ be wrapeed by DB function by C<wrap> option |
|
| 2 | 4 |
- added EXPERIMENTAL pass attribute to DBIx::Custom::Mapper |
| 3 | 5 |
- removed EXPERIMENTAL ignore attribute from DBIx::Custom::Mapper |
| 4 | 6 |
0.1721 |
| ... | ... |
@@ -120,7 +120,9 @@ sub AUTOLOAD {
|
| 120 | 120 |
} |
| 121 | 121 |
|
| 122 | 122 |
sub assign_param {
|
| 123 |
- my ($self, $param) = @_; |
|
| 123 |
+ my ($self, $param, $opts) = @_; |
|
| 124 |
+ |
|
| 125 |
+ my $wrap = $opts->{wrap} || {};
|
|
| 124 | 126 |
|
| 125 | 127 |
# Create set tag |
| 126 | 128 |
my @params; |
| ... | ... |
@@ -130,10 +132,10 @@ sub assign_param {
|
| 130 | 132 |
unless $column =~ /^[$safety\.]+$/; |
| 131 | 133 |
my $column_quote = $self->_q($column); |
| 132 | 134 |
$column_quote =~ s/\./$self->_q(".")/e;
|
| 133 |
- push @params, ref $param->{$column} eq 'SCALAR'
|
|
| 134 |
- ? "$column_quote = " . ${$param->{$column}}
|
|
| 135 |
- : "$column_quote = :$column"; |
|
| 136 |
- |
|
| 135 |
+ my $func = $wrap->{$column} || sub { $_[0] };
|
|
| 136 |
+ push @params, |
|
| 137 |
+ ref $param->{$column} eq 'SCALAR' ? "$column_quote = " . ${$param->{$column}}
|
|
| 138 |
+ : "$column_quote = " . $func->(":$column");
|
|
| 137 | 139 |
} |
| 138 | 140 |
my $tag = join(', ', @params);
|
| 139 | 141 |
|
| ... | ... |
@@ -611,6 +613,7 @@ sub insert {
|
| 611 | 613 |
if defined $id && !defined $primary_key; |
| 612 | 614 |
$primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY'; |
| 613 | 615 |
my $prefix = delete $args{prefix};
|
| 616 |
+ my $wrap = delete $args{wrap};
|
|
| 614 | 617 |
|
| 615 | 618 |
# Merge parameter |
| 616 | 619 |
if (defined $id) {
|
| ... | ... |
@@ -622,7 +625,8 @@ sub insert {
|
| 622 | 625 |
my @sql; |
| 623 | 626 |
push @sql, "insert"; |
| 624 | 627 |
push @sql, $prefix if defined $prefix; |
| 625 |
- push @sql, "into " . $self->_q($table) . " " . $self->insert_param($param); |
|
| 628 |
+ push @sql, "into " . $self->_q($table) . " " |
|
| 629 |
+ . $self->insert_param($param, {wrap => $wrap});
|
|
| 626 | 630 |
push @sql, $append if defined $append; |
| 627 | 631 |
my $sql = join (' ', @sql);
|
| 628 | 632 |
|
| ... | ... |
@@ -631,7 +635,9 @@ sub insert {
|
| 631 | 635 |
} |
| 632 | 636 |
|
| 633 | 637 |
sub insert_param {
|
| 634 |
- my ($self, $param) = @_; |
|
| 638 |
+ my ($self, $param, $opts) = @_; |
|
| 639 |
+ |
|
| 640 |
+ my $wrap = $opts->{wrap} || {};
|
|
| 635 | 641 |
|
| 636 | 642 |
# Create insert parameter tag |
| 637 | 643 |
my $safety = $self->safety_character; |
| ... | ... |
@@ -643,8 +649,11 @@ sub insert_param {
|
| 643 | 649 |
my $column_quote = $self->_q($column); |
| 644 | 650 |
$column_quote =~ s/\./$self->_q(".")/e;
|
| 645 | 651 |
push @columns, $column_quote; |
| 646 |
- push @placeholders, ref $param->{$column} eq 'SCALAR'
|
|
| 647 |
- ? ${$param->{$column}} : ":$column";
|
|
| 652 |
+ |
|
| 653 |
+ my $func = $wrap->{$column} || sub { $_[0] };
|
|
| 654 |
+ push @placeholders, |
|
| 655 |
+ ref $param->{$column} eq 'SCALAR' ? ${$param->{$column}}
|
|
| 656 |
+ : $func->(":$column");
|
|
| 648 | 657 |
} |
| 649 | 658 |
|
| 650 | 659 |
return '(' . join(', ', @columns) . ') ' . 'values ' .
|
| ... | ... |
@@ -1148,9 +1157,10 @@ sub update {
|
| 1148 | 1157 |
if defined $id && !defined $primary_key; |
| 1149 | 1158 |
$primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY'; |
| 1150 | 1159 |
my $prefix = delete $args{prefix};
|
| 1160 |
+ my $wrap = delete $args{wrap};
|
|
| 1151 | 1161 |
|
| 1152 | 1162 |
# Update clause |
| 1153 |
- my $update_clause = $self->update_param($param); |
|
| 1163 |
+ my $update_clause = $self->update_param($param, {wrap => $wrap});
|
|
| 1154 | 1164 |
|
| 1155 | 1165 |
# Where |
| 1156 | 1166 |
$where = $self->_create_param_from_id($id, $primary_key) if defined $id; |
| ... | ... |
@@ -1192,11 +1202,11 @@ sub update {
|
| 1192 | 1202 |
sub update_all { shift->update(allow_update_all => 1, @_) };
|
| 1193 | 1203 |
|
| 1194 | 1204 |
sub update_param {
|
| 1195 |
- my ($self, $param, $opt) = @_; |
|
| 1205 |
+ my ($self, $param, $opts) = @_; |
|
| 1196 | 1206 |
|
| 1197 | 1207 |
# Create update parameter tag |
| 1198 |
- my $tag = $self->assign_param($param); |
|
| 1199 |
- $tag = "set $tag" unless $opt->{no_set};
|
|
| 1208 |
+ my $tag = $self->assign_param($param, $opts); |
|
| 1209 |
+ $tag = "set $tag" unless $opts->{no_set};
|
|
| 1200 | 1210 |
|
| 1201 | 1211 |
return $tag; |
| 1202 | 1212 |
} |
| ... | ... |
@@ -2787,6 +2797,21 @@ Same as C<execute> method's C<type_rule1_off> option. |
| 2787 | 2797 |
|
| 2788 | 2798 |
Same as C<execute> method's C<type_rule2_off> option. |
| 2789 | 2799 |
|
| 2800 |
+=item C<wrap EXPERIMENTAL> |
|
| 2801 |
+ |
|
| 2802 |
+ wrap => {price => sub { "max($_[0])" }}
|
|
| 2803 |
+ |
|
| 2804 |
+placeholder wrapped string. |
|
| 2805 |
+ |
|
| 2806 |
+If the following statement |
|
| 2807 |
+ |
|
| 2808 |
+ $dbi->insert({price => 100}, table => 'book',
|
|
| 2809 |
+ {price => sub { "$_[0] + 5" }});
|
|
| 2810 |
+ |
|
| 2811 |
+is executed, the following SQL is executed. |
|
| 2812 |
+ |
|
| 2813 |
+ insert into book price values ( ? + 5 ); |
|
| 2814 |
+ |
|
| 2790 | 2815 |
=back |
| 2791 | 2816 |
|
| 2792 | 2817 |
=over 4 |
| ... | ... |
@@ -3378,6 +3403,21 @@ Same as C<execute> method's C<type_rule2_off> option. |
| 3378 | 3403 |
|
| 3379 | 3404 |
Same as C<select> method's C<where> option. |
| 3380 | 3405 |
|
| 3406 |
+=item C<wrap EXPERIMENTAL> |
|
| 3407 |
+ |
|
| 3408 |
+ wrap => {price => sub { "max($_[0])" }}
|
|
| 3409 |
+ |
|
| 3410 |
+placeholder wrapped string. |
|
| 3411 |
+ |
|
| 3412 |
+If the following statement |
|
| 3413 |
+ |
|
| 3414 |
+ $dbi->update({price => 100}, table => 'book',
|
|
| 3415 |
+ {price => sub { "$_[0] + 5" }});
|
|
| 3416 |
+ |
|
| 3417 |
+is executed, the following SQL is executed. |
|
| 3418 |
+ |
|
| 3419 |
+ update book set price = ? + 5; |
|
| 3420 |
+ |
|
| 3381 | 3421 |
=back |
| 3382 | 3422 |
|
| 3383 | 3423 |
=head2 C<update_all> |
| ... | ... |
@@ -0,0 +1,5 @@ |
| 1 |
+### DB2 Install |
|
| 2 |
+ |
|
| 3 |
+cd /usr/local/src |
|
| 4 |
+ |
|
| 5 |
+curl -L https://www6.software.ibm.com/sdfdl/v2/regs2/db2pmopn/db2_v97/expc/Xa.2/Xb.aA_60_-iVlRRTUNBO90Dq4FHTisv_wdecoCQFeRQbw/Xc.db2exc_974_LNX_x86.tar.gz/Xd./Xf.LPr.D1vk/Xg.6107654/Xi.swg-db2expressc/XY.regsrvs/XZ.2ygJIAbTC5bn3tv2hlm2PnXUcz8/db2exc_974_LNX_x86.tar.gz > db2exc_974_LNX_x86.tar.gz |
| ... | ... |
@@ -0,0 +1,5 @@ |
| 1 |
+# Create database |
|
| 2 |
+create database dbix_custom; |
|
| 3 |
+ |
|
| 4 |
+# Create User |
|
| 5 |
+GRANT ALL PRIVILEGES ON dbix_custom.* TO dbix_custom@"localhost" IDENTIFIED BY 'dbix_custom'; |
| ... | ... |
@@ -0,0 +1,55 @@ |
| 1 |
+# Download |
|
| 2 |
+http://download.oracle.com/otn/linux/oracle10g/xe/10201/oracle-xe-univ-10.2.0.1-1.0.i386.rpm |
|
| 3 |
+ |
|
| 4 |
+# Install |
|
| 5 |
+rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm |
|
| 6 |
+/etc/init.d/oracle-xe configure |
|
| 7 |
+ |
|
| 8 |
+# Note |
|
| 9 |
+Port number is set to 8090 |
|
| 10 |
+ |
|
| 11 |
+# HTTP access |
|
| 12 |
+http://127.0.0.1:8090/apex |
|
| 13 |
+ |
|
| 14 |
+# Create user |
|
| 15 |
+id: dbix_custom |
|
| 16 |
+password: dbix_custom |
|
| 17 |
+ |
|
| 18 |
+Add all privirage |
|
| 19 |
+ |
|
| 20 |
+# DBD::Oracle |
|
| 21 |
+You must be install install client |
|
| 22 |
+oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm |
|
| 23 |
+oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm |
|
| 24 |
+oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm |
|
| 25 |
+ |
|
| 26 |
+rpm -hiv oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm |
|
| 27 |
+rpm -hiv oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm |
|
| 28 |
+rpm -hiv oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm |
|
| 29 |
+ |
|
| 30 |
+vi /etc/profile.d/oracle.sh |
|
| 31 |
+export ORACLE_HOME='/usr/lib/oracle/11.2/client' |
|
| 32 |
+export C_INCLUDE_PATH='/usr/include/oracle/11.2/client' |
|
| 33 |
+export LD_LIBRARY_PATH='/usr/lib/oracle/11.2/client/lib' |
|
| 34 |
+ |
|
| 35 |
+vi /etc/ld.so.conf.d/oracle.conf |
|
| 36 |
+/usr/lib/oracle/11.2/client/lib |
|
| 37 |
+ |
|
| 38 |
+cpan DBD::Oracle |
|
| 39 |
+ |
|
| 40 |
+sqlplus dbix_custom/dbix_custom@localhost:1521/XE |
|
| 41 |
+ |
|
| 42 |
+mkdir -p $ORACLE_HOME/network/admin/ |
|
| 43 |
+vi $ORACLE_HOME/network/admin/tnsnames.ora |
|
| 44 |
+ |
|
| 45 |
+XE = |
|
| 46 |
+ (DESCRIPTION = |
|
| 47 |
+ (ADDRESS_LIST = |
|
| 48 |
+ (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) |
|
| 49 |
+ ) |
|
| 50 |
+ (CONNECT_DATA = |
|
| 51 |
+ (SID = orcl) |
|
| 52 |
+ ) |
|
| 53 |
+ ) |
|
| 54 |
+ |
|
| 55 |
+ |
| ... | ... |
@@ -0,0 +1,35 @@ |
| 1 |
+### CentOS5 |
|
| 2 |
+ |
|
| 3 |
+# Install |
|
| 4 |
+yum -y install postgresql-server |
|
| 5 |
+yum -y install postgresql |
|
| 6 |
+yum -y install postgresql-devel |
|
| 7 |
+chkconfig --level 2345 postgresql on |
|
| 8 |
+ |
|
| 9 |
+# Start server |
|
| 10 |
+service postgresql start |
|
| 11 |
+ |
|
| 12 |
+# Change config file |
|
| 13 |
+vi /var/lib/pgsql/data/pg_hba.conf |
|
| 14 |
+ # "local" is for Unix domain socket connections only |
|
| 15 |
+ local all all trust |
|
| 16 |
+ |
|
| 17 |
+# Create user and database |
|
| 18 |
+su - postgres |
|
| 19 |
+createuser -a -d -U postgres -P dbix_custom |
|
| 20 |
+ # Shall the new role be a superuser? (y/n) -> y |
|
| 21 |
+ # Shall the new role be allowed to create databases? (y/n) -> y |
|
| 22 |
+ # Shall the new role be allowed to create more new roles? (y/n) -> y |
|
| 23 |
+ |
|
| 24 |
+createdb dbix_custom -U dbix_custom |
|
| 25 |
+ |
|
| 26 |
+# Connect to database |
|
| 27 |
+psql -U dbix_custom dbix_custom |
|
| 28 |
+ |
|
| 29 |
+# Install DBD::pg |
|
| 30 |
+cpanm DBD::Pg |
|
| 31 |
+ |
|
| 32 |
+### Memo |
|
| 33 |
+ |
|
| 34 |
+# Drop user |
|
| 35 |
+dropuser dbix_custom |
| ... | ... |
@@ -0,0 +1,13 @@ |
| 1 |
+# Site |
|
| 2 |
+http://awoni.net/fc/sql-server-2008-express/ |
|
| 3 |
+ |
|
| 4 |
+ |
|
| 5 |
+# Install |
|
| 6 |
+http://www.microsoft.com/downloads/ja-jp/details.aspx?displaylang=ja&FamilyID=967225eb-207b-4950-91df-eeb5f35a80ee |
|
| 7 |
+ |
|
| 8 |
+ |
|
| 9 |
+# Note |
|
| 10 |
+You enable SQL Server authentication. |
|
| 11 |
+You create user "dbix_custom", password "dbix_custom" |
|
| 12 |
+You give create_table, insert, update, delete, select authority to user "dbix_custom". |
|
| 13 |
+ |
| ... | ... |
@@ -497,6 +497,15 @@ $result = $dbi->execute("select * from $table1");
|
| 497 | 497 |
$rows = $result->all; |
| 498 | 498 |
is_deeply($rows, [{$key1 => 1, $key2 => 2}, {$key1 => 3, $key2 => 4}], "basic");
|
| 499 | 499 |
|
| 500 |
+eval { $dbi->execute("drop table $table1") };
|
|
| 501 |
+$dbi->execute($create_table1); |
|
| 502 |
+$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2},
|
|
| 503 |
+ wrap => {$key1 => sub { "$_[0] - 1" }});
|
|
| 504 |
+$dbi->insert(table => $table1, param => {$key1 => 3, $key2 => 4});
|
|
| 505 |
+$result = $dbi->execute("select * from $table1");
|
|
| 506 |
+$rows = $result->all; |
|
| 507 |
+is_deeply($rows, [{$key1 => 0, $key2 => 2}, {$key1 => 3, $key2 => 4}], "basic");
|
|
| 508 |
+ |
|
| 500 | 509 |
test 'update'; |
| 501 | 510 |
eval { $dbi->execute("drop table $table1") };
|
| 502 | 511 |
$dbi->execute($create_table1_2); |
| ... | ... |
@@ -621,6 +630,18 @@ is_deeply($rows, [{$key1 => 1, $key2 => 11, $key3 => 3, $key4 => 4, $key5 => 5},
|
| 621 | 630 |
{$key1 => 6, $key2 => 7, $key3 => 8, $key4 => 9, $key5 => 10}],
|
| 622 | 631 |
"basic"); |
| 623 | 632 |
|
| 633 |
+eval { $dbi->execute("drop table $table1") };
|
|
| 634 |
+$dbi->execute($create_table1_2); |
|
| 635 |
+$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2, $key3 => 3, $key4 => 4, $key5 => 5});
|
|
| 636 |
+$dbi->insert(table => $table1, param => {$key1 => 6, $key2 => 7, $key3 => 8, $key4 => 9, $key5 => 10});
|
|
| 637 |
+$dbi->update(table => $table1, param => {$key2 => 11}, where => {$key1 => 1},
|
|
| 638 |
+wrap => {$key2 => sub { "$_[0] - 1" }});
|
|
| 639 |
+$result = $dbi->execute("select * from $table1 order by $key1");
|
|
| 640 |
+$rows = $result->all; |
|
| 641 |
+is_deeply($rows, [{$key1 => 1, $key2 => 10, $key3 => 3, $key4 => 4, $key5 => 5},
|
|
| 642 |
+ {$key1 => 6, $key2 => 7, $key3 => 8, $key4 => 9, $key5 => 10}],
|
|
| 643 |
+ "basic"); |
|
| 644 |
+ |
|
| 624 | 645 |
eval { $dbi->execute("drop table $table1") };
|
| 625 | 646 |
$dbi->execute($create_table1_2); |
| 626 | 647 |
$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2, $key3 => 3, $key4 => 4, $key5 => 5});
|