[fix](create table) modify varchar default length 1 to 65533 (#21302)
*modify archer default length 1 to varchar.max.length , when create table.*
```mysql
create table t2 (
k1 CHAR,
K2 CHAR(10) ,
K3 VARCHAR ,
K4 VARCHAR(1024) )
duplicate key (k1)
distributed by hash(k1) buckets 1
properties('replication_num' = '1');
desc t2;
```
| Field | Type | Null | Key | Default | Extra |
| -- |--|--| -| -| -|
| k1 | CHAR(1) | Yes | true | NULL | |
| K2 | CHAR(10) | Yes | false | NULL | NONE |
| K3 | VARCHAR(65533) | Yes | false | NULL | NONE |
| K4 | VARCHAR(1024) | Yes | false | NULL | NONE |
This commit is contained in:
@ -92,7 +92,7 @@ Column definition list:
|
||||
CHAR[(length)]
|
||||
Fixed-length character string. Length range: 1 ~ 255. Default is 1
|
||||
VARCHAR[(length)]
|
||||
Variable length character string. Length range: 1 ~ 65533. Default is 1
|
||||
Variable length character string. Length range: 1 ~ 65533. Default is 65533
|
||||
HLL (1~16385 bytes)
|
||||
HyperLogLog column type, do not need to specify the length and default value. The length is controlled within the system according to the degree of data aggregation.
|
||||
Must be used with HLL_UNION aggregation type.
|
||||
|
||||
@ -87,7 +87,7 @@ distribution_desc
|
||||
CHAR[(length)]
|
||||
定长字符串。长度范围:1 ~ 255。默认为1
|
||||
VARCHAR[(length)]
|
||||
变长字符串。长度范围:1 ~ 65533。默认为1
|
||||
变长字符串。长度范围:1 ~ 65533。默认为65533
|
||||
HLL (1~16385个字节)
|
||||
HyperLogLog 列类型,不需要指定长度和默认值。长度根据数据的聚合程度系统内控制。
|
||||
必须配合 HLL_UNION 聚合类型使用。
|
||||
|
||||
@ -263,11 +263,14 @@ public class ColumnDef {
|
||||
if (typeDef.getType().isScalarType()) {
|
||||
final ScalarType targetType = (ScalarType) typeDef.getType();
|
||||
if (targetType.getPrimitiveType().isStringType() && !targetType.isLengthSet()) {
|
||||
if (targetType.getPrimitiveType() != PrimitiveType.STRING) {
|
||||
targetType.setLength(1);
|
||||
} else {
|
||||
if (targetType.getPrimitiveType() == PrimitiveType.VARCHAR) {
|
||||
// always set varchar length MAX_VARCHAR_LENGTH
|
||||
targetType.setLength(ScalarType.MAX_VARCHAR_LENGTH);
|
||||
} else if (targetType.getPrimitiveType() == PrimitiveType.STRING) {
|
||||
// always set text length MAX_STRING_LENGTH
|
||||
targetType.setLength(ScalarType.MAX_STRING_LENGTH);
|
||||
} else {
|
||||
targetType.setLength(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -725,4 +725,18 @@ public class CreateTableTest {
|
||||
+ "distributed by hash(k1) buckets 1 properties('replication_num' = '1','in_memory'='true');");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateTableWithStringLen() throws DdlException {
|
||||
ExceptionChecker.expectThrowsNoException(() -> {
|
||||
createTable("create table test.test_strLen(k1 CHAR, k2 CHAR(10) , k3 VARCHAR ,k4 VARCHAR(10))"
|
||||
+ " duplicate key (k1) distributed by hash(k1) buckets 1 properties('replication_num' = '1');");
|
||||
});
|
||||
Database db = Env.getCurrentInternalCatalog().getDbOrDdlException("default_cluster:test");
|
||||
OlapTable tb = (OlapTable) db.getTableOrDdlException("test_strLen");
|
||||
Assert.assertEquals(1, tb.getColumn("k1").getStrLen());
|
||||
Assert.assertEquals(10, tb.getColumn("k2").getStrLen());
|
||||
Assert.assertEquals(ScalarType.MAX_VARCHAR_LENGTH, tb.getColumn("k3").getStrLen());
|
||||
Assert.assertEquals(10, tb.getColumn("k4").getStrLen());
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,12 +50,12 @@ public class TableFunctionPlanTest {
|
||||
CreateDbStmt createDbStmt = (CreateDbStmt) UtFrameUtils.parseAndAnalyzeStmt(createDbStmtStr, ctx);
|
||||
Env.getCurrentEnv().createDb(createDbStmt);
|
||||
// 3. create table tbl1
|
||||
String createTblStmtStr = "create table db1.tbl1(k1 int, k2 varchar, k3 varchar) "
|
||||
String createTblStmtStr = "create table db1.tbl1(k1 int, k2 varchar(1), k3 varchar(1)) "
|
||||
+ "DUPLICATE KEY(k1) distributed by hash(k1) buckets 3 properties('replication_num' = '1');";
|
||||
CreateTableStmt createTableStmt = (CreateTableStmt) UtFrameUtils.parseAndAnalyzeStmt(createTblStmtStr, ctx);
|
||||
Env.getCurrentEnv().createTable(createTableStmt);
|
||||
|
||||
createTblStmtStr = "create table db1.tbl2(k1 int, k2 varchar, v1 bitmap bitmap_union) "
|
||||
createTblStmtStr = "create table db1.tbl2(k1 int, k2 varchar(1), v1 bitmap bitmap_union) "
|
||||
+ "distributed by hash(k1) buckets 3 properties('replication_num' = '1');";
|
||||
createTableStmt = (CreateTableStmt) UtFrameUtils.parseAndAnalyzeStmt(createTblStmtStr, ctx);
|
||||
Env.getCurrentEnv().createTable(createTableStmt);
|
||||
|
||||
7
regression-test/data/ddl_p0/test_createtable_strlen.out
Normal file
7
regression-test/data/ddl_p0/test_createtable_strlen.out
Normal file
@ -0,0 +1,7 @@
|
||||
-- This file is automatically generated. You should know what you did if you want to edit this
|
||||
-- !create --
|
||||
k1 CHAR(1) Yes true \N
|
||||
K2 CHAR(10) Yes false \N NONE
|
||||
K3 VARCHAR(65533) Yes false \N NONE
|
||||
K4 VARCHAR(10) Yes false \N NONE
|
||||
|
||||
40
regression-test/suites/ddl_p0/test_createtable_strlen.groovy
Normal file
40
regression-test/suites/ddl_p0/test_createtable_strlen.groovy
Normal file
@ -0,0 +1,40 @@
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
|
||||
suite("test_createtable_strlen") {
|
||||
|
||||
def table = "test_ct_strlen"
|
||||
try {
|
||||
sql """
|
||||
create table ${table} (
|
||||
k1 CHAR,
|
||||
K2 CHAR(10) ,
|
||||
K3 VARCHAR ,
|
||||
K4 VARCHAR(10) )
|
||||
duplicate key (k1)
|
||||
distributed by hash(k1) buckets 1
|
||||
properties('replication_num' = '1');
|
||||
"""
|
||||
|
||||
qt_create """ desc ${table}; """
|
||||
|
||||
} finally {
|
||||
sql """ DROP TABLE IF EXISTS ${table}; """
|
||||
}
|
||||
|
||||
}
|
||||
@ -29,7 +29,7 @@ suite("test_bitmap_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
@ -110,7 +110,7 @@ suite("test_bitmap_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
@ -196,7 +196,7 @@ suite("test_bitmap_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
|
||||
@ -29,7 +29,7 @@ suite("test_bitmap_index", "inverted_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
@ -102,7 +102,7 @@ suite("test_bitmap_index", "inverted_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
@ -180,7 +180,7 @@ suite("test_bitmap_index", "inverted_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
|
||||
@ -29,7 +29,7 @@ suite("test_inverted_index", "inverted_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
@ -110,7 +110,7 @@ suite("test_inverted_index", "inverted_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
@ -196,7 +196,7 @@ suite("test_inverted_index", "inverted_index") {
|
||||
k3 INT,
|
||||
k4 BIGINT,
|
||||
k5 CHAR,
|
||||
k6 VARCHAR,
|
||||
k6 VARCHAR(1),
|
||||
k7 DATE,
|
||||
k8 DATETIME,
|
||||
k9 LARGEINT,
|
||||
|
||||
Reference in New Issue
Block a user