1use strict; 2use warnings; 3use Test::More; 4use DBIx::Class::Schema::Loader::DBI::ODBC::ACCESS (); 5use lib qw(t/lib); 6use dbixcsl_common_tests; 7 8my $odbc_dsn = $ENV{DBICTEST_MSACCESS_ODBC_DSN} || ''; 9my $odbc_user = $ENV{DBICTEST_MSACCESS_ODBC_USER} || ''; 10my $odbc_password = $ENV{DBICTEST_MSACCESS_ODBC_PASS} || ''; 11 12my $ado_dsn = $ENV{DBICTEST_MSACCESS_ADO_DSN} || ''; 13my $ado_user = $ENV{DBICTEST_MSACCESS_ADO_USER} || ''; 14my $ado_password = $ENV{DBICTEST_MSACCESS_ADO_PASS} || ''; 15 16my %ado_extra_types = ( 17 'tinyint' => { data_type => 'tinyint', original => { data_type => 'byte' } }, 18 'smallmoney' => { data_type => 'money', original => { data_type => 'currency' } }, 19 'decimal' => { data_type => 'decimal' }, 20 'decimal(3)' => { data_type => 'decimal', size => [3, 0] }, 21 'decimal(3,3)'=> { data_type => 'decimal', size => [3, 3] }, 22 'dec(5,5)' => { data_type => 'decimal', size => [5, 5] }, 23 'numeric(2,2)'=> { data_type => 'decimal', size => [2, 2] }, 24 'character' => { data_type => 'char', size => 255 }, 25 'character varying(5)' => { data_type => 'varchar', size => 5 }, 26 'nchar(5)' => { data_type => 'char', size => 5 }, 27 'national character(5)' => { data_type => 'char', size => 5 }, 28 'nvarchar(5)' => { data_type => 'varchar', size => 5 }, 29 'national character varying(5)' => { data_type => 'varchar', size => 5 }, 30 'national char varying(5)' => { data_type => 'varchar', size => 5 }, 31 'smalldatetime' => { data_type => 'datetime' }, 32 'uniqueidentifier' => { data_type => 'uniqueidentifier', original => { data_type => 'guid' } }, 33 'text' => { data_type => 'text', original => { data_type => 'longchar' } }, 34 'ntext' => { data_type => 'text', original => { data_type => 'longchar' } }, 35); 36 37my $tester = dbixcsl_common_tests->new( 38 vendor => 'Access', 39 auto_inc_pk => 'AUTOINCREMENT PRIMARY KEY', 40 quote_char => [qw/[ ]/], 41 connect_info => [ ($odbc_dsn ? { 42 dsn => $odbc_dsn, 43 user => $odbc_user, 44 password => $odbc_password, 45 } : ()), 46 ($ado_dsn ? { 47 dsn => $ado_dsn, 48 user => $ado_user, 49 password => $ado_password, 50 } : ()), 51 ], 52 data_types => { 53 # http://msdn.microsoft.com/en-us/library/bb208866(v=office.12).aspx 54 # 55 # Numeric types 56 'autoincrement'=>{ data_type => 'integer', is_auto_increment => 1 }, 57 'int' => { data_type => 'integer' }, 58 'integer' => { data_type => 'integer' }, 59 'long' => { data_type => 'integer' }, 60 'integer4' => { data_type => 'integer' }, 61 'smallint' => { data_type => 'smallint' }, 62 'short' => { data_type => 'smallint' }, 63 'integer2' => { data_type => 'smallint' }, 64 'integer1' => { data_type => 'tinyint', original => { data_type => 'byte' } }, 65 'byte' => { data_type => 'tinyint', original => { data_type => 'byte' } }, 66 'bit' => { data_type => 'bit' }, 67 'logical' => { data_type => 'bit' }, 68 'logical1' => { data_type => 'bit' }, 69 'yesno' => { data_type => 'bit' }, 70 'money' => { data_type => 'money', original => { data_type => 'currency' } }, 71 'currency' => { data_type => 'money', original => { data_type => 'currency' } }, 72 'real' => { data_type => 'real' }, 73 'single' => { data_type => 'real' }, 74 'ieeesingle' => { data_type => 'real' }, 75 'float4' => { data_type => 'real' }, 76 'float' => { data_type => 'double precision', original => { data_type => 'double' } }, 77 'float' => { data_type => 'double precision', original => { data_type => 'double' } }, 78 'float8' => { data_type => 'double precision', original => { data_type => 'double' } }, 79 'double' => { data_type => 'double precision', original => { data_type => 'double' } }, 80 'ieeedouble' => { data_type => 'double precision', original => { data_type => 'double' } }, 81 'number' => { data_type => 'double precision', original => { data_type => 'double' } }, 82 83# # character types 84 'text(25)' => { data_type => 'varchar', size => 25 }, 85 'char' => { data_type => 'char', size => 255 }, 86 'char(5)' => { data_type => 'char', size => 5 }, 87 'string(5)' => { data_type => 'varchar', size => 5 }, 88 'varchar(5)' => { data_type => 'varchar', size => 5 }, 89 90 # binary types 91 'binary(10)' => { data_type => 'binary', size => 10 }, 92 'varbinary(11)' => { data_type => 'varbinary', size => 11 }, 93 94 # datetime types 95 'datetime' => { data_type => 'datetime' }, 96 'time' => { data_type => 'datetime' }, 97 'timestamp' => { data_type => 'datetime' }, 98 99 # misc types 100 'guid' => { data_type => 'uniqueidentifier', original => { data_type => 'guid' } }, 101 102 # blob types 103 'longchar' => { data_type => 'text', original => { data_type => 'longchar' } }, 104 'longtext' => { data_type => 'text', original => { data_type => 'longchar' } }, 105 'memo' => { data_type => 'text', original => { data_type => 'longchar' } }, 106 'image' => { data_type => 'image', original => { data_type => 'longbinary' } }, 107 'longbinary' => { data_type => 'image', original => { data_type => 'longbinary' } }, 108 109 %ado_extra_types, 110 }, 111 data_types_ddl_cb => sub { 112 my $ddl = shift; 113 { 114 package DBIXCSL_Test::DummySchema; 115 use base 'DBIx::Class::Schema'; 116 } 117 my @connect_info = $odbc_dsn ? ($odbc_dsn, $odbc_user, $odbc_password) 118 : ($ado_dsn, $ado_user, $ado_password); 119 120 my $schema = DBIXCSL_Test::DummySchema->connect(@connect_info); 121 122 my $loader = DBIx::Class::Schema::Loader::DBI::ODBC::ACCESS->new( 123 schema => $schema, 124 naming => 'current', 125 ); 126 127 my $conn = $loader->_ado_connection; 128 129 require Win32::OLE; 130 my $comm = Win32::OLE->new('ADODB.Command'); 131 132 $comm->{ActiveConnection} = $conn; 133 $comm->{CommandText} = $ddl; 134 $comm->Execute; 135 }, 136); 137 138if (not ($odbc_dsn || $ado_dsn)) { 139 $tester->skip_tests('You need to set the DBICTEST_MSACCESS_ODBC_DSN, and optionally _USER and _PASS and/or the DBICTEST_MSACCESS_ADO_DSN, and optionally _USER and _PASS environment variables'); 140} 141else { 142 $tester->run_tests(); 143} 144 145# vim:et sts=4 sw=4 tw=0: 146