Fix holo/ck array date type parse/output issue. (#6434)
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (11, ubuntu-latest) (push) Waiting to run Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (17, ubuntu-latest) (push) Waiting to run Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (21, ubuntu-latest) (push) Waiting to run Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (8, ubuntu-latest) (push) Waiting to run Details

* Fix holo/ck array date type parse/output issue.

* Fix holo/ck array date type parse/output issue.

* Fix holo/ck array date type parse/output issue.
This commit is contained in:
lingo-xp 2025-05-26 17:03:33 +08:00 committed by GitHub
parent 2fa64f1356
commit e206890a01
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 45 additions and 34 deletions

View File

@ -15,6 +15,7 @@
*/
package com.alibaba.druid.sql.dialect.clickhouse.parser;
import com.alibaba.druid.sql.ast.SQLArrayDataType;
import com.alibaba.druid.sql.ast.SQLDataType;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
@ -162,4 +163,14 @@ public class CKExprParser extends SQLExprParser {
return struct;
}
@Override
protected SQLArrayDataType parseArrayDataType() {
lexer.nextToken();
accept(Token.LPAREN);
SQLDataType itemType = parseDataType();
SQLArrayDataType array = new SQLArrayDataType(itemType, dbType);
accept(Token.RPAREN);
return array;
}
}

View File

@ -180,33 +180,6 @@ public class CKOutputVisitor extends SQLASTOutputVisitor implements CKASTVisitor
return false;
}
@Override
public boolean visit(SQLArrayDataType x) {
final List<SQLExpr> arguments = x.getArguments();
if (Boolean.TRUE.equals(x.getAttribute("ads.arrayDataType"))) {
x.getComponentType().accept(this);
print('[');
printAndAccept(arguments, ", ");
print(']');
} else {
SQLDataType componentType = x.getComponentType();
if (componentType != null) {
print0(ucase ? "Array<" : "array<");
componentType.accept(this);
print('>');
} else {
print0(ucase ? "Array" : "array");
}
if (arguments.size() > 0) {
print('(');
printAndAccept(arguments, ", ");
print(')');
}
}
return false;
}
@Override
public boolean visit(CKAlterTableUpdateStatement x) {
print0(ucase ? "ALTER TABLE " : "alter table ");
@ -367,4 +340,12 @@ public class CKOutputVisitor extends SQLASTOutputVisitor implements CKASTVisitor
print(')');
return false;
}
@Override
public boolean visit(SQLArrayDataType x) {
print0(ucase ? "ARRAY(" : "array(");
x.getComponentType().accept(this);
print(')');
return false;
}
}

View File

@ -1,6 +1,7 @@
package com.alibaba.druid.sql.dialect.hologres.visitor;
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.ast.SQLArrayDataType;
import com.alibaba.druid.sql.ast.SQLPartitionBy;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
@ -27,4 +28,12 @@ public class HologresOutputVisitor extends PGOutputVisitor {
print0(ucase ? "PARTITION BY " : "partition by ");
partitionBy.accept(this);
}
@Override
public boolean visit(SQLArrayDataType x) {
print0(ucase ? "ARRAY<" : "array<");
x.getComponentType().accept(this);
print('>');
return false;
}
}

View File

@ -4200,7 +4200,7 @@ public class SQLExprParser extends SQLParser {
return null;
}
if (lexer.identifierEquals(FnvHash.Constants.ARRAY)) {
if (lexer.identifierEquals(FnvHash.Constants.ARRAY) || lexer.token() == Token.ARRAY) {
return parseArrayDataType();
}

View File

@ -1,3 +1,11 @@
CREATE TABLE test.test (
`aa` Array(UInt64) )
ENGINE = MergeTree()
--------------------
CREATE TABLE test.test (
`aa` ARRAY(UInt64)
) ENGINE = MergeTree()
------------------------------------------------------------------------------------------------------------------------
CREATE TABLE tmp.tmp_exp_mobile_tzfx_tzqy_m_20240506
(
date_code Int32 COMMENT '日期编码',
@ -176,8 +184,8 @@ CREATE TABLE if not exists etda.mytable1
--------------------
CREATE TABLE IF NOT EXISTS etda.mytable1 (
`id` UInt64,
`action_parameter_uint64_list` Array(UInt64),
`action_parameter_string_list` Array(String)
`action_parameter_uint64_list` ARRAY(UInt64),
`action_parameter_string_list` ARRAY(String)
)
------------------------------------------------------------------------------------------------------------------------
SELECT level, sum(cnt) OVER (PARTITION BY NULL ORDER BY level DESC) AS cnt

View File

@ -28,10 +28,10 @@ CREATE TABLE replicated_orders (
product_id LowCardinality(UInt32),
quantity Int32,
price Decimal(10, 2),
array1 Array(UInt8),
array1 ARRAY(UInt8),
tuple1 Tuple(UInt8, String),
map1 MAP(String, UInt64),
variant1 Variant(String, Array(UInt8)),
variant1 Variant(String, ARRAY(UInt8)),
null1 Nullable(String)
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/replicated_orders', '{replica}')
PARTITION BY order_date
@ -90,10 +90,10 @@ CREATE TABLE replicated_orders (
product_id LowCardinality(UInt32),
quantity Int32,
price Decimal(10, 2),
array1 Array(UInt8),
array1 ARRAY(UInt8),
tuple1 Tuple(UInt8, String),
map1 MAP(String, UInt64),
variant1 Variant(String, Array(UInt8)),
variant1 Variant(String, ARRAY(UInt8)),
null1 Nullable(String)
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/replicated_orders', '{replica}')
PARTITION BY (order_date, quantity)

View File

@ -2,6 +2,7 @@ CREATE TABLE IF NOT EXISTS my_partitioned_table (
id INT,
name text,
value FLOAT ,
arr ARRAY<INT>,
dt TEXT not null,
region TEXT not null
)
@ -15,6 +16,7 @@ CREATE TABLE IF NOT EXISTS my_partitioned_table (
id INT,
name text,
value FLOAT,
arr ARRAY<INT>,
dt TEXT NOT NULL,
region TEXT NOT NULL
)