Преглед изворни кода

HUE-9084 [calcite] Adding support for SELECT STREAM

Romain пре 5 година
родитељ
комит
d898f1c718

+ 3 - 0
desktop/core/src/desktop/js/parse/jison/sql/calcite/sql_main.jison

@@ -777,6 +777,7 @@ SelectStatement_EDIT
      if ($3.cursorAtStart) {
        var keywords = parser.getSelectListKeywords();
        if (!$2) {
+         keywords.push({ value: 'STREAM', weight: 3 });
          keywords.push({ value: 'ALL', weight: 2 });
          keywords.push({ value: 'DISTINCT', weight: 2 });
        }
@@ -810,6 +811,7 @@ SelectStatement_EDIT
        parser.suggestAnalyticFunctions();
      }
      if (!$2) {
+       keywords.push({ value: 'STREAM', weight: 3 });
        keywords.push({ value: 'ALL', weight: 2 });
        keywords.push({ value: 'DISTINCT', weight: 2 });
      }
@@ -840,6 +842,7 @@ SelectStatement_EDIT
        parser.suggestAnalyticFunctions();
      }
      if (!$2) {
+       keywords.push({ value: 'STREAM', weight: 3 });
        keywords.push({ value: 'ALL', weight: 2 });
        keywords.push({ value: 'DISTINCT', weight: 2 });
      }

+ 28 - 0
desktop/core/src/desktop/js/parse/jison/sql/calcite/sql_select_stream.jison

@@ -0,0 +1,28 @@
+// 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.
+
+SelectStatement
+ : 'SELECT' 'STREAM' OptionalAllOrDistinct SelectList
+ ;
+
+SelectStatement_EDIT
+ : 'SELECT' 'STREAM' OptionalAllOrDistinct 'CURSOR'
+ {
+   if (!$3) {
+     parser.suggestKeywords(['ALL', 'DISTINCT']);
+   }
+ }
+ ;

+ 86 - 0
desktop/core/src/desktop/js/parse/sql/calcite/test/calciteAutocompleteParser.Select.stream.test.js

@@ -0,0 +1,86 @@
+// 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.
+
+import calciteAutocompleteParser from '../calciteAutocompleteParser';
+
+describe('calciteAutocompleteParser.js SELECT STREAM statements', () => {
+  beforeAll(() => {
+    calciteAutocompleteParser.yy.parseError = function(msg) {
+      throw Error(msg);
+    };
+  });
+
+  const assertAutoComplete = testDefinition => {
+    const debug = false;
+
+    expect(
+      calciteAutocompleteParser.parseSql(
+        testDefinition.beforeCursor,
+        testDefinition.afterCursor,
+        debug
+      )
+    ).toEqualDefinition(testDefinition);
+  };
+
+  it('should suggest STREAM keywords for "SELECT |"', () => {
+    assertAutoComplete({
+      beforeCursor: 'SELECT ',
+      afterCursor: '',
+      noErrors: true,
+      containsKeywords: ['STREAM'],
+      expectedResult: {
+        lowerCase: false,
+        suggestTables: {
+          prependQuestionMark: true,
+          prependFrom: true
+        },
+        suggestAggregateFunctions: { tables: [] },
+        suggestAnalyticFunctions: true,
+        suggestFunctions: {},
+        suggestDatabases: {
+          prependQuestionMark: true,
+          prependFrom: true,
+          appendDot: true
+        }
+      }
+    });
+  });
+
+  it('should suggest ALL keyword after for "SELECT STREAM |"', () => {
+    assertAutoComplete({
+      beforeCursor: 'SELECT STREAM ',
+      afterCursor: '',
+      noErrors: true,
+      containsKeywords: ['ALL', 'DISTINCT'],
+      doesNotContainKeywords: ['STREAM'],
+      expectedResult: {
+        lowerCase: false
+      }
+    });
+  });
+
+  it('should not suggest DISTINCT keyword after for "SELECT STREAM DISTINCT |"', () => {
+    assertAutoComplete({
+      beforeCursor: 'SELECT STREAM DISTINCT ',
+      afterCursor: '',
+      noErrors: true,
+      containsKeywords: undefined,
+      expectedResult: {
+        lowerCase: false
+      }
+    });
+  });
+});