diff options
| -rw-r--r-- | FS/FS/Record.pm | 11 | ||||
| -rwxr-xr-x | FS/bin/freeside-setup | 14 | 
2 files changed, 23 insertions, 2 deletions
| diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 21100045e..7f64d849e 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -752,7 +752,16 @@ sub insert {        #my $oid = $sth->{'pg_oid_status'};        #my $i_sql = "SELECT $primary_key FROM $table WHERE oid = ?"; -      my $i_sql = "SELECT currval('${table}_${primary_key}_seq')"; + +      my $default = $self->dbdef_table->column($primary_key)->default; +      unless ( $default =~ /^nextval\('"?([\w\.]+)"?'/i ) { +        dbh->rollback if $FS::UID::AutoCommit; +        return "can't parse $table.$primary_key default value". +               " for sequence name: $default"; +      } +      my $sequence = $1; + +      my $i_sql = "SELECT currval('$sequence')";        my $i_sth = dbh->prepare($i_sql) or do {          dbh->rollback if $FS::UID::AutoCommit;          return dbh->errstr; diff --git a/FS/bin/freeside-setup b/FS/bin/freeside-setup index 14c5a84ab..a16e51749 100755 --- a/FS/bin/freeside-setup +++ b/FS/bin/freeside-setup @@ -9,7 +9,7 @@ use Getopt::Std;  use Locale::Country;  use Locale::SubCountry;  use FS::UID qw(adminsuidsetup datasrc checkeuid getsecrets); -use FS::Schema qw( dbdef_dist ); +use FS::Schema qw( dbdef_dist reload_dbdef );  use FS::Record;  use FS::cust_main_county;  #use FS::raddb; @@ -98,6 +98,12 @@ foreach my $statement ( $dbdef->sql($dbh) ) {      or die "CREATE error: ". $dbh->errstr. "\ndoing statement: $statement";  } +#now go back and reverse engineer the db +#so we pick up the correct column DEFAULTs for #oidless inserts +dbdef_create($dbh, $dbdef_file); +delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload +reload_dbdef($dbdef_file); +  #cust_main_county  foreach my $country ( sort map uc($_), all_country_codes ) { @@ -162,6 +168,12 @@ $dbh->disconnect or die $dbh->errstr;  #print "Freeside database initialized sucessfully\n"; +sub dbdef_create { # reverse engineer the schema from the DB and save to file +  my( $dbh, $file ) = @_; +  my $dbdef = new_native DBIx::DBSchema $dbh; +  $dbdef->save($file); +} +  sub usage {    die "Usage:\n  freeside-setup user\n";   } | 
