Browse Source

HUE-8856 [autocomplete] Solve grammar conflicts and generate initial set of parsers

Johan Ahlen 6 năm trước cách đây
mục cha
commit
60b9e57346

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 91 - 0
desktop/core/src/desktop/js/parse/genericAutocompleteParser.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 91 - 0
desktop/core/src/desktop/js/parse/genericSyntaxParser.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 91 - 0
desktop/core/src/desktop/js/parse/hiveAutocompleteParser.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 91 - 0
desktop/core/src/desktop/js/parse/hiveSyntaxParser.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 91 - 0
desktop/core/src/desktop/js/parse/impalaAutocompleteParser.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 91 - 0
desktop/core/src/desktop/js/parse/impalaSyntaxParser.js


+ 4 - 61
desktop/core/src/desktop/js/parse/jison/sql/generic/sql_main.jison

@@ -100,7 +100,7 @@ RegularIdentifier
 // This is a work-around for error handling when a statement starts with some token that the parser can understand but
 // it's not a valid statement (see ErrorStatement). It contains everything except valid starting tokens ('SELECT', 'USE' etc.)
 NonStartingToken
- | '!'
+ : '!'
  | '('
  | ')'
  | '*'
@@ -425,14 +425,10 @@ ColumnList
  ;
 
 ColumnList_EDIT
- : ColumnIdentifier_EDIT
- | ColumnList ',' AnyCursor
+ : ColumnList ',' AnyCursor
    {
      parser.suggestColumns();
    }
- | ColumnList ',' ColumnIdentifier_EDIT
- | ColumnIdentifier_EDIT ',' ColumnList
- | ColumnList ',' ColumnIdentifier_EDIT ',' ColumnList
  | ColumnList ',' AnyCursor ',' ColumnList
    {
      parser.suggestColumns();
@@ -618,25 +614,7 @@ BasicIdentifierChain
 
 // TODO: Merge with DerivedColumnChain_EDIT ( issue is starting with PartialBacktickedOrPartialCursor)
 BasicIdentifierChain_EDIT
- : ColumnIdentifier_EDIT
-   {
-     if ($1.insideKey) {
-       parser.suggestKeyValues({ identifierChain: [ $1.identifier ] });
-       parser.suggestColumns();
-       parser.suggestFunctions();
-     }
-   }
- | BasicIdentifierChain '.' ColumnIdentifier_EDIT
-   {
-     if ($3.insideKey) {
-       parser.suggestKeyValues({ identifierChain: $1.concat([ $3.identifier ]) });
-       parser.suggestColumns();
-       parser.suggestFunctions();
-     }
-   }
- | BasicIdentifierChain '.' ColumnIdentifier_EDIT '.' BasicIdentifierChain
- | ColumnIdentifier_EDIT '.' BasicIdentifierChain
- | BasicIdentifierChain '.' PartialBacktickedOrPartialCursor
+ : BasicIdentifierChain '.' PartialBacktickedOrPartialCursor
    {
      parser.suggestColumns({
        identifierChain: $1
@@ -661,39 +639,7 @@ DerivedColumnChain
  ;
 
 DerivedColumnChain_EDIT
- : ColumnIdentifier_EDIT
-   {
-     if ($1.insideKey) {
-       parser.suggestKeyValues({ identifierChain: [ $1.identifier ] });
-       parser.suggestColumns();
-       parser.suggestFunctions();
-     }
-   }
- | DerivedColumnChain '.' ColumnIdentifier_EDIT
-   {
-     if ($3.insideKey) {
-       parser.suggestKeyValues({ identifierChain: $1.concat([ $3.identifier ]) });
-       parser.suggestColumns();
-       parser.suggestFunctions();
-     }
-   }
- | DerivedColumnChain '.' ColumnIdentifier_EDIT '.' DerivedColumnChain
-   {
-     if ($3.insideKey) {
-       parser.suggestKeyValues({ identifierChain: $1.concat([ $3.identifier ]) });
-       parser.suggestColumns();
-       parser.suggestFunctions();
-     }
-   }
- | ColumnIdentifier_EDIT '.' DerivedColumnChain
-   {
-     if ($1.insideKey) {
-       parser.suggestKeyValues({ identifierChain: [ $1.identifier ] });
-       parser.suggestColumns();
-       parser.suggestFunctions();
-     }
-   }
- | PartialBacktickedIdentifierOrPartialCursor
+ : PartialBacktickedIdentifierOrPartialCursor
    {
      parser.suggestColumns();
    }
@@ -715,9 +661,6 @@ ColumnIdentifier
  : RegularOrBacktickedIdentifier                                                                               -> { identifier: { name: $1 }, location: @1 };
  ;
 
-ColumnIdentifier_EDIT
- ;
-
 PartialBacktickedIdentifierOrPartialCursor
  : PartialBacktickedIdentifier
  | 'PARTIAL_CURSOR'

+ 0 - 5
desktop/core/src/desktop/js/parse/jison/sql/hive/sql_alter.jison

@@ -616,11 +616,6 @@ OneOrMorePartitionSpecs_EDIT
  | OneOrMorePartitionSpecs ',' PartitionSpec_EDIT ',' OneOrMorePartitionSpecs
  ;
 
-OptionalPurge
- :
- | 'PURGE'
- ;
-
 OptionalPartitionSpecs
  :
  | PartitionSpecWithLocationList

+ 2 - 4
desktop/core/src/desktop/js/parse/jison/sql/hive/sql_create.jison

@@ -1078,13 +1078,11 @@ ViewDefinition_EDIT
  ;
 
 FunctionDefinition
- : FunctionDefinition
- | TemporaryFunction
+ : TemporaryFunction
  ;
 
 FunctionDefinition_EDIT
- : FunctionDefinition_EDIT
- | TemporaryFunction_EDIT
+ : TemporaryFunction_EDIT
  ;
 
 FunctionDefinition

+ 8 - 10
desktop/core/src/desktop/js/parse/jison/sql/hive/sql_insert.jison

@@ -19,8 +19,7 @@ DataManipulation
  ;
 
 InsertStatement
- : InsertStatement
- | InsertValuesStatement
+ : InsertValuesStatement
  | CommonTableExpression InsertStatement
  | MergeStatement
  ;
@@ -259,11 +258,6 @@ InsertValuesStatement
      $4.owner = 'insert';
      parser.addTablePrimary($4);
    }
- | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier 'VALUES' InsertValuesList
-   {
-     $4.owner = 'insert';
-     parser.addTablePrimary($4);
-   }
  ;
 
 InsertValuesStatement_EDIT
@@ -280,13 +274,17 @@ InsertValuesStatement_EDIT
      parser.suggestDatabases({ appendDot: true });
    }
  | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier_EDIT
- | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier 'CURSOR'
+ | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR'
    {
      $4.owner = 'insert';
      parser.addTablePrimary($4);
-     parser.suggestKeywords(['VALUES']);
+     if (!$5) {
+       parser.suggestKeywords(['PARTITION', 'VALUES']);
+     } else {
+       parser.suggestKeywords(['VALUES']);
+     }
    }
- | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier_EDIT 'VALUES' InsertValuesList
+ | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec 'VALUES' InsertValuesList
  ;
 
 InsertValuesList

+ 18 - 34
desktop/core/src/desktop/js/parse/jison/sql/hive/sql_main.jison

@@ -184,7 +184,6 @@ NonReservedKeyword
  | 'REPLICATION'
  | 'RESTRICT'
  | 'ROLE'
- | 'ROLE'
  | 'ROLES'
  | 'SCHEMAS'
  | 'SECOND'
@@ -329,7 +328,6 @@ NonStartingToken
  | 'DELIMITED'
  | 'DEPENDENCY'
  | 'DESC'
- | 'DESC'
  | 'DIRECTORY'
  | 'DISTINCT'
  | 'DISTRIBUTE'
@@ -532,11 +530,6 @@ DatabaseOrSchema
  | 'SCHEMA'
  ;
 
-FromOrIn
- : 'FROM'
- | 'IN'
- ;
-
 IndexOrIndexes
  : 'INDEX'
  | 'INDEXES'
@@ -632,12 +625,6 @@ OptionalCascadeOrRestrict
  | 'RESTRICT'
  ;
 
-OptionalCascadeOrRestrict
- :
- | 'CASCADE'
- | 'RESTRICT'
- ;
-
 OptionalTemporary
  :
  | 'TEMPORARY'
@@ -1471,7 +1458,6 @@ WithQuery_EDIT
 OptionalAllOrDistinct
  :
  | 'ALL'
- | 'ALL'
  | 'DISTINCT'
  ;
 
@@ -2012,8 +1998,6 @@ OptionalAscOrDesc
     $$ = { suggestKeywords: ['ASC', 'DESC'] };
   }
  | 'ASC'
- | 'ASC'
- | 'DESC'
  | 'DESC'
  ;
 
@@ -3205,24 +3189,24 @@ OptionalOrderByAndWindow
  ;
 
 OptionalOrderByAndWindow_EDIT
-  : OrderByClause_EDIT
-    {
-      // Only allowed in last order by
-      delete parser.yy.result.suggestAnalyticFunctions;
-    }
-  | OrderByClause 'CURSOR' OptionalWindowSpec
-    {
-      var keywords = [];
-      if ($1.suggestKeywords) {
-        keywords = parser.createWeightedKeywords($1.suggestKeywords, 2);
-      }
-      if (!$3) {
-        keywords = keywords.concat([{ value: 'RANGE BETWEEN', weight: 1 }, { value: 'ROWS BETWEEN', weight: 1 }]);
-      }
-      parser.suggestKeywords(keywords);
-    }
-  | OrderByClause WindowSpec_EDIT
-  ;
+ : OrderByClause_EDIT
+   {
+     // Only allowed in last order by
+     delete parser.yy.result.suggestAnalyticFunctions;
+   }
+ | OrderByClause 'CURSOR' OptionalWindowSpec
+   {
+     var keywords = [];
+     if ($1.suggestKeywords) {
+       keywords = parser.createWeightedKeywords($1.suggestKeywords, 2);
+     }
+     if (!$3) {
+       keywords = keywords.concat([{ value: 'RANGE BETWEEN', weight: 1 }, { value: 'ROWS BETWEEN', weight: 1 }]);
+     }
+     parser.suggestKeywords(keywords);
+   }
+ | OrderByClause WindowSpec_EDIT
+ ;
 
 OptionalWindowSpec
  :

+ 0 - 5
desktop/core/src/desktop/js/parse/jison/sql/hive/sql_show.jison

@@ -43,11 +43,6 @@ ShowStatement
  | ShowViewsStatement
  ;
 
-'SHOW'
- : 'SHOW'
- | 'SHOW'
- ;
-
 ShowStatement_EDIT
  : 'SHOW' 'CURSOR'
    {

+ 2 - 2
desktop/core/src/desktop/js/parse/jison/sql/impala/autocomplete_header.jison

@@ -22,8 +22,8 @@
 
 %left ';' ','
 %nonassoc 'CURSOR' 'PARTIAL_CURSOR'
-%nonassoc 'IN' 'IS' '<impala>ILIKE' '<impala>IREGEXP' 'LIKE' 'RLIKE' 'REGEXP' 'EXISTS' NEGATION
+%nonassoc 'IN' 'IS' 'ILIKE' 'IREGEXP' 'LIKE' 'RLIKE' 'REGEXP' 'EXISTS' NEGATION
 
 %start SqlAutocomplete
 
-%%
+%%

+ 0 - 4
desktop/core/src/desktop/js/parse/jison/sql/impala/sql_main.jison

@@ -203,7 +203,6 @@ NonStartingToken
  | 'CROSS'
  | 'CUBE'
  | 'CURRENT'
- | 'CURRENT'
  | 'CURRENT_DATE'
  | 'CURRENT_DEFAULT_TRANSFORM_GROUP'
  | 'CURRENT_PATH'
@@ -3024,13 +3023,10 @@ OptionalOverClause_EDIT
 OverClause
  : 'OVER' RegularOrBacktickedIdentifier
  | 'OVER' WindowExpression
- | 'OVER' RegularOrBacktickedIdentifier
- | 'OVER' WindowExpression
  ;
 
 OverClause_EDIT
  : 'OVER' WindowExpression_EDIT
- | 'OVER' WindowExpression_EDIT
  ;
 
 WindowExpression

+ 2 - 2
desktop/core/src/desktop/js/parse/jison/sql/impala/sql_valueExpression.jison

@@ -582,8 +582,8 @@ ValueExpression
 
 LikeRightPart
  : 'LIKE' ValueExpression             -> { suggestKeywords: ['NOT'] }
- | 'ILIKE' ValueExpression    -> { suggestKeywords: ['NOT'] }
- | 'IREGEXP' ValueExpression  -> { suggestKeywords: ['NOT'] }
+ | 'ILIKE' ValueExpression            -> { suggestKeywords: ['NOT'] }
+ | 'IREGEXP' ValueExpression          -> { suggestKeywords: ['NOT'] }
  | 'RLIKE' ValueExpression            -> { suggestKeywords: ['NOT'] }
  | 'REGEXP' ValueExpression           -> { suggestKeywords: ['NOT'] }
  ;

+ 2 - 2
desktop/core/src/desktop/js/parse/jison/sql/impala/syntax_header.jison

@@ -21,8 +21,8 @@
 %left '-' '*' 'ARITHMETIC_OPERATOR'
 
 %left ';' ','
-%nonassoc 'IN' 'IS' '<impala>ILIKE' '<impala>IREGEXP' 'LIKE' 'RLIKE' 'REGEXP' 'EXISTS' NEGATION
+%nonassoc 'IN' 'IS' 'ILIKE' 'IREGEXP' 'LIKE' 'RLIKE' 'REGEXP' 'EXISTS' NEGATION
 
 %start SqlSyntax
 
-%%
+%%

+ 2 - 20
tools/jison/generateParsers.js

@@ -121,7 +121,7 @@ const execCmd = cmd =>
   new Promise((resolve, reject) => {
     exec(cmd, (err, stdout, stderr) => {
       if (err) {
-        reject(stderr);
+        reject('stderr:\n' + stderr + '\n\nstdout:\n' + stdout);
       }
       resolve();
     });
@@ -138,7 +138,7 @@ const generateParser = parserName =>
 
         Promise.all(promises)
           .then(contents => {
-            writeFile(JISON_FOLDER + parserConfig.target, contents).then(() => {
+            writeFile(JISON_FOLDER + parserConfig.target, contents.join('')).then(() => {
               resolve(JISON_FOLDER + parserConfig.target);
             });
           })
@@ -200,24 +200,6 @@ const listDir = folder =>
     });
   });
 
-/*
-sqlSyntaxParser: {
-    sources: [
-      'syntax_header.jison', 'sql_main.jison', 'sql_valueExpression.jison', 'sql_alter.jison', 'sql_analyze.jison',
-      'sql_create.jison', 'sql_drop.jison', 'sql_grant.jison', 'sql_insert.jison', 'sql_load.jison', 'sql_set.jison',
-      'sql_show.jison', 'sql_update.jison', 'sql_use.jison', 'syntax_footer.jison'
-    ],
-    target: 'sqlSyntaxParser.jison',
-    lexer: 'sql.jisonlex',
-    afterParse: (contents) => new Promise(resolve => {
-      resolve(LICENSE +
-        contents.replace('var sqlSyntaxParser = ', 'import SqlParseSupport from \'parse/sqlParseSupport\';\n\nvar sqlSyntaxParser = ')
-          .replace('loc: yyloc,', 'loc: lexer.yylloc, ruleId: stack.slice(stack.length - 2, stack.length).join(\'\'),') +
-        '\nexport default sqlSyntaxParser;\n');
-    })
-  },
- */
-
 const findParser = (fileIndex, folder, sharedFiles, autocomplete) => {
   const prefix = autocomplete ? 'autocomplete' : 'syntax';
   if (fileIndex[prefix + '_header.jison'] && fileIndex[prefix + '_footer.jison']) {

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác