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
Expand Up @@ -95,7 +95,10 @@ class Squerl::Dataset does Positional {

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

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

0 comments on commit 9f3de5f

Please sign in to comment.