gen/com/intellij/idea/plugin/hybris/flexibleSearch/FlexibleSearchParser.java (1,912 lines of code) (raw):

/* * ---------------------------------------------------------------- * --- WARNING: THIS FILE IS GENERATED AND WILL BE OVERWRITTEN! --- * ---------------------------------------------------------------- * * This file is part of "SAP Commerce Developers Toolset" plugin for IntelliJ IDEA. * Copyright (C) 2019 EPAM Systems <hybrisideaplugin@epam.com> and contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.intellij.idea.plugin.hybris.flexibleSearch; import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiBuilder.Marker; import static com.intellij.idea.plugin.hybris.flexibleSearch.psi.FlexibleSearchTypes.*; import static com.intellij.idea.plugin.hybris.flexibleSearch.FlexibleSearchParserUtils.*; import com.intellij.psi.tree.IElementType; import com.intellij.lang.ASTNode; import com.intellij.psi.tree.TokenSet; import com.intellij.lang.PsiParser; import com.intellij.lang.LightPsiParser; @SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"}) public class FlexibleSearchParser implements PsiParser, LightPsiParser { public ASTNode parse(IElementType t, PsiBuilder b) { parseLight(t, b); return b.getTreeBuilt(); } public void parseLight(IElementType t, PsiBuilder b) { boolean r; b = adapt_builder_(t, b, this, EXTENDS_SETS_); Marker m = enter_section_(b, 0, _COLLAPSE_, null); r = parse_root_(t, b); exit_section_(b, 0, m, t, r, true, TRUE_CONDITION); } protected boolean parse_root_(IElementType t, PsiBuilder b) { return parse_root_(t, b, 0); } static boolean parse_root_(IElementType t, PsiBuilder b, int l) { return root(b, l + 1); } public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] { create_token_set_(FROM_CLAUSE_EXPR, FROM_CLAUSE_SELECT, Y_FROM_CLAUSE), create_token_set_(AND_EXPRESSION, BETWEEN_EXPRESSION, BIT_EXPRESSION, CASE_EXPRESSION, CAST_EXPRESSION, COLUMN_REF_EXPRESSION, COLUMN_REF_Y_EXPRESSION, COMPARISON_EXPRESSION, CONCAT_EXPRESSION, EQUIVALENCE_EXPRESSION, EXISTS_EXPRESSION, EXPRESSION, FUNCTION_CALL_EXPRESSION, IN_EXPRESSION, ISNULL_EXPRESSION, LIKE_EXPRESSION, LITERAL_EXPRESSION, MUL_EXPRESSION, MYSQL_FUNCTION_EXPRESSION, OR_EXPRESSION, PAREN_EXPRESSION, SUBQUERY_PAREN_EXPRESSION, UNARY_EXPRESSION), }; /* ********************************************************** */ // selected_table_name column_separator column_name static boolean aliased_column_ref_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "aliased_column_ref_expression")) return false; if (!nextTokenIs(b, "", BACKTICK_LITERAL, IDENTIFIER)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = selected_table_name(b, l + 1); r = r && column_separator(b, l + 1); p = r; // pin = 2 r = r && column_name(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // NUMBERED_PARAMETER | (NAMED_PARAMETER ( '.' ext_parameter_name)*) public static boolean bind_parameter(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bind_parameter")) return false; if (!nextTokenIs(b, "<bind parameter>", NAMED_PARAMETER, NUMBERED_PARAMETER)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, BIND_PARAMETER, "<bind parameter>"); r = consumeToken(b, NUMBERED_PARAMETER); if (!r) r = bind_parameter_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // NAMED_PARAMETER ( '.' ext_parameter_name)* private static boolean bind_parameter_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bind_parameter_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, NAMED_PARAMETER); r = r && bind_parameter_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // ( '.' ext_parameter_name)* private static boolean bind_parameter_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bind_parameter_1_1")) return false; while (true) { int c = current_position_(b); if (!bind_parameter_1_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "bind_parameter_1_1", c)) break; } return true; } // '.' ext_parameter_name private static boolean bind_parameter_1_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bind_parameter_1_1_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, DOT); r = r && ext_parameter_name(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // name public static boolean column_alias_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_alias_name")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, COLUMN_ALIAS_NAME, "<column alias name>"); r = name(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // IDENTIFIER public static boolean column_localized_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_localized_name")) return false; if (!nextTokenIs(b, IDENTIFIER)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, IDENTIFIER); exit_section_(b, m, COLUMN_LOCALIZED_NAME, r); return r; } /* ********************************************************** */ // ORDER | IDENTIFIER public static boolean column_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_name")) return false; if (!nextTokenIs(b, "<column name>", IDENTIFIER, ORDER)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, COLUMN_NAME, "<column name>"); r = consumeToken(b, ORDER); if (!r) r = consumeToken(b, IDENTIFIER); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // OUTER_JOIN public static boolean column_outer_join_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_outer_join_name")) return false; if (!nextTokenIs(b, OUTER_JOIN)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OUTER_JOIN); exit_section_(b, m, COLUMN_OUTER_JOIN_NAME, r); return r; } /* ********************************************************** */ // (selected_table_name column_separator)? y_column_name y_column_localized_name? column_outer_join_name? static boolean column_ref_y_expression_other(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_y_expression_other")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_); r = column_ref_y_expression_other_0(b, l + 1); r = r && y_column_name(b, l + 1); r = r && column_ref_y_expression_other_2(b, l + 1); r = r && column_ref_y_expression_other_3(b, l + 1); exit_section_(b, l, m, r, false, FlexibleSearchParser::column_ref_y_expression_recover); return r; } // (selected_table_name column_separator)? private static boolean column_ref_y_expression_other_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_y_expression_other_0")) return false; column_ref_y_expression_other_0_0(b, l + 1); return true; } // selected_table_name column_separator private static boolean column_ref_y_expression_other_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_y_expression_other_0_0")) return false; boolean r; Marker m = enter_section_(b); r = selected_table_name(b, l + 1); r = r && column_separator(b, l + 1); exit_section_(b, m, null, r); return r; } // y_column_localized_name? private static boolean column_ref_y_expression_other_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_y_expression_other_2")) return false; y_column_localized_name(b, l + 1); return true; } // column_outer_join_name? private static boolean column_ref_y_expression_other_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_y_expression_other_3")) return false; column_outer_join_name(b, l + 1); return true; } /* ********************************************************** */ // !'}' static boolean column_ref_y_expression_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_y_expression_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, RBRACE); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // DOT | COLON public static boolean column_separator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_separator")) return false; if (!nextTokenIs(b, "<column separator>", COLON, DOT)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, COLUMN_SEPARATOR, "<column separator>"); r = consumeToken(b, DOT); if (!r) r = consumeToken(b, COLON); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // UNION ALL? public static boolean compound_operator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "compound_operator")) return false; if (!nextTokenIs(b, UNION)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, UNION); r = r && compound_operator_1(b, l + 1); exit_section_(b, m, COMPOUND_OPERATOR, r); return r; } // ALL? private static boolean compound_operator_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "compound_operator_1")) return false; consumeToken(b, ALL); return true; } /* ********************************************************** */ // (ORDER | IDENTIFIER) ('!' | '*')? public static boolean defined_table_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "defined_table_name")) return false; if (!nextTokenIs(b, "<defined table name>", IDENTIFIER, ORDER)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, DEFINED_TABLE_NAME, "<defined table name>"); r = defined_table_name_0(b, l + 1); p = r; // pin = 1 r = r && defined_table_name_1(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } // ORDER | IDENTIFIER private static boolean defined_table_name_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "defined_table_name_0")) return false; boolean r; r = consumeToken(b, ORDER); if (!r) r = consumeToken(b, IDENTIFIER); return r; } // ('!' | '*')? private static boolean defined_table_name_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "defined_table_name_1")) return false; defined_table_name_1_0(b, l + 1); return true; } // '!' | '*' private static boolean defined_table_name_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "defined_table_name_1_0")) return false; boolean r; r = consumeToken(b, EXCLAMATION_MARK); if (!r) r = consumeToken(b, STAR); return r; } /* ********************************************************** */ // EXISTS '(' static boolean exists_expression_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "exists_expression_name")) return false; if (!nextTokenIs(b, EXISTS)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, EXISTS, LPAREN); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // bind_parameter (',' bind_parameter)* | expression ( ',' expression )* | from_clause_subqueries_statement static boolean expression_in_subquery(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression_in_subquery")) return false; boolean r; Marker m = enter_section_(b); r = expression_in_subquery_0(b, l + 1); if (!r) r = expression_in_subquery_1(b, l + 1); if (!r) r = from_clause_subqueries_statement(b, l + 1); exit_section_(b, m, null, r); return r; } // bind_parameter (',' bind_parameter)* private static boolean expression_in_subquery_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression_in_subquery_0")) return false; boolean r; Marker m = enter_section_(b); r = bind_parameter(b, l + 1); r = r && expression_in_subquery_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (',' bind_parameter)* private static boolean expression_in_subquery_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression_in_subquery_0_1")) return false; while (true) { int c = current_position_(b); if (!expression_in_subquery_0_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "expression_in_subquery_0_1", c)) break; } return true; } // ',' bind_parameter private static boolean expression_in_subquery_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression_in_subquery_0_1_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COMMA); r = r && bind_parameter(b, l + 1); exit_section_(b, m, null, r); return r; } // expression ( ',' expression )* private static boolean expression_in_subquery_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression_in_subquery_1")) return false; boolean r; Marker m = enter_section_(b); r = expression(b, l + 1, -1); r = r && expression_in_subquery_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // ( ',' expression )* private static boolean expression_in_subquery_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression_in_subquery_1_1")) return false; while (true) { int c = current_position_(b); if (!expression_in_subquery_1_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "expression_in_subquery_1_1", c)) break; } return true; } // ',' expression private static boolean expression_in_subquery_1_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression_in_subquery_1_1_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COMMA); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // ORDER | IDENTIFIER public static boolean ext_parameter_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "ext_parameter_name")) return false; if (!nextTokenIs(b, "<ext parameter name>", IDENTIFIER, ORDER)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, EXT_PARAMETER_NAME, "<ext parameter name>"); r = consumeToken(b, ORDER); if (!r) r = consumeToken(b, IDENTIFIER); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // ',' result_column static boolean following_result_column(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "following_result_column")) return false; if (!nextTokenIs(b, COMMA)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = consumeToken(b, COMMA); p = r; // pin = 1 r = r && result_column(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // FROM from_clause_expr ( join_operator from_clause_expr )* public static boolean from_clause(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause")) return false; if (!nextTokenIs(b, FROM)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, FROM_CLAUSE, null); r = consumeToken(b, FROM); p = r; // pin = 1 r = r && report_error_(b, from_clause_expr(b, l + 1)); r = p && from_clause_2(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // ( join_operator from_clause_expr )* private static boolean from_clause_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_2")) return false; while (true) { int c = current_position_(b); if (!from_clause_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "from_clause_2", c)) break; } return true; } // join_operator from_clause_expr private static boolean from_clause_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_2_0")) return false; boolean r; Marker m = enter_section_(b); r = join_operator(b, l + 1); r = r && from_clause_expr(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // y_from_clause // | from_clause_select public static boolean from_clause_expr(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_expr")) return false; if (!nextTokenIs(b, "<from clause expr>", LBRACE, LPAREN)) return false; boolean r; Marker m = enter_section_(b, l, _COLLAPSE_, FROM_CLAUSE_EXPR, "<from clause expr>"); r = y_from_clause(b, l + 1); if (!r) r = from_clause_select(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // ((from_clause_select_query ( ( AS )? table_alias_name)?) | from_clause_subqueries) join_constraint? public static boolean from_clause_select(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select")) return false; if (!nextTokenIs(b, LPAREN)) return false; boolean r; Marker m = enter_section_(b); r = from_clause_select_0(b, l + 1); r = r && from_clause_select_1(b, l + 1); exit_section_(b, m, FROM_CLAUSE_SELECT, r); return r; } // (from_clause_select_query ( ( AS )? table_alias_name)?) | from_clause_subqueries private static boolean from_clause_select_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_0")) return false; boolean r; Marker m = enter_section_(b); r = from_clause_select_0_0(b, l + 1); if (!r) r = from_clause_subqueries(b, l + 1); exit_section_(b, m, null, r); return r; } // from_clause_select_query ( ( AS )? table_alias_name)? private static boolean from_clause_select_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_0_0")) return false; boolean r; Marker m = enter_section_(b); r = from_clause_select_query(b, l + 1); r = r && from_clause_select_0_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // ( ( AS )? table_alias_name)? private static boolean from_clause_select_0_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_0_0_1")) return false; from_clause_select_0_0_1_0(b, l + 1); return true; } // ( AS )? table_alias_name private static boolean from_clause_select_0_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_0_0_1_0")) return false; boolean r; Marker m = enter_section_(b); r = from_clause_select_0_0_1_0_0(b, l + 1); r = r && table_alias_name(b, l + 1); exit_section_(b, m, null, r); return r; } // ( AS )? private static boolean from_clause_select_0_0_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_0_0_1_0_0")) return false; consumeToken(b, AS); return true; } // join_constraint? private static boolean from_clause_select_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_1")) return false; join_constraint(b, l + 1); return true; } /* ********************************************************** */ // '(' &(SELECT) from_query_greedy ')' public static boolean from_clause_select_query(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_query")) return false; if (!nextTokenIs(b, LPAREN)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, FROM_CLAUSE_SELECT_QUERY, null); r = consumeToken(b, LPAREN); r = r && from_clause_select_query_1(b, l + 1); p = r; // pin = 2 r = r && report_error_(b, from_query_greedy(b, l + 1)); r = p && consumeToken(b, RPAREN) && r; exit_section_(b, l, m, r, p, null); return r || p; } // &(SELECT) private static boolean from_clause_select_query_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_select_query_1")) return false; boolean r; Marker m = enter_section_(b, l, _AND_); r = consumeToken(b, SELECT); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // table_or_subquery ( join_operator table_or_subquery join_constraint? )* public static boolean from_clause_simple(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_simple")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, FROM_CLAUSE_SIMPLE, "<from clause simple>"); r = table_or_subquery(b, l + 1); r = r && from_clause_simple_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // ( join_operator table_or_subquery join_constraint? )* private static boolean from_clause_simple_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_simple_1")) return false; while (true) { int c = current_position_(b); if (!from_clause_simple_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "from_clause_simple_1", c)) break; } return true; } // join_operator table_or_subquery join_constraint? private static boolean from_clause_simple_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_simple_1_0")) return false; boolean r; Marker m = enter_section_(b); r = join_operator(b, l + 1); r = r && table_or_subquery(b, l + 1); r = r && from_clause_simple_1_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // join_constraint? private static boolean from_clause_simple_1_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_simple_1_0_2")) return false; join_constraint(b, l + 1); return true; } /* ********************************************************** */ // '(' from_clause_subqueries_statement ')' ( ( AS )? table_alias_name)? public static boolean from_clause_subqueries(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_subqueries")) return false; if (!nextTokenIs(b, LPAREN)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LPAREN); r = r && from_clause_subqueries_statement(b, l + 1); r = r && consumeToken(b, RPAREN); r = r && from_clause_subqueries_3(b, l + 1); exit_section_(b, m, FROM_CLAUSE_SUBQUERIES, r); return r; } // ( ( AS )? table_alias_name)? private static boolean from_clause_subqueries_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_subqueries_3")) return false; from_clause_subqueries_3_0(b, l + 1); return true; } // ( AS )? table_alias_name private static boolean from_clause_subqueries_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_subqueries_3_0")) return false; boolean r; Marker m = enter_section_(b); r = from_clause_subqueries_3_0_0(b, l + 1); r = r && table_alias_name(b, l + 1); exit_section_(b, m, null, r); return r; } // ( AS )? private static boolean from_clause_subqueries_3_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_subqueries_3_0_0")) return false; consumeToken(b, AS); return true; } /* ********************************************************** */ // ( select_subquery_combined compound_operator? )* static boolean from_clause_subqueries_statement(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_subqueries_statement")) return false; while (true) { int c = current_position_(b); if (!from_clause_subqueries_statement_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "from_clause_subqueries_statement", c)) break; } return true; } // select_subquery_combined compound_operator? private static boolean from_clause_subqueries_statement_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_subqueries_statement_0")) return false; boolean r; Marker m = enter_section_(b); r = select_subquery_combined(b, l + 1); r = r && from_clause_subqueries_statement_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // compound_operator? private static boolean from_clause_subqueries_statement_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_clause_subqueries_statement_0_1")) return false; compound_operator(b, l + 1); return true; } /* ********************************************************** */ // select_statement static boolean from_query_greedy(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_query_greedy")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_); r = select_statement(b, l + 1); exit_section_(b, l, m, r, false, FlexibleSearchParser::from_query_greedy_recover); return r; } /* ********************************************************** */ // !')' static boolean from_query_greedy_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_query_greedy_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, RPAREN); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // defined_table_name ( ( AS )? table_alias_name )? public static boolean from_table(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_table")) return false; if (!nextTokenIs(b, "<from table>", IDENTIFIER, ORDER)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, FROM_TABLE, "<from table>"); r = defined_table_name(b, l + 1); r = r && from_table_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // ( ( AS )? table_alias_name )? private static boolean from_table_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_table_1")) return false; from_table_1_0(b, l + 1); return true; } // ( AS )? table_alias_name private static boolean from_table_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_table_1_0")) return false; boolean r; Marker m = enter_section_(b); r = from_table_1_0_0(b, l + 1); r = r && table_alias_name(b, l + 1); exit_section_(b, m, null, r); return r; } // ( AS )? private static boolean from_table_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "from_table_1_0_0")) return false; consumeToken(b, AS); return true; } /* ********************************************************** */ // function_name '(' static boolean function_call_expression_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression_name")) return false; if (!nextTokenIs(b, IDENTIFIER)) return false; boolean r; Marker m = enter_section_(b); r = function_name(b, l + 1); r = r && consumeToken(b, LPAREN); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // IDENTIFIER public static boolean function_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_name")) return false; if (!nextTokenIs(b, IDENTIFIER)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, IDENTIFIER); exit_section_(b, m, FUNCTION_NAME, r); return r; } /* ********************************************************** */ // group_by_literal expression ( ',' expression )* ( having_clause )? public static boolean group_by_clause(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_clause")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, GROUP_BY_CLAUSE, "<group by clause>"); r = group_by_literal(b, l + 1); p = r; // pin = 1 r = r && report_error_(b, expression(b, l + 1, -1)); r = p && report_error_(b, group_by_clause_2(b, l + 1)) && r; r = p && group_by_clause_3(b, l + 1) && r; exit_section_(b, l, m, r, p, FlexibleSearchParser::group_by_clause_recover); return r || p; } // ( ',' expression )* private static boolean group_by_clause_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_clause_2")) return false; while (true) { int c = current_position_(b); if (!group_by_clause_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "group_by_clause_2", c)) break; } return true; } // ',' expression private static boolean group_by_clause_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_clause_2_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COMMA); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // ( having_clause )? private static boolean group_by_clause_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_clause_3")) return false; group_by_clause_3_0(b, l + 1); return true; } // ( having_clause ) private static boolean group_by_clause_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_clause_3_0")) return false; boolean r; Marker m = enter_section_(b); r = having_clause(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // !(<<eof>> | HAVING | order_clause_literal | LIMIT | ')' | '}}') static boolean group_by_clause_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_clause_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !group_by_clause_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // <<eof>> | HAVING | order_clause_literal | LIMIT | ')' | '}}' private static boolean group_by_clause_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_clause_recover_0")) return false; boolean r; Marker m = enter_section_(b); r = eof(b, l + 1); if (!r) r = consumeToken(b, HAVING); if (!r) r = order_clause_literal(b, l + 1); if (!r) r = consumeToken(b, LIMIT); if (!r) r = consumeToken(b, RPAREN); if (!r) r = consumeToken(b, RDBRACE); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // GROUP BY static boolean group_by_literal(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "group_by_literal")) return false; if (!nextTokenIs(b, GROUP)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, GROUP, BY); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // HAVING expression public static boolean having_clause(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "having_clause")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, HAVING_CLAUSE, "<having clause>"); r = consumeToken(b, HAVING); p = r; // pin = 1 r = r && expression(b, l + 1, -1); exit_section_(b, l, m, r, p, FlexibleSearchParser::having_clause_recover); return r || p; } /* ********************************************************** */ // !(<<eof>> | LIMIT | order_clause_literal | ')' | '}}') static boolean having_clause_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "having_clause_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !having_clause_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // <<eof>> | LIMIT | order_clause_literal | ')' | '}}' private static boolean having_clause_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "having_clause_recover_0")) return false; boolean r; Marker m = enter_section_(b); r = eof(b, l + 1); if (!r) r = consumeToken(b, LIMIT); if (!r) r = order_clause_literal(b, l + 1); if (!r) r = consumeToken(b, RPAREN); if (!r) r = consumeToken(b, RDBRACE); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // join_constraint_on | join_constraint_using public static boolean join_constraint(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_constraint")) return false; if (!nextTokenIs(b, "<join constraint>", ON, USING)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, JOIN_CONSTRAINT, "<join constraint>"); r = join_constraint_on(b, l + 1); if (!r) r = join_constraint_using(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // ON expression static boolean join_constraint_on(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_constraint_on")) return false; if (!nextTokenIs(b, ON)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = consumeToken(b, ON); p = r; // pin = 1 r = r && expression(b, l + 1, -1); exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // USING '(' column_name ( ',' column_name )* ')' static boolean join_constraint_using(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_constraint_using")) return false; if (!nextTokenIs(b, USING)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = consumeTokens(b, 1, USING, LPAREN); p = r; // pin = 1 r = r && report_error_(b, column_name(b, l + 1)); r = p && report_error_(b, join_constraint_using_3(b, l + 1)) && r; r = p && consumeToken(b, RPAREN) && r; exit_section_(b, l, m, r, p, null); return r || p; } // ( ',' column_name )* private static boolean join_constraint_using_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_constraint_using_3")) return false; while (true) { int c = current_position_(b); if (!join_constraint_using_3_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "join_constraint_using_3", c)) break; } return true; } // ',' column_name private static boolean join_constraint_using_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_constraint_using_3_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COMMA); r = r && column_name(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // ',' | ( LEFT OUTER? | INNER | RIGHT )? JOIN public static boolean join_operator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_operator")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, JOIN_OPERATOR, "<join operator>"); r = consumeToken(b, COMMA); if (!r) r = join_operator_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // ( LEFT OUTER? | INNER | RIGHT )? JOIN private static boolean join_operator_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_operator_1")) return false; boolean r; Marker m = enter_section_(b); r = join_operator_1_0(b, l + 1); r = r && consumeToken(b, JOIN); exit_section_(b, m, null, r); return r; } // ( LEFT OUTER? | INNER | RIGHT )? private static boolean join_operator_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_operator_1_0")) return false; join_operator_1_0_0(b, l + 1); return true; } // LEFT OUTER? | INNER | RIGHT private static boolean join_operator_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_operator_1_0_0")) return false; boolean r; Marker m = enter_section_(b); r = join_operator_1_0_0_0(b, l + 1); if (!r) r = consumeToken(b, INNER); if (!r) r = consumeToken(b, RIGHT); exit_section_(b, m, null, r); return r; } // LEFT OUTER? private static boolean join_operator_1_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_operator_1_0_0_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LEFT); r = r && join_operator_1_0_0_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // OUTER? private static boolean join_operator_1_0_0_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "join_operator_1_0_0_0_1")) return false; consumeToken(b, OUTER); return true; } /* ********************************************************** */ // LIMIT expression ( ( OFFSET | ',' ) expression )? public static boolean limit_clause(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "limit_clause")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, LIMIT_CLAUSE, "<limit clause>"); r = consumeToken(b, LIMIT); p = r; // pin = 1 r = r && report_error_(b, expression(b, l + 1, -1)); r = p && limit_clause_2(b, l + 1) && r; exit_section_(b, l, m, r, p, FlexibleSearchParser::limit_clause_recover); return r || p; } // ( ( OFFSET | ',' ) expression )? private static boolean limit_clause_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "limit_clause_2")) return false; limit_clause_2_0(b, l + 1); return true; } // ( OFFSET | ',' ) expression private static boolean limit_clause_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "limit_clause_2_0")) return false; boolean r; Marker m = enter_section_(b); r = limit_clause_2_0_0(b, l + 1); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // OFFSET | ',' private static boolean limit_clause_2_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "limit_clause_2_0_0")) return false; boolean r; r = consumeToken(b, OFFSET); if (!r) r = consumeToken(b, COMMA); return r; } /* ********************************************************** */ // !(<<eof>> | ')' | '}}') static boolean limit_clause_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "limit_clause_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !limit_clause_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // <<eof>> | ')' | '}}' private static boolean limit_clause_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "limit_clause_recover_0")) return false; boolean r; Marker m = enter_section_(b); r = eof(b, l + 1); if (!r) r = consumeToken(b, RPAREN); if (!r) r = consumeToken(b, RDBRACE); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // signed_number // | string_literal // X marks a blob literal // | BOOLEAN_LITERAL // | NULL static boolean literal_value(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literal_value")) return false; boolean r; r = signed_number(b, l + 1); if (!r) r = string_literal(b, l + 1); if (!r) r = consumeToken(b, BOOLEAN_LITERAL); if (!r) r = consumeToken(b, NULL); return r; } /* ********************************************************** */ // IDENTIFIER | BRACKET_LITERAL | BACKTICK_LITERAL | string_literal static boolean name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "name")) return false; boolean r; r = consumeToken(b, IDENTIFIER); if (!r) r = consumeToken(b, BRACKET_LITERAL); if (!r) r = consumeToken(b, BACKTICK_LITERAL); if (!r) r = string_literal(b, l + 1); return r; } /* ********************************************************** */ // order_clause_literal ordering_term ( ',' ordering_term )* public static boolean order_clause(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "order_clause")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, ORDER_CLAUSE, "<order clause>"); r = order_clause_literal(b, l + 1); p = r; // pin = 1 r = r && report_error_(b, ordering_term(b, l + 1)); r = p && order_clause_2(b, l + 1) && r; exit_section_(b, l, m, r, p, FlexibleSearchParser::order_clause_recover); return r || p; } // ( ',' ordering_term )* private static boolean order_clause_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "order_clause_2")) return false; while (true) { int c = current_position_(b); if (!order_clause_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "order_clause_2", c)) break; } return true; } // ',' ordering_term private static boolean order_clause_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "order_clause_2_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COMMA); r = r && ordering_term(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // ORDER BY static boolean order_clause_literal(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "order_clause_literal")) return false; if (!nextTokenIs(b, ORDER)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, ORDER, BY); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // !(<<eof>> | LIMIT | ')' | '}}') static boolean order_clause_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "order_clause_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !order_clause_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // <<eof>> | LIMIT | ')' | '}}' private static boolean order_clause_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "order_clause_recover_0")) return false; boolean r; Marker m = enter_section_(b); r = eof(b, l + 1); if (!r) r = consumeToken(b, LIMIT); if (!r) r = consumeToken(b, RPAREN); if (!r) r = consumeToken(b, RDBRACE); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // expression ( ASC | DESC )? public static boolean ordering_term(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "ordering_term")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ORDERING_TERM, "<ordering term>"); r = expression(b, l + 1, -1); r = r && ordering_term_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // ( ASC | DESC )? private static boolean ordering_term_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "ordering_term_1")) return false; ordering_term_1_0(b, l + 1); return true; } // ASC | DESC private static boolean ordering_term_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "ordering_term_1_0")) return false; boolean r; r = consumeToken(b, ASC); if (!r) r = consumeToken(b, DESC); return r; } /* ********************************************************** */ // '*' // | '{' selected_table_name column_separator '*' '}' // | selected_table_name column_separator '*' // | expression ( ( AS )? column_alias_name )? public static boolean result_column(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, RESULT_COLUMN, "<result column>"); r = consumeToken(b, STAR); if (!r) r = result_column_1(b, l + 1); if (!r) r = result_column_2(b, l + 1); if (!r) r = result_column_3(b, l + 1); exit_section_(b, l, m, r, false, FlexibleSearchParser::result_column_recover); return r; } // '{' selected_table_name column_separator '*' '}' private static boolean result_column_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LBRACE); r = r && selected_table_name(b, l + 1); r = r && column_separator(b, l + 1); r = r && consumeTokens(b, 0, STAR, RBRACE); exit_section_(b, m, null, r); return r; } // selected_table_name column_separator '*' private static boolean result_column_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_2")) return false; boolean r; Marker m = enter_section_(b); r = selected_table_name(b, l + 1); r = r && column_separator(b, l + 1); r = r && consumeToken(b, STAR); exit_section_(b, m, null, r); return r; } // expression ( ( AS )? column_alias_name )? private static boolean result_column_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_3")) return false; boolean r; Marker m = enter_section_(b); r = expression(b, l + 1, -1); r = r && result_column_3_1(b, l + 1); exit_section_(b, m, null, r); return r; } // ( ( AS )? column_alias_name )? private static boolean result_column_3_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_3_1")) return false; result_column_3_1_0(b, l + 1); return true; } // ( AS )? column_alias_name private static boolean result_column_3_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_3_1_0")) return false; boolean r; Marker m = enter_section_(b); r = result_column_3_1_0_0(b, l + 1); r = r && column_alias_name(b, l + 1); exit_section_(b, m, null, r); return r; } // ( AS )? private static boolean result_column_3_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_3_1_0_0")) return false; consumeToken(b, AS); return true; } /* ********************************************************** */ // !(<<eof>> | FROM | ',') static boolean result_column_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !result_column_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // <<eof>> | FROM | ',' private static boolean result_column_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_column_recover_0")) return false; boolean r; Marker m = enter_section_(b); r = eof(b, l + 1); if (!r) r = consumeToken(b, FROM); if (!r) r = consumeToken(b, COMMA); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // result_column ( following_result_column )* public static boolean result_columns(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_columns")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, RESULT_COLUMNS, "<result columns>"); r = result_column(b, l + 1); r = r && result_columns_1(b, l + 1); exit_section_(b, l, m, r, false, FlexibleSearchParser::result_columns_recover); return r; } // ( following_result_column )* private static boolean result_columns_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_columns_1")) return false; while (true) { int c = current_position_(b); if (!result_columns_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "result_columns_1", c)) break; } return true; } // ( following_result_column ) private static boolean result_columns_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_columns_1_0")) return false; boolean r; Marker m = enter_section_(b); r = following_result_column(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // !(<<eof>> | FROM) static boolean result_columns_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_columns_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !result_columns_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // <<eof>> | FROM private static boolean result_columns_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "result_columns_recover_0")) return false; boolean r; Marker m = enter_section_(b); r = eof(b, l + 1); if (!r) r = consumeToken(b, FROM); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // statement static boolean root(PsiBuilder b, int l) { return statement(b, l + 1); } /* ********************************************************** */ // SELECT ( DISTINCT | ALL )? result_columns from_clause (where_clause)? (group_by_clause)? public static boolean select_core_select(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_core_select")) return false; if (!nextTokenIs(b, SELECT)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, SELECT_CORE_SELECT, null); r = consumeToken(b, SELECT); p = r; // pin = 1 r = r && report_error_(b, select_core_select_1(b, l + 1)); r = p && report_error_(b, result_columns(b, l + 1)) && r; r = p && report_error_(b, from_clause(b, l + 1)) && r; r = p && report_error_(b, select_core_select_4(b, l + 1)) && r; r = p && select_core_select_5(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // ( DISTINCT | ALL )? private static boolean select_core_select_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_core_select_1")) return false; select_core_select_1_0(b, l + 1); return true; } // DISTINCT | ALL private static boolean select_core_select_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_core_select_1_0")) return false; boolean r; r = consumeToken(b, DISTINCT); if (!r) r = consumeToken(b, ALL); return r; } // (where_clause)? private static boolean select_core_select_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_core_select_4")) return false; select_core_select_4_0(b, l + 1); return true; } // (where_clause) private static boolean select_core_select_4_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_core_select_4_0")) return false; boolean r; Marker m = enter_section_(b); r = where_clause(b, l + 1); exit_section_(b, m, null, r); return r; } // (group_by_clause)? private static boolean select_core_select_5(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_core_select_5")) return false; select_core_select_5_0(b, l + 1); return true; } // (group_by_clause) private static boolean select_core_select_5_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_core_select_5_0")) return false; boolean r; Marker m = enter_section_(b); r = group_by_clause(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // select_core_select (compound_operator select_core_select)* order_clause? limit_clause? public static boolean select_statement(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_statement")) return false; if (!nextTokenIs(b, SELECT)) return false; boolean r; Marker m = enter_section_(b); r = select_core_select(b, l + 1); r = r && select_statement_1(b, l + 1); r = r && select_statement_2(b, l + 1); r = r && select_statement_3(b, l + 1); exit_section_(b, m, SELECT_STATEMENT, r); return r; } // (compound_operator select_core_select)* private static boolean select_statement_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_statement_1")) return false; while (true) { int c = current_position_(b); if (!select_statement_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "select_statement_1", c)) break; } return true; } // compound_operator select_core_select private static boolean select_statement_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_statement_1_0")) return false; boolean r; Marker m = enter_section_(b); r = compound_operator(b, l + 1); r = r && select_core_select(b, l + 1); exit_section_(b, m, null, r); return r; } // order_clause? private static boolean select_statement_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_statement_2")) return false; order_clause(b, l + 1); return true; } // limit_clause? private static boolean select_statement_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_statement_3")) return false; limit_clause(b, l + 1); return true; } /* ********************************************************** */ // '(' "{{" &(SELECT) subquery_greedy "}}" ')' ( ( AS )? table_alias_name)? public static boolean select_subquery(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery")) return false; if (!nextTokenIs(b, LPAREN)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, SELECT_SUBQUERY, null); r = consumeTokens(b, 0, LPAREN, LDBRACE); r = r && select_subquery_2(b, l + 1); p = r; // pin = 3 r = r && report_error_(b, subquery_greedy(b, l + 1)); r = p && report_error_(b, consumeTokens(b, -1, RDBRACE, RPAREN)) && r; r = p && select_subquery_6(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // &(SELECT) private static boolean select_subquery_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_2")) return false; boolean r; Marker m = enter_section_(b, l, _AND_); r = consumeToken(b, SELECT); exit_section_(b, l, m, r, false, null); return r; } // ( ( AS )? table_alias_name)? private static boolean select_subquery_6(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_6")) return false; select_subquery_6_0(b, l + 1); return true; } // ( AS )? table_alias_name private static boolean select_subquery_6_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_6_0")) return false; boolean r; Marker m = enter_section_(b); r = select_subquery_6_0_0(b, l + 1); r = r && table_alias_name(b, l + 1); exit_section_(b, m, null, r); return r; } // ( AS )? private static boolean select_subquery_6_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_6_0_0")) return false; consumeToken(b, AS); return true; } /* ********************************************************** */ // "{{" &(SELECT) subquery_greedy "}}" public static boolean select_subquery_combined(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_combined")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, SELECT_SUBQUERY_COMBINED, "<select subquery combined>"); r = consumeToken(b, LDBRACE); r = r && select_subquery_combined_1(b, l + 1); p = r; // pin = 2 r = r && report_error_(b, subquery_greedy(b, l + 1)); r = p && consumeToken(b, RDBRACE) && r; exit_section_(b, l, m, r, p, FlexibleSearchParser::select_subquery_combined_recover); return r || p; } // &(SELECT) private static boolean select_subquery_combined_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_combined_1")) return false; boolean r; Marker m = enter_section_(b, l, _AND_); r = consumeToken(b, SELECT); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // !(')' | compound_operator) static boolean select_subquery_combined_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_combined_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !select_subquery_combined_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // ')' | compound_operator private static boolean select_subquery_combined_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "select_subquery_combined_recover_0")) return false; boolean r; r = consumeToken(b, RPAREN); if (!r) r = compound_operator(b, l + 1); return r; } /* ********************************************************** */ // IDENTIFIER | BACKTICK_LITERAL public static boolean selected_table_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "selected_table_name")) return false; if (!nextTokenIs(b, "<selected table name>", BACKTICK_LITERAL, IDENTIFIER)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, SELECTED_TABLE_NAME, "<selected table name>"); r = consumeToken(b, IDENTIFIER); if (!r) r = consumeToken(b, BACKTICK_LITERAL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // ( '+' | '-' )? NUMERIC_LITERAL public static boolean signed_number(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "signed_number")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, SIGNED_NUMBER, "<signed number>"); r = signed_number_0(b, l + 1); r = r && consumeToken(b, NUMERIC_LITERAL); exit_section_(b, l, m, r, false, null); return r; } // ( '+' | '-' )? private static boolean signed_number_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "signed_number_0")) return false; signed_number_0_0(b, l + 1); return true; } // '+' | '-' private static boolean signed_number_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "signed_number_0_0")) return false; boolean r; r = consumeToken(b, PLUS); if (!r) r = consumeToken(b, MINUS); return r; } /* ********************************************************** */ // (select_statement) static boolean statement(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "statement")) return false; if (!nextTokenIs(b, "<statement>", SELECT)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, null, "<statement>"); r = select_statement(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // SINGLE_QUOTE_STRING_LITERAL | DOUBLE_QUOTE_STRING_LITERAL static boolean string_literal(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "string_literal")) return false; if (!nextTokenIs(b, "", DOUBLE_QUOTE_STRING_LITERAL, SINGLE_QUOTE_STRING_LITERAL)) return false; boolean r; r = consumeToken(b, SINGLE_QUOTE_STRING_LITERAL); if (!r) r = consumeToken(b, DOUBLE_QUOTE_STRING_LITERAL); return r; } /* ********************************************************** */ // select_statement static boolean subquery_greedy(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "subquery_greedy")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_); r = select_statement(b, l + 1); exit_section_(b, l, m, r, false, FlexibleSearchParser::y_subquery_greedy_recover); return r; } /* ********************************************************** */ // name public static boolean table_alias_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "table_alias_name")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, TABLE_ALIAS_NAME, "<table alias name>"); r = name(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // from_table | select_subquery | '(' table_or_subquery ')' public static boolean table_or_subquery(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "table_or_subquery")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, TABLE_OR_SUBQUERY, "<table or subquery>"); r = from_table(b, l + 1); if (!r) r = select_subquery(b, l + 1); if (!r) r = table_or_subquery_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // '(' table_or_subquery ')' private static boolean table_or_subquery_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "table_or_subquery_2")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LPAREN); r = r && table_or_subquery(b, l + 1); r = r && consumeToken(b, RPAREN); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // name ( '(' signed_number ')' | '(' signed_number ',' signed_number ')' )? public static boolean type_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "type_name")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, TYPE_NAME, "<type name>"); r = name(b, l + 1); r = r && type_name_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // ( '(' signed_number ')' | '(' signed_number ',' signed_number ')' )? private static boolean type_name_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "type_name_1")) return false; type_name_1_0(b, l + 1); return true; } // '(' signed_number ')' | '(' signed_number ',' signed_number ')' private static boolean type_name_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "type_name_1_0")) return false; boolean r; Marker m = enter_section_(b); r = type_name_1_0_0(b, l + 1); if (!r) r = type_name_1_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // '(' signed_number ')' private static boolean type_name_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "type_name_1_0_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LPAREN); r = r && signed_number(b, l + 1); r = r && consumeToken(b, RPAREN); exit_section_(b, m, null, r); return r; } // '(' signed_number ',' signed_number ')' private static boolean type_name_1_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "type_name_1_0_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LPAREN); r = r && signed_number(b, l + 1); r = r && consumeToken(b, COMMA); r = r && signed_number(b, l + 1); r = r && consumeToken(b, RPAREN); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // WHERE expression public static boolean where_clause(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "where_clause")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, WHERE_CLAUSE, "<where clause>"); r = consumeToken(b, WHERE); p = r; // pin = 1 r = r && expression(b, l + 1, -1); exit_section_(b, l, m, r, p, FlexibleSearchParser::where_clause_recover); return r || p; } /* ********************************************************** */ // !(<<eof>> | group_by_literal | order_clause_literal | LIMIT | '}}') static boolean where_clause_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "where_clause_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !where_clause_recover_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // <<eof>> | group_by_literal | order_clause_literal | LIMIT | '}}' private static boolean where_clause_recover_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "where_clause_recover_0")) return false; boolean r; Marker m = enter_section_(b); r = eof(b, l + 1); if (!r) r = group_by_literal(b, l + 1); if (!r) r = order_clause_literal(b, l + 1); if (!r) r = consumeToken(b, LIMIT); if (!r) r = consumeToken(b, RDBRACE); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // '[' column_localized_name ']' static boolean y_column_localized_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "y_column_localized_name")) return false; if (!nextTokenIs(b, LBRACKET)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = consumeToken(b, LBRACKET); p = r; // pin = 1 r = r && report_error_(b, column_localized_name(b, l + 1)); r = p && consumeToken(b, RBRACKET) && r; exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // ORDER | IDENTIFIER public static boolean y_column_name(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "y_column_name")) return false; if (!nextTokenIs(b, "<y column name>", IDENTIFIER, ORDER)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, Y_COLUMN_NAME, "<y column name>"); r = consumeToken(b, ORDER); if (!r) r = consumeToken(b, IDENTIFIER); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // '{' from_clause_simple '}' public static boolean y_from_clause(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "y_from_clause")) return false; if (!nextTokenIs(b, LBRACE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, Y_FROM_CLAUSE, null); r = consumeToken(b, LBRACE); p = r; // pin = 1 r = r && report_error_(b, from_clause_simple(b, l + 1)); r = p && consumeToken(b, RBRACE) && r; exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // !"}}" static boolean y_subquery_greedy_recover(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "y_subquery_greedy_recover")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, RDBRACE); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // Expression root: expression // Operator priority table: // 0: PREFIX(mysql_function_expression) // 1: BINARY(or_expression) // 2: BINARY(and_expression) // 3: ATOM(case_expression) // 4: ATOM(exists_expression) // 5: POSTFIX(in_expression) // 6: POSTFIX(isnull_expression) // 7: BINARY(like_expression) // 8: ATOM(cast_expression) // 9: ATOM(function_call_expression) // 10: BINARY(equivalence_expression) BINARY(between_expression) // 11: BINARY(comparison_expression) // 12: BINARY(bit_expression) // 13: BINARY(mul_expression) // 14: BINARY(concat_expression) // 15: BINARY(unary_expression) // 16: ATOM(literal_expression) // 17: ATOM(column_ref_y_expression) // 18: ATOM(subquery_paren_expression) // 19: ATOM(column_ref_expression) // 20: ATOM(paren_expression) public static boolean expression(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "expression")) return false; addVariant(b, "<expression>"); boolean r, p; Marker m = enter_section_(b, l, _NONE_, "<expression>"); r = mysql_function_expression(b, l + 1); if (!r) r = case_expression(b, l + 1); if (!r) r = exists_expression(b, l + 1); if (!r) r = cast_expression(b, l + 1); if (!r) r = function_call_expression(b, l + 1); if (!r) r = literal_expression(b, l + 1); if (!r) r = column_ref_y_expression(b, l + 1); if (!r) r = subquery_paren_expression(b, l + 1); if (!r) r = column_ref_expression(b, l + 1); if (!r) r = paren_expression(b, l + 1); p = r; r = r && expression_0(b, l + 1, g); exit_section_(b, l, m, null, r, p, null); return r || p; } public static boolean expression_0(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "expression_0")) return false; boolean r = true; while (true) { Marker m = enter_section_(b, l, _LEFT_, null); if (g < 1 && consumeTokenSmart(b, OR)) { r = expression(b, l, 1); exit_section_(b, l, m, OR_EXPRESSION, r, true, null); } else if (g < 2 && consumeTokenSmart(b, AND)) { r = expression(b, l, 2); exit_section_(b, l, m, AND_EXPRESSION, r, true, null); } else if (g < 5 && in_expression_0(b, l + 1)) { r = true; exit_section_(b, l, m, IN_EXPRESSION, r, true, null); } else if (g < 6 && isnull_expression_0(b, l + 1)) { r = true; exit_section_(b, l, m, ISNULL_EXPRESSION, r, true, null); } else if (g < 7 && like_expression_0(b, l + 1)) { r = report_error_(b, expression(b, l, 7)); r = like_expression_1(b, l + 1) && r; exit_section_(b, l, m, LIKE_EXPRESSION, r, true, null); } else if (g < 10 && equivalence_expression_0(b, l + 1)) { r = expression(b, l, 10); exit_section_(b, l, m, EQUIVALENCE_EXPRESSION, r, true, null); } else if (g < 10 && between_expression_0(b, l + 1)) { r = report_error_(b, expression(b, l, 10)); r = between_expression_1(b, l + 1) && r; exit_section_(b, l, m, BETWEEN_EXPRESSION, r, true, null); } else if (g < 11 && comparison_expression_0(b, l + 1)) { r = expression(b, l, 11); exit_section_(b, l, m, COMPARISON_EXPRESSION, r, true, null); } else if (g < 12 && bit_expression_0(b, l + 1)) { r = expression(b, l, 12); exit_section_(b, l, m, BIT_EXPRESSION, r, true, null); } else if (g < 13 && mul_expression_0(b, l + 1)) { r = expression(b, l, 13); exit_section_(b, l, m, MUL_EXPRESSION, r, true, null); } else if (g < 14 && consumeTokenSmart(b, CONCAT)) { r = expression(b, l, 14); exit_section_(b, l, m, CONCAT_EXPRESSION, r, true, null); } else if (g < 15 && unary_expression_0(b, l + 1)) { r = expression(b, l, 15); exit_section_(b, l, m, UNARY_EXPRESSION, r, true, null); } else { exit_section_(b, l, m, null, false, false, null); break; } } return r; } public static boolean mysql_function_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mysql_function_expression")) return false; if (!nextTokenIsSmart(b, INTERVAL)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = consumeTokenSmart(b, INTERVAL); p = r; r = p && expression(b, l, 0); r = p && report_error_(b, consumeToken(b, IDENTIFIER)) && r; exit_section_(b, l, m, MYSQL_FUNCTION_EXPRESSION, r, p, null); return r || p; } // CASE expression? ( WHEN expression THEN expression )+ ( ELSE expression )? END public static boolean case_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "case_expression")) return false; if (!nextTokenIsSmart(b, CASE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, CASE_EXPRESSION, null); r = consumeTokenSmart(b, CASE); p = r; // pin = 1 r = r && report_error_(b, case_expression_1(b, l + 1)); r = p && report_error_(b, case_expression_2(b, l + 1)) && r; r = p && report_error_(b, case_expression_3(b, l + 1)) && r; r = p && consumeToken(b, END) && r; exit_section_(b, l, m, r, p, null); return r || p; } // expression? private static boolean case_expression_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "case_expression_1")) return false; expression(b, l + 1, -1); return true; } // ( WHEN expression THEN expression )+ private static boolean case_expression_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "case_expression_2")) return false; boolean r; Marker m = enter_section_(b); r = case_expression_2_0(b, l + 1); while (r) { int c = current_position_(b); if (!case_expression_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "case_expression_2", c)) break; } exit_section_(b, m, null, r); return r; } // WHEN expression THEN expression private static boolean case_expression_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "case_expression_2_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, WHEN); r = r && expression(b, l + 1, -1); r = r && consumeToken(b, THEN); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // ( ELSE expression )? private static boolean case_expression_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "case_expression_3")) return false; case_expression_3_0(b, l + 1); return true; } // ELSE expression private static boolean case_expression_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "case_expression_3_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, ELSE); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // NOT? exists_expression_name from_clause_subqueries_statement ')' public static boolean exists_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "exists_expression")) return false; if (!nextTokenIsSmart(b, EXISTS, NOT)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, EXISTS_EXPRESSION, "<exists expression>"); r = exists_expression_0(b, l + 1); r = r && exists_expression_name(b, l + 1); p = r; // pin = 2 r = r && report_error_(b, from_clause_subqueries_statement(b, l + 1)); r = p && consumeToken(b, RPAREN) && r; exit_section_(b, l, m, r, p, null); return r || p; } // NOT? private static boolean exists_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "exists_expression_0")) return false; consumeTokenSmart(b, NOT); return true; } // NOT? IN '(' ( expression_in_subquery ) ')' private static boolean in_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "in_expression_0")) return false; boolean r; Marker m = enter_section_(b); r = in_expression_0_0(b, l + 1); r = r && consumeTokensSmart(b, 0, IN, LPAREN); r = r && in_expression_0_3(b, l + 1); r = r && consumeToken(b, RPAREN); exit_section_(b, m, null, r); return r; } // NOT? private static boolean in_expression_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "in_expression_0_0")) return false; consumeTokenSmart(b, NOT); return true; } // ( expression_in_subquery ) private static boolean in_expression_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "in_expression_0_3")) return false; boolean r; Marker m = enter_section_(b); r = expression_in_subquery(b, l + 1); exit_section_(b, m, null, r); return r; } // IS NOT? NULL private static boolean isnull_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "isnull_expression_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, IS); r = r && isnull_expression_0_1(b, l + 1); r = r && consumeToken(b, NULL); exit_section_(b, m, null, r); return r; } // NOT? private static boolean isnull_expression_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "isnull_expression_0_1")) return false; consumeTokenSmart(b, NOT); return true; } // NOT? ( LIKE | REGEXP | MATCH ) private static boolean like_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "like_expression_0")) return false; boolean r; Marker m = enter_section_(b); r = like_expression_0_0(b, l + 1); r = r && like_expression_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // NOT? private static boolean like_expression_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "like_expression_0_0")) return false; consumeTokenSmart(b, NOT); return true; } // LIKE | REGEXP | MATCH private static boolean like_expression_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "like_expression_0_1")) return false; boolean r; r = consumeTokenSmart(b, LIKE); if (!r) r = consumeTokenSmart(b, REGEXP); if (!r) r = consumeTokenSmart(b, MATCH); return r; } // ( ESCAPE expression )? private static boolean like_expression_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "like_expression_1")) return false; like_expression_1_0(b, l + 1); return true; } // ESCAPE expression private static boolean like_expression_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "like_expression_1_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ESCAPE); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // CAST '(' expression AS type_name ')' public static boolean cast_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "cast_expression")) return false; if (!nextTokenIsSmart(b, CAST)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, CAST_EXPRESSION, null); r = consumeTokensSmart(b, 1, CAST, LPAREN); p = r; // pin = 1 r = r && report_error_(b, expression(b, l + 1, -1)); r = p && report_error_(b, consumeToken(b, AS)) && r; r = p && report_error_(b, type_name(b, l + 1)) && r; r = p && consumeToken(b, RPAREN) && r; exit_section_(b, l, m, r, p, null); return r || p; } // function_call_expression_name ( ( DISTINCT )? expression ( ',' expression )* | '*' )? ')' public static boolean function_call_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression")) return false; if (!nextTokenIsSmart(b, IDENTIFIER)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, FUNCTION_CALL_EXPRESSION, null); r = function_call_expression_name(b, l + 1); p = r; // pin = 1 r = r && report_error_(b, function_call_expression_1(b, l + 1)); r = p && consumeToken(b, RPAREN) && r; exit_section_(b, l, m, r, p, null); return r || p; } // ( ( DISTINCT )? expression ( ',' expression )* | '*' )? private static boolean function_call_expression_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression_1")) return false; function_call_expression_1_0(b, l + 1); return true; } // ( DISTINCT )? expression ( ',' expression )* | '*' private static boolean function_call_expression_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression_1_0")) return false; boolean r; Marker m = enter_section_(b); r = function_call_expression_1_0_0(b, l + 1); if (!r) r = consumeTokenSmart(b, STAR); exit_section_(b, m, null, r); return r; } // ( DISTINCT )? expression ( ',' expression )* private static boolean function_call_expression_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression_1_0_0")) return false; boolean r; Marker m = enter_section_(b); r = function_call_expression_1_0_0_0(b, l + 1); r = r && expression(b, l + 1, -1); r = r && function_call_expression_1_0_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // ( DISTINCT )? private static boolean function_call_expression_1_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression_1_0_0_0")) return false; consumeTokenSmart(b, DISTINCT); return true; } // ( ',' expression )* private static boolean function_call_expression_1_0_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression_1_0_0_2")) return false; while (true) { int c = current_position_(b); if (!function_call_expression_1_0_0_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "function_call_expression_1_0_0_2", c)) break; } return true; } // ',' expression private static boolean function_call_expression_1_0_0_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "function_call_expression_1_0_0_2_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, COMMA); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // '==' | '=' | '!=' | '<>' | IS NOT? private static boolean equivalence_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "equivalence_expression_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, EQEQ); if (!r) r = consumeTokenSmart(b, EQ); if (!r) r = consumeTokenSmart(b, NOT_EQ); if (!r) r = consumeTokenSmart(b, UNEQ); if (!r) r = equivalence_expression_0_4(b, l + 1); exit_section_(b, m, null, r); return r; } // IS NOT? private static boolean equivalence_expression_0_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "equivalence_expression_0_4")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, IS); r = r && equivalence_expression_0_4_1(b, l + 1); exit_section_(b, m, null, r); return r; } // NOT? private static boolean equivalence_expression_0_4_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "equivalence_expression_0_4_1")) return false; consumeTokenSmart(b, NOT); return true; } // NOT? BETWEEN private static boolean between_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "between_expression_0")) return false; boolean r; Marker m = enter_section_(b); r = between_expression_0_0(b, l + 1); r = r && consumeToken(b, BETWEEN); exit_section_(b, m, null, r); return r; } // NOT? private static boolean between_expression_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "between_expression_0_0")) return false; consumeTokenSmart(b, NOT); return true; } // AND expression private static boolean between_expression_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "between_expression_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, AND); r = r && expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // '<' | '<=' | '>' | '>=' private static boolean comparison_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "comparison_expression_0")) return false; boolean r; r = consumeTokenSmart(b, LT); if (!r) r = consumeTokenSmart(b, LTE); if (!r) r = consumeTokenSmart(b, GT); if (!r) r = consumeTokenSmart(b, GTE); return r; } // '<<' | '>>' | '&' | '|' private static boolean bit_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bit_expression_0")) return false; boolean r; r = consumeTokenSmart(b, SHL); if (!r) r = consumeTokenSmart(b, SHR); if (!r) r = consumeTokenSmart(b, AMP); if (!r) r = consumeTokenSmart(b, BAR); return r; } // '*' | '/' | '%' private static boolean mul_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mul_expression_0")) return false; boolean r; r = consumeTokenSmart(b, STAR); if (!r) r = consumeTokenSmart(b, DIV); if (!r) r = consumeTokenSmart(b, MOD); return r; } // '-' | '+' | '~' | NOT !IN private static boolean unary_expression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unary_expression_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, MINUS); if (!r) r = consumeTokenSmart(b, PLUS); if (!r) r = consumeTokenSmart(b, TILDE); if (!r) r = unary_expression_0_3(b, l + 1); exit_section_(b, m, null, r); return r; } // NOT !IN private static boolean unary_expression_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unary_expression_0_3")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, NOT); r = r && unary_expression_0_3_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !IN private static boolean unary_expression_0_3_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unary_expression_0_3_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeTokenSmart(b, IN); exit_section_(b, l, m, r, false, null); return r; } // literal_value | bind_parameter public static boolean literal_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literal_expression")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LITERAL_EXPRESSION, "<literal expression>"); r = literal_value(b, l + 1); if (!r) r = bind_parameter(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // '{' column_ref_y_expression_other '}' public static boolean column_ref_y_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_y_expression")) return false; if (!nextTokenIsSmart(b, LBRACE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, COLUMN_REF_Y_EXPRESSION, null); r = consumeTokenSmart(b, LBRACE); p = r; // pin = 1 r = r && report_error_(b, column_ref_y_expression_other(b, l + 1)); r = p && consumeToken(b, RBRACE) && r; exit_section_(b, l, m, r, p, null); return r || p; } // '(' from_clause_subqueries_statement ')' public static boolean subquery_paren_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "subquery_paren_expression")) return false; if (!nextTokenIsSmart(b, LPAREN)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, LPAREN); r = r && from_clause_subqueries_statement(b, l + 1); r = r && consumeToken(b, RPAREN); exit_section_(b, m, SUBQUERY_PAREN_EXPRESSION, r); return r; } // aliased_column_ref_expression // | column_name public static boolean column_ref_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "column_ref_expression")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, COLUMN_REF_EXPRESSION, "<column ref expression>"); r = aliased_column_ref_expression(b, l + 1); if (!r) r = column_name(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // '(' (expression)* ')' public static boolean paren_expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "paren_expression")) return false; if (!nextTokenIsSmart(b, LPAREN)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, PAREN_EXPRESSION, null); r = consumeTokenSmart(b, LPAREN); p = r; // pin = 1 r = r && report_error_(b, paren_expression_1(b, l + 1)); r = p && consumeToken(b, RPAREN) && r; exit_section_(b, l, m, r, p, null); return r || p; } // (expression)* private static boolean paren_expression_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "paren_expression_1")) return false; while (true) { int c = current_position_(b); if (!paren_expression_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "paren_expression_1", c)) break; } return true; } // (expression) private static boolean paren_expression_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "paren_expression_1_0")) return false; boolean r; Marker m = enter_section_(b); r = expression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } }