Merge 'trunk' into 'table_name_ref'
[dbsrgits/DBIx-Class.git] / t / 746db2_400.t
1 use strict;
2 use warnings;  
3
4 use Test::More;
5 use lib qw(t/lib);
6 use DBICTest;
7
8 my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_DB2_400_${_}" } qw/DSN USER PASS/};
9
10 #warn "$dsn $user $pass";
11
12 # Probably best to pass the DBQ option in the DSN to specify a specific
13 # libray.  Something like:
14 # DBICTEST_DB2_400_DSN='dbi:ODBC:dsn=MyAS400;DBQ=MYLIB'
15 plan skip_all => 'Set $ENV{DBICTEST_DB2_400_DSN}, _USER and _PASS to run this test'
16   unless ($dsn && $user);
17
18 plan tests => 6;
19
20 my $schema = DBICTest::Schema->connect($dsn, $user, $pass);
21
22 my $dbh = $schema->storage->dbh;
23
24 eval { $dbh->do("DROP TABLE artist") };
25
26 $dbh->do(<<'');
27 CREATE TABLE artist (
28     artistid INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
29     name VARCHAR(255),
30     rank INTEGER default 13 not null,
31     charfield CHAR(10)
32 )
33
34 # Just to test loading, already in Core
35 $schema->class('Artist')->load_components('PK::Auto');
36
37 # test primary key handling
38 my $new = $schema->resultset('Artist')->create({ name => 'foo' });
39 ok($new->artistid, "Auto-PK worked");
40
41 # test LIMIT support
42 for (1..6) {
43     $schema->resultset('Artist')->create({ name => 'Artist ' . $_ });
44 }
45 my $it = $schema->resultset('Artist')->search( {},
46     { rows => 3,
47       order_by => 'artistid'
48       }
49 );
50 is( $it->count, 3, "LIMIT count ok" );
51 is( $it->next->name, "foo", "iterator->next ok" );
52 $it->next;
53 is( $it->next->name, "Artist 2", "iterator->next ok" );
54 is( $it->next, undef, "next past end of resultset ok" );
55
56 my $test_type_info = {
57     'artistid' => {
58         'data_type' => 'INTEGER',
59         'is_nullable' => 0,
60         'size' => 10
61     },
62     'name' => {
63         'data_type' => 'VARCHAR',
64         'is_nullable' => 1,
65         'size' => 255
66     },
67     'rank' => {
68         'data_type' => 'INTEGER',
69         'is_nullable' => 0,
70         'size' => 10,
71     },
72     'charfield' => {
73         'data_type' => 'CHAR',
74         'is_nullable' => 1,
75         'size' => 10 
76     },
77 };
78
79
80 my $type_info = $schema->storage->columns_info_for('artist');
81 is_deeply($type_info, $test_type_info, 'columns_info_for - column data types');
82
83 # clean up our mess
84 END {
85     $dbh->do("DROP TABLE artist") if $dbh;
86 }
87