Browse Source

HUE-6835 [autocomplete] Add support for complex types in Impala column specifications

Johan Ahlen 8 years ago
parent
commit
d605096

+ 6 - 3
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql.jisonlex

@@ -28,7 +28,7 @@
 
 // Reserved Keywords
 <hive>'ALL'                                { return '<hive>ALL'; }
-<hive>'ARRAY'                              { return '<hive>ARRAY'; }
+<hive>'ARRAY'                              { return 'ARRAY'; }
 <hive>'AS'                                 { return '<hive>AS'; }
 <hive>'AUTHORIZATION'                      { return '<hive>AUTHORIZATION'; }
 <hive>'BINARY'                             { return '<hive>BINARY'; }
@@ -51,7 +51,7 @@
 <hive>'LATERAL'                            { return '<hive>LATERAL'; }
 <hive>'LOCAL'                              { return '<hive>LOCAL'; }
 <hive>'MACRO'                              { return '<hive>MACRO'; }
-<hive>'MAP'                                { return '<hive>MAP'; }
+<hive>'MAP'                                { return 'MAP'; }
 <hive>'NONE'                               { return '<hive>NONE'; }
 <hive>'OF'                                 { return '<hive>OF'; }
 <hive>'OUT'                                { return '<hive>OUT'; }
@@ -168,7 +168,7 @@
 <hive>'STORED'                             { return '<hive>STORED'; }
 <hive>STORED\s+AS\s+DIRECTORIES            { return '<hive>STORED_AS_DIRECTORIES'; }
 <hive>'STRING'                             { return '<hive>STRING'; }
-<hive>'STRUCT'                             { return '<hive>STRUCT'; }
+<hive>'STRUCT'                             { return 'STRUCT'; }
 <hive>'TABLES'                             { return '<hive>TABLES'; }
 <hive>'TABLESAMPLE'                        { return '<hive>TABLESAMPLE'; }
 <hive>'TBLPROPERTIES'                      { return '<hive>TBLPROPERTIES'; }
@@ -279,15 +279,18 @@
 // Non-reserved Keywords
 <impala>'ANALYTIC'                         { return '<impala>ANALYTIC'; }
 <impala>'ANTI'                             { return '<impala>ANTI'; }
+<impala>'ARRAY'                            { return 'ARRAY'; }
 <impala>'BLOCK_SIZE'                       { return '<impala>BLOCK_SIZE'; }
 <impala>'COMPRESSION'                      { return '<impala>COMPRESSION'; }
 <impala>'CURRENT'                          { return '<impala>CURRENT'; }
 <impala>'DEFAULT'                          { return '<impala>DEFAULT'; }
 <impala>'ENCODING'                         { return '<impala>ENCODING'; }
 <impala>'GRANT'                            { return '<impala>GRANT'; }
+<impala>'MAP'                              { return 'MAP'; }
 <impala>'RECOVER'                          { return '<impala>RECOVER'; }
 <impala>'ROLE'                             { return '<impala>ROLE'; }
 <impala>'ROLES'                            { return '<impala>ROLES'; }
+<impala>'STRUCT'                           { return 'STRUCT'; }
 <impala>\[BROADCAST\]                      { return '<impala>BROADCAST'; }
 <impala>\[NOSHUFFLE\]                      { return '<impala>NOSHUFFLE'; }
 <impala>\[SHUFFLE\]                        { return '<impala>SHUFFLE'; }

+ 17 - 17
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_create.jison

@@ -448,55 +448,55 @@ ColumnDataType_EDIT
  ;
 
 ArrayType
- : '<hive>ARRAY' '<' ColumnDataType '>'
+ : 'ARRAY' '<' ColumnDataType '>'
  ;
 
 ArrayType_INVALID
- : '<hive>ARRAY' '<' '>'
+ : 'ARRAY' '<' '>'
  ;
 
 ArrayType_EDIT
- : '<hive>ARRAY' '<' AnyCursor GreaterThanOrError
+ : 'ARRAY' '<' AnyCursor GreaterThanOrError
    {
      parser.suggestKeywords(parser.getColumnDataTypeKeywords());
    }
- | '<hive>ARRAY' '<' ColumnDataType_EDIT GreaterThanOrError
+ | 'ARRAY' '<' ColumnDataType_EDIT GreaterThanOrError
  ;
 
 MapType
- : '<hive>MAP' '<' PrimitiveType ',' ColumnDataType '>'
+ : 'MAP' '<' PrimitiveType ',' ColumnDataType '>'
  ;
 
 MapType_INVALID
- : '<hive>MAP' '<' '>'
+ : 'MAP' '<' '>'
  ;
 
 MapType_EDIT
- : '<hive>MAP' '<' PrimitiveType ',' ColumnDataType_EDIT GreaterThanOrError
- | '<hive>MAP' '<' AnyCursor GreaterThanOrError
+ : 'MAP' '<' PrimitiveType ',' ColumnDataType_EDIT GreaterThanOrError
+ | 'MAP' '<' AnyCursor GreaterThanOrError
    {
      parser.suggestKeywords(parser.getTypeKeywords());
    }
- | '<hive>MAP' '<' PrimitiveType ',' AnyCursor GreaterThanOrError
+ | 'MAP' '<' PrimitiveType ',' AnyCursor GreaterThanOrError
    {
      parser.suggestKeywords(parser.getColumnDataTypeKeywords());
    }
- | '<hive>MAP' '<' ',' AnyCursor GreaterThanOrError
+ | 'MAP' '<' ',' AnyCursor GreaterThanOrError
    {
      parser.suggestKeywords(parser.getColumnDataTypeKeywords());
    }
  ;
 
 StructType
- : '<hive>STRUCT' '<' StructDefinitionList '>'
+ : 'STRUCT' '<' StructDefinitionList '>'
  ;
 
 StructType_INVALID
- : '<hive>STRUCT' '<' '>'
+ : 'STRUCT' '<' '>'
  ;
 
 StructType_EDIT
- : '<hive>STRUCT' '<' StructDefinitionList_EDIT GreaterThanOrError
+ : 'STRUCT' '<' StructDefinitionList_EDIT GreaterThanOrError
  ;
 
 StructDefinitionList
@@ -1063,19 +1063,19 @@ OptionalCollectionItemsTerminatedBy_EDIT
 
 OptionalMapKeysTerminatedBy
  :
- | '<hive>MAP' '<hive>KEYS' '<hive>TERMINATED' 'BY' SingleQuotedValue
+ | 'MAP' '<hive>KEYS' '<hive>TERMINATED' 'BY' SingleQuotedValue
  ;
 
 OptionalMapKeysTerminatedBy_EDIT
- : '<hive>MAP' 'CURSOR'
+ : 'MAP' 'CURSOR'
    {
      parser.suggestKeywords(['KEYS TERMINATED BY']);
    }
- | '<hive>MAP' '<hive>KEYS' 'CURSOR'
+ | 'MAP' '<hive>KEYS' 'CURSOR'
    {
      parser.suggestKeywords(['TERMINATED BY']);
    }
- | '<hive>MAP' '<hive>KEYS' '<hive>TERMINATED' 'CURSOR'
+ | 'MAP' '<hive>KEYS' '<hive>TERMINATED' 'CURSOR'
    {
      parser.suggestKeywords(['BY']);
    }

File diff suppressed because it is too large
+ 1 - 1
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_main.jison


+ 5 - 5
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_valueExpression_dev.jison

@@ -108,7 +108,7 @@ NonReservedKeyword
  | '<hive>STATISTICS'
  | '<hive>STORED'
  | '<hive>STRING'
- | '<hive>STRUCT'
+ | 'STRUCT'
  | '<hive>TABLES'
  | '<hive>TBLPROPERTIES'
  | '<hive>TEMPORARY'
@@ -190,9 +190,9 @@ SetValue
 // 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
- : '<hive>ALL' | '<hive>ARRAY' | '<hive>AS' | '<hive>AUTHORIZATION' | '<hive>AVRO' | '<hive>BINARY' | '<hive>BUCKET' | '<hive>BUCKETS' | '<hive>CACHE' | '<hive>CLUSTER' | '<hive>CLUSTERED' | '<hive>COLLECTION' | '<hive>COMPUTE' | '<hive>CONF' | '<hive>CUBE' | '<hive>CURRENT' | '<hive>DATE' | '<hive>DEFERRED' | '<hive>DELIMITED' | '<hive>DEPENDENCY' | '<hive>DIRECTORY' | '<hive>DISTRIBUTE' | '<hive>DISTRIBUTED' | '<hive>ESCAPED' | '<hive>EXTENDED' | '<hive>EXTERNAL' | '<hive>FIELDS' | '<hive>FILE' | '<hive>FOR' | '<hive>FORMAT' | '<hive>FUNCTION' | '<hive>GRANT' | '<hive>GROUPING' | '<hive>IDXPROPERTIES' | '<hive>LATERAL' | '<hive>LOCAL' | '<hive>MACRO' | '<hive>OVERWRITE' | '<hive>PARTITION' | '<hive>REBUILD' | '<hive>REPAIR' | '<hive>ROLLUP' | '<hive>SETS' | '<hive>STATISTICS' | '<hive>TABLE' | '<hive>USER' | '<hive>ASC' | '<hive>COLUMNS' | '<hive>COMMENT' | '<hive>COMPACTIONS' | '<hive>DATA' | '<hive>DATABASES' | '<hive>DEFINED' | '<hive>DESC' |  '<hive>FORMATTED' | '<hive>FUNCTIONS' | '<hive>INDEX' | '<hive>INDEXES' | '<hive>INPATH' | '<hive>INPUTFORMAT' | '<hive>ITEMS' | '<hive>JAR' | '<hive>KEYS' | '<hive>LINES' | '<hive>LOCATION' | '<hive>LOCKS' | '<hive>MAP' | '<hive>METADATA' | '<hive>NONE' | '<hive>NOSCAN' | '<hive>OF' | '<hive>ORC' | '<hive>OUT' | '<hive>OUTPUTFORMAT' | '<hive>PARQUET' | '<hive>PARTITIONED' | '<hive>PARTITIONS' | '<hive>RCFILE' | '<hive>ROLE' | '<hive>ROLES' | '<hive>SCHEMA' | '<hive>SCHEMAS' | '<hive>SEQUENCEFILE' | '<hive>SERDE' | '<hive>SERDEPROPERTIES' | '<hive>SKEWED' | '<hive>SORTED' | '<hive>STORED' | '<hive>STORED_AS_DIRECTORIES' | '<hive>STRING' | '<hive>STRUCT' | '<hive>TABLES' | '<hive>TABLESAMPLE' | '<hive>TBLPROPERTIES' | '<hive>TEMPORARY' | '<hive>TERMINATED' | '<hive>TEXTFILE' | '<hive>TINYINT' | '<hive>TRANSACTIONS' | '<hive>UNIONTYPE' | '<hive>USING' | '<hive>VIEW' | '<hive>WINDOW' | '<hive>.' | '<hive>[' | '<hive>]'
+ : '<hive>ALL' | '<hive>AS' | '<hive>AUTHORIZATION' | '<hive>AVRO' | '<hive>BINARY' | '<hive>BUCKET' | '<hive>BUCKETS' | '<hive>CACHE' | '<hive>CLUSTER' | '<hive>CLUSTERED' | '<hive>COLLECTION' | '<hive>COMPUTE' | '<hive>CONF' | '<hive>CUBE' | '<hive>CURRENT' | '<hive>DATE' | '<hive>DEFERRED' | '<hive>DELIMITED' | '<hive>DEPENDENCY' | '<hive>DIRECTORY' | '<hive>DISTRIBUTE' | '<hive>DISTRIBUTED' | '<hive>ESCAPED' | '<hive>EXTENDED' | '<hive>EXTERNAL' | '<hive>FIELDS' | '<hive>FILE' | '<hive>FOR' | '<hive>FORMAT' | '<hive>FUNCTION' | '<hive>GRANT' | '<hive>GROUPING' | '<hive>IDXPROPERTIES' | '<hive>LATERAL' | '<hive>LOCAL' | '<hive>MACRO' | '<hive>OVERWRITE' | '<hive>PARTITION' | '<hive>REBUILD' | '<hive>REPAIR' | '<hive>ROLLUP' | '<hive>SETS' | '<hive>STATISTICS' | '<hive>TABLE' | '<hive>USER' | '<hive>ASC' | '<hive>COLUMNS' | '<hive>COMMENT' | '<hive>COMPACTIONS' | '<hive>DATA' | '<hive>DATABASES' | '<hive>DEFINED' | '<hive>DESC' |  '<hive>FORMATTED' | '<hive>FUNCTIONS' | '<hive>INDEX' | '<hive>INDEXES' | '<hive>INPATH' | '<hive>INPUTFORMAT' | '<hive>ITEMS' | '<hive>JAR' | '<hive>KEYS' | '<hive>LINES' | '<hive>LOCATION' | '<hive>LOCKS' | '<hive>METADATA' | '<hive>NONE' | '<hive>NOSCAN' | '<hive>OF' | '<hive>ORC' | '<hive>OUT' | '<hive>OUTPUTFORMAT' | '<hive>PARQUET' | '<hive>PARTITIONED' | '<hive>PARTITIONS' | '<hive>RCFILE' | '<hive>ROLE' | '<hive>ROLES' | '<hive>SCHEMA' | '<hive>SCHEMAS' | '<hive>SEQUENCEFILE' | '<hive>SERDE' | '<hive>SERDEPROPERTIES' | '<hive>SKEWED' | '<hive>SORTED' | '<hive>STORED' | '<hive>STORED_AS_DIRECTORIES' | '<hive>STRING' | '<hive>TABLES' | '<hive>TABLESAMPLE' | '<hive>TBLPROPERTIES' | '<hive>TEMPORARY' | '<hive>TERMINATED' | '<hive>TEXTFILE' | '<hive>TINYINT' | '<hive>TRANSACTIONS' | '<hive>UNIONTYPE' | '<hive>USING' | '<hive>VIEW' | '<hive>WINDOW' | '<hive>.' | '<hive>[' | '<hive>]'
  | '<impala>AGGREGATE' | '<impala>AVRO' | '<impala>CACHED' | '<impala>CLOSE_FN' | '<impala>COLUMN' | '<impala>COMMENT' | '<impala>DATA' | '<impala>DATABASES' | '<impala>DELIMITED' | '<impala>ESCAPED' | '<impala>EXTERNAL' | '<impala>FIELDS' | '<impala>FINALIZE_FN' | '<impala>FIRST' | '<impala>FORMAT' | '<impala>FORMATTED' | '<impala>FUNCTION' | '<impala>FUNCTIONS' | '<impala>GROUP' | '<impala>INCREMENTAL' | '<impala>INTERVAL' | '<impala>INIT_FN' | '<impala>INPATH' | '<impala>LAST' | '<impala>LIMIT' | '<impala>LINES' | '<impala>LOCATION' | '<impala>MERGE_FN' | '<impala>NULLS' | '<impala>PARTITIONS' | '<impala>PREPARE_FN' | '<impala>RANGE' | '<impala>REAL' | '<impala>RETURNS' | '<impala>SCHEMAS' | '<impala>SERIALIZE_FN' | '<impala>STATS' | '<impala>STRAIGHT_JOIN' | '<impala>SYMBOL' | '<impala>TABLE' | '<impala>TABLES' | '<impala>USING' | '<impala>ANALYTIC' | '<impala>ANTI' | '<impala>CURRENT' | '<impala>GRANT' | '<impala>NOSHUFFLE' | '<impala>PARQUET' | '<impala>PARTITIONED' | '<impala>RCFILE' | '<impala>ROLE' | '<impala>ROLES' | '<impala>SEQUENCEFILE' | '<impala>SERDEPROPERTIES' | '<impala>SHUFFLE' | '<impala>STORED' | '<impala>TBLPROPERTIES' | '<impala>TERMINATED' | '<impala>TEXTFILE' | '<impala>UPDATE_FN' | '<impala>BROADCAST' | '<impala>...' | '<impala>.' | '<impala>[' | '<impala>]'
- | 'ALL' | 'AS' | 'ASC' | 'BETWEEN' | 'BIGINT' | 'BOOLEAN' | 'BY' | 'CASE' | 'CHAR' | 'CROSS' | 'CURRENT' | 'DATABASE' | 'DECIMAL' | 'DISTINCT' | 'DOUBLE' | 'DESC' | 'ELSE' | 'END' | 'EXISTS' | 'FALSE' | 'FLOAT' | 'FOLLOWING' | 'FROM' | 'FULL' | 'GROUP' | 'HAVING' | 'IF' | 'IN' | 'INNER' | 'INSERT' | 'INT' | 'INTO' | 'IS' | 'JOIN' | 'LEFT' | 'LIKE' | 'LIMIT' | 'NOT' | 'NULL' | 'ON' | 'ORDER' | 'OUTER' | 'OVER' | 'PARTITION' | 'PRECEDING' | 'RANGE' | 'REGEXP' | 'RIGHT' | 'RLIKE' | 'ROW' | 'ROWS' | 'SCHEMA' | 'SEMI' | 'SET' | 'SMALLINT' | 'STRING' | 'TABLE' | 'THEN' | 'TIMESTAMP' | 'TINYINT' | 'TRUE' | 'UNION' | 'VALUES' | 'VARCHAR' | 'WHEN' | 'WHERE' | 'WITH' | 'ROLE'
+ | 'ALL' | 'ARRAY' | 'AS' | 'ASC' | 'BETWEEN' | 'BIGINT' | 'BOOLEAN' | 'BY' | 'CASE' | 'CHAR' | 'CROSS' | 'CURRENT' | 'DATABASE' | 'DECIMAL' | 'DISTINCT' | 'DOUBLE' | 'DESC' | 'ELSE' | 'END' | 'EXISTS' | 'FALSE' | 'FLOAT' | 'FOLLOWING' | 'FROM' | 'FULL' | 'GROUP' | 'HAVING' | 'IF' | 'IN' | 'INNER' | 'INSERT' | 'INT' | 'INTO' | 'IS' | 'JOIN' | 'LEFT' | 'LIKE' | 'LIMIT' | 'MAP' | 'NOT' | 'NULL' | 'ON' | 'ORDER' | 'OUTER' | 'OVER' | 'PARTITION' | 'PRECEDING' | 'RANGE' | 'REGEXP' | 'RIGHT' | 'RLIKE' | 'ROW' | 'ROWS' | 'SCHEMA' | 'SEMI' | 'SET' | 'SMALLINT' | 'STRING' | 'STRUCT' | 'TABLE' | 'THEN' | 'TIMESTAMP' | 'TINYINT' | 'TRUE' | 'UNION' | 'VALUES' | 'VARCHAR' | 'WHEN' | 'WHERE' | 'WITH' | 'ROLE'
  | 'AVG' | 'CAST' | 'COUNT' | 'MAX' | 'MIN' | 'STDDEV_POP' | 'STDDEV_SAMP' | 'SUM' | 'VARIANCE' | 'VAR_POP' | 'VAR_SAMP'
  | '<hive>COLLECT_SET' | '<hive>COLLECT_LIST' | '<hive>CORR' | '<hive>COVAR_POP' | '<hive>COVAR_SAMP' | '<hive>HISTOGRAM_NUMERIC' | '<hive>NTILE' | '<hive>PERCENTILE' | '<hive>PERCENTILE_APPROX'
  | '<impala>APPX_MEDIAN' | '<impala>EXTRACT' | '<impala>GROUP_CONCAT' | '<impala>STDDEV' | '<impala>VARIANCE_POP' | '<impala>VARIANCE_SAMP'
@@ -2424,9 +2424,9 @@ ArbitraryFunction_EDIT
 
 ArbitraryFunctionName
  : 'IF'
- | '<hive>ARRAY'
+ | 'ARRAY'
  | '<hive>BINARY'
- | '<hive>MAP'
+ | 'MAP'
  ;
 
 ArbitraryFunctionRightPart

+ 0 - 1
desktop/core/src/desktop/static/desktop/js/autocomplete/spec/sqlSpecAlter.js

@@ -1505,7 +1505,6 @@
             afterCursor: '',
             dialect: 'impala',
             containsKeywords: ['INT'],
-            doesNotContainKeywords: ['ARRAY<>'],
             expectedResult: {
               lowerCase: false
             }

+ 74 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/spec/sqlSpecCreate.js

@@ -1081,6 +1081,19 @@
       });
 
       describe('Impala specific', function () {
+        it('should handle "CREATE TABLE foo (baa MAP <STRING, STRUCT<id: int>>, arr ARRAY<STRUCT<foo:STRUCT<bar: INT>>>, strc STRUCT<boo:STRING>);|"', function () {
+          assertAutoComplete({
+            beforeCursor: 'CREATE TABLE foo (baa MAP <STRING, STRUCT<id: int>>, arr ARRAY<STRUCT<foo:STRUCT<bar: INT>>>, strc STRUCT<boo:STRING>);',
+            noErrors: true,
+            afterCursor: '',
+            dialect: 'impala',
+            containsKeywords: ['SELECT'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
         it('should suggest keywords for "CREATE EXTERNAL |"', function () {
           assertAutoComplete({
             beforeCursor: 'CREATE EXTERNAL ',
@@ -1143,6 +1156,67 @@
           });
         });
 
+        it('should suggest keywords for "CREATE TABLE foo (baa |"', function () {
+          assertAutoComplete({
+            beforeCursor: 'CREATE TABLE foo (baa ',
+            afterCursor: '',
+            dialect: 'impala',
+            containsKeywords: ['ARRAY<>', 'STRUCT<>', 'MAP<>'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
+        it('should suggest keywords for "CREATE TABLE foo (baa ARRAY <|"', function () {
+          assertAutoComplete({
+            beforeCursor: 'CREATE TABLE foo (baa ARRAY <',
+            afterCursor: '',
+            dialect: 'impala',
+            containsKeywords: ['STRING', 'STRUCT<>'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
+        it('should suggest keywords for "CREATE TABLE foo (baa MAP <|"', function () {
+          assertAutoComplete({
+            beforeCursor: 'CREATE TABLE foo (baa MAP <',
+            afterCursor: '',
+            dialect: 'impala',
+            containsKeywords: ['STRING'],
+            doesNotContainKeywords: ['MAP<>', 'STRUCT<>', 'ARRAY<>'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
+        it('should suggest keywords for "CREATE TABLE foo (baa MAP <STRING, |"', function () {
+          assertAutoComplete({
+            beforeCursor: 'CREATE TABLE foo (baa ARRAY <',
+            afterCursor: '',
+            dialect: 'impala',
+            containsKeywords: ['STRING', 'MAP<>', 'STRUCT<>', 'ARRAY<>'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
+        it('should suggest keywords for "CREATE TABLE foo (baa STRUCT <id:|"', function () {
+          assertAutoComplete({
+            beforeCursor: 'CREATE TABLE foo (baa STRUCT <id:',
+            afterCursor: '',
+            dialect: 'impala',
+            containsKeywords: ['INT', 'STRUCT<>'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
         it('should suggest keywords for "CREATE TABLE foo (id int) LOCATION \'|"', function () {
           assertAutoComplete({
             beforeCursor: 'CREATE TABLE boo LOCATION \'',

File diff suppressed because it is too large
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlAutocompleteParser.js


+ 3 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlParseSupport.js

@@ -248,6 +248,9 @@ var SqlParseSupport = (function () {
       if (parser.isHive()) {
         return parser.getTypeKeywords().concat(['ARRAY<>', 'MAP<>', 'STRUCT<>', 'UNIONTYPE<>']);
       }
+      if (parser.isImpala()) {
+        return parser.getTypeKeywords().concat(['ARRAY<>', 'MAP<>', 'STRUCT<>']);
+      }
       return parser.getTypeKeywords();
     };
 

File diff suppressed because it is too large
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlSyntaxParser.js


Some files were not shown because too many files changed in this diff