Firebird: cleanup trigger parsing code a bit
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / DBI / InterBase.pm
index 978f1ab..1d62ef9 100644 (file)
@@ -23,6 +23,13 @@ See L<DBIx::Class::Schema::Loader::Base> for available options.
 
 sub _is_case_sensitive { 1 }
 
+sub _setup {
+    my $self = shift;
+
+    $self->schema->storage->sql_maker->quote_char('"');
+    $self->schema->storage->sql_maker->name_sep('.');
+}
+
 sub _table_pk_info {
     my ($self, $table) = @_;
 
@@ -119,6 +126,8 @@ sub _extra_column_info {
 SELECT t.rdb$trigger_source
 FROM rdb$triggers t
 WHERE t.rdb$relation_name = ?
+AND t.rdb$system_flag = 0 -- user defined
+AND t.rdb$trigger_type = 1 -- BEFORE INSERT
 EOF
     $sth->execute($table);
 
@@ -130,11 +139,14 @@ EOF
         my ($quoted, $generator) = $trigger =~
 /(?:gen_id\s* \( \s* |next \s* value \s* for \s*)(")?(\w+)/ix;
 
-        $generator = uc $generator unless $quoted;
+        if ($generator) {
+            $generator = uc $generator unless $quoted;
 
-        if ((first { $_ eq $column } @trig_cols) && $generator) {
-            $extra_info{is_auto_increment} = 1;
-            $extra_info{sequence}          = $generator;
+            if (first { $_ eq $column } @trig_cols) {
+                $extra_info{is_auto_increment} = 1;
+                $extra_info{sequence}          = $generator;
+                last;
+            }
         }
     }