MS Access support over DBD::ODBC and DBD::ADO
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 10_11msaccess_common.t
diff --git a/t/10_11msaccess_common.t b/t/10_11msaccess_common.t
new file mode 100644 (file)
index 0000000..49e3483
--- /dev/null
@@ -0,0 +1,119 @@
+use strict;
+use warnings;
+use Test::More;
+use lib qw(t/lib);
+use dbixcsl_common_tests;
+
+my $odbc_dsn      = $ENV{DBICTEST_MSACCESS_ODBC_DSN} || '';
+my $odbc_user     = $ENV{DBICTEST_MSACCESS_ODBC_USER} || '';
+my $odbc_password = $ENV{DBICTEST_MSACCESS_ODBC_PASS} || '';
+
+my $ado_dsn       = $ENV{DBICTEST_MSACCESS_ADO_DSN} || '';
+my $ado_user      = $ENV{DBICTEST_MSACCESS_ADO_USER} || '';
+my $ado_password  = $ENV{DBICTEST_MSACCESS_ADO_PASS} || '';
+
+my %ado_extra_types = (
+    'tinyint'     => { data_type => 'tinyint', original => { data_type => 'byte' } },
+    'smallmoney'  => { data_type => 'money', original => { data_type => 'currency' } },
+    'decimal'     => { data_type => 'decimal' },
+    'decimal(3)'  => { data_type => 'decimal', size => [3, 0] },
+    'decimal(3,3)'=> { data_type => 'decimal', size => [3, 3] },
+    'dec(5,5)'    => { data_type => 'decimal', size => [5, 5] },
+    'numeric(2,2)'=> { data_type => 'decimal', size => [2, 2] },
+    'character'   => { data_type => 'char', size => 255 },
+    'character varying(5)'  => { data_type => 'varchar', size => 5 },
+    'nchar(5)'    => { data_type => 'char', size => 5 },
+    'national character(5)' => { data_type => 'char', size => 5 },
+    'nvarchar(5)' => { data_type => 'varchar', size => 5 },
+    'national character varying(5)' => { data_type => 'varchar', size => 5 },
+    'national char varying(5)' => { data_type => 'varchar', size => 5 },
+    'smalldatetime' => { data_type => 'datetime' },
+    'uniqueidentifier' => { data_type => 'uniqueidentifier', original => { data_type => 'guid' } },
+    'text'        => { data_type => 'text', original => { data_type => 'longchar' } },
+    'ntext'       => { data_type => 'text', original => { data_type => 'longchar' } },
+);
+
+my $tester = dbixcsl_common_tests->new(
+    vendor      => 'Access',
+    auto_inc_pk => 'AUTOINCREMENT PRIMARY KEY',
+    quote_char  => [qw/[ ]/],
+    connect_info => [ ($odbc_dsn ? {
+            dsn         => $odbc_dsn,
+            user        => $odbc_user,
+            password    => $odbc_password,
+        } : ()),
+        ($ado_dsn ? {
+            dsn         => $ado_dsn,
+            user        => $ado_user,
+            password    => $ado_password,
+        } : ()),
+    ],
+    data_types  => {
+        # http://msdn.microsoft.com/en-us/library/bb208866(v=office.12).aspx
+        #
+        # Numeric types
+        'autoincrement'=>{ data_type => 'integer', is_auto_increment => 1 },
+        'int'         => { data_type => 'integer' },
+        'integer'     => { data_type => 'integer' },
+        'long'        => { data_type => 'integer' },
+        'integer4'    => { data_type => 'integer' },
+        'smallint'    => { data_type => 'smallint' },
+        'short'       => { data_type => 'smallint' },
+        'integer2'    => { data_type => 'smallint' },
+        'integer1'    => { data_type => 'tinyint', original => { data_type => 'byte' } },
+        'byte'        => { data_type => 'tinyint', original => { data_type => 'byte' } },
+        'bit'         => { data_type => 'bit' },
+        'logical'     => { data_type => 'bit' },
+        'logical1'    => { data_type => 'bit' },
+        'yesno'       => { data_type => 'bit' },
+        'money'       => { data_type => 'money', original => { data_type => 'currency' } },
+        'currency'    => { data_type => 'money', original => { data_type => 'currency' } },
+        'real'        => { data_type => 'real' },
+        'single'      => { data_type => 'real' },
+        'ieeesingle'  => { data_type => 'real' },
+        'float4'      => { data_type => 'real' },
+        'float'       => { data_type => 'double precision', original => { data_type => 'double' } },
+        'float'       => { data_type => 'double precision', original => { data_type => 'double' } },
+        'float8'      => { data_type => 'double precision', original => { data_type => 'double' } },
+        'double'      => { data_type => 'double precision', original => { data_type => 'double' } },
+        'ieeedouble'  => { data_type => 'double precision', original => { data_type => 'double' } },
+        'number'      => { data_type => 'double precision', original => { data_type => 'double' } },
+
+#        # character types
+        'text(25)'    => { data_type => 'varchar', size => 25 },
+        'char'        => { data_type => 'char', size => 255 },
+        'char(5)'     => { data_type => 'char', size => 5 },
+        'string(5)'   => { data_type => 'varchar', size => 5 },
+        'varchar(5)'  => { data_type => 'varchar', size => 5 },
+
+        # binary types
+        'binary(10)'  => { data_type => 'binary', size => 10 },
+        'varbinary(11)' => { data_type => 'varbinary', size => 11 },
+
+        # datetime types
+        'datetime'    => { data_type => 'datetime' },
+        'time'        => { data_type => 'datetime' },
+        'timestamp'   => { data_type => 'datetime' },
+
+        # misc types
+        'guid'        => { data_type => 'uniqueidentifier', original => { data_type => 'guid' } },
+
+        # blob types
+        'longchar'    => { data_type => 'text', original => { data_type => 'longchar' } },
+        'longtext'    => { data_type => 'text', original => { data_type => 'longchar' } },
+        'memo'        => { data_type => 'text', original => { data_type => 'longchar' } },
+        'image'       => { data_type => 'image', original => { data_type => 'longbinary' } },
+        'longbinary'  => { data_type => 'image', original => { data_type => 'longbinary' } },
+
+        ($ado_dsn && (not $odbc_dsn) ? %ado_extra_types : ())
+    },
+);
+
+if (not ($odbc_dsn || $ado_dsn)) {
+    $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');
+}
+else {
+    $tester->run_tests();
+}
+
+# vim:et sts=4 sw=4 tw=0: