Merge 'trunk' into 'sqla_1.50_compat'
[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' )
2924125d 12 : ( tests => 7 );
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 [
75 'year DESC'
76 ],
77 undef,
78 undef
79);
80
2924125d 81($sql, @bind) = $sql_maker->select(
82 [
83 {
84 'me' => 'cd'
85 }
86 ],
87 [
88 'me.*'
89 ],
90 undef,
91 [],
92 undef,
93 undef
94);
3da841f1 95
2924125d 96is_same_sql_bind(
97 $sql, \@bind,
98 q/SELECT `me`.* FROM `cd` `me`/, [],
99 'select attr with me.* is right'
100);
3da841f1 101
9b459129 102($sql, @bind) = $sql_maker->select(
3da841f1 103 [
104 {
105 'me' => 'cd'
106 }
107 ],
108 [
109 'me.cdid',
110 'me.artist',
111 'me.title',
112 'me.year'
113 ],
114 undef,
115 [
116 \'year DESC'
117 ],
118 undef,
119 undef
120);
121
9b459129 122is_same_sql_bind(
123 $sql, \@bind,
124 q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY year DESC/, [],
125 'did not quote ORDER BY with scalarref'
3da841f1 126);
127
9b459129 128($sql, @bind) = $sql_maker->update(
3da841f1 129 'group',
130 {
131 'order' => '12',
132 'name' => 'Bill'
133 }
134);
135
9b459129 136is_same_sql_bind(
137 $sql, \@bind,
138 q/UPDATE `group` SET `name` = ?, `order` = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
139 'quoted table names for UPDATE'
140);
3da841f1 141
142$sql_maker->quote_char([qw/[ ]/]);
143
9b459129 144($sql, @bind) = $sql_maker->select(
3da841f1 145 [
146 {
147 'me' => 'cd'
148 },
149 [
150 {
151 'artist' => 'artist',
152 '-join_type' => ''
153 },
154 {
155 'artist.artistid' => 'me.artist'
156 }
157 ]
158 ],
159 [
160 {
161 'count' => '*'
162 }
163 ],
164 {
165 'artist.name' => 'Caterwauler McCrae',
166 'me.year' => 2001
167 },
168 [],
169 undef,
170 undef
171);
172
9b459129 173is_same_sql_bind(
174 $sql, \@bind,
175 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] ],
176 'got correct SQL and bind parameters for count query with bracket quoting'
177);
3da841f1 178
179
9b459129 180($sql, @bind) = $sql_maker->update(
3da841f1 181 'group',
182 {
183 'order' => '12',
184 'name' => 'Bill'
185 }
186);
187
9b459129 188is_same_sql_bind(
189 $sql, \@bind,
190 q/UPDATE [group] SET [name] = ?, [order] = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
191 'bracket quoted table names for UPDATE'
192);