* Added test cases to test if arrayref bind values in insert/update are passed throu...
[dbsrgits/DBIx-Class.git] / t / 95sql_maker_quote.t
CommitLineData
3da841f1 1use strict;
2use warnings;
3
4use Test::More;
9b459129 5use SQL::Abstract::Test import => ['is_same_sql_bind'];
3da841f1 6
7
8BEGIN {
9 eval "use DBD::SQLite";
10 plan $@
11 ? ( skip_all => 'needs DBD::SQLite for testing' )
8682bb07 12 : ( tests => 8 );
3da841f1 13}
14
15use lib qw(t/lib);
16
17use_ok('DBICTest');
18
c216324a 19my $schema = DBICTest->init_schema();
3da841f1 20
c216324a 21my $sql_maker = $schema->storage->sql_maker;
3da841f1 22
23$sql_maker->quote_char('`');
24$sql_maker->name_sep('.');
25
9b459129 26my ($sql, @bind) = $sql_maker->select(
3da841f1 27 [
28 {
29 'me' => 'cd'
30 },
31 [
32 {
33 'artist' => 'artist',
34 '-join_type' => ''
35 },
36 {
37 'artist.artistid' => 'me.artist'
38 }
39 ]
40 ],
41 [
42 {
43 'count' => '*'
44 }
45 ],
46 {
47 'artist.name' => 'Caterwauler McCrae',
48 'me.year' => 2001
49 },
50 [],
51 undef,
52 undef
53);
54
9b459129 55is_same_sql_bind(
56 $sql, \@bind,
57 q/SELECT COUNT( * ) FROM `cd` `me` JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )/, [ ['artist.name' => 'Caterwauler McCrae'], ['me.year' => 2001] ],
58 'got correct SQL and bind parameters for count query with quoting'
59);
3da841f1 60
9b459129 61($sql, @bind) = $sql_maker->select(
3da841f1 62 [
63 {
64 'me' => 'cd'
65 }
66 ],
67 [
68 'me.cdid',
69 'me.artist',
70 'me.title',
71 'me.year'
72 ],
73 undef,
74 [
8682bb07 75 { -desc => 'year' }
3da841f1 76 ],
77 undef,
78 undef
79);
80
8682bb07 81is_same_sql_bind(
82 $sql, \@bind,
83 q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY `year` DESC/, [],
84 'hashref ORDER BY okay'
85);
86
87
2924125d 88($sql, @bind) = $sql_maker->select(
89 [
90 {
91 'me' => 'cd'
92 }
93 ],
94 [
95 'me.*'
96 ],
97 undef,
98 [],
99 undef,
100 undef
101);
3da841f1 102
2924125d 103is_same_sql_bind(
104 $sql, \@bind,
105 q/SELECT `me`.* FROM `cd` `me`/, [],
106 'select attr with me.* is right'
107);
3da841f1 108
9b459129 109($sql, @bind) = $sql_maker->select(
3da841f1 110 [
111 {
112 'me' => 'cd'
113 }
114 ],
115 [
116 'me.cdid',
117 'me.artist',
118 'me.title',
119 'me.year'
120 ],
121 undef,
122 [
123 \'year DESC'
124 ],
125 undef,
126 undef
127);
128
9b459129 129is_same_sql_bind(
130 $sql, \@bind,
131 q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY year DESC/, [],
132 'did not quote ORDER BY with scalarref'
3da841f1 133);
134
9b459129 135($sql, @bind) = $sql_maker->update(
3da841f1 136 'group',
137 {
138 'order' => '12',
139 'name' => 'Bill'
140 }
141);
142
9b459129 143is_same_sql_bind(
144 $sql, \@bind,
145 q/UPDATE `group` SET `name` = ?, `order` = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
146 'quoted table names for UPDATE'
147);
3da841f1 148
149$sql_maker->quote_char([qw/[ ]/]);
150
9b459129 151($sql, @bind) = $sql_maker->select(
3da841f1 152 [
153 {
154 'me' => 'cd'
155 },
156 [
157 {
158 'artist' => 'artist',
159 '-join_type' => ''
160 },
161 {
162 'artist.artistid' => 'me.artist'
163 }
164 ]
165 ],
166 [
167 {
168 'count' => '*'
169 }
170 ],
171 {
172 'artist.name' => 'Caterwauler McCrae',
173 'me.year' => 2001
174 },
175 [],
176 undef,
177 undef
178);
179
9b459129 180is_same_sql_bind(
181 $sql, \@bind,
182 q/SELECT COUNT( * ) FROM [cd] [me] JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )/, [ ['artist.name' => 'Caterwauler McCrae'], ['me.year' => 2001] ],
183 'got correct SQL and bind parameters for count query with bracket quoting'
184);
3da841f1 185
186
9b459129 187($sql, @bind) = $sql_maker->update(
3da841f1 188 'group',
189 {
190 'order' => '12',
191 'name' => 'Bill'
192 }
193);
194
9b459129 195is_same_sql_bind(
196 $sql, \@bind,
197 q/UPDATE [group] SET [name] = ?, [order] = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
198 'bracket quoted table names for UPDATE'
199);