From: ivan Date: Wed, 7 Dec 2005 23:48:58 +0000 (+0000) Subject: for fetching inserted keys without pg_oid_status, look up the actual sequence name... X-Git-Tag: BEFORE_FINAL_MASONIZE~261 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=5d03c5bf1e774050bbdad9964408f248855ec317 for fetching inserted keys without pg_oid_status, look up the actual sequence name from dbdef rather than assuming ${table}_${column}_seq --- 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"; }