1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-05-27 01:57:30 +03:00
2016-05-31 16:40:30 -05:00

238 lines
3.6 KiB
Perl
Executable File

#!/usr/bin/perl -w
#
# $Id: schemaSync.pl 9731 2013-08-01 16:58:35Z rdempsey $
use DBI;
use DBD::mysql;
$| = 1;
$cfgfile='/usr/local/mariadb/columnstore/mysql/my.cnf';
$username = 'root';
$auth = '';
%attr = ();
@calpont_objects = ();
sub gather_calpont_objects
{
$stmt = <<EOD
select
`schema`, tablename, columnname, objectid, dictobjectid, datatype,
scale, prec, columnlength, columnposition, compressiontype
from
syscolumn
order by
`schema`, tablename, columnposition;
EOD
;
my $sth = $dbh->prepare($stmt);
$sth->execute();
my @row_ary = $sth->fetchrow_array();
while ($#row_ary >= 0)
{
push(@calpont_objects, [@row_ary]);
@row_ary = $sth->fetchrow_array();
}
}
sub gather_mysql_objects
{
}
sub diff_calpont_mysql
{
}
sub diff_mysql_calpont
{
}
sub conflicts
{
}
$database='calpontsys';
$data_source = 'DBI:mysql:database=' . $database . ':mysql_read_default_file=' . $cfgfile . '';
$dbh = DBI->connect($data_source, $username, $auth, \%attr);
gather_calpont_objects;
$dbh->disconnect;
sub datatype2name
{
my ($dt) = @_;
if ($dt == 0)
{
$dts = 'bit';
}
elsif ($dt == 1)
{
$dts = 'tinyint';
}
elsif ($dt == 2)
{
$dts = 'char';
}
elsif ($dt == 3)
{
$dts = 'smallint';
}
elsif ($dt == 4)
{
$dts = 'decimal';
}
elsif ($dt == 5)
{
$dts = 'medint';
}
elsif ($dt == 6)
{
$dts = 'int';
}
elsif ($dt == 7)
{
$dts = 'float';
}
elsif ($dt == 8)
{
$dts = 'date';
}
elsif ($dt == 9)
{
$dts = 'bigint';
}
elsif ($dt == 10)
{
$dts = 'double';
}
elsif ($dt == 11)
{
$dts = 'datetime';
}
elsif ($dt == 12)
{
$dts = 'varchar';
}
elsif ($dt == 13)
{
$dts = 'varbinary';
}
elsif ($dt == 14)
{
$dts = 'clob';
}
elsif ($dt == 15)
{
$dts = 'blob';
}
elsif ($dt == 16)
{
$dts = 'tinyint unsigned';
}
elsif ($dt == 17)
{
$dts = 'smallint unsigned';
}
elsif ($dt == 18)
{
$dts = 'decimal unsigned';
}
elsif ($dt == 19)
{
$dts = 'medint unsigned';
}
elsif ($dt == 20)
{
$dts = 'int unsigned';
}
elsif ($dt == 21)
{
$dts = 'float unsigned';
}
elsif ($dt == 22)
{
$dts = 'bigint unsigned';
}
elsif ($dt == 23)
{
$dts = 'double unsigned';
}
else
{
$dts = "$dt";
}
return $dts;
}
%schemas = ();
foreach $co (@calpont_objects)
{
$schema = "$@$co->[0]";
$schemas{$schema} = 1;
}
%schematables = ();
foreach $schema (keys %schemas)
{
foreach $co (@calpont_objects)
{
next if ("$@$co->[0]" ne $schema);
$schematable = $schema . ".$@$co->[1]";
$schematables{$schematable} = 1;
}
}
$curdb='';
foreach $schema (keys %schemas)
{
foreach $schematable (keys %schematables)
{
next if (!($schematable =~ /^$schema\./));
$first = 1;
foreach $co (@calpont_objects)
{
$schtbl = "$@$co->[0].$@$co->[1]";
next if ($schematable ne $schtbl);
$ty = "$@$co->[5]";
$nm = datatype2name($ty);
$sc = "$@$co->[6]";
if (($nm eq 'smallint' || $nm eq 'int' || $nm eq 'bigint') && $sc > 0)
{
$nm = 'decimal';
}
if ($first == 1)
{
if ("$@$co->[0]" ne $curdb)
{
print "create database if not exists $@$co->[0];\nuse $@$co->[0];\n\n";
$curdb = "$@$co->[0]";
}
print "create table if not exists $@$co->[1] (\n";
$first = 0;
}
else
{
print ", ";
}
print "$@$co->[2] $nm";
if ($nm eq 'char' || $nm eq 'varchar' || $nm eq 'varbinary')
{
print "($@$co->[8])";
}
elsif ($nm eq 'decimal')
{
print "($@$co->[7],$@$co->[6])";
}
print " comment 'compression=$@$co->[10]'\n";
}
print ") engine=infinidb comment='schema sync only';\n\n";
}
}
gather_mysql_objects;
diff_calpont_mysql;
diff_mysql_calpont;
conflicts;