updated _resolve_column_source to _resolve_column_info as per ribasushi's suggestion
[dbsrgits/DBIx-Class.git] / t / 746mssql.t
CommitLineData
c1cac633 1use strict;
b9a2c3a5 2use warnings;
c1cac633 3
4use Test::More;
5use lib qw(t/lib);
6use DBICTest;
7
8my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_MSSQL_ODBC_${_}" } qw/DSN USER PASS/};
9
10plan skip_all => 'Set $ENV{DBICTEST_MSSQL_ODBC_DSN}, _USER and _PASS to run this test'
11 unless ($dsn && $user);
12
cc2c69c1 13plan tests => 21;
c1cac633 14
15my $schema = DBICTest::Schema->connect($dsn, $user, $pass, {AutoCommit => 1});
16
8c0104fe 17{
18 no warnings 'redefine';
19 my $connect_count = 0;
20 my $orig_connect = \&DBI::connect;
21 local *DBI::connect = sub { $connect_count++; goto &$orig_connect };
22
23 $schema->storage->ensure_connected;
24
25 is( $connect_count, 1, 'only one connection made');
26}
9b3e916d 27
c1cac633 28isa_ok( $schema->storage, 'DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server' );
29
c5f77f6c 30$schema->storage->dbh_do (sub {
31 my ($storage, $dbh) = @_;
32 eval { $dbh->do("DROP TABLE artist") };
33 $dbh->do(<<'SQL');
c1cac633 34
c1cac633 35CREATE TABLE artist (
36 artistid INT IDENTITY NOT NULL,
a0dd8679 37 name VARCHAR(100),
39da2a2b 38 rank INT NOT NULL DEFAULT '13',
2eebd801 39 charfield CHAR(10) NULL,
c1cac633 40 primary key(artistid)
41)
42
c5f77f6c 43SQL
44
45});
46
c1cac633 47my %seen_id;
48
2eebd801 49# fresh $schema so we start unconnected
50$schema = DBICTest::Schema->connect($dsn, $user, $pass, {AutoCommit => 1});
51
c1cac633 52# test primary key handling
53my $new = $schema->resultset('Artist')->create({ name => 'foo' });
54ok($new->artistid > 0, "Auto-PK worked");
55
56$seen_id{$new->artistid}++;
57
58# test LIMIT support
59for (1..6) {
60 $new = $schema->resultset('Artist')->create({ name => 'Artist ' . $_ });
61 is ( $seen_id{$new->artistid}, undef, "id for Artist $_ is unique" );
62 $seen_id{$new->artistid}++;
63}
64
65my $it = $schema->resultset('Artist')->search( {}, {
66 rows => 3,
67 order_by => 'artistid',
68});
69
70is( $it->count, 3, "LIMIT count ok" );
71is( $it->next->name, "foo", "iterator->next ok" );
72$it->next;
73is( $it->next->name, "Artist 2", "iterator->next ok" );
74is( $it->next, undef, "next past end of resultset ok" );
75
b9a2c3a5 76$schema->storage->dbh_do (sub {
77 my ($storage, $dbh) = @_;
78 eval { $dbh->do("DROP TABLE Owners") };
79 eval { $dbh->do("DROP TABLE Books") };
80 $dbh->do(<<'SQL');
81
82
83CREATE TABLE Books (
84 id INT IDENTITY (1, 1) NOT NULL,
85 source VARCHAR(100),
86 owner INT,
87 title VARCHAR(10),
88 price INT NULL
89)
90
91CREATE TABLE Owners (
92 id INT IDENTITY (1, 1) NOT NULL,
93 [name] VARCHAR(100),
94)
95
96SET IDENTITY_INSERT Owners ON
97
98SQL
99
100});
101$schema->populate ('Owners', [
102 [qw/id [name] /],
103 [qw/1 wiggle/],
104 [qw/2 woggle/],
105 [qw/3 boggle/],
fc85215b 106 [qw/4 fREW/],
107 [qw/5 fRIOUX/],
108 [qw/6 fROOH/],
109 [qw/7 fRUE/],
110 [qw/8 fISMBoC/],
111 [qw/9 station/],
112 [qw/10 mirror/],
113 [qw/11 dimly/],
114 [qw/12 face_to_face/],
115 [qw/13 icarus/],
116 [qw/14 dream/],
117 [qw/15 dyrstyggyr/],
b9a2c3a5 118]);
119
120$schema->populate ('BooksInLibrary', [
121 [qw/source owner title /],
122 [qw/Library 1 secrets1/],
123 [qw/Eatery 1 secrets2/],
124 [qw/Library 2 secrets3/],
fc85215b 125 [qw/Library 3 secrets4/],
126 [qw/Eatery 3 secrets5/],
127 [qw/Library 4 secrets6/],
128 [qw/Library 5 secrets7/],
129 [qw/Eatery 5 secrets8/],
130 [qw/Library 6 secrets9/],
131 [qw/Library 7 secrets10/],
132 [qw/Eatery 7 secrets11/],
133 [qw/Library 8 secrets12/],
b9a2c3a5 134]);
135
136#
137# try a distinct + prefetch on tables with identically named columns
138#
139
140{
141 # try a ->has_many direction (due to a 'multi' accessor the select/group_by group is collapsed)
fc85215b 142 my $owners = $schema->resultset ('Owners')->search ({
143 'books.id' => { '!=', undef }
144 }, {
145 prefetch => 'books',
146 distinct => 1,
147 order_by => 'name',
148 page => 2,
149 rows => 5,
150 });
151
b9a2c3a5 152 my $owners2 = $schema->resultset ('Owners')->search ({ id => { -in => $owners->get_column ('me.id')->as_query }});
153 for ($owners, $owners2) {
154 is ($_->all, 2, 'Prefetched grouped search returns correct number of rows');
155 is ($_->count, 2, 'Prefetched grouped search returns correct count');
156 }
157
158 # try a ->belongs_to direction (no select collapse)
fc85215b 159 my $books = $schema->resultset ('BooksInLibrary')->search ({
160 'owner.name' => 'wiggle'
161 }, {
162 prefetch => 'owner',
163 distinct => 1,
164 order_by => 'name',
165 page => 2,
166 rows => 5,
167 });
168
b9a2c3a5 169 my $books2 = $schema->resultset ('BooksInLibrary')->search ({ id => { -in => $books->get_column ('me.id')->as_query }});
170 for ($books, $books2) {
171 is ($_->all, 1, 'Prefetched grouped search returns correct number of rows');
172 is ($_->count, 1, 'Prefetched grouped search returns correct count');
173 }
fc85215b 174
175 #my $result = $schema->resultset('BooksInLibrary')->search(undef, {
176 #page => 1,
177 #rows => 25,
178 #order_by => ['name', 'title'],
179 #prefetch => 'owner'
180 #})->first;
181
b9a2c3a5 182}
c1cac633 183
184# clean up our mess
185END {
c5f77f6c 186 my $dbh = eval { $schema->storage->_dbh };
c1cac633 187 $dbh->do('DROP TABLE artist') if $dbh;
188}
fc85215b 189# vim:sw=2 sts=2