... | ... |
@@ -262,12 +262,17 @@ sub delete { |
262 | 262 |
croak qq{"where" must be specified} |
263 | 263 |
if $swhere eq '' && !$allow_delete_all; |
264 | 264 |
|
265 |
- # Source of SQL |
|
266 |
- my $source = "delete from $table $swhere"; |
|
267 |
- $source .= " $append" if $append; |
|
265 |
+ # SQL stack |
|
266 |
+ my @sql; |
|
267 |
+ |
|
268 |
+ # Delete |
|
269 |
+ push @sql, "delete from $table $swhere"; |
|
270 |
+ push @sql, $append if $append; |
|
271 |
+ |
|
272 |
+ my $sql = join(' ', @sql); |
|
268 | 273 |
|
269 | 274 |
# Create query |
270 |
- my $query = $self->create_query($source); |
|
275 |
+ my $query = $self->create_query($sql); |
|
271 | 276 |
return $query if $args{query}; |
272 | 277 |
|
273 | 278 |
# Execute query |
... | ... |
@@ -389,13 +394,18 @@ sub insert { |
389 | 394 |
push @columns, $column; |
390 | 395 |
} |
391 | 396 |
|
397 |
+ # SQL stack |
|
398 |
+ my @sql; |
|
399 |
+ |
|
400 |
+ # Insert |
|
401 |
+ push @sql, "insert into $table {insert_param ". join(' ', @columns) . '}'; |
|
402 |
+ push @sql, $append if $append; |
|
403 |
+ |
|
392 | 404 |
# SQL |
393 |
- my $source = "insert into $table {insert_param " |
|
394 |
- . join(' ', @columns) . '}'; |
|
395 |
- $source .= " $append" if $append; |
|
405 |
+ my $sql = join (' ', @sql); |
|
396 | 406 |
|
397 | 407 |
# Create query |
398 |
- my $query = $self->create_query($source); |
|
408 |
+ my $query = $self->create_query($sql); |
|
399 | 409 |
return $query if $args{query}; |
400 | 410 |
|
401 | 411 |
# Execute query |
... | ... |
@@ -493,26 +503,26 @@ sub select { |
493 | 503 |
my $append = $args{append}; |
494 | 504 |
my $filter = $args{filter}; |
495 | 505 |
|
496 |
- # Source of SQL |
|
497 |
- my $source = 'select '; |
|
506 |
+ # SQL stack |
|
507 |
+ my @sql; |
|
508 |
+ |
|
509 |
+ push @sql, 'select'; |
|
498 | 510 |
|
499 | 511 |
# Column clause |
500 | 512 |
if (@$columns) { |
501 | 513 |
foreach my $column (@$columns) { |
502 |
- $source .= "$column, "; |
|
514 |
+ push @sql, ($column, ','); |
|
503 | 515 |
} |
504 |
- $source =~ s/, $/ /; |
|
505 |
- } |
|
506 |
- else { |
|
507 |
- $source .= '* '; |
|
516 |
+ pop @sql if $sql[-1] eq ','; |
|
508 | 517 |
} |
518 |
+ else { push @sql, '*' } |
|
509 | 519 |
|
510 | 520 |
# Table |
511 |
- $source .= 'from '; |
|
521 |
+ push @sql, 'from'; |
|
512 | 522 |
foreach my $table (@$tables) { |
513 |
- $source .= "$table, "; |
|
523 |
+ push @sql, ($table, ','); |
|
514 | 524 |
} |
515 |
- $source =~ s/, $/ /; |
|
525 |
+ pop @sql if $sql[-1] eq ','; |
|
516 | 526 |
|
517 | 527 |
# Where |
518 | 528 |
my $w; |
... | ... |
@@ -533,22 +543,25 @@ sub select { |
533 | 543 |
|
534 | 544 |
# String where |
535 | 545 |
my $swhere = "$w"; |
536 |
- $source .= "$swhere "; |
|
546 |
+ push @sql, $swhere; |
|
537 | 547 |
|
538 | 548 |
# Relation |
539 | 549 |
if ($relation) { |
540 |
- $source .= $swhere eq '' ? "where " : "and "; |
|
541 |
- foreach my $rkey (keys %$relation) { |
|
542 |
- $source .= "$rkey = " . $relation->{$rkey} . " and "; |
|
550 |
+ push @sql, $swhere eq '' ? 'where' : 'and'; |
|
551 |
+ foreach my $rcolumn (keys %$relation) { |
|
552 |
+ push @sql, ("$rcolumn = " . $relation->{$rcolumn}, 'and'); |
|
543 | 553 |
} |
544 | 554 |
} |
545 |
- $source =~ s/ and $//; |
|
555 |
+ pop @sql if $sql[-1] eq 'and'; |
|
556 |
+ |
|
557 |
+ # Append statement |
|
558 |
+ push @sql, $append if $append; |
|
546 | 559 |
|
547 |
- # Append some statement |
|
548 |
- $source .= " $append" if $append; |
|
560 |
+ # SQL |
|
561 |
+ my $sql = join (' ', @sql); |
|
549 | 562 |
|
550 | 563 |
# Create query |
551 |
- my $query = $self->create_query($source); |
|
564 |
+ my $query = $self->create_query($sql); |
|
552 | 565 |
return $query if $args{query}; |
553 | 566 |
|
554 | 567 |
# Execute query |
... | ... |
@@ -651,9 +664,12 @@ sub update { |
651 | 664 |
croak qq{"where" must be specified} |
652 | 665 |
if "$swhere" eq '' && !$allow_update_all; |
653 | 666 |
|
654 |
- # Source of SQL |
|
655 |
- my $source = "update $table $update_clause $swhere"; |
|
656 |
- $source .= " $append" if $append; |
|
667 |
+ # SQL stack |
|
668 |
+ my @sql; |
|
669 |
+ |
|
670 |
+ # Update |
|
671 |
+ push @sql, "update $table $update_clause $swhere"; |
|
672 |
+ push @sql, $append if $append; |
|
657 | 673 |
|
658 | 674 |
# Rearrange parameters |
659 | 675 |
foreach my $wkey (keys %$where) { |
... | ... |
@@ -669,8 +685,11 @@ sub update { |
669 | 685 |
} |
670 | 686 |
} |
671 | 687 |
|
688 |
+ # SQL |
|
689 |
+ my $sql = join(' ', @sql); |
|
690 |
+ |
|
672 | 691 |
# Create query |
673 |
- my $query = $self->create_query($source); |
|
692 |
+ my $query = $self->create_query($sql); |
|
674 | 693 |
return $query if $args{query}; |
675 | 694 |
|
676 | 695 |
# Execute query |