DbFramework/t/17datatype.t

71 lines
1.8 KiB
Perl
Raw Normal View History

2021-02-08 00:21:11 +08:00
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
use strict;
use Test;
use t::Config;
BEGIN {
my $tests;
my %tests = ( 'mSQL' => 1, 'mysql' => 3, 'Pg' => 0 );
for ( @t::Config::drivers ) { $tests += $tests{$_}; }
plan tests => $tests;
}
require 't/util.pl';
use DbFramework::DataType::ANSII;
use DbFramework::DataType::Mysql;
use DbFramework::Util;
use DbFramework::DataModel;
for ( @t::Config::drivers ) { foo($_) }
sub foo($) {
my $driver = shift;
my($catalog_db,$c_dsn,$c_u,$c_p) = connect_args($driver,'catalog');
my($test_db,$dsn,$u,$p) = connect_args($driver,'test');
my $dm = new DbFramework::DataModel($test_db,$dsn,$u,$p);
$dm->init_db_metadata($c_dsn,$c_u,$c_p);
my $dbh = $dm->dbh; $dbh->{PrintError} = 0;
my $t = $dm->collects_table_h_byname('foo');
my $dt;
if ( $driver eq 'mSQL' ) {
# mapping of mSQL => ANSII types
ok($t->as_sql,'CREATE TABLE foo (
foo INT(4) NOT NULL,
bar CHAR(10) NOT NULL,
baz CHAR(10),
quux INT(4),
foobar TEXT(10),
PRIMARY KEY (foo,bar),
KEY foo (bar,baz),
KEY bar (baz,quux)
)');
} elsif ( $driver eq 'mysql' ) {
# mapping of Mysql => ANSII types
ok($t->as_sql,'CREATE TABLE foo (
foo INTEGER UNSIGNED(11) NOT NULL AUTO_INCREMENT,
bar VARCHAR(10) NOT NULL,
baz VARCHAR(10) NOT NULL,
quux INTEGER UNSIGNED(11) NOT NULL,
foobar TEXT(65535),
PRIMARY KEY (foo,bar),
KEY bar (baz,quux),
KEY foo (bar,baz)
)');
# valid Mysql type
my $mdt = new DbFramework::DataType::Mysql($dm,253,12,50);
ok($mdt->name,'VARCHAR');
# invalid Mysql type
$mdt = eval { new DbFramework::DataType::Mysql($dm,69,12,undef) };
ok($@,'Invalid Mysql data type: 69
');
}
$dbh->disconnect;
}