=head3 Value
-A Value is a Perl scalar. Depending on the type, a Visitor may be able to make
-certain decisions.
+A Value is a Perl scalar. Depending on the subtype, a Visitor may be able to
+make certain decisions. The following are the minimally-valid subtypes:
=over 4
{
type => 'Operator',
op => String,
- args => ExpressionList,
+ args => [
+ Expression,
+ ],
}
Operators have a cardinality, or expected number of arguments. Some operators,
An Expression is a meta-syntactic unit. An "Expression" unit will never appear
within the AST. It acts as a junction.
-=head3 ExpressionList
-
-An ExpressionList is a list of Expressions, generally separated by commas
-(though other separators may be appropriate at times or for different SQL
-dialects). An null separator may also be used.
-
-The hash for an ExpressionList is as follows:
-
- {
- type => 'ExpressionList',
- separator => ',',
- elements => Array of Expressions,
- }
-
-An ExpressionList is always rendered in SQL with parentheses around it.
-
=head3 Nesting
There is no specific operator or nodetype for nesting. Instead, nesting is
This corresponds to the SET clause in an INSERT or UPDATE statement.
-A set clause is composed as follows:
+A set clause unit is an array of one or more SetComponent units.
- SetComponent := Identifier = Expression
+The hash for SetComponent unit is composed as follows:
- SetComponent [ , SetComponent ]*
+ {
+ type => 'SetComponent',
+ col => Identifier,
+ value => Expression,
+ }
=head3 columns
This corresponds to the optional list of columns in an INSERT statement.
-A columns clause is an IdentifierList and the unit is composed as follows:
-
- columns => [
- Identifier,
- [ Identifier, ]*
- ],
+A columns clause unit is an array of one or more Identifier units.
=head3 values
This corresponds to the VALUES clause in an INSERT statement.
-A values clause is an ExpressionList and the unit is composed as follows:
-
- values => [
- Expression,
- [ Expression, ]*
- ],
+A values clause unit is an array of one or more Expression units.
If there is a columns clause, the number of entries in the values clause must be
equal to the number of entries in the columns clause.
The hash for a rows clause is composed as follows:
{
- type => 'Rows',
start => Number,
count => Number,
}
The hash for a for clause is composed as follows:
{
- start_with => ExpressionList,
+ start_with => [
+ Expression,
+ ],
connect_by => {
option => '< PRIOR | NOCYCLE >'
- cond => ExpressionList,
+ cond => [
+ Expression,
+ ],
},
order_siblings => orderby-clause,
}