d56f157ecd7d0276738646e07f5243a0cc7960ff
[dbsrgits/SQL-Abstract-2.0-ish.git] / lib / SQL / Abstract / Manual / Examples.pod
1 =head1 NAME
2
3 SQL::Abstract::Manual::Specification
4
5 =head1 DESCRIPTION
6
7 These are the examples for the AST
8
9 =head1 EXAMPLES
10
11 The following are example SQL statements and the AST that would represent each
12 one. 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
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 => {
123                   type     => 'Identifier',
124                   element1 => '*',
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           ],
149       },
150   }
151
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               {
193                   type => 'Operator',
194                   op   => 'OR',
195                   args => [
196                       {
197                           type => 'Operator',
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   => '=',
214                           args => [
215                               {
216                                   type     => 'Identifier',
217                                   element1 => 'abbrev',
218                               },
219                               {
220                                   type     => 'Value',
221                                   subtype  => 'String',
222                                   element1 => 'Dr',
223                               },
224                           ],
225                       },
226                   ],
227               },
228           ],
229       },
230   }
231  
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
312 =back
313
314 =head1 AUTHORS
315
316 robkinyon: Rob Kinyon C<< <rkinyon@cpan.org> >>
317
318 =head1 LICENSE
319
320 You may distribute this code under the same terms as Perl itself.
321
322 =cut