Skip to content

Commit

Permalink
[Squerl] formats insert statements with sub-queries
Browse files Browse the repository at this point in the history
  • Loading branch information
Carl Masak committed Sep 23, 2009
1 parent 98852e3 commit 9f3de5f
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
14 changes: 10 additions & 4 deletions lib/Squerl.pm
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -95,7 +95,10 @@ class Squerl::Dataset does Positional {


method select_sql() { method select_sql() {
# RAKUDO: Real string interpolation # RAKUDO: Real string interpolation
"SELECT * FROM {%!opts<from>}"; "SELECT * FROM {%!opts<from>}"
~ (%!opts.exists('filter')
?? " WHERE ({%!opts<filter>.fmt('%s = %s')})"
!! '');
} }


method delete_sql() { method delete_sql() {
Expand All @@ -115,7 +118,7 @@ class Squerl::Dataset does Positional {
@columns.push(.key); @columns.push(.key);
@values.push(.value); @values.push(.value);
} }
when Num|Str { when Num|Str|Squerl::Dataset {
@values.push($_); @values.push($_);
} }
when .^can('values') { when .^can('values') {
Expand All @@ -133,8 +136,11 @@ class Squerl::Dataset does Positional {
} }
my $columns = @columns ?? "({join $COMMA_SEPARATOR, @columns}) " my $columns = @columns ?? "({join $COMMA_SEPARATOR, @columns}) "
!! ''; !! '';
my $values = @values ?? 'VALUES ' ~ self.literal_array(@values) my $values = @values
!! 'DEFAULT VALUES'; ?? (@values[0] ~~ Squerl::Dataset
?? @values[0].select_sql()
!! 'VALUES ' ~ self.literal_array(@values))
!! 'DEFAULT VALUES';
# RAKUDO: Real string interpolation # RAKUDO: Real string interpolation
"INSERT INTO {%!opts<from>} $columns$values"; "INSERT INTO {%!opts<from>} $columns$values";
} }
Expand Down
7 changes: 7 additions & 0 deletions t/squerl/02-dataset.t
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -233,4 +233,11 @@ role R2 { method values { {} } }
'format an insert statement with an arbitrary value'; 'format an insert statement with an arbitrary value';
} }


{
my $sub = Squerl::Dataset.new('').from('something').filter('x' => 2);
is $dataset.insert_sql($sub),
'INSERT INTO test SELECT * FROM something WHERE (x = 2)',
'format an insert statement with sub-query';
}

done_testing; done_testing;

0 comments on commit 9f3de5f

Please sign in to comment.