1717include "std.arbori"
1818
1919/**
20- * Lightweight Formatter for SQL Developer and SQLcl, version 22.1.0-SNAPSHOT
20+ * Lightweight Formatter for SQL Developer and SQLcl, version 22.2.0
2121 * The idea is to keep the code formatted "as is" and apply chosen formatting rules only.
2222 *
2323 * The Arbori program is processed from top to bottom.
@@ -117,6 +117,9 @@ skipWhiteSpaceBeforeNode:
117117 var doNotCallCallbackFunction;
118118}
119119
120+ -- In SQLDev 22.2.0 the formatter introduced a check that looks for "order_by_clause___0" in the Arbori program.
121+ -- There is no need to define a query that uses it. Using it in the comment is good enough.
122+
120123-- ====================================================================================================================
121124-- Phase 1 - Initialization and pre-processing.
122125-- ====================================================================================================================
@@ -1046,7 +1049,7 @@ a13_nodes:
10461049 | [node) function_expression
10471050 | [node) dotted_name
10481051 | [node) dotted_expr
1049- | [node) column[4,12)
1052+ | [node) column___0
10501053 | [node) compound_expression & ![node^) compound_expression
10511054 | [node) pls_expr & ![node^) pls_expr
10521055 | [node) "expr_list" & ![node^) "expr_list"
@@ -1228,8 +1231,11 @@ a5_brackets:
12281231;
12291232
12301233a5_indicator_variable:
1231- [node) bind_var
1232- & [node-1) bind_var
1234+ [node) identifier
1235+ & [node-1) ':'
1236+ & [node-2) identifier
1237+ & [node-3) ':'
1238+ & [node^) bind_var
12331239;
12341240
12351241a5_star_star:
@@ -1293,12 +1299,11 @@ a6_percent:
12931299;
12941300
12951301a6_brackets:
1296- [node) '['
1302+ [node) '['
12971303;
12981304
12991305a6_host_variable:
1300- [node) ':'
1301- & [node^) bind_var
1306+ [node^) bind_var
13021307;
13031308
13041309a6_pragma_exception_init:
@@ -1745,8 +1750,8 @@ a15_various:
17451750 [node) insert_into_clause & [node^^) multi_table_insert
17461751 | [node) subquery & [node^) multi_table_insert
17471752 | [node) subprg_property
1748- | [node) ')' & [node^) create_view#[114,130)
1749- | [node) ')' & [node^) create_materialized_view[33,79)
1753+ | [node) ')' & [node^) create_view#___0
1754+ | [node) ')' & [node^) create_materialized_view2___0
17501755;
17511756
17521757a15_subsequent_prm_spec_trailing_comma:
@@ -1769,13 +1774,13 @@ a15_is_or_as:
17691774;
17701775
17711776a15_view_column_alias:
1772- [parent) create_view#[114,130)
1777+ [parent) create_view#___0
17731778 & [node) alias_in_out_constraints
17741779 & parent < node
17751780;
17761781
17771782a15_materialized_view_column_alias:
1778- [parent) create_materialized_view[33,79)
1783+ [parent) create_materialized_view2___0
17791784 & [node) identifier
17801785 & parent < node
17811786;
@@ -2291,7 +2296,7 @@ o10_join_clause_break_keywords:
22912296 & ![keyword-1) 'CROSS'
22922297 & ![keyword-1) 'NATURAL'
22932298 & ![keyword-1) outer_join_type
2294- & ![keyword-1) "inner_cross_join_clause"[26,55)
2299+ & ![keyword-1) "inner_cross_join_clause"___0
22952300 --| [keyword) 'PARTITION'
22962301 | [keyword) 'ON'
22972302 | [keyword) 'USING'
@@ -2360,7 +2365,7 @@ o11_break_on_subqueries:
23602365-- --------------------------------------------------------------------------------------------------------------------
23612366
23622367a16_select:
2363- [parent) subquery
2368+ [parent) query_block
23642369 & (
23652370 [node) 'FROM' & ![node^) expr
23662371 | [node) 'WHERE'
@@ -2772,7 +2777,7 @@ r2_common:
27722777 | [node) field_list & ![node^) field_list
27732778 | [node) fml_part
27742779 | [node) paren_expr_list
2775- | [node) "expr_list" & [node-1) '(' & [node^) in_condition[24,35)
2780+ | [node) "expr_list" & [node-1) '(' & [node^) in_condition___0
27762781 | [node) xmltable
27772782 | [node) json_table
27782783 | [node) JSON_columns_clause
@@ -2796,7 +2801,7 @@ r2_common:
27962801 | [node) analytic_clause & ![node^) over_clause
27972802 | [node) 'RETURN' & [node^) subprg_spec
27982803 | [node-1) 'RETURN' & [node^) stmt
2799- | [node) plsql_declarations & ([node^) with_clause | [node^) with_clause[12,20) )
2804+ | [node) plsql_declarations & ([node^) with_clause | [node^) with_clause___0 )
28002805;
28012806
28022807r2_flowcontrol_condition:
@@ -2813,9 +2818,9 @@ r2_flowcontrol_condition:
28132818;
28142819
28152820r2_case_expression:
2816- [node) simple_case_expression[4,27) #
2821+ [node) simple_case_expression___0 #
28172822 | [node) searched_case_expression#
2818- | [node) expr & [node^) simple_case_expression[4,27) #
2823+ | [node) expr & [node^) simple_case_expression___0 #
28192824 | [node) else_clause & [node^) case_expression
28202825 | [node) expr & [node^) else_clause & [node^^) case_expression
28212826 | [node) expr & [node^) searched_case_expression#
@@ -2833,18 +2838,18 @@ r2_case_expression_plsql:
28332838;
28342839
28352840r2_view:
2836- [node) create_view#[114,130)
2841+ [node) create_view#___0
28372842 | [node) subquery & [node^) create_view#
28382843;
28392844
28402845r2_materialized_view:
2841- [node) create_materialized_view[33,79)
2846+ [node) create_materialized_view2___0
28422847 | [node) subquery & [node^) create_materialized_view
2843- | [node) create_materialized_view[91,136)
2844- | [node) create_materialized_view[136,174)
2848+ | [node) create_materialized_view3___2
2849+ | [node) create_materialized_view3___3
28452850 | [node) create_mv_refresh
28462851 | [node) 'DISABLE' & [node^) create_materialized_view
2847- | [node) create_materialized_view[200,210)
2852+ | [node) create_materialized_view3___0
28482853 | [node) query_rewrite_clause
28492854;
28502855
@@ -2861,7 +2866,7 @@ r2_body:
28612866;
28622867
28632868r2_single_table_insert:
2864- [node) insert_into_clause[13,25)
2869+ [node) insert_into_clause___0
28652870 | [node) par_expr_list
28662871;
28672872
@@ -2880,8 +2885,8 @@ r2_multi_table_insert:
28802885r2_merge_insert_clause:
28812886 [parent) merge_insert_clause
28822887 & (
2883- [node) merge_insert_clause[23,35) & [node-1) 'INSERT'
2884- | [node) merge_insert_clause[43,50) & [node-1) 'VALUES'
2888+ [node) merge_insert_clause___0 & [node-1) 'INSERT'
2889+ | [node) merge_insert_clause___2 & [node-1) 'VALUES'
28852890 )
28862891 & parent < node
28872892;
@@ -2921,12 +2926,12 @@ r2_decrement_left_margin:
29212926 | [node^) xmltable
29222927 | [node^) json_table
29232928 | [node^) JSON_columns_clause
2924- | [node^) create_view#[114,130)
2925- | [node^) create_materialized_view[33,79)
2926- | [node^) insert_into_clause[13,25)
2929+ | [node^) create_view#___0
2930+ | [node^) create_materialized_view2___0
2931+ | [node^) insert_into_clause___0
29272932 | [node^) par_expr_list
2928- | [node^) merge_insert_clause[23,35)
2929- | [node^) merge_insert_clause[43,50)
2933+ | [node^) merge_insert_clause___0
2934+ | [node^) merge_insert_clause___2
29302935 | [node^) function
29312936 | [node^) function_expression
29322937 | [node^) "(x,y,z)"
@@ -2970,15 +2975,15 @@ r2_increment_left_margin_by_keyword_outside_update_delete_merge:
29702975 -- delete statement
29712976 | [node) 'FROM' & [keyword) 'DELETE' & [node^) delete & keyword+1 = node
29722977 -- merge statement
2973- | [node) merge_update_clause[36,56) & [keyword) 'SET' & [node^) merge_update_clause & keyword^ = node^
2978+ | [node) merge_update_clause___2 & [keyword) 'SET' & [node^) merge_update_clause & keyword^ = node^
29742979-> {
29752980 addMarginByName(tuple.get("node"), 6, target.src.get(tuple.get("keyword").from).content,
29762981 "r2_increment_left_margin_by_keyword_outside_update_delete_merge");
29772982}
29782983
29792984-- use merge keyword for right alignment (5 chars)
29802985r2_increment_left_margin_by_keyword_outside_node_for_merge:
2981- [node) subquery & [keyword) 'USING' & [node^) merge & keyword+1 = node
2986+ [node) merge___2 & [keyword) 'USING' & [node^) merge & keyword+1 = node
29822987 | [node) condition & [keyword) 'ON' & [node^) merge & keyword+2 = node
29832988 | [node) ')' & [keyword) 'ON' & [node^) merge & keyword+3 = node
29842989-> {
@@ -3018,10 +3023,10 @@ r2_increment_left_margin_by_keyword_inside_node_for_merge:
30183023}
30193024
30203025r2_indent_single_line_clauses:
3021- [node) insert_into_clause[13,25)
3022- | [node) values_clause[12,20)
3023- | [node) merge_insert_clause[23,35) & [node-1) 'INSERT'
3024- | [node) merge_insert_clause[43,50) & [node-1) 'VALUES'
3026+ [node) insert_into_clause___0
3027+ | [node) values_clause___0
3028+ | [node) merge_insert_clause___0 & [node-1) 'INSERT'
3029+ | [node) merge_insert_clause___2 & [node-1) 'VALUES'
30253030-> {
30263031 var node = tuple.get("node");
30273032 if (getIndent(node.from).indexOf("\n") != -1) {
@@ -3047,13 +3052,13 @@ r2_indent_name_list_after_fetch_into:
30473052}
30483053
30493054r2_subquery_all:
3050- [node) subquery
3055+ [node) query_block
30513056 & [from) from_clause
30523057 & node < from
30533058;
30543059
30553060r2_subquery_set:
3056- [node) subquery
3061+ [node) query_block
30573062 & [from) from_clause
30583063 & node < from
30593064 & [from^-1) SET_OPER -- must not negate this predicate in SQLDev 21.2.1, see issue #133
@@ -3245,7 +3250,7 @@ r7_select:
32453250 & ![keyword^) analytic_clause
32463251 & ![keyword^^) function
32473252 & ![keyword^) function
3248- & ![keyword^) collect[33,52) -- order by clause in collect function
3253+ & ![keyword^) collect___1 -- order by clause in collect function
32493254;
32503255
32513256r7_single_table_insert:
@@ -3258,7 +3263,7 @@ r7_single_table_insert:
32583263 | [keyword) 'RETURNING'
32593264 | [keyword) 'LOG'
32603265 | [keyword) 'REJECT'
3261- | [keyword) 'SELECT' & ![keyword^^-1) '('
3266+ | [keyword) 'SELECT' & ![keyword^^-1) '(' & ![keyword^^^-1) '('
32623267 )
32633268 & insert < keyword
32643269 & parent < insert
@@ -3267,7 +3272,7 @@ r7_single_table_insert:
32673272r7_multi_table_insert_uncond:
32683273 [parent) insert
32693274 & [insert) multi_table_insert
3270- & [uncond) multi_table_insert[12,24)
3275+ & [uncond) multi_table_insert___0
32713276 & (
32723277 [keyword) 'ALL'
32733278 | [keyword) 'FIRST'
@@ -3550,9 +3555,12 @@ o8_variables:
35503555
35513556o8_records:
35523557 [scope) ty_def
3553- & [node-1) identifier
3554- & [node^) field
3558+ & [first) identifier
3559+ & first = node-1
3560+ & [parent) field
3561+ & parent = node^
35553562 & scope < node^
3563+ & [first = [parent
35563564;
35573565
35583566o8_attributes:
@@ -3823,7 +3831,7 @@ a9_declarations:
38233831}
38243832
38253833a9_find_columns:
3826- [scope) XMLTABLE_options[19,37)
3834+ [scope) XMLTABLE_options___0
38273835 & [node) XML_table_column
38283836 & [comma) ','
38293837 & scope < node
@@ -3857,8 +3865,8 @@ a9_align_xmltable_columns:
38573865}
38583866
38593867a9_find_datatypes:
3860- [scope) XMLTABLE_options[19,37)
3861- & [node) XML_table_column[5,72)
3868+ [scope) XMLTABLE_options___0
3869+ & [node) XML_table_column___3
38623870 & [path) 'PATH'
38633871 & scope < node
38643872 & node < path
@@ -3922,7 +3930,7 @@ a20_align_json_table_columns:
39223930a20_find_datatypes:
39233931 [scope) JSON_columns_clause
39243932 & [node) JSON_value_return_type
3925- & [path) "JSON_value_column[5,10) "
3933+ & [path) "JSON_value_column___0 "
39263934 & scope < node
39273935 & path = node+1
39283936-> {
0 commit comments