Skip to content

Commit

Permalink
[Databend] Pinned version to v1.2.452 (sqlancer#946)
Browse files Browse the repository at this point in the history
* [Databend] Update error message for violation of not-null constraint

* [Databend] Add expected error for table generation

* [Databend] Add bug 15568

* [Databend] Add bug 15569

* [Databend] Add bug 15570

* [Databend] Add error messages returned from new constraints

* [Databend] Add bug 15572

* [Databend] Pin CI to v1.2.452
  • Loading branch information
malwaregarry authored and albertZhangTJ committed Jun 17, 2024
1 parent 1ac1297 commit 4afaa82
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ jobs:
runs-on: ubuntu-latest
services:
databend:
image: datafuselabs/databend
image: datafuselabs/databend:v1.2.452
env:
QUERY_DEFAULT_USER: sqlancer
QUERY_DEFAULT_PASSWORD: sqlancer
Expand Down
4 changes: 4 additions & 0 deletions src/sqlancer/databend/DatabendBugs.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public final class DatabendBugs {
public static boolean bug9236 = true; // https://github.com/datafuselabs/databend/issues/9236
public static boolean bug9264 = true; // https://github.com/datafuselabs/databend/issues/9264
public static boolean bug9806 = true; // https://github.com/datafuselabs/databend/issues/9806
public static boolean bug15568 = true; // https://github.com/datafuselabs/databend/issues/15568
public static boolean bug15569 = true; // https://github.com/datafuselabs/databend/issues/15569
public static boolean bug15570 = true; // https://github.com/datafuselabs/databend/issues/15570
public static boolean bug15572 = true; // https://github.com/datafuselabs/databend/issues/15572

private DatabendBugs() {
}
Expand Down
8 changes: 7 additions & 1 deletion src/sqlancer/databend/DatabendErrors.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ public static List<String> getExpressionErrors() {
errors.add("no overload satisfies `not(Float64 NULL)`"); // TODO databend不允许出现not(float),而a/b为float
errors.add("no overload satisfies `not(Float64)`");
errors.add("number overflowed while evaluating function"); // 表达式数值溢出
errors.add("Unable to get field named");
errors.add("no overload satisfies `and_filters");
if (DatabendBugs.bug9162) {
errors.add("downcast column error");
}
Expand All @@ -42,6 +44,9 @@ public static List<String> getExpressionErrors() {
if (DatabendBugs.bug9806) {
errors.add("segment pruning failure");
}
if (DatabendBugs.bug15568) {
errors.add("Decimal overflow at line : 723 while evaluating function `to_decimal");
}

/*
* TODO column为not null 时,注意default不能为null DROP DATABASE IF EXISTS databend2; CREATE DATABASE databend2; USE
Expand All @@ -63,7 +68,7 @@ public static List<String> getInsertErrors() {

errors.add("Division by zero");
errors.add("/ by zero");
errors.add("Can't cast column from null into non-nullable type");
errors.add("violates not-null constraint");
errors.add("number overflowed while evaluating function `"); // 不能在int16类型column上插入int64的数据

return errors;
Expand All @@ -80,6 +85,7 @@ public static List<String> getGroupByErrors() {
errors.add("/ by zero");
errors.add("Can't cast column from null into non-nullable type");
errors.add("GROUP BY position");
errors.add("GROUP BY items can't contain aggregate functions or window functions");

return errors;
}
Expand Down
7 changes: 7 additions & 0 deletions src/sqlancer/databend/DatabendProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,13 @@ public SQLConnection createDatabase(DatabendGlobalState globalState) throws SQLE
s.execute("USE " + databaseName);
globalState.getState().logStatement("USE " + databaseName);
}
if (DatabendBugs.bug15569) {
con.close();
String urlWithRetry = String.format(
"jdbc:mysql://%s:%d/%s?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&autoReconnect=true",
host, port, databaseName);
con = DriverManager.getConnection(urlWithRetry, username, password);
}

return new SQLConnection(con);
}
Expand Down
10 changes: 10 additions & 0 deletions src/sqlancer/databend/gen/DatabendNewExpressionGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import sqlancer.common.ast.newast.NewOrderingTerm;
import sqlancer.common.ast.newast.Node;
import sqlancer.common.gen.TypedExpressionGenerator;
import sqlancer.databend.DatabendBugs;
import sqlancer.databend.DatabendProvider.DatabendGlobalState;
import sqlancer.databend.DatabendSchema.DatabendColumn;
import sqlancer.databend.DatabendSchema.DatabendDataType;
Expand Down Expand Up @@ -160,6 +161,15 @@ DatabendExpression generateBooleanExpression(int depth) {
allowAggregateFunctions = false;
}
List<BooleanExpression> validOptions = new ArrayList<>(Arrays.asList(BooleanExpression.values()));
if (DatabendBugs.bug15570) {
validOptions.remove(BooleanExpression.LIKE);
validOptions.remove(BooleanExpression.IN_OPERATION);
validOptions.remove(BooleanExpression.BETWEEN);
validOptions.remove(BooleanExpression.BINARY_COMPARISON);
}
if (DatabendBugs.bug15572) {
validOptions.remove(BooleanExpression.NOT);
}
BooleanExpression option = Randomly.fromList(validOptions);
switch (option) {
case POSTFIX_OPERATOR:
Expand Down
2 changes: 2 additions & 0 deletions src/sqlancer/databend/gen/DatabendTableGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import sqlancer.common.gen.TypedExpressionGenerator;
import sqlancer.common.query.ExpectedErrors;
import sqlancer.common.query.SQLQueryAdapter;
import sqlancer.databend.DatabendErrors;
import sqlancer.databend.DatabendExprToNode;
import sqlancer.databend.DatabendProvider.DatabendGlobalState;
import sqlancer.databend.DatabendSchema.DatabendColumn;
Expand All @@ -19,6 +20,7 @@ public class DatabendTableGenerator {

public SQLQueryAdapter getQuery(DatabendGlobalState globalState) {
ExpectedErrors errors = new ExpectedErrors();
DatabendErrors.addExpressionErrors(errors);
StringBuilder sb = new StringBuilder();
String tableName = globalState.getSchema().getFreeTableName();
sb.append("CREATE TABLE ");
Expand Down

0 comments on commit 4afaa82

Please sign in to comment.