1 package DBIx::Class::Storage::DBI::InterBase;
3 # partly stolen from DBIx::Class::Storage::DBI::MSSQL
7 use base qw/DBIx::Class::Storage::DBI/;
11 __PACKAGE__->mk_group_accessors(simple => qw/
15 sub _prep_for_execute {
17 my ($op, $extra_bind, $ident, $args) = @_;
19 my ($sql, $bind) = $self->next::method (@_);
21 if ($op eq 'insert') {
22 my @auto_inc_cols = grep {
23 my $inserting = $args->[0]{$_};
25 $ident->column_info($_)->{is_auto_increment} && (
26 (not defined $inserting)
28 (ref $inserting eq 'SCALAR' && $$inserting eq 'NULL')
35 map $self->_quote_column_for_returning($_), @auto_inc_cols;
37 $sql .= " RETURNING ($auto_inc_cols)";
39 $self->_fb_auto_incs([]);
40 $self->_fb_auto_incs->[0] = \@auto_inc_cols;
47 sub _quote_column_for_returning {
48 my ($self, $col) = @_;
50 return $self->sql_maker->_quote($col);
57 my ($rv, $sth, @bind) = $self->dbh_do($self->can('_dbh_execute'), @_);
59 if ($op eq 'insert' && $self->_fb_auto_incs) {
61 my (@auto_incs) = eval {
62 local $SIG{__WARN__} = sub {};
65 $self->_fb_auto_incs->[1] = \@auto_incs;
69 return wantarray ? ($rv, $sth, @bind) : $rv;
73 my ($self, $source, @cols) = @_;
77 @auto_incs{ @{ $self->_fb_auto_incs->[0] } } =
78 @{ $self->_fb_auto_incs->[1] };
80 push @result, $auto_incs{$_} for @cols;
85 # this sub stolen from DB2
88 my ( $self, $opts ) = @_;
91 $self->{_sql_maker_opts} = { %$opts };
94 return { limit_dialect => 'FirstSkip', %{$self->{_sql_maker_opts}||{}} };
97 sub datetime_parser_type { __PACKAGE__ }
99 my ($datetime_parser, $datetime_formatter);
103 require DateTime::Format::Strptime;
104 $datetime_parser ||= DateTime::Format::Strptime->new(
105 pattern => '%a %d %b %Y %r',
106 # there should be a %Z (TZ) on the end, but it's ambiguous and not parsed
109 $datetime_parser->parse_datetime(shift);
112 sub format_datetime {
114 require DateTime::Format::Strptime;
115 $datetime_formatter ||= DateTime::Format::Strptime->new(
116 pattern => '%F %H:%M:%S.%4N',
119 $datetime_formatter->format_datetime(shift);