Removed Nesting operator and explicated how nesting is explicit via node descent
[dbsrgits/SQL-Abstract-2.0-ish.git] / lib / SQL / Abstract / Manual / Examples.pod
CommitLineData
37f2cc3f 1=head1 NAME
2
3SQL::Abstract::Manual::Specification
4
5=head1 DESCRIPTION
6
7These are the examples for the AST
8
9=head1 EXAMPLES
10
11The following are example SQL statements and the AST that would represent each
12one. The SQL used is from the MySQL dialect.
13
14=over 4
15
16=item * SELECT 1
17
18 {
19 type => 'select',
20 ast_version => 0.0001,
21 select => [
22 {
23 type => 'SelectComponent',
24 value => {
25 type => 'Value',
26 subtype => 'number',
27 value => 1,
28 },
29 },
30 ],
31 }
32
33=item * SELECT NOW() AS time FROM dual AS duality
34
35 {
36 type => 'select',
37 ast_version => 0.0001,
38 select => [
39 {
40 type => 'SelectComponent',
41 value => {
42 type => 'Function',
43 function => 'NOW',
44 },
45 as => {
46 type => 'Identifier',
47 element1 => 'time',
48 },
49 },
50 ],
51 tables => {
52 type => 'TableIdentifier',
53 value => {
54 type => 'Identifier',
55 element1 => 'dual',
56 },
57 as => 'duality',
58 },
59 }
60
61=item * SELECT 1 FROM foo LEFT OUTER JOIN bar ON ( foo.col1 = bar.col2 )
62
63 {
64 type => 'select',
65 ast_version => 0.0001,
66 select => [
67 {
68 type => 'SelectComponent',
69 value => {
70 type => 'Value',
71 subtype => 'number',
72 value => 1,
73 },
74 },
75 ],
76 tables => {
77 type => 'Operator',
78 op => 'LEFT OUTER',
79 args => [
80 {
81 type => 'TableIdentifier',
82 value => {
83 type => 'Identifier',
84 element1 => 'foo',
85 },
86 },
87 {
88 type => 'TableIdentifier',
89 value => {
90 type => 'Identifier',
91 element1 => 'bar',
92 },
93 },
94 ],
95 on => {
96 type => 'Operator',
97 op => '=',
98 args => [
99 {
100 type => 'Identifier',
101 element1 => 'foo',
102 element2 => 'col1',
103 },
104 {
105 type => 'Identifier',
106 element1 => 'bar',
107 element2 => 'col2',
108 },
109 ],
110 },
111 },
112 }
113
9c604aeb 114=item SELECT * FROM foo WHERE name = 'John'
115
116 {
117 type => 'select',
118 ast_version => 0.0001,
119 select => [
120 {
121 type => 'SelectComponent',
122 value => {
4f6e8987 123 type => 'Identifier',
124 element1 => '*',
9c604aeb 125 },
126 },
127 ],
128 tables => {
129 type => 'TableIdentifier',
130 value => {
131 type => 'Identifier',
132 element1 => 'foo',
133 },
134 },
135 where => {
136 type => 'Operator',
137 op => '=',
138 args => [
139 {
140 type => 'Identifier',
141 element1 => 'name',
142 },
143 {
144 type => 'Value',
145 subtype => 'String',
146 element1 => 'John',
147 },
148 ],
4f6e8987 149 },
9c604aeb 150 }
151
4f6e8987 152=item SELECT COUNT(*) FROM foo WHERE name = 'John' AND ( title = 'Mr' OR abbrev = 'Dr' )
153
154 {
155 type => 'select',
156 ast_version => 0.0001,
157 select => [
158 {
159 type => 'SelectComponent',
160 value => {
161 type => 'Identifier',
162 element1 => '*',
163 },
164 },
165 ],
166 tables => {
167 type => 'TableIdentifier',
168 value => {
169 type => 'Identifier',
170 element1 => 'foo',
171 },
172 },
173 where => {
174 type => 'Operator',
175 op => 'AND',
176 args => [
177 {
178 type => 'Operator',
179 op => '=',
180 args => [
181 {
182 type => 'Identifier',
183 element1 => 'name',
184 },
185 {
186 type => 'Value',
187 subtype => 'String',
188 element1 => 'John',
189 },
190 ],
191 },
192 {
3d8ddf0b 193 type => 'Operator',
194 op => 'OR',
4f6e8987 195 args => [
196 {
197 type => 'Operator',
3d8ddf0b 198 op => '=',
199 args => [
200 {
201 type => 'Identifier',
202 element1 => 'title',
203 },
204 {
205 type => 'Value',
206 subtype => 'String',
207 element1 => 'Mr',
208 },
209 ],
210 },
211 {
212 type => 'Operator',
213 op => '=',
4f6e8987 214 args => [
215 {
3d8ddf0b 216 type => 'Identifier',
217 element1 => 'abbrev',
4f6e8987 218 },
219 {
3d8ddf0b 220 type => 'Value',
221 subtype => 'String',
222 element1 => 'Dr',
4f6e8987 223 },
224 ],
225 },
226 ],
227 },
228 ],
229 },
230 }
231
3d8ddf0b 232=item SELECT COUNT(*) FROM foo WHERE ( name = 'John' AND title = 'Mr' ) OR abbrev = 'Dr'
233
234 {
235 type => 'select',
236 ast_version => 0.0001,
237 select => [
238 {
239 type => 'SelectComponent',
240 value => {
241 type => 'Identifier',
242 element1 => '*',
243 },
244 },
245 ],
246 tables => {
247 type => 'TableIdentifier',
248 value => {
249 type => 'Identifier',
250 element1 => 'foo',
251 },
252 },
253 where => {
254 type => 'Operator',
255 op => 'OR',
256 args => [
257 {
258 type => 'Operator',
259 op => 'AND',
260 args => [
261 {
262 type => 'Operator',
263 op => '=',
264 args => [
265 {
266 type => 'Identifier',
267 element1 => 'name',
268 },
269 {
270 type => 'Value',
271 subtype => 'String',
272 element1 => 'John',
273 },
274 ],
275 },
276 {
277 type => 'Operator',
278 op => '=',
279 args => [
280 {
281 type => 'Identifier',
282 element1 => 'title',
283 },
284 {
285 type => 'Value',
286 subtype => 'String',
287 element1 => 'Mr',
288 },
289 ],
290 },
291 ],
292 },
293 {
294 type => 'Operator',
295 op => '=',
296 args => [
297 {
298 type => 'Identifier',
299 element1 => 'abbrev',
300 },
301 {
302 type => 'Value',
303 subtype => 'String',
304 element1 => 'Dr',
305 },
306 ],
307 },
308 ],
309 },
310 }
311
37f2cc3f 312=back
313
314=head1 AUTHORS
315
316robkinyon: Rob Kinyon C<< <rkinyon@cpan.org> >>
317
318=head1 LICENSE
319
320You may distribute this code under the same terms as Perl itself.
321
322=cut