Skip to content

Commit e148652

Browse files
hanyisongeverpcpcmrigger
authored
fix(databend):get data type error (#715)
* add(databend): databend bugs Signed-off-by: Yisong Han <yisong8686@gmail.com> * fix(databend):get data type error Signed-off-by: Yisong Han <yisong8686@gmail.com> * fix: credential env for databend docker image (#713) * fix(databend):reduce unimportant error messages Signed-off-by: Yisong Han <yisong8686@gmail.com> --------- Signed-off-by: Yisong Han <yisong8686@gmail.com> Co-authored-by: everpcpc <everpcpc@users.noreply.github.com> Co-authored-by: Manuel Rigger <rigger@nus.edu.sg>
1 parent 222ae47 commit e148652

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

src/sqlancer/databend/DatabendBugs.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public final class DatabendBugs {
1414
public static boolean bug9235 = true; // https://github.com/datafuselabs/databend/issues/9235
1515
public static boolean bug9236 = true; // https://github.com/datafuselabs/databend/issues/9236
1616
public static boolean bug9264 = true; // https://github.com/datafuselabs/databend/issues/9264
17+
public static boolean bug9806 = true; // https://github.com/datafuselabs/databend/issues/9806
1718

1819
private DatabendBugs() {
1920
}

src/sqlancer/databend/DatabendErrors.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@ private DatabendErrors() {
99

1010
public static void addExpressionErrors(ExpectedErrors errors) {
1111
errors.add("Division by zero");
12+
errors.add("divided by zero");
1213
errors.add("/ by zero");
1314
errors.add("ORDER BY position");
1415
errors.add("GROUP BY position");
16+
errors.add("no overload satisfies `not(Float64 NULL)`"); // TODO databend不允许出现not(float),而a/b为float
17+
errors.add("no overload satisfies `not(Float64)`");
18+
errors.add("number overflowed while evaluating function"); // 表达式数值溢出
1519
if (DatabendBugs.bug9162) {
1620
errors.add("downcast column error");
1721
}
@@ -30,7 +34,9 @@ public static void addExpressionErrors(ExpectedErrors errors) {
3034
if (DatabendBugs.bug9264) {
3135
errors.add("assertion failed: offset + length <= self.length");
3236
}
33-
// errors.add("validity's length must be equal"); // bug
37+
if (DatabendBugs.bug9806) {
38+
errors.add("segment pruning failure");
39+
}
3440

3541
/*
3642
* TODO column为not null 时,注意default不能为null DROP DATABASE IF EXISTS databend2; CREATE DATABASE databend2; USE
@@ -45,6 +51,7 @@ public static void addInsertErrors(ExpectedErrors errors) {
4551
errors.add("Division by zero");
4652
errors.add("/ by zero");
4753
errors.add("Can't cast column from null into non-nullable type");
54+
errors.add("number overflowed while evaluating function `"); // 不能在int16类型column上插入int64的数据
4855
}
4956

5057
public static void addGroupByErrors(ExpectedErrors errors) {

src/sqlancer/databend/DatabendSchema.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,9 @@ private static List<DatabendColumn> getTableColumns(SQLConnection con, String ta
339339
while (rs.next()) {
340340
String columnName = rs.getString("column_name");
341341
String dataType = rs.getString("data_type");
342+
if (dataType.contains("NULL")) {
343+
dataType = dataType.substring(0, dataType.indexOf(' '));
344+
}
342345
boolean isNullable = rs.getBoolean("is_nullable");
343346
// boolean isPrimaryKey = rs.getString("pk").contains("true");
344347
boolean isPrimaryKey = false; // 没找到主键元数据

src/sqlancer/databend/ast/DatabendBinaryArithmeticOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public DatabendConstant apply(DatabendConstant left, DatabendConstant right) {
3434
return applyOperation(left, right, (l, r) -> l * r);
3535
}
3636
},
37-
DIVISION("/") {
37+
DIVISION("/") { // TODO databend不允许出现not(float),而a/b为float
3838
@Override
3939
public DatabendConstant apply(DatabendConstant left, DatabendConstant right) {
4040
return applyOperation(left, right, (l, r) -> r == 0 ? -1 : l / r);

0 commit comments

Comments
 (0)