return \ '(SELECT(1))';
}
-1;
+# more or less copy pasted directly from ::SQLMaker
+sub insert {
+ my $self = shift;
+ my $table = $self->_table(shift);
+ my $data = shift || return;
+ my $options = shift;
+
+ if (! $data or (ref $data eq 'HASH' and !keys %{$data} ) ) {
+ my @bind;
+ my $sql = sprintf(
+ 'INSERT INTO %s DEFAULT VALUES', $_[0]->_quote($table)
+ );
+
+ if ( ($options||{})->{returning} ) {
+ my $s;
+ ($s, @bind) = $self->_insert_returning ($options);
+ $sql .= $s;
+ }
+
+ return ($sql, @bind);
+ }
+
+ my $method = $self->_METHOD_FOR_refkind("_insert", $data);
+ my ($sql, @bind) = $self->$method($data);
+
+ $sql = join " ", $self->_sqlcase('insert into'), $table, $sql;
+
+ if ($options->{returning}) {
+ my ($s, @b) = $self->_insert_returning ($options);
+ $sql =~ s/\bVALUES\b/$s VALUES/;
+ @bind = (@b, @bind);
+ }
+
+ return wantarray ? ($sql, @bind) : $sql;
+}
+
+
+# insert returning docs at
+# http://msdn.microsoft.com/en-us/library/ms177564.aspx
+
+sub _insert_returning {
+ my ($self, $options) = @_;
+
+ my $f = $options->{returning};
+
+ my @f_list = do {
+ if (! ref $f) {
+ ($f)
+ }
+ elsif (ref $f eq 'ARRAY') {
+ @$f
+ }
+ elsif (ref $f eq 'SCALAR') {
+ (
+ ($$f)
+ )
+ }
+ else {
+ $self->throw_exception("Unsupported INSERT RETURNING option $f");
+ }
+ };
+
+ return (
+ join ' ',
+ $self->_sqlcase(' output'),
+ join ', ',
+ map $self->_quote("INSERTED.$_"), @f_list,
+ );
+}
+
+1