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