You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/07/23 10:19:17 UTC
[doris] branch master updated: FIX: odbc string error (#11096)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 573ca0bbc2 FIX: odbc string error (#11096)
573ca0bbc2 is described below
commit 573ca0bbc218b9cd26788b41c3fd6077669cc794
Author: Stalary <st...@163.com>
AuthorDate: Sat Jul 23 18:19:11 2022 +0800
FIX: odbc string error (#11096)
---
.../java/org/apache/doris/analysis/ColumnDef.java | 2 +-
.../apache/doris/analysis/CreateTableStmtTest.java | 115 +++++++++++----------
2 files changed, 62 insertions(+), 55 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java
index afae03e99f..cea5925b6a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java
@@ -270,7 +270,7 @@ public class ColumnDef {
throw new AnalysisException("Array type column default value only support null");
}
}
- if (isKey() && type.getPrimitiveType() == PrimitiveType.STRING) {
+ if (isKey() && type.getPrimitiveType() == PrimitiveType.STRING && isOlap) {
throw new AnalysisException("String Type should not be used in key column[" + getName()
+ "].");
}
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
index 75627d0f0c..5371482345 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
@@ -17,11 +17,13 @@
package org.apache.doris.analysis;
+import org.apache.doris.analysis.ColumnDef.DefaultValue;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.KeysType;
import org.apache.doris.catalog.PrimitiveType;
import org.apache.doris.catalog.ScalarType;
import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.ExceptionChecker;
import org.apache.doris.common.UserException;
import org.apache.doris.datasource.InternalDataSource;
import org.apache.doris.mysql.privilege.MockedAuth;
@@ -43,8 +45,13 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+/**
+ * Test for create table.
+ **/
public class CreateTableStmtTest {
private static final Logger LOG = LoggerFactory.getLogger(CreateTableStmtTest.class);
+ @Rule
+ public ExpectedException expectedEx = ExpectedException.none();
// used to get default db
private TableName tblName;
@@ -59,12 +66,12 @@ public class CreateTableStmtTest {
private PaloAuth auth;
@Mocked
private ConnectContext ctx;
- @Rule
- public ExpectedException expectedEx = ExpectedException.none();
- // set default db is 'db1'
- // table name is table1
- // Column: [col1 int; col2 string]
+ /**
+ * set default db is 'db1'
+ * table name is table1
+ * Column: [col1 int; col2 string]
+ **/
@Before
public void setUp() {
// analyzer
@@ -107,8 +114,7 @@ public class CreateTableStmtTest {
@Test
public void testCreateTableWithRandomDistribution() throws UserException {
CreateTableStmt stmt = new CreateTableStmt(false, false, tblName, cols, "olap",
- new KeysDesc(KeysType.DUP_KEYS, colsName), null,
- new RandomDistributionDesc(6), null, null, "");
+ new KeysDesc(KeysType.DUP_KEYS, colsName), null, new RandomDistributionDesc(6), null, null, "");
stmt.analyze(analyzer);
Assert.assertEquals("testCluster:db1", stmt.getDbName());
Assert.assertEquals("table1", stmt.getTableName());
@@ -128,7 +134,8 @@ public class CreateTableStmtTest {
Assert.assertEquals("testCluster:db1", stmt.getDbName());
Assert.assertEquals("table1", stmt.getTableName());
Assert.assertNull(stmt.getProperties());
- Assert.assertTrue(stmt.toSql().contains("rollup( `index1` (`col1`, `col2`) FROM `table1`, `index2` (`col2`, `col3`) FROM `table1`)"));
+ Assert.assertTrue(stmt.toSql()
+ .contains("rollup( `index1` (`col1`, `col2`) FROM `table1`, `index2` (`col2`, `col3`) FROM `table1`)"));
}
@Test
@@ -158,8 +165,7 @@ public class CreateTableStmtTest {
}
};
CreateTableStmt stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap",
- new KeysDesc(KeysType.AGG_KEYS, colsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ new KeysDesc(KeysType.AGG_KEYS, colsName), null, new RandomDistributionDesc(10), null, null, "");
stmt.analyze(noDbAnalyzer);
}
@@ -167,8 +173,7 @@ public class CreateTableStmtTest {
public void testEmptyCol() throws UserException, AnalysisException {
// make default db return empty;
List<ColumnDef> emptyCols = Lists.newArrayList();
- CreateTableStmt stmt = new CreateTableStmt(false, false, tblNameNoDb, emptyCols, "olap",
- new KeysDesc(), null,
+ CreateTableStmt stmt = new CreateTableStmt(false, false, tblNameNoDb, emptyCols, "olap", new KeysDesc(), null,
new RandomDistributionDesc(10), null, null, "");
stmt.analyze(analyzer);
}
@@ -177,8 +182,7 @@ public class CreateTableStmtTest {
public void testDupCol() throws UserException, AnalysisException {
// make default db return empty;
CreateTableStmt stmt = new CreateTableStmt(false, false, tblNameNoDb, invalidCols, "olap",
- new KeysDesc(KeysType.AGG_KEYS, invalidColsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ new KeysDesc(KeysType.AGG_KEYS, invalidColsName), null, new RandomDistributionDesc(10), null, null, "");
stmt.analyze(analyzer);
}
@@ -190,8 +194,7 @@ public class CreateTableStmtTest {
colsName.add("col3");
CreateTableStmt stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap",
- new KeysDesc(KeysType.AGG_KEYS, colsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ new KeysDesc(KeysType.AGG_KEYS, colsName), null, new RandomDistributionDesc(10), null, null, "");
expectedEx.expect(AnalysisException.class);
expectedEx.expectMessage("Key column can not set bitmap or hll type:col3");
stmt.analyze(analyzer);
@@ -200,9 +203,8 @@ public class CreateTableStmtTest {
ColumnDef hll = new ColumnDef("col3", new TypeDef(ScalarType.createType(PrimitiveType.HLL)));
cols.add(hll);
- stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap",
- new KeysDesc(KeysType.AGG_KEYS, colsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap", new KeysDesc(KeysType.AGG_KEYS, colsName),
+ null, new RandomDistributionDesc(10), null, null, "");
expectedEx.expect(AnalysisException.class);
expectedEx.expectMessage("Key column can not set bitmap or hll type:col3");
stmt.analyze(analyzer);
@@ -213,20 +215,20 @@ public class CreateTableStmtTest {
ColumnDef bitmap = new ColumnDef("col3", new TypeDef(ScalarType.createType(PrimitiveType.BITMAP)));
cols.add(bitmap);
CreateTableStmt stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap",
- new KeysDesc(KeysType.DUP_KEYS, colsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ new KeysDesc(KeysType.DUP_KEYS, colsName), null, new RandomDistributionDesc(10), null, null, "");
expectedEx.expect(AnalysisException.class);
- expectedEx.expectMessage("Aggregate type `col3` bitmap NONE NOT NULL COMMENT \"\" is not compatible with primitive type bitmap");
+ expectedEx.expectMessage(
+ "Aggregate type `col3` bitmap NONE NOT NULL COMMENT \"\" is not compatible with primitive type bitmap");
stmt.analyze(analyzer);
cols.remove(bitmap);
ColumnDef hll = new ColumnDef("col3", new TypeDef(ScalarType.createType(PrimitiveType.HLL)));
cols.add(hll);
- stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap",
- new KeysDesc(KeysType.DUP_KEYS, colsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap", new KeysDesc(KeysType.DUP_KEYS, colsName),
+ null, new RandomDistributionDesc(10), null, null, "");
expectedEx.expect(AnalysisException.class);
- expectedEx.expectMessage("Aggregate type `col3` hll NONE NOT NULL COMMENT \"\" is not compatible with primitive type hll");
+ expectedEx.expectMessage(
+ "Aggregate type `col3` hll NONE NOT NULL COMMENT \"\" is not compatible with primitive type hll");
stmt.analyze(analyzer);
}
@@ -237,25 +239,25 @@ public class CreateTableStmtTest {
cols.add(bitmap);
CreateTableStmt stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap",
- new KeysDesc(KeysType.AGG_KEYS, colsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ new KeysDesc(KeysType.AGG_KEYS, colsName), null, new RandomDistributionDesc(10), null, null, "");
expectedEx.expect(AnalysisException.class);
- expectedEx.expectMessage(String.format("Aggregate type %s is not compatible with primitive type %s",
- bitmap.toString(), bitmap.getTypeDef().getType().toSql()));
+ expectedEx.expectMessage(
+ String.format("Aggregate type %s is not compatible with primitive type %s", bitmap.toString(),
+ bitmap.getTypeDef().getType().toSql()));
stmt.analyze(analyzer);
cols.remove(bitmap);
- ColumnDef hll = new ColumnDef("col3", new TypeDef(ScalarType.createType(PrimitiveType.HLL)));
+ ColumnDef hll = new ColumnDef("col3", new TypeDef(ScalarType.createType(PrimitiveType.HLL)));
hll.setAggregateType(AggregateType.SUM);
cols.add(hll);
- stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap",
- new KeysDesc(KeysType.AGG_KEYS, colsName), null,
- new RandomDistributionDesc(10), null, null, "");
+ stmt = new CreateTableStmt(false, false, tblNameNoDb, cols, "olap", new KeysDesc(KeysType.AGG_KEYS, colsName),
+ null, new RandomDistributionDesc(10), null, null, "");
expectedEx.expect(AnalysisException.class);
- expectedEx.expectMessage(String.format("Aggregate type %s is not compatible with primitive type %s",
- hll.toString(), hll.getTypeDef().getType().toSql()));
+ expectedEx.expectMessage(
+ String.format("Aggregate type %s is not compatible with primitive type %s", hll.toString(),
+ hll.getTypeDef().getType().toSql()));
stmt.analyze(analyzer);
}
@@ -268,9 +270,7 @@ public class CreateTableStmtTest {
CreateTableStmt stmt = new CreateTableStmt(false, true, tblName, "iceberg", properties, "");
stmt.analyze(analyzer);
- Assert.assertEquals("CREATE EXTERNAL TABLE `testCluster:db1`.`table1` (\n"
- + "\n"
- + ") ENGINE = iceberg\n"
+ Assert.assertEquals("CREATE EXTERNAL TABLE `testCluster:db1`.`table1` (\n" + "\n" + ") ENGINE = iceberg\n"
+ "PROPERTIES (\"iceberg.database\" = \"doris\",\n"
+ "\"iceberg.hive.metastore.uris\" = \"thrift://127.0.0.1:9087\",\n"
+ "\"iceberg.table\" = \"test\")", stmt.toString());
@@ -285,12 +285,11 @@ public class CreateTableStmtTest {
CreateTableStmt stmt = new CreateTableStmt(false, true, tblName, "hudi", properties, "");
stmt.analyze(analyzer);
- Assert.assertEquals("CREATE EXTERNAL TABLE `testCluster:db1`.`table1` (\n"
- + "\n"
- + ") ENGINE = hudi\n"
- + "PROPERTIES (\"hudi.database\" = \"doris\",\n"
- + "\"hudi.hive.metastore.uris\" = \"thrift://127.0.0.1:9087\",\n"
- + "\"hudi.table\" = \"test\")", stmt.toString());
+ Assert.assertEquals("CREATE EXTERNAL TABLE `testCluster:db1`.`table1` (\n" + "\n" + ") ENGINE = hudi\n"
+ + "PROPERTIES (\"hudi.database\" = \"doris\",\n"
+ + "\"hudi.hive.metastore.uris\" = \"thrift://127.0.0.1:9087\",\n"
+ + "\"hudi.table\" = \"test\")",
+ stmt.toString());
}
@Test
@@ -302,17 +301,25 @@ public class CreateTableStmtTest {
CreateTableStmt stmt = new CreateTableStmt(false, true, tblName, "hudi", properties, "");
ColumnDef idCol = new ColumnDef("id", TypeDef.create(PrimitiveType.INT));
stmt.addColumnDef(idCol);
- ColumnDef nameCol = new ColumnDef("name", TypeDef.create(PrimitiveType.INT), false,
- null, true, ColumnDef.DefaultValue.NOT_SET, "");
+ ColumnDef nameCol = new ColumnDef("name", TypeDef.create(PrimitiveType.INT), false, null, true,
+ ColumnDef.DefaultValue.NOT_SET, "");
stmt.addColumnDef(nameCol);
stmt.analyze(analyzer);
- Assert.assertEquals("CREATE EXTERNAL TABLE `testCluster:db1`.`table1` (\n"
- + " `id` int(11) NOT NULL COMMENT \"\",\n"
- + " `name` int(11) NULL COMMENT \"\"\n"
- + ") ENGINE = hudi\n"
- + "PROPERTIES (\"hudi.database\" = \"doris\",\n"
- + "\"hudi.hive.metastore.uris\" = \"thrift://127.0.0.1:9087\",\n"
- + "\"hudi.table\" = \"test\")", stmt.toString());
+ Assert.assertEquals(
+ "CREATE EXTERNAL TABLE `testCluster:db1`.`table1` (\n" + " `id` int(11) NOT NULL COMMENT \"\",\n"
+ + " `name` int(11) NULL COMMENT \"\"\n" + ") ENGINE = hudi\n"
+ + "PROPERTIES (\"hudi.database\" = \"doris\",\n"
+ + "\"hudi.hive.metastore.uris\" = \"thrift://127.0.0.1:9087\",\n"
+ + "\"hudi.table\" = \"test\")", stmt.toString());
+ }
+
+ @Test
+ public void testOdbcString() throws AnalysisException {
+ ColumnDef col = new ColumnDef("string_col", TypeDef.create(PrimitiveType.STRING), true, null, true,
+ new DefaultValue(false, null), "");
+ ExceptionChecker.expectThrowsWithMsg(AnalysisException.class,
+ "String Type should not be used in key column[string_col].", () -> col.analyze(true));
+ col.analyze(false);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org