From 636914a7b71e5c016af78c51f007914a22e5c1bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=8A=E8=A5=BF?= Date: Thu, 24 Oct 2024 15:07:55 +0800 Subject: [PATCH] Gaussdb support partitioned by in ddl --- .../parser/GaussDbCreateTableParser.java | 28 +++++++++++++++++++ .../dialect/gaussdb/parser/GaussDbLexer.java | 1 + .../gaussdb/visitor/GaussDbOutputVisitor.java | 1 + .../test/resources/bvt/parser/gaussdb/1.txt | 21 +++++++++++++- 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbCreateTableParser.java b/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbCreateTableParser.java index dae2e2e45f..13999b0f96 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbCreateTableParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbCreateTableParser.java @@ -120,6 +120,34 @@ protected void parseCreateTableRest(SQLCreateTableStatement stmt) { if (partitionClause != null) { gdStmt.setPartitionBy(partitionClause); } + if (lexer.nextIf(Token.PARTITIONED)) { + accept(Token.BY); + accept(Token.LPAREN); + + for (; ; ) { + if (lexer.token() != Token.IDENTIFIER) { + throw new ParserException("expect identifier. " + lexer.info()); + } + + SQLColumnDefinition column = this.exprParser.parseColumn(); + stmt.addPartitionColumn(column); + + if (lexer.isKeepComments() && lexer.hasComment()) { + column.addAfterComment(lexer.readAndResetComments()); + } + + if (lexer.token() != Token.COMMA) { + break; + } else { + lexer.nextToken(); + if (lexer.isKeepComments() && lexer.hasComment()) { + column.addAfterComment(lexer.readAndResetComments()); + } + } + } + + accept(Token.RPAREN); + } } public SQLPartitionBy parsePartitionBy() { diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbLexer.java b/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbLexer.java index 51f9a7dddf..c36fba73b7 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbLexer.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/parser/GaussDbLexer.java @@ -20,6 +20,7 @@ protected Keywords loadKeywords() { map.put("PARTIAL", Token.PARTIAL); map.put("KEY", Token.KEY); map.put("OVERWRITE", Token.OVERWRITE); + map.put("PARTITIONED", Token.PARTITIONED); map.putAll(super.loadKeywords().getKeywords()); return new Keywords(map); } diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/visitor/GaussDbOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/visitor/GaussDbOutputVisitor.java index 289583b245..101c287b39 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/visitor/GaussDbOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/gaussdb/visitor/GaussDbOutputVisitor.java @@ -151,6 +151,7 @@ protected void printCollate(SQLExpr collate) { @Override protected void printPartitionedBy(SQLCreateTableStatement x) { + super.printPartitionedBy(x); if (x instanceof GaussDbCreateTableStatement) { SQLPartitionBy partitionBy = ((GaussDbCreateTableStatement) x).getPartitionBy(); if (partitionBy == null) { diff --git a/core/src/test/resources/bvt/parser/gaussdb/1.txt b/core/src/test/resources/bvt/parser/gaussdb/1.txt index ad5aae6fdd..19eca2fd40 100644 --- a/core/src/test/resources/bvt/parser/gaussdb/1.txt +++ b/core/src/test/resources/bvt/parser/gaussdb/1.txt @@ -13,4 +13,23 @@ INSERT OVERWRITE TABLE edw_dwi.dwi_pub_eps_itsm_work_order_history_da PARTITION SELECT historyid AS history_id, workorderid AS work_order_id, operationownerid AS operation_owner_id, operationtime AS operation_time, description AS description , operation AS operation FROM smart_sdi.sdi_itsm_public_workorderhistory_da -WHERE dt = '${deal_date}' \ No newline at end of file +WHERE dt = '${deal_date}' +------------------------------------------------------------------------------------------------------------------------ +create table if not exists edw_dwr.dwr_sale_tran_order_finance_scheme_da +( + order_id string comment '订单号' +,smart_id string comment 'smartId' +,vehicle_type string comment '车型' +) comment '订单金融方案' +partitioned by (dt string comment 'YYYY-MM-DD') +; +-------------------- +CREATE TABLE IF NOT EXISTS edw_dwr.dwr_sale_tran_order_finance_scheme_da ( + order_id string COMMENT '订单号', + smart_id string COMMENT 'smartId', + vehicle_type string COMMENT '车型' +) +COMMENT = '订单金融方案' +PARTITIONED BY ( + dt string COMMENT 'YYYY-MM-DD' +); \ No newline at end of file