projects
/
freeside.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
4b2ee72
)
for fetching inserted keys without pg_oid_status, look up the actual sequence name...
author
ivan
<ivan>
Wed, 7 Dec 2005 23:48:58 +0000
(23:48 +0000)
committer
ivan
<ivan>
Wed, 7 Dec 2005 23:48:58 +0000
(23:48 +0000)
FS/FS/Record.pm
patch
|
blob
|
history
FS/bin/freeside-setup
patch
|
blob
|
history
diff --git
a/FS/FS/Record.pm
b/FS/FS/Record.pm
index
2110004
..
7f64d84
100644
(file)
--- 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 $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;
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
14c5a84
..
a16e517
100755
(executable)
--- 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 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;
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";
}
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 ) {
#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";
#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";
}
sub usage {
die "Usage:\n freeside-setup user\n";
}