#!/usr/bin/perl -Tw use strict; use DBI; use DBIx::DBSchema 0.21; use DBIx::DBSchema::Table; use DBIx::DBSchema::Column; use DBIx::DBSchema::ColGroup::Unique; use DBIx::DBSchema::ColGroup::Index; use FS::UID qw(adminsuidsetup); use FS::Record qw(dbdef); my $user = shift or die &usage; my $dbh = adminsuidsetup $user; my $schema = dbdef(); #false laziness w/fs-setup my @tables = scalar(@ARGV) ? @ARGV : grep { ! /^(h|pg)_/ } $schema->tables; foreach my $table ( @tables ) { next if grep { /^h_$table/ } $schema->tables; warn "creating history table for $table\n"; my $tableobj = $schema->table($table) or die "unknown table $table (did you run dbdef-create?)\n"; my $h_tableobj = DBIx::DBSchema::Table->new( { name => "h_$table", primary_key => 'historynum', unique => DBIx::DBSchema::ColGroup::Unique->new( [] ), 'index' => DBIx::DBSchema::ColGroup::Index->new( [ @{$tableobj->unique->lol_ref}, @{$tableobj->index->lol_ref} ] ), columns => [ DBIx::DBSchema::Column->new( { 'name' => 'historynum', 'type' => 'serial', 'null' => 'NOT NULL', 'length' => '', 'default' => '', 'local' => '', } ), DBIx::DBSchema::Column->new( { 'name' => 'history_date', 'type' => 'int', 'null' => 'NULL', 'length' => '', 'default' => '', 'local' => '', } ), DBIx::DBSchema::Column->new( { 'name' => 'history_user', 'type' => 'varchar', 'null' => 'NOT NULL', 'length' => '80', 'default' => '', 'local' => '', } ), DBIx::DBSchema::Column->new( { 'name' => 'history_action', 'type' => 'varchar', 'null' => 'NOT NULL', 'length' => '80', 'default' => '', 'local' => '', } ), map { my $column = $tableobj->column($_); $column->type('int') if $column->type eq 'serial'; $column->default('') if $column->default =~ /^nextval\(/i; ( my $local = $column->local ) =~ s/AUTO_INCREMENT//i; $column->local($local); $column; } $tableobj->columns ], } ); foreach my $statement ( $h_tableobj->sql_create_table($dbh) ) { $dbh->do( $statement ) or die "CREATE error: ". $dbh->errstr. "\ndoing statement: $statement"; } } $dbh->commit or die $dbh->errstr; $dbh->disconnect or die $dbh->errstr; sub usage { die "Usage:\n create-history-tables user [ table table ... ] \n"; }