Skip to content

Commit c403092

Browse files
authored
Feat/auto complete (#175)
* feat: update hive grammar to adapt to c3 * feat: support viewName, dbName, fnName autoComplete to hive * test: add hive suggestion unit test * test: optimze flink suggestion unit tests
1 parent d0ad381 commit c403092

File tree

14 files changed

+8914
-8007
lines changed

14 files changed

+8914
-8007
lines changed

src/grammar/hive/HiveSqlParser.g4

Lines changed: 85 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,13 @@ replDumpStatement
119119
;
120120

121121
replDbPolicy
122-
: dbName=id_ (DOT tablePolicy=replTableLevelPolicy)?
122+
: dbName=dbSchemaName (DOT tablePolicy=replTableLevelPolicy)?
123123
;
124124

125125
replLoadStatement
126126
: KW_REPL KW_LOAD
127127
sourceDbPolicy=replDbPolicy
128-
(KW_INTO dbName=id_)?
128+
(KW_INTO dbName=dbSchemaName)?
129129
(KW_WITH replConf=replConfigs)?
130130
;
131131

@@ -143,7 +143,7 @@ replTableLevelPolicy
143143

144144
replStatusStatement
145145
: KW_REPL KW_STATUS
146-
dbName=id_
146+
dbName=dbSchemaName
147147
(KW_WITH replConf=replConfigs)?
148148
;
149149

@@ -233,14 +233,14 @@ orReplace
233233
createDatabaseStatement
234234
: KW_CREATE KW_REMOTE? db_schema
235235
ifNotExists?
236-
name=id_
236+
name=dbSchemaNameCreate
237237
databaseComment?
238238
dbLocation?
239239
dbManagedLocation?
240240
(KW_WITH KW_DBPROPERTIES dbprops=dbProperties)?
241241
| KW_CREATE KW_REMOTE db_schema
242242
ifNotExists?
243-
name=id_
243+
name=dbSchemaNameCreate
244244
databaseComment?
245245
dbConnectorName
246246
(KW_WITH KW_DBPROPERTIES dbprops=dbProperties)?
@@ -263,15 +263,15 @@ dbPropertiesList
263263
;
264264

265265
dbConnectorName
266-
: KW_USING dcName=id_
266+
: KW_USING dcName=dbSchemaName
267267
;
268268

269269
switchDatabaseStatement
270-
: KW_USE id_
270+
: KW_USE dbSchemaName
271271
;
272272

273273
dropDatabaseStatement
274-
: KW_DROP db_schema ifExists? id_ restrictOrCascade?
274+
: KW_DROP db_schema ifExists? dbSchemaName restrictOrCascade?
275275
;
276276

277277
databaseComment
@@ -300,15 +300,15 @@ partTypeExpr
300300
;
301301

302302
tabPartColTypeExpr
303-
: tableName partitionSpec? extColumnName?
303+
: tableOrView partitionSpec? extColumnName?
304304
;
305305

306306
descStatement
307307
: (KW_DESCRIBE | KW_DESC)
308308
(
309-
db_schema KW_EXTENDED? dbName=id_
310-
| KW_DATACONNECTOR KW_EXTENDED? dcName=id_
311-
| KW_FUNCTION KW_EXTENDED? name=descFuncNames
309+
db_schema KW_EXTENDED? dbName=dbSchemaName
310+
| KW_DATACONNECTOR KW_EXTENDED? dcName=dbSchemaName
311+
| KW_FUNCTION KW_EXTENDED? name=functionNameForDDL
312312
| (descOptions=KW_FORMATTED | descOptions=KW_EXTENDED) parttype=tabPartColTypeExpr
313313
| parttype=tabPartColTypeExpr
314314
)
@@ -333,26 +333,26 @@ db_schema
333333

334334
showStatement
335335
: KW_SHOW (KW_DATABASES | KW_SCHEMAS) (KW_LIKE showStmtIdentifier)?
336-
| KW_SHOW isExtended=KW_EXTENDED? KW_TABLES (from_in db_name=id_)? filter=showTablesFilterExpr?
337-
| KW_SHOW KW_VIEWS (from_in db_name=id_)? (KW_LIKE showStmtIdentifier | showStmtIdentifier)?
338-
| KW_SHOW KW_MATERIALIZED KW_VIEWS (from_in db_name=id_)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?
339-
| KW_SHOW KW_SORTED? KW_COLUMNS from_in tableName (from_in db_name=id_)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?
340-
| KW_SHOW KW_FUNCTIONS (KW_LIKE showFunctionIdentifier)?
341-
| KW_SHOW KW_PARTITIONS tabName=tableName partitionSpec? whereClause? orderByClause? limitClause?
342-
| KW_SHOW KW_CREATE (db_schema db_name=id_ | KW_TABLE tabName=tableName)
343-
| KW_SHOW KW_TABLE KW_EXTENDED (from_in db_name=id_)? KW_LIKE showStmtIdentifier partitionSpec?
336+
| KW_SHOW isExtended=KW_EXTENDED? KW_TABLES (from_in db_name=dbSchemaName)? filter=showTablesFilterExpr?
337+
| KW_SHOW KW_VIEWS (from_in db_name=dbSchemaName)? (KW_LIKE showStmtIdentifier | showStmtIdentifier)?
338+
| KW_SHOW KW_MATERIALIZED KW_VIEWS (from_in db_name=dbSchemaName)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?
339+
| KW_SHOW KW_SORTED? KW_COLUMNS from_in tableOrView (from_in db_name=dbSchemaName)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?
340+
| KW_SHOW KW_FUNCTIONS (KW_LIKE functionNameForDDL)?
341+
| KW_SHOW KW_PARTITIONS tabOrViewName=tableOrView partitionSpec? whereClause? orderByClause? limitClause?
342+
| KW_SHOW KW_CREATE (db_schema db_name=dbSchemaName | KW_TABLE tabName=tableName)
343+
| KW_SHOW KW_TABLE KW_EXTENDED (from_in db_name=dbSchemaName)? KW_LIKE showStmtIdentifier partitionSpec?
344344
| KW_SHOW KW_TBLPROPERTIES tableName (LPAREN prptyName=StringLiteral RPAREN)?
345-
| KW_SHOW KW_LOCKS (db_schema dbName=id_ isExtended=KW_EXTENDED? | parttype=partTypeExpr? isExtended=KW_EXTENDED?)
345+
| KW_SHOW KW_LOCKS (db_schema dbName=dbSchemaName isExtended=KW_EXTENDED? | parttype=partTypeExpr? isExtended=KW_EXTENDED?)
346346
| KW_SHOW KW_COMPACTIONS
347347
( compactionId
348-
| db_schema dbName=id_ compactionPool? compactionType? compactionStatus? orderByClause? limitClause?
348+
| db_schema dbName=dbSchemaName compactionPool? compactionType? compactionStatus? orderByClause? limitClause?
349349
| parttype=partTypeExpr? compactionPool? compactionType? compactionStatus? orderByClause? limitClause?
350350
)
351351
| KW_SHOW KW_TRANSACTIONS
352352
| KW_SHOW KW_CONF StringLiteral
353353
| KW_SHOW KW_RESOURCE (KW_PLAN rp_name=id_ | KW_PLANS)
354354
| KW_SHOW KW_DATACONNECTORS
355-
| KW_SHOW KW_FORMATTED? ( KW_INDEX | KW_INDEXES ) KW_ON tableName (from_in id_)?
355+
| KW_SHOW KW_FORMATTED? ( KW_INDEX | KW_INDEXES ) KW_ON tableName (from_in dbSchemaName)?
356356
;
357357

358358
showTablesFilterExpr
@@ -366,7 +366,7 @@ lockStatement
366366
;
367367

368368
lockDatabase
369-
: KW_LOCK db_schema dbName=id_ lockMode
369+
: KW_LOCK db_schema dbName=dbSchemaName lockMode
370370
;
371371

372372
lockMode
@@ -379,7 +379,7 @@ unlockStatement
379379
;
380380

381381
unlockDatabase
382-
: KW_UNLOCK db_schema dbName=id_
382+
: KW_UNLOCK db_schema dbName=dbSchemaName
383383
;
384384

385385
createRoleStatement
@@ -450,14 +450,14 @@ privilegeObject
450450
database or table type. Type is optional, default type is table
451451
*/
452452
privObject
453-
: db_schema id_
453+
: db_schema dbSchemaName
454454
| KW_TABLE? tableName partitionSpec?
455455
| KW_URI path=StringLiteral
456456
| KW_SERVER id_
457457
;
458458

459459
privObjectCols
460-
: db_schema id_
460+
: db_schema dbSchemaName
461461
| KW_TABLE? tableName (LPAREN cols=columnNameList RPAREN)? partitionSpec?
462462
| KW_URI path=StringLiteral
463463
| KW_SERVER id_
@@ -539,12 +539,12 @@ resourceType
539539
;
540540

541541
createFunctionStatement
542-
: KW_CREATE temp=KW_TEMPORARY? KW_FUNCTION functionIdentifier KW_AS StringLiteral
542+
: KW_CREATE temp=KW_TEMPORARY? KW_FUNCTION functionNameCreate KW_AS StringLiteral
543543
(KW_USING rList=resourceList)?
544544
;
545545

546546
dropFunctionStatement
547-
: KW_DROP temp=KW_TEMPORARY? KW_FUNCTION ifExists? functionIdentifier
547+
: KW_DROP temp=KW_TEMPORARY? KW_FUNCTION ifExists? functionNameForDDL
548548
;
549549

550550
reloadFunctionsStatement
@@ -575,7 +575,7 @@ dropIndexStatement
575575
: KW_DROP KW_INDEX ifExists? id_ KW_ON tableName;
576576

577577
createViewStatement
578-
: KW_CREATE orReplace? KW_VIEW ifNotExists? name=tableName
578+
: KW_CREATE orReplace? KW_VIEW ifNotExists? name=viewNameCreate
579579
(LPAREN columnNameCommentList RPAREN)? tableComment? viewPartition?
580580
tablePropertiesPrefixed?
581581
KW_AS
@@ -612,7 +612,7 @@ dropViewStatement
612612
;
613613

614614
createMaterializedViewStatement
615-
: KW_CREATE KW_MATERIALIZED KW_VIEW ifNotExists? name=tableName
615+
: KW_CREATE KW_MATERIALIZED KW_VIEW ifNotExists? name=viewNameCreate
616616
rewriteDisabled? tableComment? viewPartition? viewOrganization?
617617
tableRowFormat? tableFileFormat? tableLocation?
618618
tablePropertiesPrefixed? KW_AS selectStatementWithCTE
@@ -660,11 +660,6 @@ definedAsSpec
660660
: KW_DEFINED? KW_AS statement
661661
;
662662

663-
showFunctionIdentifier
664-
: functionIdentifier
665-
| StringLiteral
666-
;
667-
668663
showStmtIdentifier
669664
: id_
670665
| StringLiteral
@@ -1345,8 +1340,8 @@ END SHOW COMPACTIONS statement
13451340

13461341
alterStatement
13471342
: KW_ALTER ( KW_TABLE tableName alterTableStatementSuffix
1348-
| KW_VIEW tableName KW_AS? alterViewStatementSuffix
1349-
| KW_MATERIALIZED KW_VIEW tableNameTree=tableName alterMaterializedViewStatementSuffix
1343+
| KW_VIEW viewName KW_AS? alterViewStatementSuffix
1344+
| KW_MATERIALIZED KW_VIEW tableNameTree=viewName alterMaterializedViewStatementSuffix
13501345
| db_schema alterDatabaseStatementSuffix
13511346
| KW_DATACONNECTOR alterDataConnectorStatementSuffix
13521347
| KW_INDEX alterIndexStatementSuffix
@@ -1425,23 +1420,23 @@ alterDatabaseStatementSuffix
14251420
;
14261421

14271422
alterDatabaseSuffixProperties
1428-
: name=id_ KW_SET KW_DBPROPERTIES dbProperties
1423+
: name=dbSchemaName KW_SET KW_DBPROPERTIES dbProperties
14291424
;
14301425

14311426
alterDatabaseSuffixSetOwner
1432-
: dbName=id_ KW_SET KW_OWNER principalAlterName
1427+
: dbName=dbSchemaName KW_SET KW_OWNER principalAlterName
14331428
;
14341429

14351430
alterDatabaseSuffixSetLocation
1436-
: dbName=id_ KW_SET (KW_LOCATION | KW_MANAGEDLOCATION) newLocation=StringLiteral
1431+
: dbName=dbSchemaName KW_SET (KW_LOCATION | KW_MANAGEDLOCATION) newLocation=StringLiteral
14371432
;
14381433

14391434
alterDatabaseSuffixSetManagedLocation
1440-
: dbName=id_ KW_SET KW_MANAGEDLOCATION newLocation=StringLiteral
1435+
: dbName=dbSchemaName KW_SET KW_MANAGEDLOCATION newLocation=StringLiteral
14411436
;
14421437

14431438
alterStatementSuffixRename
1444-
: KW_RENAME KW_TO tableName
1439+
: KW_RENAME KW_TO tableNameCreate
14451440
;
14461441

14471442
alterStatementSuffixAddCol
@@ -1635,15 +1630,15 @@ alterDataConnectorStatementSuffix
16351630
;
16361631

16371632
alterDataConnectorSuffixProperties
1638-
: name=id_ KW_SET KW_DCPROPERTIES dcProperties
1633+
: name=dbSchemaName KW_SET KW_DCPROPERTIES dcProperties
16391634
;
16401635

16411636
alterDataConnectorSuffixSetOwner
1642-
: dcName=id_ KW_SET KW_OWNER principalAlterName
1637+
: dcName=dbSchemaName KW_SET KW_OWNER principalAlterName
16431638
;
16441639

16451640
alterDataConnectorSuffixSetUrl
1646-
: dcName=id_ KW_SET KW_URL newUri=StringLiteral
1641+
: dcName=dbSchemaName KW_SET KW_URL newUri=StringLiteral
16471642
;
16481643

16491644
likeTableOrFile
@@ -1656,7 +1651,7 @@ likeTableOrFile
16561651
Rules for parsing createtable
16571652
*/
16581653
createTableStatement
1659-
: KW_CREATE temp=KW_TEMPORARY? trans=KW_TRANSACTIONAL? ext=KW_EXTERNAL? KW_TABLE ifNotExists? name=tableName
1654+
: KW_CREATE temp=KW_TEMPORARY? trans=KW_TRANSACTIONAL? ext=KW_EXTERNAL? KW_TABLE ifNotExists? name=tableNameCreate
16601655
( likeTableOrFile
16611656
createTablePartitionSpec?
16621657
tableRowFormat?
@@ -1674,7 +1669,7 @@ createTableStatement
16741669
tablePropertiesPrefixed?
16751670
(KW_AS selectStatementWithCTE)?
16761671
)
1677-
| KW_CREATE mgd=KW_MANAGED KW_TABLE ifNotExists? name=tableName
1672+
| KW_CREATE mgd=KW_MANAGED KW_TABLE ifNotExists? name=tableNameCreate
16781673
( likeTableOrFile
16791674
tableRowFormat?
16801675
tableFileFormat?
@@ -1720,7 +1715,7 @@ dropDataConnectorStatement
17201715

17211716
tableAllColumns
17221717
: STAR
1723-
| tableName DOT STAR
1718+
| tableOrView DOT STAR
17241719
;
17251720

17261721
// (table|column)
@@ -1816,7 +1811,7 @@ tableSample
18161811
;
18171812

18181813
tableSource
1819-
: tabname=tableName props=tableProperties? ts=tableSample? asOf=asOfClause? (KW_AS? alias=id_)?
1814+
: tabname=tableOrView props=tableProperties? ts=tableSample? asOf=asOfClause? (KW_AS? alias=id_)?
18201815
;
18211816

18221817
asOfClause
@@ -1826,18 +1821,40 @@ asOfClause
18261821
;
18271822

18281823
uniqueJoinTableSource
1829-
: tabname=tableName ts=tableSample? (KW_AS? alias=id_)?
1824+
: tabname=tableOrView ts=tableSample? (KW_AS? alias=id_)?
1825+
;
1826+
1827+
dbSchemaName
1828+
: id_
1829+
;
1830+
1831+
dbSchemaNameCreate
1832+
: id_
1833+
;
1834+
1835+
tableOrView
1836+
: tableName
1837+
| viewName
18301838
;
18311839

18321840
tableName
18331841
: db=id_ DOT tab=id_ (DOT meta=id_)?
18341842
| tab=id_
18351843
;
18361844

1845+
tableNameCreate
1846+
: db=id_ DOT tab=id_ (DOT meta=id_)?
1847+
| tab=id_
1848+
;
1849+
18371850
viewName
18381851
: (db=id_ DOT)? view=id_
18391852
;
18401853

1854+
viewNameCreate
1855+
: (db=id_ DOT)? view=id_
1856+
;
1857+
18411858
subQuerySource
18421859
: LPAREN queryStatementExpression RPAREN KW_AS? id_
18431860
;
@@ -2140,7 +2157,7 @@ trimFunction
21402157
// fun(par1, par2, par3)
21412158
function_
21422159
: trimFunction
2143-
| functionName
2160+
| functionNameForInvoke
21442161
LPAREN
21452162
(star=STAR | dist=all_distinct? (selectExpression (COMMA selectExpression)*)?)
21462163
(
@@ -2160,9 +2177,23 @@ null_treatment
21602177
| KW_IGNORE KW_NULLS
21612178
;
21622179

2163-
functionName
2164-
: functionIdentifier // Keyword IF is also a function name
2180+
functionNameForDDL
2181+
: functionNameForInvoke
2182+
| StringLiteral
2183+
;
2184+
2185+
functionNameForInvoke
2186+
: userDefinedFuncName
21652187
| sql11ReservedKeywordsUsedAsFunctionName
2188+
| sysFuncNames
2189+
;
2190+
2191+
userDefinedFuncName
2192+
: functionIdentifier
2193+
;
2194+
2195+
functionNameCreate
2196+
: functionIdentifier
21662197
;
21672198

21682199
castExpression
@@ -2584,12 +2615,6 @@ sysFuncNames
25842615
| KW_BETWEEN
25852616
;
25862617

2587-
descFuncNames
2588-
: sysFuncNames
2589-
| StringLiteral
2590-
| functionIdentifier
2591-
;
2592-
25932618
id_
25942619
: Identifier
25952620
| nonReserved

src/lib/hive/HiveSqlLexer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated from /Users/xuxiaoqi/Documents/work/daishu-code/dt-sql-parser/src/grammar/hive/HiveSqlLexer.g4 by ANTLR 4.9.0-SNAPSHOT
1+
// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/hive/HiveSqlLexer.g4 by ANTLR 4.9.0-SNAPSHOT
22

33

44
import { ATN } from "antlr4ts/atn/ATN";

0 commit comments

Comments
 (0)