diff options
Diffstat (limited to 'lib/VNDB/Schema.pm')
-rw-r--r-- | lib/VNDB/Schema.pm | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/VNDB/Schema.pm b/lib/VNDB/Schema.pm index 63c0f258..ffc80e77 100644 --- a/lib/VNDB/Schema.pm +++ b/lib/VNDB/Schema.pm @@ -23,9 +23,11 @@ my $ROOT = $INC{'VNDB/Schema.pm'} =~ s{/lib/VNDB/Schema\.pm}{}r; # type => 'serial', # decl => 'id SERIAL', # full declaration, exluding comments and PRIMARY KEY marker # pub => 1, +# comment => '', # }, ... # ], # primary => ['id'], +# comment => '', # } # } sub schema { @@ -35,17 +37,18 @@ sub schema { while(<$F>) { chomp; next if /^\s*--/ || /^\s*$/; - next if /^\s*CREATE\s+TYPE/; - next if /^\s*CREATE\s+SEQUENCE/; + next if /^\s*CREATE\s+(?:TYPE|SEQUENCE|FUNCTION|DOMAIN|VIEW)/; if(/^\s*CREATE\s+TABLE\s+([^ ]+)/) { die "Unexpected 'CREATE TABLE $1'\n" if $table; + next if /PARTITION OF/; $table = $1; $schema{$table}{name} = $table; - $schema{$table}{dbentry_type} = $1 if /--.*\s+dbentry_type=(.)/; + $schema{$table}{comment} = /--\s*(.*)\s*/ ? $1 : ''; + $schema{$table}{dbentry_type} = $1 if $schema{$table}{comment} =~ s/\s*dbentry_type=(.)\s*//; $schema{$table}{cols} = []; - } elsif(/^\s*\);/) { + } elsif(/^\s*\)(?: PARTITION .+)?;/) { $table = undef; } elsif(/^\s+(?:CHECK|CONSTRAINT)/) { @@ -55,22 +58,19 @@ sub schema { die "Double primary key for '$table'?\n" if $schema{$table}{primary}; $schema{$table}{primary} = [ map s/\s*"?([^\s"]+)"?\s*/$1/r, split /,/, $1 ]; - } elsif($table && s/^\s+"?([^"\( ]+)"?\s+//) { + } elsif($table && s/^\s+([^"\( ]+)\s+//) { my $col = { name => $1 }; push @{$schema{$table}{cols}}, $col; - $col->{pub} = /--.*\[pub\]/; - s/,?\s*(?:--.*)?$//; + $col->{comment} = (s/,?\s*(?:--(.*))?$// && $1) || ''; + $col->{pub} = $col->{comment} =~ s/\s*\[pub\]\s*//; if(s/\s+PRIMARY\s+KEY//i) { die "Double primary key for '$table'?\n" if $schema{$table}{primary}; $schema{$table}{primary} = [ $col->{name} ]; } - $col->{decl} = "\"$col->{name}\" $_"; + $col->{decl} = "$col->{name} $_"; $col->{type} = lc s/^([^ ]+)\s.+/$1/r; - - } else { - die "Unrecognized line in schema.sql: $_\n"; } } @@ -89,7 +89,7 @@ sub types { open my $F, '<', "$ROOT/sql/schema.sql" or die "schema.sql: $!"; while(<$F>) { chomp; - if(/^CREATE TYPE ([^ ]+)/) { + if(/^CREATE (?:TYPE|DOMAIN) ([^ ]+)/) { $types{$1} = { decl => $_ }; } } @@ -118,9 +118,9 @@ sub references { decl => $_, from_table => $1, name => $2, - from_cols => [ map s/"//r, split /\s*,\s*/, $3 ], + from_cols => [ split /\s*,\s*/, $3 ], to_table => $4, - to_cols => [ map s/"//r, split /\s*,\s*/, $5 ] + to_cols => [ split /\s*,\s*/, $5 ] }; } \@ref |