|
|
@@ -393,351 +393,6 @@ FromClause_EDIT
|
|
|
| 'FROM' TableReferenceList_EDIT
|
|
|
;
|
|
|
|
|
|
-OptionalSelectConditions
|
|
|
- : OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalOrderByClause OptionalLimitClause
|
|
|
- {
|
|
|
- var keywords = parser.getKeywordsForOptionalsLR(
|
|
|
- [$1, $2, $3, $4, $5],
|
|
|
- [{ value: 'WHERE', weight: 7 }, { value: 'GROUP BY', weight: 6 }, { value: 'HAVING', weight: 5 }, { value: 'ORDER BY', weight: 4 }, { value: 'LIMIT', weight: 3 }],
|
|
|
- [true, true, true, true, true]);
|
|
|
-
|
|
|
- if (keywords.length > 0) {
|
|
|
- $$ = { suggestKeywords: keywords, empty: !$1 && !$2 && !$3 && !$4 && !$5 };
|
|
|
- } else {
|
|
|
- $$ = {};
|
|
|
- }
|
|
|
-
|
|
|
- $$.whereClauseLocation = $1 ? @1 : undefined;
|
|
|
- $$.limitClausePreceding = parser.firstDefined($4, @4, $3, @3, $2, @2, $1, @1);
|
|
|
- $$.limitClauseLocation = $5 ? @5 : undefined;
|
|
|
-
|
|
|
- if (!$1 && !$2 && !$3 && !$4 && !$5) {
|
|
|
- $$.suggestFilters = { prefix: 'WHERE', tablePrimaries: parser.yy.latestTablePrimaries.concat() };
|
|
|
- }
|
|
|
- if (!$2 && !$3 && !$4 && !$5) {
|
|
|
- $$.suggestGroupBys = { prefix: 'GROUP BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() };
|
|
|
- }
|
|
|
- if (!$4 && !$5) {
|
|
|
- $$.suggestOrderBys = { prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() };
|
|
|
- }
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-OptionalSelectConditions_EDIT
|
|
|
- : WhereClause_EDIT OptionalGroupByClause OptionalHavingClause OptionalOrderByClause OptionalLimitClause
|
|
|
- {
|
|
|
- if (parser.yy.result.suggestColumns) {
|
|
|
- parser.yy.result.suggestColumns.source = 'where';
|
|
|
- }
|
|
|
- }
|
|
|
- | OptionalWhereClause GroupByClause_EDIT OptionalHavingClause OptionalOrderByClause OptionalLimitClause
|
|
|
- {
|
|
|
- if (parser.yy.result.suggestColumns) {
|
|
|
- parser.yy.result.suggestColumns.source = 'group by';
|
|
|
- }
|
|
|
- }
|
|
|
- | OptionalWhereClause OptionalGroupByClause HavingClause_EDIT OptionalOrderByClause OptionalLimitClause
|
|
|
- | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OrderByClause_EDIT OptionalLimitClause
|
|
|
- {
|
|
|
- if (parser.yy.result.suggestColumns) {
|
|
|
- parser.yy.result.suggestColumns.source = 'order by';
|
|
|
- }
|
|
|
- }
|
|
|
- | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalOrderByClause LimitClause_EDIT
|
|
|
- ;
|
|
|
-
|
|
|
-OptionalSelectConditions_EDIT
|
|
|
- : WhereClause 'CURSOR' OptionalGroupByClause OptionalHavingClause OptionalOrderByClause OptionalLimitClause
|
|
|
- {
|
|
|
- var keywords = parser.getKeywordsForOptionalsLR(
|
|
|
- [$3, $4, $5, $6],
|
|
|
- [{ value: 'GROUP BY', weight: 8 }, { value: 'HAVING', weight: 7 }, { value: 'ORDER BY', weight: 5 }, { value: 'LIMIT', weight: 3 }],
|
|
|
- [true, true, true, true]);
|
|
|
- if ($1.suggestKeywords) {
|
|
|
- keywords = keywords.concat(parser.createWeightedKeywords($1.suggestKeywords, 1));
|
|
|
- }
|
|
|
- $$ = parser.getValueExpressionKeywords($1, keywords);
|
|
|
- $$.cursorAtEnd = !$3 && !$4 && !$5 && !$6;
|
|
|
- if ($1.columnReference) {
|
|
|
- $$.columnReference = $1.columnReference;
|
|
|
- }
|
|
|
- if (!$3) {
|
|
|
- parser.suggestGroupBys({ prefix: 'GROUP BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- if (!$3 && !$4 && !$5) {
|
|
|
- parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- $$.whereClauseLocation = $1 ? @1 : undefined;
|
|
|
- $$.limitClausePreceding = parser.firstDefined($5, @5, $4, @4, $3, @3, $1, @1);
|
|
|
- $$.limitClauseLocation = $6 ? @6 : undefined;
|
|
|
- }
|
|
|
- | OptionalWhereClause GroupByClause 'CURSOR' OptionalHavingClause OptionalOrderByClause OptionalLimitClause
|
|
|
- {
|
|
|
- var keywords = parser.getKeywordsForOptionalsLR(
|
|
|
- [$4, $5, $6],
|
|
|
- [{ value: 'HAVING', weight: 7 }, { value: 'ORDER BY', weight: 5 }, { value: 'LIMIT', weight: 3 }],
|
|
|
- [true, true, true]);
|
|
|
- if ($2.suggestKeywords) {
|
|
|
- keywords = keywords.concat(parser.createWeightedKeywords($2.suggestKeywords, 8));
|
|
|
- }
|
|
|
- if ($2.valueExpression) {
|
|
|
- $$ = parser.getValueExpressionKeywords($2.valueExpression, keywords);
|
|
|
- if ($2.valueExpression.columnReference) {
|
|
|
- $$.columnReference = $2.valueExpression.columnReference;
|
|
|
- }
|
|
|
- } else {
|
|
|
- $$ = { suggestKeywords: keywords };
|
|
|
- }
|
|
|
- $$.cursorAtEnd = !$4 && !$5 && !$6;
|
|
|
- if (!$4 && !$5) {
|
|
|
- parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- $$.whereClauseLocation = $1 ? @1 : undefined;
|
|
|
- $$.limitClausePreceding = parser.firstDefined($5, @5, $4, @4, $2, @2);
|
|
|
- $$.limitClauseLocation = $6 ? @6 : undefined;
|
|
|
- }
|
|
|
- | OptionalWhereClause OptionalGroupByClause HavingClause 'CURSOR' OptionalOrderByClause OptionalLimitClause
|
|
|
- {
|
|
|
- var keywords = parser.getKeywordsForOptionalsLR(
|
|
|
- [$5, $6],
|
|
|
- [{ value: 'ORDER BY', weight: 5 }, { value: 'LIMIT', weight: 3 }],
|
|
|
- [true, true]);
|
|
|
- $$ = { suggestKeywords: keywords, cursorAtEnd: !$5 && !$6 };
|
|
|
- if (!$5) {
|
|
|
- parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- $$.whereClauseLocation = $1 ? @1 : undefined;
|
|
|
- $$.limitClausePreceding = parser.firstDefined($5, @5, $3, @3);
|
|
|
- $$.limitClauseLocation = $6 ? @6 : undefined;
|
|
|
- }
|
|
|
- | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OrderByClause 'CURSOR' OptionalLimitClause
|
|
|
- {
|
|
|
- var keywords = parser.getKeywordsForOptionalsLR(
|
|
|
- [$6],
|
|
|
- [{ value: 'LIMIT', weight: 3 }],
|
|
|
- [true]);
|
|
|
- if ($4.suggestKeywords) {
|
|
|
- keywords = keywords.concat(parser.createWeightedKeywords($4.suggestKeywords, 4));
|
|
|
- }
|
|
|
- $$ = { suggestKeywords: keywords, cursorAtEnd: !$6 };
|
|
|
- $$.whereClauseLocation = $1 ? @1 : undefined;
|
|
|
- $$.limitClausePreceding = parser.firstDefined($4, @4);
|
|
|
- $$.limitClauseLocation = $6 ? @6 : undefined;
|
|
|
- }
|
|
|
- | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalOrderByClause LimitClause 'CURSOR'
|
|
|
- {
|
|
|
- $$ = { suggestKeywords: [], cursorAtEnd: true };
|
|
|
- $$.whereClauseLocation = $1 ? @1 : undefined;
|
|
|
- $$.limitClausePreceding = parser.firstDefined($4, @4, $3, @3, $2, @2, $1, @1);
|
|
|
- $$.limitClauseLocation = @5;
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-OptionalWhereClause
|
|
|
- :
|
|
|
- | WhereClause
|
|
|
- ;
|
|
|
-
|
|
|
-WhereClause
|
|
|
- : 'WHERE' SearchCondition -> $2
|
|
|
- ;
|
|
|
-
|
|
|
-WhereClause_EDIT
|
|
|
- : 'WHERE' SearchCondition_EDIT
|
|
|
- {
|
|
|
- if ($2.suggestFilters) {
|
|
|
- parser.suggestFilters({ tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- }
|
|
|
- | 'WHERE' 'CURSOR'
|
|
|
- {
|
|
|
- parser.suggestFunctions();
|
|
|
- parser.suggestColumns();
|
|
|
- parser.suggestKeywords(['EXISTS', 'NOT EXISTS']);
|
|
|
- parser.suggestFilters({ tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-OptionalGroupByClause
|
|
|
- :
|
|
|
- | GroupByClause
|
|
|
- ;
|
|
|
-
|
|
|
-GroupByClause
|
|
|
- : 'GROUP' 'BY' GroupByColumnList
|
|
|
- {
|
|
|
- $$ = { valueExpression: $3 };
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-GroupByClause_EDIT
|
|
|
- : 'GROUP' 'BY' GroupByColumnList_EDIT
|
|
|
- {
|
|
|
- parser.suggestSelectListAliases();
|
|
|
- }
|
|
|
- | 'GROUP' 'BY' 'CURSOR'
|
|
|
- {
|
|
|
- parser.valueExpressionSuggest();
|
|
|
- parser.suggestSelectListAliases();
|
|
|
- parser.suggestGroupBys({ tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- | 'GROUP' 'CURSOR'
|
|
|
- {
|
|
|
- parser.suggestKeywords(['BY']);
|
|
|
- parser.suggestGroupBys({ prefix: 'BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-ColumnGroupingSets
|
|
|
- :
|
|
|
- | ColumnReference
|
|
|
- | ColumnGroupingSets ',' ColumnGroupingSets
|
|
|
- | '(' ColumnGroupingSets ')'
|
|
|
- ;
|
|
|
-
|
|
|
-ColumnGroupingSets_EDIT
|
|
|
- : ColumnGroupingSet_EDIT
|
|
|
- | ColumnGroupingSet_EDIT ',' ColumnGroupingSets
|
|
|
- | ColumnGroupingSets ',' ColumnGroupingSet_EDIT
|
|
|
- | ColumnGroupingSets ',' ColumnGroupingSet_EDIT ',' ColumnGroupingSets
|
|
|
- | '(' ColumnGroupingSets_EDIT RightParenthesisOrError
|
|
|
- ;
|
|
|
-
|
|
|
-ColumnGroupingSet_EDIT
|
|
|
- : AnyCursor
|
|
|
- {
|
|
|
- parser.suggestColumns();
|
|
|
- }
|
|
|
- | ColumnReference_EDIT
|
|
|
- ;
|
|
|
-
|
|
|
-GroupByColumnList
|
|
|
- : ValueExpression
|
|
|
- | GroupByColumnList ',' ValueExpression -> $3
|
|
|
- ;
|
|
|
-
|
|
|
-GroupByColumnList_EDIT
|
|
|
- : ValueExpression_EDIT
|
|
|
- | 'CURSOR' ValueExpression
|
|
|
- {
|
|
|
- parser.valueExpressionSuggest();
|
|
|
- }
|
|
|
- | 'CURSOR' ',' GroupByColumnList
|
|
|
- {
|
|
|
- parser.valueExpressionSuggest();
|
|
|
- }
|
|
|
- | ValueExpression_EDIT ',' GroupByColumnList
|
|
|
- | GroupByColumnList ',' GroupByColumnListPartTwo_EDIT
|
|
|
- | GroupByColumnList ',' GroupByColumnListPartTwo_EDIT ','
|
|
|
- | GroupByColumnList ',' GroupByColumnListPartTwo_EDIT ',' GroupByColumnList
|
|
|
- ;
|
|
|
-
|
|
|
-GroupByColumnListPartTwo_EDIT
|
|
|
- : ValueExpression_EDIT
|
|
|
- | AnyCursor ValueExpression
|
|
|
- {
|
|
|
- parser.valueExpressionSuggest();
|
|
|
- }
|
|
|
- | AnyCursor
|
|
|
- {
|
|
|
- parser.valueExpressionSuggest();
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-OptionalOrderByClause
|
|
|
- :
|
|
|
- | OrderByClause
|
|
|
- ;
|
|
|
-
|
|
|
-OrderByClause
|
|
|
- : 'ORDER' 'BY' OrderByColumnList -> $3
|
|
|
- ;
|
|
|
-
|
|
|
-OrderByClause_EDIT
|
|
|
- : 'ORDER' 'BY' OrderByColumnList_EDIT
|
|
|
- {
|
|
|
- if ($3.emptyOrderBy) {
|
|
|
- parser.suggestOrderBys({ tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- }
|
|
|
- | 'ORDER' 'CURSOR'
|
|
|
- {
|
|
|
- parser.suggestKeywords(['BY']);
|
|
|
- parser.suggestOrderBys({ prefix: 'BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() });
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-OrderByColumnList
|
|
|
- : OrderByIdentifier
|
|
|
- | OrderByColumnList ',' OrderByIdentifier -> $3
|
|
|
- ;
|
|
|
-
|
|
|
-OrderByColumnList_EDIT
|
|
|
- : OrderByIdentifier_EDIT
|
|
|
- | 'CURSOR' OrderByIdentifier
|
|
|
- {
|
|
|
- $$ = { emptyOrderBy: false }
|
|
|
- parser.valueExpressionSuggest();
|
|
|
- parser.suggestAnalyticFunctions();
|
|
|
- parser.suggestSelectListAliases();
|
|
|
- }
|
|
|
- | OrderByColumnList ',' OrderByIdentifier_EDIT -> { emptyOrderBy: false }
|
|
|
- | OrderByColumnList ',' OrderByIdentifier_EDIT ',' -> { emptyOrderBy: false }
|
|
|
- | OrderByColumnList ',' OrderByIdentifier_EDIT ',' OrderByColumnList -> { emptyOrderBy: false }
|
|
|
- ;
|
|
|
-
|
|
|
-OrderByIdentifier
|
|
|
- : ValueExpression OptionalAscOrDesc -> parser.mergeSuggestKeywords($2)
|
|
|
- ;
|
|
|
-
|
|
|
-OrderByIdentifier_EDIT
|
|
|
- : ValueExpression_EDIT OptionalAscOrDesc
|
|
|
- {
|
|
|
- parser.suggestSelectListAliases();
|
|
|
- }
|
|
|
- | AnyCursor OptionalAscOrDesc
|
|
|
- {
|
|
|
- $$ = { emptyOrderBy: true }
|
|
|
- parser.valueExpressionSuggest();
|
|
|
- parser.suggestAnalyticFunctions();
|
|
|
- parser.suggestSelectListAliases();
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-OptionalAscOrDesc
|
|
|
- : -> { suggestKeywords: ['ASC', 'DESC'] };
|
|
|
- | 'ASC'
|
|
|
- | 'DESC'
|
|
|
- ;
|
|
|
-
|
|
|
-OptionalLimitClause
|
|
|
- :
|
|
|
- | LimitClause
|
|
|
- ;
|
|
|
-
|
|
|
-LimitClause
|
|
|
- : 'LIMIT' UnsignedNumericLiteral
|
|
|
- | 'LIMIT' UnsignedNumericLiteral ',' UnsignedNumericLiteral
|
|
|
- | 'LIMIT' 'VARIABLE_REFERENCE'
|
|
|
- | 'LIMIT' 'VARIABLE_REFERENCE' ',' 'VARIABLE_REFERENCE'
|
|
|
- ;
|
|
|
-
|
|
|
-LimitClause_EDIT
|
|
|
- : 'LIMIT' 'CURSOR'
|
|
|
- {
|
|
|
- parser.suggestKeywords([{ value: '10', weight: 10000 }, { value: '100', weight: 10000 }, { value: '1000', weight: 10000 }, { value: '5000', weight: 10000 }, { value: '10000', weight: 10000 }])
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-SearchCondition
|
|
|
- : ValueExpression
|
|
|
- ;
|
|
|
-
|
|
|
-SearchCondition_EDIT
|
|
|
- : ValueExpression_EDIT
|
|
|
- ;
|
|
|
-
|
|
|
-
|
|
|
SelectSpecification
|
|
|
: ValueExpression OptionalCorrelationName
|
|
|
{
|