diff --git a/pmd-plsql/etc/grammar/PLSQL.jjt b/pmd-plsql/etc/grammar/PLSQL.jjt index 3dd03c9905..ef0d356328 100644 --- a/pmd-plsql/etc/grammar/PLSQL.jjt +++ b/pmd-plsql/etc/grammar/PLSQL.jjt @@ -2508,7 +2508,7 @@ ASTInsertIntoClause InsertIntoClause() : {} { DMLTableExpressionClause() - [ LOOKAHEAD(2) TableAlias() ] + [ LOOKAHEAD(2, {!getToken(1).getImage().equalsIgnoreCase("LOG")}) TableAlias() ] [ LOOKAHEAD(2) "(" [ LOOKAHEAD(2) TableName() "." ] Column() @@ -2533,18 +2533,19 @@ ASTMultiTableInsert MultiTableInsert() : {} { ( - LOOKAHEAD(2) ( InsertIntoClause() [ ValuesClause() ] )+ Subquery() + LOOKAHEAD(2) ( InsertIntoClause() [ ValuesClause() ] [ ErrorLoggingClause() ] )+ | ConditionalInsertClause() ) + Subquery() { return jjtThis; } } ASTConditionalInsertClause ConditionalInsertClause() : {} { - [ | KEYWORD("FIRST") ] ( Condition() ( InsertIntoClause() [ ValuesClause() ] )+ )+ - [ ( InsertIntoClause() [ ValuesClause() ] )+ ] + [ | KEYWORD("FIRST") ] ( Condition() ( InsertIntoClause() [ ValuesClause() ] [ ErrorLoggingClause() ] )+ )+ + [ ( InsertIntoClause() [ ValuesClause() ] [ ErrorLoggingClause() ] )+ ] { return jjtThis; } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.pls index 580a396391..7e9c134526 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.pls @@ -4,7 +4,6 @@ create or replace procedure test as begin - -- https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/INSERT.html#GUID-903F8043-0254-4EE9-ACC1-CB8AC0AF3423__BCEGDJDJ INSERT INTO raises SELECT employee_id, salary*1.1 FROM employees @@ -25,5 +24,40 @@ begin -- without a table alias delete from test_table log errors into err$_test_table reject limit unlimited; + + -- https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/INSERT.html#GUID-903F8043-0254-4EE9-ACC1-CB8AC0AF3423__BCEGDJDJ + -- multi-insert with conditional and optional error logging + INSERT ALL + WHEN order_total <= 100000 THEN + INTO small_orders LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10 + WHEN order_total > 1000000 AND order_total <= 200000 THEN + INTO medium_orders LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10 + WHEN order_total > 200000 THEN + INTO large_orders + ELSE + INTO other_orders LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10 + SELECT order_id, order_total, sales_rep_id, customer_id + FROM orders; + -- multi-insert with optional error logging + INSERT ALL + INTO sales (prod_id, cust_id, time_id, amount) + VALUES (product_id, customer_id, weekly_start_date, sales_sun) + LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10 + INTO sales (prod_id, cust_id, time_id, amount) + VALUES (product_id, customer_id, weekly_start_date+1, sales_mon) + LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10 + INTO sales (prod_id, cust_id, time_id, amount) + VALUES (product_id, customer_id, weekly_start_date+2, sales_tue) + INTO sales (prod_id, cust_id, time_id, amount) + VALUES (product_id, customer_id, weekly_start_date+3, sales_wed) + INTO sales (prod_id, cust_id, time_id, amount) + VALUES (product_id, customer_id, weekly_start_date+4, sales_thu) + INTO sales (prod_id, cust_id, time_id, amount) + VALUES (product_id, customer_id, weekly_start_date+5, sales_fri) + INTO sales (prod_id, cust_id, time_id, amount) + VALUES (product_id, customer_id, weekly_start_date+6, sales_sat) + SELECT product_id, customer_id, weekly_start_date, sales_sun, + sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat + FROM sales_input_table; end; / diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.txt b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.txt index 59df3c8ab5..634b71a7d4 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.txt +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ErrorLoggingClause2779.txt @@ -137,12 +137,462 @@ | +- ErrorLoggingClause[@CanonicalImage = null] | +- TableName[@CanonicalImage = "ERR$_TEST_TABLE", @Image = "err$_test_table"] | +- ID[@CanonicalImage = "ERR$_TEST_TABLE", @Image = "err$_test_table"] + +- Statement[@CanonicalImage = null] + | +- UnlabelledStatement[@CanonicalImage = null] + | +- DeleteStatement[@CanonicalImage = null] + | +- TableReference[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "TEST_TABLE", @Image = "test_table"] + | | +- ID[@CanonicalImage = "TEST_TABLE", @Image = "test_table"] + | +- ErrorLoggingClause[@CanonicalImage = null] + | +- TableName[@CanonicalImage = "ERR$_TEST_TABLE", @Image = "err$_test_table"] + | +- ID[@CanonicalImage = "ERR$_TEST_TABLE", @Image = "err$_test_table"] + +- Statement[@CanonicalImage = null] + | +- UnlabelledStatement[@CanonicalImage = null] + | +- InsertStatement[@CanonicalImage = null] + | +- MultiTableInsert[@CanonicalImage = null] + | +- ConditionalInsertClause[@CanonicalImage = null] + | | +- Condition[@CanonicalImage = null] + | | | +- CompoundCondition[@CanonicalImage = null, @Type = null] + | | | +- ComparisonCondition[@CanonicalImage = null, @Operator = "<="] + | | | +- SqlExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- PrimaryPrefix[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total", @SelfModifier = false] + | | | | +- SimpleExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- Column[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- ID[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | +- SqlExpression[@CanonicalImage = "100000", @Image = "100000"] + | | | +- PrimaryPrefix[@CanonicalImage = "100000", @Image = "100000", @SelfModifier = false] + | | | +- Literal[@CanonicalImage = "100000", @Image = "100000"] + | | | +- NumericLiteral[@CanonicalImage = "100000", @Image = "100000"] + | | +- InsertIntoClause[@CanonicalImage = null] + | | | +- DMLTableExpressionClause[@CanonicalImage = null] + | | | +- TableName[@CanonicalImage = "SMALL_ORDERS", @Image = "small_orders"] + | | | +- ID[@CanonicalImage = "SMALL_ORDERS", @Image = "small_orders"] + | | +- ErrorLoggingClause[@CanonicalImage = null] + | | | +- TableName[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | | | +- ID[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | | +- SqlExpression[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | | | +- PrimaryPrefix[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @SelfModifier = false] + | | | | +- Literal[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | | | +- StringLiteral[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @String = "my_bad"] + | | | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"] + | | +- Condition[@CanonicalImage = null] + | | | +- CompoundCondition[@CanonicalImage = null, @Type = "AND"] + | | | +- ComparisonCondition[@CanonicalImage = null, @Operator = ">"] + | | | | +- SqlExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | | +- PrimaryPrefix[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total", @SelfModifier = false] + | | | | | +- SimpleExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | | +- Column[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | | +- ID[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- SqlExpression[@CanonicalImage = "1000000", @Image = "1000000"] + | | | | +- PrimaryPrefix[@CanonicalImage = "1000000", @Image = "1000000", @SelfModifier = false] + | | | | +- Literal[@CanonicalImage = "1000000", @Image = "1000000"] + | | | | +- NumericLiteral[@CanonicalImage = "1000000", @Image = "1000000"] + | | | +- Condition[@CanonicalImage = null] + | | | +- CompoundCondition[@CanonicalImage = null, @Type = null] + | | | +- ComparisonCondition[@CanonicalImage = null, @Operator = "<="] + | | | +- SqlExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- PrimaryPrefix[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total", @SelfModifier = false] + | | | | +- SimpleExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- Column[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- ID[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | +- SqlExpression[@CanonicalImage = "200000", @Image = "200000"] + | | | +- PrimaryPrefix[@CanonicalImage = "200000", @Image = "200000", @SelfModifier = false] + | | | +- Literal[@CanonicalImage = "200000", @Image = "200000"] + | | | +- NumericLiteral[@CanonicalImage = "200000", @Image = "200000"] + | | +- InsertIntoClause[@CanonicalImage = null] + | | | +- DMLTableExpressionClause[@CanonicalImage = null] + | | | +- TableName[@CanonicalImage = "MEDIUM_ORDERS", @Image = "medium_orders"] + | | | +- ID[@CanonicalImage = "MEDIUM_ORDERS", @Image = "medium_orders"] + | | +- ErrorLoggingClause[@CanonicalImage = null] + | | | +- TableName[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | | | +- ID[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | | +- SqlExpression[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | | | +- PrimaryPrefix[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @SelfModifier = false] + | | | | +- Literal[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | | | +- StringLiteral[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @String = "my_bad"] + | | | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"] + | | +- Condition[@CanonicalImage = null] + | | | +- CompoundCondition[@CanonicalImage = null, @Type = null] + | | | +- ComparisonCondition[@CanonicalImage = null, @Operator = ">"] + | | | +- SqlExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- PrimaryPrefix[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total", @SelfModifier = false] + | | | | +- SimpleExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- Column[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | | +- ID[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | +- SqlExpression[@CanonicalImage = "200000", @Image = "200000"] + | | | +- PrimaryPrefix[@CanonicalImage = "200000", @Image = "200000", @SelfModifier = false] + | | | +- Literal[@CanonicalImage = "200000", @Image = "200000"] + | | | +- NumericLiteral[@CanonicalImage = "200000", @Image = "200000"] + | | +- InsertIntoClause[@CanonicalImage = null] + | | | +- DMLTableExpressionClause[@CanonicalImage = null] + | | | +- TableName[@CanonicalImage = "LARGE_ORDERS", @Image = "large_orders"] + | | | +- ID[@CanonicalImage = "LARGE_ORDERS", @Image = "large_orders"] + | | +- InsertIntoClause[@CanonicalImage = null] + | | | +- DMLTableExpressionClause[@CanonicalImage = null] + | | | +- TableName[@CanonicalImage = "OTHER_ORDERS", @Image = "other_orders"] + | | | +- ID[@CanonicalImage = "OTHER_ORDERS", @Image = "other_orders"] + | | +- ErrorLoggingClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | | +- ID[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | +- SqlExpression[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | | +- PrimaryPrefix[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @SelfModifier = false] + | | | +- Literal[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | | +- StringLiteral[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @String = "my_bad"] + | | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"] + | +- QueryBlock[@All = false, @CanonicalImage = null, @Distinct = false, @Unique = false] + | +- SelectList[@CanonicalImage = null] + | | +- SqlExpression[@CanonicalImage = "ORDER_ID", @Image = "order_id"] + | | | +- PrimaryPrefix[@CanonicalImage = "ORDER_ID", @Image = "order_id", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "ORDER_ID", @Image = "order_id"] + | | | +- Column[@CanonicalImage = "ORDER_ID", @Image = "order_id"] + | | | +- ID[@CanonicalImage = "ORDER_ID", @Image = "order_id"] + | | +- SqlExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | +- PrimaryPrefix[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | +- Column[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | | +- ID[@CanonicalImage = "ORDER_TOTAL", @Image = "order_total"] + | | +- SqlExpression[@CanonicalImage = "SALES_REP_ID", @Image = "sales_rep_id"] + | | | +- PrimaryPrefix[@CanonicalImage = "SALES_REP_ID", @Image = "sales_rep_id", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "SALES_REP_ID", @Image = "sales_rep_id"] + | | | +- Column[@CanonicalImage = "SALES_REP_ID", @Image = "sales_rep_id"] + | | | +- ID[@CanonicalImage = "SALES_REP_ID", @Image = "sales_rep_id"] + | | +- SqlExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- FromClause[@CanonicalImage = null] + | +- TableReference[@CanonicalImage = null] + | +- TableName[@CanonicalImage = "ORDERS", @Image = "orders"] + | +- ID[@CanonicalImage = "ORDERS", @Image = "orders"] +- Statement[@CanonicalImage = null] +- UnlabelledStatement[@CanonicalImage = null] - +- DeleteStatement[@CanonicalImage = null] - +- TableReference[@CanonicalImage = null] - | +- TableName[@CanonicalImage = "TEST_TABLE", @Image = "test_table"] - | +- ID[@CanonicalImage = "TEST_TABLE", @Image = "test_table"] - +- ErrorLoggingClause[@CanonicalImage = null] - +- TableName[@CanonicalImage = "ERR$_TEST_TABLE", @Image = "err$_test_table"] - +- ID[@CanonicalImage = "ERR$_TEST_TABLE", @Image = "err$_test_table"] + +- InsertStatement[@CanonicalImage = null] + +- MultiTableInsert[@CanonicalImage = null] + +- InsertIntoClause[@CanonicalImage = null] + | +- DMLTableExpressionClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "SALES", @Image = "sales"] + | | +- ID[@CanonicalImage = "SALES", @Image = "sales"] + | +- Column[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | | +- ID[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | +- Column[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | | +- ID[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | +- Column[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | | +- ID[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | +- Column[@CanonicalImage = "AMOUNT", @Image = "amount"] + | +- ID[@CanonicalImage = "AMOUNT", @Image = "amount"] + +- ValuesClause[@CanonicalImage = null] + | +- Expression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- Expression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- Expression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | +- Expression[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_SUN", @Image = "sales_sun", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + | +- Column[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + | +- ID[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + +- ErrorLoggingClause[@CanonicalImage = null] + | +- TableName[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | +- ID[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | +- SqlExpression[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | +- PrimaryPrefix[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | +- StringLiteral[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @String = "my_bad"] + | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"] + +- InsertIntoClause[@CanonicalImage = null] + | +- DMLTableExpressionClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "SALES", @Image = "sales"] + | | +- ID[@CanonicalImage = "SALES", @Image = "sales"] + | +- Column[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | | +- ID[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | +- Column[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | | +- ID[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | +- Column[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | | +- ID[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | +- Column[@CanonicalImage = "AMOUNT", @Image = "amount"] + | +- ID[@CanonicalImage = "AMOUNT", @Image = "amount"] + +- ValuesClause[@CanonicalImage = null] + | +- Expression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- Expression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- Expression[@CanonicalImage = "WEEKLY_START_DATE + 1", @Image = "weekly_start_date + 1"] + | | +- AdditiveExpression[@CanonicalImage = "WEEKLY_START_DATE + 1", @Image = "weekly_start_date + 1"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "1", @Image = "1", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "1", @Image = "1"] + | | +- NumericLiteral[@CanonicalImage = "1", @Image = "1"] + | +- Expression[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_MON", @Image = "sales_mon", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + | +- Column[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + | +- ID[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + +- ErrorLoggingClause[@CanonicalImage = null] + | +- TableName[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | | +- ID[@CanonicalImage = "ERRLOG", @Image = "errlog"] + | +- SqlExpression[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | +- PrimaryPrefix[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'"] + | | +- StringLiteral[@CanonicalImage = "\'MY_BAD\'", @Image = "\'my_bad\'", @String = "my_bad"] + | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"] + +- InsertIntoClause[@CanonicalImage = null] + | +- DMLTableExpressionClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "SALES", @Image = "sales"] + | | +- ID[@CanonicalImage = "SALES", @Image = "sales"] + | +- Column[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | | +- ID[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | +- Column[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | | +- ID[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | +- Column[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | | +- ID[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | +- Column[@CanonicalImage = "AMOUNT", @Image = "amount"] + | +- ID[@CanonicalImage = "AMOUNT", @Image = "amount"] + +- ValuesClause[@CanonicalImage = null] + | +- Expression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- Expression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- Expression[@CanonicalImage = "WEEKLY_START_DATE + 2", @Image = "weekly_start_date + 2"] + | | +- AdditiveExpression[@CanonicalImage = "WEEKLY_START_DATE + 2", @Image = "weekly_start_date + 2"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "2", @Image = "2", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "2", @Image = "2"] + | | +- NumericLiteral[@CanonicalImage = "2", @Image = "2"] + | +- Expression[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_TUE", @Image = "sales_tue", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + | +- Column[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + | +- ID[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + +- InsertIntoClause[@CanonicalImage = null] + | +- DMLTableExpressionClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "SALES", @Image = "sales"] + | | +- ID[@CanonicalImage = "SALES", @Image = "sales"] + | +- Column[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | | +- ID[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | +- Column[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | | +- ID[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | +- Column[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | | +- ID[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | +- Column[@CanonicalImage = "AMOUNT", @Image = "amount"] + | +- ID[@CanonicalImage = "AMOUNT", @Image = "amount"] + +- ValuesClause[@CanonicalImage = null] + | +- Expression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- Expression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- Expression[@CanonicalImage = "WEEKLY_START_DATE + 3", @Image = "weekly_start_date + 3"] + | | +- AdditiveExpression[@CanonicalImage = "WEEKLY_START_DATE + 3", @Image = "weekly_start_date + 3"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "3", @Image = "3", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "3", @Image = "3"] + | | +- NumericLiteral[@CanonicalImage = "3", @Image = "3"] + | +- Expression[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_WED", @Image = "sales_wed", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + | +- Column[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + | +- ID[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + +- InsertIntoClause[@CanonicalImage = null] + | +- DMLTableExpressionClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "SALES", @Image = "sales"] + | | +- ID[@CanonicalImage = "SALES", @Image = "sales"] + | +- Column[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | | +- ID[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | +- Column[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | | +- ID[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | +- Column[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | | +- ID[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | +- Column[@CanonicalImage = "AMOUNT", @Image = "amount"] + | +- ID[@CanonicalImage = "AMOUNT", @Image = "amount"] + +- ValuesClause[@CanonicalImage = null] + | +- Expression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- Expression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- Expression[@CanonicalImage = "WEEKLY_START_DATE + 4", @Image = "weekly_start_date + 4"] + | | +- AdditiveExpression[@CanonicalImage = "WEEKLY_START_DATE + 4", @Image = "weekly_start_date + 4"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "4", @Image = "4", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "4", @Image = "4"] + | | +- NumericLiteral[@CanonicalImage = "4", @Image = "4"] + | +- Expression[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_THU", @Image = "sales_thu", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + | +- Column[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + | +- ID[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + +- InsertIntoClause[@CanonicalImage = null] + | +- DMLTableExpressionClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "SALES", @Image = "sales"] + | | +- ID[@CanonicalImage = "SALES", @Image = "sales"] + | +- Column[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | | +- ID[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | +- Column[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | | +- ID[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | +- Column[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | | +- ID[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | +- Column[@CanonicalImage = "AMOUNT", @Image = "amount"] + | +- ID[@CanonicalImage = "AMOUNT", @Image = "amount"] + +- ValuesClause[@CanonicalImage = null] + | +- Expression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- Expression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- Expression[@CanonicalImage = "WEEKLY_START_DATE + 5", @Image = "weekly_start_date + 5"] + | | +- AdditiveExpression[@CanonicalImage = "WEEKLY_START_DATE + 5", @Image = "weekly_start_date + 5"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "5", @Image = "5", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "5", @Image = "5"] + | | +- NumericLiteral[@CanonicalImage = "5", @Image = "5"] + | +- Expression[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_FRI", @Image = "sales_fri", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + | +- Column[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + | +- ID[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + +- InsertIntoClause[@CanonicalImage = null] + | +- DMLTableExpressionClause[@CanonicalImage = null] + | | +- TableName[@CanonicalImage = "SALES", @Image = "sales"] + | | +- ID[@CanonicalImage = "SALES", @Image = "sales"] + | +- Column[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | | +- ID[@CanonicalImage = "PROD_ID", @Image = "prod_id"] + | +- Column[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | | +- ID[@CanonicalImage = "CUST_ID", @Image = "cust_id"] + | +- Column[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | | +- ID[@CanonicalImage = "TIME_ID", @Image = "time_id"] + | +- Column[@CanonicalImage = "AMOUNT", @Image = "amount"] + | +- ID[@CanonicalImage = "AMOUNT", @Image = "amount"] + +- ValuesClause[@CanonicalImage = null] + | +- Expression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- Expression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- Expression[@CanonicalImage = "WEEKLY_START_DATE + 6", @Image = "weekly_start_date + 6"] + | | +- AdditiveExpression[@CanonicalImage = "WEEKLY_START_DATE + 6", @Image = "weekly_start_date + 6"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "6", @Image = "6", @SelfModifier = false] + | | +- Literal[@CanonicalImage = "6", @Image = "6"] + | | +- NumericLiteral[@CanonicalImage = "6", @Image = "6"] + | +- Expression[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_SAT", @Image = "sales_sat", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + | +- Column[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + | +- ID[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + +- QueryBlock[@All = false, @CanonicalImage = null, @Distinct = false, @Unique = false] + +- SelectList[@CanonicalImage = null] + | +- SqlExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- PrimaryPrefix[@CanonicalImage = "PRODUCT_ID", @Image = "product_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- Column[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | | +- ID[@CanonicalImage = "PRODUCT_ID", @Image = "product_id"] + | +- SqlExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- PrimaryPrefix[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- Column[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | | +- ID[@CanonicalImage = "CUSTOMER_ID", @Image = "customer_id"] + | +- SqlExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- PrimaryPrefix[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- Column[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | | +- ID[@CanonicalImage = "WEEKLY_START_DATE", @Image = "weekly_start_date"] + | +- SqlExpression[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + | | +- PrimaryPrefix[@CanonicalImage = "SALES_SUN", @Image = "sales_sun", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + | | +- Column[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + | | +- ID[@CanonicalImage = "SALES_SUN", @Image = "sales_sun"] + | +- SqlExpression[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + | | +- PrimaryPrefix[@CanonicalImage = "SALES_MON", @Image = "sales_mon", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + | | +- Column[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + | | +- ID[@CanonicalImage = "SALES_MON", @Image = "sales_mon"] + | +- SqlExpression[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + | | +- PrimaryPrefix[@CanonicalImage = "SALES_TUE", @Image = "sales_tue", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + | | +- Column[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + | | +- ID[@CanonicalImage = "SALES_TUE", @Image = "sales_tue"] + | +- SqlExpression[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + | | +- PrimaryPrefix[@CanonicalImage = "SALES_WED", @Image = "sales_wed", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + | | +- Column[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + | | +- ID[@CanonicalImage = "SALES_WED", @Image = "sales_wed"] + | +- SqlExpression[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + | | +- PrimaryPrefix[@CanonicalImage = "SALES_THU", @Image = "sales_thu", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + | | +- Column[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + | | +- ID[@CanonicalImage = "SALES_THU", @Image = "sales_thu"] + | +- SqlExpression[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + | | +- PrimaryPrefix[@CanonicalImage = "SALES_FRI", @Image = "sales_fri", @SelfModifier = false] + | | +- SimpleExpression[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + | | +- Column[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + | | +- ID[@CanonicalImage = "SALES_FRI", @Image = "sales_fri"] + | +- SqlExpression[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + | +- PrimaryPrefix[@CanonicalImage = "SALES_SAT", @Image = "sales_sat", @SelfModifier = false] + | +- SimpleExpression[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + | +- Column[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + | +- ID[@CanonicalImage = "SALES_SAT", @Image = "sales_sat"] + +- FromClause[@CanonicalImage = null] + +- TableReference[@CanonicalImage = null] + +- TableName[@CanonicalImage = "SALES_INPUT_TABLE", @Image = "sales_input_table"] + +- ID[@CanonicalImage = "SALES_INPUT_TABLE", @Image = "sales_input_table"]