From c86ea4bb46792a5f175e9887c2e60d9bd3612056 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 3 Jun 1998 07:22:52 +0000 Subject: [PATCH] Initial revision --- bin/dbdef-create | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100755 bin/dbdef-create diff --git a/bin/dbdef-create b/bin/dbdef-create new file mode 100755 index 000000000..eb62c77e3 --- /dev/null +++ b/bin/dbdef-create @@ -0,0 +1,85 @@ +#!/usr/bin/perl -Tw +# +# create dbdef file for existing mySQL database (needs SHOW|DESCRIBE command +# not in Pg) based on fs-setup +# +# ivan@sisd.com 98-jun-2 + +use strict; +use DBI; +use FS::dbdef; +use FS::UID qw(adminsuidsetup datasrc); + +#needs to match FS::Record +my($dbdef_file) = "/var/spool/freeside/dbdef.". datasrc; + +my($dbh)=adminsuidsetup; + +my($tables_sth)=$dbh->prepare("SHOW TABLES"); +my($tables_rv)=$tables_sth->execute; + +my(@tables); +foreach ( @{$tables_sth->fetchall_arrayref} ) { + my($table)=${$_}[0]; + #print "TABLE\t$table\n"; + + my($index_sth)=$dbh->prepare("SHOW INDEX FROM $table"); + my($primary_key)=''; + my(%index,%unique); + for ( 1 .. $index_sth->execute ) { + my($row)=$index_sth->fetchrow_hashref; + if ( ${$row}{'Key_name'} eq "PRIMARY" ) { + $primary_key=${$row}{'Column_name'}; + next; + } + if ( ${$row}{'Non_unique'} ) { #index + push @{$index{${$row}{'Key_name'}}}, ${$row}{'Column_name'}; + } else { #unique + push @{$unique{${$row}{'Key_name'}}}, ${$row}{'Column_name'}; + } + } + + my(@index)=values %index; + my(@unique)=values %unique; + #print "\tPRIMARY KEY $primary_key\n"; + foreach (@index) { + #print "\tINDEX\t", join(', ', @{$_}), "\n"; + } + foreach (@unique) { + #print "\tUNIQUE\t", join(', ', @{$_}), "\n"; + } + + my($columns_sth)=$dbh->prepare("SHOW COLUMNS FROM $table"); + my(@columns); + for ( 1 .. $columns_sth->execute ) { + my($row)=$columns_sth->fetchrow_hashref; + #print "\t", ${$row}{'Field'}, "\n"; + ${$row}{'Type'} =~ /^(\w+)\(?([\d\,]+)?\)?( unsigned)?$/ + or die "Illegal type ${$row}{'Type'}\n"; + my($type,$length)=($1,$2); + my($null)=${$row}{'Null'}; + $null =~ s/YES/NULL/; + push @columns, new FS::dbdef_column ( + ${$row}{'Field'}, + $type, + $null, + $length, + ); + } + + #print "\n"; + push @tables, new FS::dbdef_table ( + $table, + $primary_key, + new FS::dbdef_unique (\@unique), + new FS::dbdef_index (\@index), + @columns, + ); + +} + +my($dbdef) = new FS::dbdef ( @tables ); + +#important +$dbdef->save($dbdef_file); + -- 2.11.0