mirror of https://github.com/alibaba/druid.git
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
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:
parent
2fa64f1356
commit
e206890a01
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package com.alibaba.druid.sql.dialect.clickhouse.parser;
|
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.SQLDataType;
|
||||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||||
import com.alibaba.druid.sql.ast.SQLName;
|
import com.alibaba.druid.sql.ast.SQLName;
|
||||||
|
@ -162,4 +163,14 @@ public class CKExprParser extends SQLExprParser {
|
||||||
|
|
||||||
return struct;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -180,33 +180,6 @@ public class CKOutputVisitor extends SQLASTOutputVisitor implements CKASTVisitor
|
||||||
return false;
|
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
|
@Override
|
||||||
public boolean visit(CKAlterTableUpdateStatement x) {
|
public boolean visit(CKAlterTableUpdateStatement x) {
|
||||||
print0(ucase ? "ALTER TABLE " : "alter table ");
|
print0(ucase ? "ALTER TABLE " : "alter table ");
|
||||||
|
@ -367,4 +340,12 @@ public class CKOutputVisitor extends SQLASTOutputVisitor implements CKASTVisitor
|
||||||
print(')');
|
print(')');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean visit(SQLArrayDataType x) {
|
||||||
|
print0(ucase ? "ARRAY(" : "array(");
|
||||||
|
x.getComponentType().accept(this);
|
||||||
|
print(')');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.alibaba.druid.sql.dialect.hologres.visitor;
|
package com.alibaba.druid.sql.dialect.hologres.visitor;
|
||||||
|
|
||||||
import com.alibaba.druid.DbType;
|
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.SQLPartitionBy;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
|
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
|
||||||
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
|
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
|
||||||
|
@ -27,4 +28,12 @@ public class HologresOutputVisitor extends PGOutputVisitor {
|
||||||
print0(ucase ? "PARTITION BY " : "partition by ");
|
print0(ucase ? "PARTITION BY " : "partition by ");
|
||||||
partitionBy.accept(this);
|
partitionBy.accept(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean visit(SQLArrayDataType x) {
|
||||||
|
print0(ucase ? "ARRAY<" : "array<");
|
||||||
|
x.getComponentType().accept(this);
|
||||||
|
print('>');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4200,7 +4200,7 @@ public class SQLExprParser extends SQLParser {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lexer.identifierEquals(FnvHash.Constants.ARRAY)) {
|
if (lexer.identifierEquals(FnvHash.Constants.ARRAY) || lexer.token() == Token.ARRAY) {
|
||||||
return parseArrayDataType();
|
return parseArrayDataType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
CREATE TABLE tmp.tmp_exp_mobile_tzfx_tzqy_m_20240506
|
||||||
(
|
(
|
||||||
date_code Int32 COMMENT '日期编码',
|
date_code Int32 COMMENT '日期编码',
|
||||||
|
@ -176,8 +184,8 @@ CREATE TABLE if not exists etda.mytable1
|
||||||
--------------------
|
--------------------
|
||||||
CREATE TABLE IF NOT EXISTS etda.mytable1 (
|
CREATE TABLE IF NOT EXISTS etda.mytable1 (
|
||||||
`id` UInt64,
|
`id` UInt64,
|
||||||
`action_parameter_uint64_list` Array(UInt64),
|
`action_parameter_uint64_list` ARRAY(UInt64),
|
||||||
`action_parameter_string_list` Array(String)
|
`action_parameter_string_list` ARRAY(String)
|
||||||
)
|
)
|
||||||
------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------
|
||||||
SELECT level, sum(cnt) OVER (PARTITION BY NULL ORDER BY level DESC) AS cnt
|
SELECT level, sum(cnt) OVER (PARTITION BY NULL ORDER BY level DESC) AS cnt
|
||||||
|
|
|
@ -28,10 +28,10 @@ CREATE TABLE replicated_orders (
|
||||||
product_id LowCardinality(UInt32),
|
product_id LowCardinality(UInt32),
|
||||||
quantity Int32,
|
quantity Int32,
|
||||||
price Decimal(10, 2),
|
price Decimal(10, 2),
|
||||||
array1 Array(UInt8),
|
array1 ARRAY(UInt8),
|
||||||
tuple1 Tuple(UInt8, String),
|
tuple1 Tuple(UInt8, String),
|
||||||
map1 MAP(String, UInt64),
|
map1 MAP(String, UInt64),
|
||||||
variant1 Variant(String, Array(UInt8)),
|
variant1 Variant(String, ARRAY(UInt8)),
|
||||||
null1 Nullable(String)
|
null1 Nullable(String)
|
||||||
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/replicated_orders', '{replica}')
|
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/replicated_orders', '{replica}')
|
||||||
PARTITION BY order_date
|
PARTITION BY order_date
|
||||||
|
@ -90,10 +90,10 @@ CREATE TABLE replicated_orders (
|
||||||
product_id LowCardinality(UInt32),
|
product_id LowCardinality(UInt32),
|
||||||
quantity Int32,
|
quantity Int32,
|
||||||
price Decimal(10, 2),
|
price Decimal(10, 2),
|
||||||
array1 Array(UInt8),
|
array1 ARRAY(UInt8),
|
||||||
tuple1 Tuple(UInt8, String),
|
tuple1 Tuple(UInt8, String),
|
||||||
map1 MAP(String, UInt64),
|
map1 MAP(String, UInt64),
|
||||||
variant1 Variant(String, Array(UInt8)),
|
variant1 Variant(String, ARRAY(UInt8)),
|
||||||
null1 Nullable(String)
|
null1 Nullable(String)
|
||||||
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/replicated_orders', '{replica}')
|
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/replicated_orders', '{replica}')
|
||||||
PARTITION BY (order_date, quantity)
|
PARTITION BY (order_date, quantity)
|
||||||
|
|
|
@ -2,6 +2,7 @@ CREATE TABLE IF NOT EXISTS my_partitioned_table (
|
||||||
id INT,
|
id INT,
|
||||||
name text,
|
name text,
|
||||||
value FLOAT ,
|
value FLOAT ,
|
||||||
|
arr ARRAY<INT>,
|
||||||
dt TEXT not null,
|
dt TEXT not null,
|
||||||
region TEXT not null
|
region TEXT not null
|
||||||
)
|
)
|
||||||
|
@ -15,6 +16,7 @@ CREATE TABLE IF NOT EXISTS my_partitioned_table (
|
||||||
id INT,
|
id INT,
|
||||||
name text,
|
name text,
|
||||||
value FLOAT,
|
value FLOAT,
|
||||||
|
arr ARRAY<INT>,
|
||||||
dt TEXT NOT NULL,
|
dt TEXT NOT NULL,
|
||||||
region TEXT NOT NULL
|
region TEXT NOT NULL
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue