ast_version => 0.0001,
select => [
{
- type => 'SelectComponent',
- value => {
- type => 'Value',
- subtype => 'Number',
- value => 1,
- },
+ type => 'Value',
+ subtype => 'Number',
+ value => 1,
},
],
}
ast_version => 0.0001,
select => [
{
- type => 'SelectComponent',
+ type => 'Alias',
value => {
type => 'Function',
function => 'NOW',
},
- as => {
- type => 'Identifier',
- element1 => 'time',
- },
+ as => 'time',
},
],
tables => {
- type => 'TableIdentifier',
+ type => 'Alias',
value => {
type => 'Identifier',
element1 => 'dual',
ast_version => 0.0001,
select => [
{
- type => 'SelectComponent',
- value => {
- type => 'Value',
- subtype => 'Number',
- value => 1,
- },
+ type => 'Value',
+ subtype => 'Number',
+ value => 1,
},
],
tables => {
op => 'LEFT OUTER',
args => [
{
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
{
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'bar',
- },
+ type => 'Identifier',
+ element1 => 'bar',
},
],
on => {
ast_version => 0.0001,
select => [
{
- type => 'SelectComponent',
- value => {
- type => 'Identifier',
- element1 => '*',
- },
+ type => 'Identifier',
+ element1 => '*',
},
],
tables => {
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
where => {
type => 'Operator',
ast_version => 0.0001,
select => [
{
- type => 'SelectComponent',
- value => {
- type => 'Operator',
- op => 'COUNT',
- args => [
- {
- type => 'Identifier',
- element1 => '*',
- },
- ],
- },
+ type => 'Operator',
+ op => 'COUNT',
+ args => [
+ {
+ type => 'Identifier',
+ element1 => '*',
+ },
+ ],
},
],
tables => {
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
where => {
type => 'Operator',
ast_version => 0.0001,
select => [
{
- type => 'SelectComponent',
- value => {
- type => 'Operator',
- op => 'COUNT',
- args => [
- {
- type => 'Operator',
- op => 'DISTINCT',
- args => [
- {
- type => 'Identifier',
- element1 => '*',
- },
- ],
- },
- ],
- },
+ type => 'Operator',
+ op => 'COUNT',
+ args => [
+ {
+ type => 'Operator',
+ op => 'DISTINCT',
+ args => [
+ {
+ type => 'Identifier',
+ element1 => '*',
+ },
+ ],
+ },
+ ],
},
],
tables => {
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
where => {
type => 'Operator',
ast_version => 0.0001,
select => [
{
- type => 'SelectComponent',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
{
- type => 'SelectComponent',
- value => {
- type => 'Identifier',
- elements => 'bar',
- },
+ type => 'Identifier',
+ elements => 'bar',
},
{
- type => 'SelectComponent',
- value => {
- type => 'Identifier',
- element1 => 'baz',
- },
+ type => 'Identifier',
+ element1 => 'baz',
},
],
tables => {
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
orderby => [
{
type => 'update',
ast_version => 0.0001,
tables => {
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
set => [
{
type => 'insert',
ast_version => 0.0001,
tables => {
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
columns => [
{
type => 'delete',
ast_version => 0.0001,
tables => {
- type => 'TableIdentifier',
- value => {
- type => 'Identifier',
- element1 => 'foo',
- },
+ type => 'Identifier',
+ element1 => 'foo',
},
where => {
type => 'Operator',
Subqueries, when expressed in SQL, must be bounded by parentheses.
+=head3 Alias
+
+An Alias is any place where the construct "X as Y" appears. While the "as Y" is
+often optional, the AST will make it required.
+
+The hash will be structured as follows:
+
+ {
+ type => 'Alias',
+ value => Expression,
+ as => String,
+ }
+
=head3 Expression
An Expression can be any one of the following:
=item * Subquery
+=item * Alias
+
=back
An Expression is a meta-syntactic unit. An "Expression" unit will never appear
This corresponds to the SELECT clause of a SELECT statement.
-A select clause unit is an array of one or more SelectComponent units.
-
-The hash for a SelectComponent unit is composed as follows:
-
- {
- type => 'SelectComponent',
- value => Expression,
- as => String,
- }
-
-The 'as' component is optional. Visitors may choose to make it required in
-certain situations.
+A select clause unit is an array of one or more Expressions.
=head3 tables
all of them and it is up to the Visitor object constructing the actual SQL to
validate and/or use what is provided as appropriate.
-A TableJoin is a junction of the following elements:
-
-=over 4
-
-=item * TableIdentifier
-
-=item * Operator
-
-=back
-
-The hash for a TableIdentifier will be composed as follows:
-
- # TableIdentifier
- {
- type => 'TableIdentifier',
- value => Expression,
- as => String,
- }
-
-The value should be either an Identifier or a SubQuery.
+A tables clause is an Expression.
The hash for an Operator within a tables clause will be composed as follows:
=item * sproc unit
+=item * UNION, UNION ALL, and MINUS
+
+=item * INSERT INTO <table> SELECT ...
+
+=item * INSERT INTO <table> SET ...
+
=back
=head1 AUTHORS