Explorar o código

HUE-9464 [editor] Add Hive parser support for ALTER SCHEDULED QUERY

Johan Ahlen %!s(int64=5) %!d(string=hai) anos
pai
achega
cff3b41bdd

+ 55 - 0
desktop/core/src/desktop/js/parse/jison/sql/hive/alter/alter_scheduled_query.jison

@@ -0,0 +1,55 @@
+// Licensed to Cloudera, Inc. under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  Cloudera, Inc. licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Depends on create_scheduled_query.jison
+
+DataDefinition
+ : AlterScheduledQuery
+ ;
+
+DataDefinition_EDIT
+ : AlterScheduledQuery_EDIT
+   {
+     if ($1 && $1.suggestKeywords) {
+       parser.suggestKeywords($1.suggestKeywords);
+     }
+   }
+ ;
+
+AlterScheduledQuery
+ : 'ALTER' 'SCHEDULED' 'QUERY' RegularOrBacktickedIdentifier AlterScheduledQueryRightPart
+ ;
+
+AlterScheduledQuery_EDIT
+ : 'ALTER' 'SCHEDULED' 'CURSOR' -> { suggestKeywords: ['QUERY'] }
+ | 'ALTER' 'SCHEDULED' 'QUERY' RegularOrBacktickedIdentifier 'CURSOR' -> { suggestKeywords: ['AS', 'CRON', 'DEFINED AS', 'DISABLE', 'DISABLED', 'ENABLE', 'ENABLED', 'EVERY', 'EXECUTE', 'EXECUTED AS' ] }
+ | 'ALTER' 'SCHEDULED' 'QUERY' RegularOrBacktickedIdentifier AlterScheduledQueryRightPart_EDIT -> $5
+ ;
+
+AlterScheduledQueryRightPart
+ : ScheduleSpecification
+ | ExecutedAs
+ | EnabledOrDisabled
+ | DefinedAsSpecification
+ | 'EXECUTE'
+ ;
+
+AlterScheduledQueryRightPart_EDIT
+ : ScheduleSpecification_EDIT
+ | ScheduleSpecification 'CURSOR' -> $1
+ | ExecutedAs_EDIT
+ | DefinedAsSpecification_EDIT
+ ;

+ 10 - 2
desktop/core/src/desktop/js/parse/jison/sql/hive/create/create_scheduled_query.jison

@@ -69,7 +69,11 @@ ScheduleSpecification_EDIT
 
 OptionalExecutedAs
  :
- | 'EXECUTED' 'AS' QuotedValue
+ | ExecutedAs
+ ;
+
+ExecutedAs
+ : 'EXECUTED' 'AS' QuotedValue
  | 'EXECUTED' 'AS' RegularOrBacktickedIdentifier
  ;
 
@@ -79,7 +83,11 @@ ExecutedAs_EDIT
 
 OptionalEnabledOrDisabled
  :
- | 'ENABLE'
+ | EnabledOrDisabled
+ ;
+
+EnabledOrDisabled
+ : 'ENABLE'
  | 'ENABLED'
  | 'DISABLE'
  | 'DISABLED'

+ 1 - 0
desktop/core/src/desktop/js/parse/jison/sql/hive/sql.jisonlex

@@ -192,6 +192,7 @@ DOUBLE\s+PRECISION                   { return 'DOUBLE_PRECISION'; }
 'ESCAPED'                            { return 'ESCAPED'; }
 'EVERY'                              { return 'EVERY'; }
 'EXCHANGE'                           { return 'EXCHANGE'; }
+'EXECUTE'                            { return 'EXECUTE'; }
 'EXECUTED'                           { return 'EXECUTED'; }
 'EXPLAIN'                            { parser.determineCase(yytext); return 'EXPLAIN'; }
 'EXPORT'                             { parser.determineCase(yytext); return 'EXPORT'; }

+ 2 - 0
desktop/core/src/desktop/js/parse/jison/sql/hive/sql_main.jison

@@ -135,6 +135,7 @@ NonReservedKeyword
  | 'ESCAPED'
  | 'EVERY'
  | 'EXCHANGE'
+ | 'EXECUTE'
  | 'EXECUTED'
  | 'EXPLAIN'
  | 'EXPORT'
@@ -347,6 +348,7 @@ NonStartingToken
  | 'END'
  | 'ESCAPED'
  | 'EVERY'
+ | 'EXECUTE'
  | 'EXECUTED'
  | 'EXISTS'
  | 'EXTENDED'

+ 2 - 0
desktop/core/src/desktop/js/parse/jison/sql/hive/structure.json

@@ -8,6 +8,7 @@
     "alter/alter_database.jison",
     "alter/alter_index.jison",
     "alter/alter_materialized_view.jison",
+    "alter/alter_scheduled_query.jison",
     "alter/alter_table.jison",
     "alter/alter_view.jison",
     "analyze/analyze_table.jison",
@@ -119,6 +120,7 @@
     "alter/alter_database.jison",
     "alter/alter_index.jison",
     "alter/alter_materialized_view.jison",
+    "alter/alter_scheduled_query.jison",
     "alter/alter_table.jison",
     "alter/alter_view.jison",
     "analyze/analyze_table.jison",

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
desktop/core/src/desktop/js/parse/sql/hive/hiveAutocompleteParser.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
desktop/core/src/desktop/js/parse/sql/hive/hiveSyntaxParser.js


+ 1 - 1
desktop/core/src/desktop/js/parse/sql/hive/keywords.json

@@ -1,5 +1,5 @@
 {
-  "ALTER": ["DATABASE", "INDEX", "MATERIALIZED VIEW", "SCHEMA", "TABLE", "VIEW"],
+  "ALTER": ["DATABASE", "INDEX", "MATERIALIZED VIEW", "SCHEDULED QUERY", "SCHEMA", "TABLE", "VIEW"],
   "ALTER TABLE ADD CONSTRAINT identifier": ["CHECK", "FOREIGN KEY", "PRIMARY KEY", "UNIQUE"],
   "DROP": ["DATABASE", "FUNCTION", "INDEX", "MATERIALIZED VIEW", "ROLE", "SCHEMA", "TABLE", "TEMPORARY FUNCTION", "TEMPORARY MACRO", "VIEW"],
   "SHOW": [

+ 44 - 58
desktop/core/src/desktop/js/parse/sql/hive/test/alter/alterScheduledQuery.test.js

@@ -16,7 +16,7 @@
 
 import hiveAutocompleteParser from '../../hiveAutocompleteParser';
 
-describe('hiveAutocompleteParser.js CREATE SCHEDULED QUERY statements', () => {
+describe('hiveAutocompleteParser.js ALTER SCHEDULED QUERY statements', () => {
   beforeAll(() => {
     hiveAutocompleteParser.yy.parseError = function (msg) {
       throw Error(msg);
@@ -34,10 +34,9 @@ describe('hiveAutocompleteParser.js CREATE SCHEDULED QUERY statements', () => {
     ).toEqualDefinition(testDefinition);
   };
 
-  it('should handle "CREATE SCHEDULED QUERY sc1 CRON \'0 */10 * * * ? *\' AS INSERT INTO t VALUES (1); |"', () => {
+  it('should handle "ALTER SCHEDULED QUERY sc1 CRON \'0 */10 * * * ? *\'; |"', () => {
     assertAutoComplete({
-      beforeCursor:
-        "CREATE SCHEDULED QUERY sc1 CRON '0 */10 * * * ? *' AS INSERT INTO t VALUES (1); ",
+      beforeCursor: "ALTER SCHEDULED QUERY sc1 CRON '0 */10 * * * ? *'; ",
       afterCursor: '',
       containsKeywords: ['SELECT'],
       expectedResult: {
@@ -46,10 +45,9 @@ describe('hiveAutocompleteParser.js CREATE SCHEDULED QUERY statements', () => {
     });
   });
 
-  it('should handle "CREATE SCHEDULED QUERY test EVERY 10 MINUTES EXECUTED AS bar DISABLED DEFINED AS SELECT * FROM foo; |', () => {
+  it('should handle "ALTER SCHEDULED QUERY sc1 AS INSERT INTO t VALUES (1); |"', () => {
     assertAutoComplete({
-      beforeCursor:
-        'CREATE SCHEDULED QUERY test EVERY 10 MINUTES EXECUTED AS bar DISABLED DEFINED AS SELECT * FROM foo; ',
+      beforeCursor: 'ALTER SCHEDULED QUERY sc1 AS INSERT INTO t VALUES (1); ',
       afterCursor: '',
       containsKeywords: ['SELECT'],
       expectedResult: {
@@ -58,120 +56,119 @@ describe('hiveAutocompleteParser.js CREATE SCHEDULED QUERY statements', () => {
     });
   });
 
-  it('should suggest keywords for "CREATE |"', () => {
+  it('should handle "ALTER SCHEDULED QUERY sc1 EXECUTE; |"', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE ',
+      beforeCursor: 'ALTER SCHEDULED QUERY sc1 EXECUTE; ',
       afterCursor: '',
-      containsKeywords: ['SCHEDULED QUERY'],
+      containsKeywords: ['SELECT'],
       expectedResult: {
         lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED |"', () => {
+  it('should handle "ALTER SCHEDULED QUERY test EVERY 10 MINUTES; |', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED ',
+      beforeCursor: 'ALTER SCHEDULED QUERY test EVERY 10 MINUTES; ',
       afterCursor: '',
+      containsKeywords: ['SELECT'],
       expectedResult: {
-        lowerCase: false,
-        suggestKeywords: ['QUERY']
+        lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo |"', () => {
+  it('should handle "ALTER SCHEDULED QUERY test EXECUTED AS bar; |', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo ',
+      beforeCursor: 'ALTER SCHEDULED QUERY test EXECUTED AS bar; ',
       afterCursor: '',
+      containsKeywords: ['SELECT'],
       expectedResult: {
-        lowerCase: false,
-        suggestKeywords: ['CRON', 'EVERY']
+        lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 10 |"', () => {
+  it('should handle "ALTER SCHEDULED QUERY test ENABLE; |', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 10 ',
+      beforeCursor: 'ALTER SCHEDULED QUERY test ENABLE; ',
       afterCursor: '',
-      containsKeywords: ['MINUTE', 'DAY'],
+      containsKeywords: ['SELECT'],
       expectedResult: {
         lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 10 DAY |"', () => {
+  it('should handle "ALTER SCHEDULED QUERY test DEFINED AS SELECT * FROM foo; |', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 10 DAY ',
+      beforeCursor: 'ALTER SCHEDULED QUERY test DEFINED AS SELECT * FROM foo; ',
       afterCursor: '',
-      containsKeywords: ['EXECUTED AS', 'ENABLED', 'DISABLE', 'DEFINED AS', 'AS'],
+      containsKeywords: ['SELECT'],
       expectedResult: {
         lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo CRON \'Some cron\' |"', () => {
+  it('should suggest keywords for "ALTER |"', () => {
     assertAutoComplete({
-      beforeCursor: "CREATE SCHEDULED QUERY foo CRON 'Some cron' ",
+      beforeCursor: 'ALTER ',
       afterCursor: '',
-      containsKeywords: ['EXECUTED AS', 'ENABLED', 'DISABLE', 'DEFINED AS', 'AS'],
+      containsKeywords: ['SCHEDULED QUERY'],
       expectedResult: {
         lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo CRON \'Some cron\' EXECUTED |"', () => {
+  it('should suggest keywords for "ALTER SCHEDULED |"', () => {
     assertAutoComplete({
-      beforeCursor: "CREATE SCHEDULED QUERY foo CRON 'Some cron' EXECUTED ",
+      beforeCursor: 'ALTER SCHEDULED ',
       afterCursor: '',
       expectedResult: {
         lowerCase: false,
-        suggestKeywords: ['AS']
+        suggestKeywords: ['QUERY']
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 1 MINUTE EXECUTED AS bar |"', () => {
+  it('should suggest keywords for "ALTER SCHEDULED QUERY foo |"', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 1 MINUTE EXECUTED AS bar ',
+      beforeCursor: 'ALTER SCHEDULED QUERY foo ',
       afterCursor: '',
-      containsKeywords: ['ENABLED', 'DISABLE', 'DEFINED AS', 'AS'],
-      doesNotContainKeywords: ['EXECUTED AS'],
+      containsKeywords: ['CRON', 'EVERY', 'EXECUTE', 'ENABLE', 'DEFINED AS', 'EXECUTED AS'],
       expectedResult: {
         lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 1 MINUTE EXECUTED AS bar DISABLE |"', () => {
+  it('should suggest keywords for "ALTER SCHEDULED QUERY foo EVERY 10 |"', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 1 MINUTE EXECUTED AS bar DISABLE ',
+      beforeCursor: 'ALTER SCHEDULED QUERY foo EVERY 10 ',
       afterCursor: '',
+      containsKeywords: ['MINUTE', 'DAY'],
       expectedResult: {
-        lowerCase: false,
-        suggestKeywords: ['AS', 'DEFINED AS']
+        lowerCase: false
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED |"', () => {
+  it('should suggest keywords for "ALTER SCHEDULED QUERY foo EXECUTED |"', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED ',
+      beforeCursor: 'ALTER SCHEDULED QUERY foo EXECUTED ',
       afterCursor: '',
       expectedResult: {
         lowerCase: false,
-        suggestKeywords: ['AS', 'DEFINED AS']
+        suggestKeywords: ['AS']
       }
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED DEFINED |"', () => {
+  it('should suggest keywords for "ALTER SCHEDULED QUERY foo DEFINED |"', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED DEFINED ',
+      beforeCursor: 'ALTER SCHEDULED QUERY foo DEFINED ',
       afterCursor: '',
       expectedResult: {
         lowerCase: false,
@@ -180,20 +177,9 @@ describe('hiveAutocompleteParser.js CREATE SCHEDULED QUERY statements', () => {
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED DEFINED AS |"', () => {
-    assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED DEFINED AS ',
-      afterCursor: '',
-      containsKeywords: ['SELECT', 'INSERT'],
-      expectedResult: {
-        lowerCase: false
-      }
-    });
-  });
-
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED AS |"', () => {
+  it('should suggest keywords for "ALTER SCHEDULED QUERY foo DEFINED AS |"', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED AS ',
+      beforeCursor: 'ALTER SCHEDULED QUERY foo DEFINED AS ',
       afterCursor: '',
       containsKeywords: ['SELECT', 'INSERT'],
       expectedResult: {
@@ -202,9 +188,9 @@ describe('hiveAutocompleteParser.js CREATE SCHEDULED QUERY statements', () => {
     });
   });
 
-  it('should suggest keywords for "CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED AS SELECT |"', () => {
+  it('should suggest keywords for "ALTER SCHEDULED QUERY foo AS SELECT |"', () => {
     assertAutoComplete({
-      beforeCursor: 'CREATE SCHEDULED QUERY foo EVERY 1 MINUTE ENABLED AS SELECT ',
+      beforeCursor: 'ALTER SCHEDULED QUERY foo AS SELECT ',
       afterCursor: '',
       containsKeywords: ['*'],
       expectedResult: {

+ 1 - 1
desktop/core/src/desktop/js/parse/sql/hive/test/hiveAutocompleteParser.Alter.test.js

@@ -443,7 +443,7 @@ describe('hiveAutocompleteParser.js ALTER statements', () => {
             'SKEWED BY',
             'TOUCH',
             'UNARCHIVE PARTITION',
-            'UNSET SERDEPROPERTIES',
+            'UNSET SERDEPROPERTIES'
           ]
         }
       });

+ 1 - 0
desktop/core/src/desktop/js/parse/sql/hive/test/hiveAutocompleteParser.Create.test.js

@@ -71,6 +71,7 @@ describe('hiveAutocompleteParser.js CREATE statements', () => {
           'INDEX',
           'MATERIALIZED VIEW',
           'ROLE',
+          'SCHEDULED QUERY',
           'SCHEMA',
           'TABLE',
           'TEMPORARY EXTERNAL TABLE',

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio