Skip to content

Commit 5f07a2d

Browse files
committed
fix(databend): mvn verify succeed
Signed-off-by: Yisong Han <yisong8686@gmail.com>
1 parent 66a4392 commit 5f07a2d

35 files changed

+953
-1063
lines changed

dependency-reduced-pom.xml

Lines changed: 433 additions & 0 deletions
Large diffs are not rendered by default.

src/sqlancer/GlobalState.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package sqlancer;
22

3+
import java.sql.SQLException;
4+
35
import sqlancer.common.query.Query;
46
import sqlancer.common.query.SQLancerResultSet;
57
import sqlancer.common.schema.AbstractSchema;
68
import sqlancer.common.schema.AbstractTable;
79

8-
import java.sql.SQLException;
9-
1010
public abstract class GlobalState<O extends DBMSSpecificOptions<?>, S extends AbstractSchema<?, ?>, C extends SQLancerDBConnection> {
1111

1212
protected C databaseConnection;
@@ -144,10 +144,10 @@ protected void setSchema(S schema) {
144144
}
145145

146146
public void updateSchema() throws Exception {
147-
try{
147+
try {
148148
setSchema(readSchema());
149149
} catch (SQLException sqlException) {
150-
System.out.println(String.format("%s readSchema SQLException",databaseName));
150+
System.out.printf("%s readSchema SQLException%n", databaseName);
151151
sqlException.printStackTrace();
152152
}
153153
for (AbstractTable<?, ?, ?> table : schema.getDatabaseTables()) {

src/sqlancer/databend/DatabendOptions.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
package sqlancer.databend;
22

3+
import java.sql.SQLException;
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
38
import com.beust.jcommander.Parameter;
49
import com.beust.jcommander.Parameters;
10+
511
import sqlancer.DBMSSpecificOptions;
612
import sqlancer.OracleFactory;
713
import sqlancer.common.oracle.CompositeTestOracle;
814
import sqlancer.common.oracle.TestOracle;
9-
import sqlancer.databend.test.*;
1015
import sqlancer.databend.DatabendOptions.DatabendOracleFactory;
11-
import sqlancer.databend.test.DatabendQueryPartitioningAggregateTester;
1216
import sqlancer.databend.DatabendProvider.DatabendGlobalState;
13-
import java.sql.SQLException;
14-
import java.util.ArrayList;
15-
import java.util.Arrays;
16-
import java.util.List;
17+
import sqlancer.databend.test.DatabendNoRECOracle;
18+
import sqlancer.databend.test.DatabendQueryPartitioningAggregateTester;
19+
import sqlancer.databend.test.DatabendQueryPartitioningDistinctTester;
20+
import sqlancer.databend.test.DatabendQueryPartitioningGroupByTester;
21+
import sqlancer.databend.test.DatabendQueryPartitioningHavingTester;
22+
import sqlancer.databend.test.DatabendQueryPartitioningWhereTester;
1723

1824
@Parameters(commandDescription = "Databend")
1925
public class DatabendOptions implements DBMSSpecificOptions<DatabendOracleFactory> {

src/sqlancer/databend/DatabendProvider.java

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,30 @@
11
package sqlancer.databend;
22

3-
import com.google.auto.service.AutoService;
4-
import sqlancer.*;
5-
import sqlancer.common.query.ExpectedErrors;
6-
import sqlancer.common.query.SQLQueryAdapter;
7-
import sqlancer.common.query.SQLQueryProvider;
8-
import sqlancer.databend.gen.*;
9-
import sqlancer.databend.DatabendProvider.DatabendGlobalState;
10-
113
import java.io.File;
124
import java.sql.Connection;
135
import java.sql.DriverManager;
146
import java.sql.SQLException;
157
import java.sql.Statement;
168

9+
import com.google.auto.service.AutoService;
10+
11+
import sqlancer.AbstractAction;
12+
import sqlancer.DatabaseProvider;
13+
import sqlancer.IgnoreMeException;
14+
import sqlancer.MainOptions;
15+
import sqlancer.Randomly;
16+
import sqlancer.SQLConnection;
17+
import sqlancer.SQLGlobalState;
18+
import sqlancer.SQLProviderAdapter;
19+
import sqlancer.StatementExecutor;
20+
import sqlancer.common.query.ExpectedErrors;
21+
import sqlancer.common.query.SQLQueryAdapter;
22+
import sqlancer.common.query.SQLQueryProvider;
23+
import sqlancer.databend.DatabendProvider.DatabendGlobalState;
24+
import sqlancer.databend.gen.DatabendInsertGenerator;
25+
import sqlancer.databend.gen.DatabendRandomQuerySynthesizer;
26+
import sqlancer.databend.gen.DatabendTableGenerator;
27+
1728
@AutoService(DatabaseProvider.class)
1829
public class DatabendProvider extends SQLProviderAdapter<DatabendGlobalState, DatabendOptions> {
1930

@@ -24,10 +35,11 @@ public DatabendProvider() {
2435
public enum Action implements AbstractAction<DatabendGlobalState> {
2536

2637
INSERT(DatabendInsertGenerator::getQuery), //
27-
//TODO 等待databend实现update && delete
28-
// DELETE(DatabendDeleteGenerator::generate), //
29-
// UPDATE(DatabendUpdateGenerator::getQuery), //
30-
// CREATE_VIEW(DatabendViewGenerator::generate), // TODO 等待databend的create view语法 更加贴近mysql
38+
// TODO 等待databend实现update && delete
39+
// DELETE(DatabendDeleteGenerator::generate), //
40+
// UPDATE(DatabendUpdateGenerator::getQuery), //
41+
42+
// CREATE_VIEW(DatabendViewGenerator::generate), //TODO 等待databend的create view语法 更加贴近mysql
3143
EXPLAIN((g) -> {
3244
ExpectedErrors errors = new ExpectedErrors();
3345
DatabendErrors.addExpressionErrors(errors);
@@ -57,13 +69,13 @@ private static int mapActions(DatabendGlobalState globalState, Action a) {
5769
return r.getInteger(0, globalState.getOptions().getMaxNumberInserts());
5870
case EXPLAIN:
5971
return r.getInteger(0, 2);
60-
//TODO 等待databend实现update && delete
61-
// case UPDATE:
62-
// return r.getInteger(0, globalState.getDbmsSpecificOptions().maxNumUpdates + 1);
63-
// case DELETE:
64-
// return r.getInteger(0, globalState.getDbmsSpecificOptions().maxNumDeletes + 1);
65-
// case CREATE_VIEW:
66-
// return r.getInteger(0, globalState.getDbmsSpecificOptions().maxNumViews + 1);
72+
// TODO 等待databend实现update && delete
73+
// case UPDATE:
74+
// return r.getInteger(0, globalState.getDbmsSpecificOptions().maxNumUpdates + 1);
75+
// case DELETE:
76+
// return r.getInteger(0, globalState.getDbmsSpecificOptions().maxNumDeletes + 1);
77+
// case CREATE_VIEW:
78+
// return r.getInteger(0, globalState.getDbmsSpecificOptions().maxNumViews + 1);
6779
default:
6880
throw new AssertionError(a);
6981
}
@@ -96,7 +108,7 @@ public void generateDatabase(DatabendGlobalState globalState) throws Exception {
96108
throw new IgnoreMeException();
97109
}
98110
});
99-
se.executeStatements(); //在已有的表格中插入数据,原先是增删改一些数据,除了insert和explan我都去掉了
111+
se.executeStatements(); // 在已有的表格中插入数据,原先是增删改一些数据,除了insert和explan我都去掉了
100112
}
101113

102114
public void tryDeleteFile(String fname) {
@@ -144,17 +156,17 @@ public SQLConnection createDatabase(DatabendGlobalState globalState) throws SQLE
144156
globalState.getState().logStatement("USE " + databaseName);
145157
}
146158

147-
// try (Statement s = con.createStatement()) {
148-
// s.execute("set enable_planner_v2 = 0;");
149-
// globalState.getState().logStatement("set enable_planner_v2 = 0;");
150-
// }
159+
// try (Statement s = con.createStatement()) {
160+
// s.execute("set enable_planner_v2 = 0;");
161+
// globalState.getState().logStatement("set enable_planner_v2 = 0;");
162+
// }
151163

152164
return new SQLConnection(con);
153165
}
154166

155167
@Override
156168
public String getDBMSName() {
157-
return "databend"; //用于DatabendOptions
169+
return "databend"; // 用于DatabendOptions
158170
}
159171

160172
}

src/sqlancer/databend/DatabendSchema.java

Lines changed: 50 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
package sqlancer.databend;
22

3-
import sqlancer.IgnoreMeException;
4-
import sqlancer.Randomly;
5-
import sqlancer.SQLConnection;
6-
import sqlancer.common.DBMSCommon;
7-
import sqlancer.common.schema.*;
8-
import sqlancer.databend.DatabendProvider.DatabendGlobalState;
9-
import sqlancer.databend.DatabendSchema.DatabendTable;
10-
113
import java.sql.ResultSet;
124
import java.sql.SQLException;
135
import java.sql.Statement;
146
import java.util.ArrayList;
157
import java.util.Collections;
168
import java.util.List;
179

10+
import sqlancer.IgnoreMeException;
11+
import sqlancer.Randomly;
12+
import sqlancer.SQLConnection;
13+
import sqlancer.common.DBMSCommon;
14+
import sqlancer.common.schema.AbstractRelationalTable;
15+
import sqlancer.common.schema.AbstractSchema;
16+
import sqlancer.common.schema.AbstractTableColumn;
17+
import sqlancer.common.schema.AbstractTables;
18+
import sqlancer.common.schema.TableIndex;
19+
import sqlancer.databend.DatabendProvider.DatabendGlobalState;
20+
import sqlancer.databend.DatabendSchema.DatabendTable;
21+
1822
public class DatabendSchema extends AbstractSchema<DatabendGlobalState, DatabendTable> {
1923

2024
public enum DatabendDataType {
2125

2226
INT, VARCHAR, BOOLEAN, FLOAT, NULL;
23-
//, DATE, TIMESTAMP
27+
// , DATE, TIMESTAMP
2428

2529
public static DatabendDataType getRandomWithoutNull() {
2630
DatabendDataType dt;
@@ -74,8 +78,8 @@ public static DatabendCompositeDataType getRandomWithoutNull() {
7478
break;
7579
case BOOLEAN:
7680
case VARCHAR:
77-
// case DATE:
78-
// case TIMESTAMP:
81+
// case DATE:
82+
// case TIMESTAMP:
7983
size = 0;
8084
break;
8185
default:
@@ -114,10 +118,10 @@ public String toString() {
114118
}
115119
case BOOLEAN:
116120
return Randomly.fromOptions("BOOLEAN", "BOOL");
117-
// case TIMESTAMP:
118-
// return Randomly.fromOptions("TIMESTAMP", "DATETIME");
119-
// case DATE:
120-
// return Randomly.fromOptions("DATE");
121+
// case TIMESTAMP:
122+
// return Randomly.fromOptions("TIMESTAMP", "DATETIME");
123+
// case DATE:
124+
// return Randomly.fromOptions("DATE");
121125
case NULL:
122126
return Randomly.fromOptions("NULL");
123127
default:
@@ -132,7 +136,8 @@ public static class DatabendColumn extends AbstractTableColumn<DatabendTable, Da
132136
private final boolean isPrimaryKey;
133137
private final boolean isNullable;
134138

135-
public DatabendColumn(String name, DatabendCompositeDataType columnType, boolean isPrimaryKey, boolean isNullable) {
139+
public DatabendColumn(String name, DatabendCompositeDataType columnType, boolean isPrimaryKey,
140+
boolean isNullable) {
136141
super(name, null, columnType);
137142
this.isPrimaryKey = isPrimaryKey;
138143
this.isNullable = isNullable;
@@ -201,12 +206,12 @@ private static DatabendCompositeDataType getColumnType(String typeString) {
201206
case "BOOLEAN":
202207
primitiveType = DatabendDataType.BOOLEAN;
203208
break;
204-
// case "DATE":
205-
// primitiveType = DatabendDataType.DATE;
206-
// break;
207-
// case "TIMESTAMP":
208-
// primitiveType = DatabendDataType.TIMESTAMP;
209-
// break;
209+
// case "DATE":
210+
// primitiveType = DatabendDataType.DATE;
211+
// break;
212+
// case "TIMESTAMP":
213+
// primitiveType = DatabendDataType.TIMESTAMP;
214+
// break;
210215
case "NULL":
211216
primitiveType = DatabendDataType.NULL;
212217
break;
@@ -230,12 +235,12 @@ public DatabendTable(String tableName, List<DatabendColumn> columns, boolean isV
230235

231236
public static DatabendSchema fromConnection(SQLConnection con, String databaseName) throws SQLException {
232237
List<DatabendTable> databaseTables = new ArrayList<>();
233-
List<String> tableNames = getTableNames(con,databaseName);
238+
List<String> tableNames = getTableNames(con, databaseName);
234239
for (String tableName : tableNames) {
235240
if (DBMSCommon.matchesIndexName(tableName)) {
236241
continue; // TODO: unexpected?
237242
}
238-
List<DatabendColumn> databaseColumns = getTableColumns(con, tableName,databaseName);
243+
List<DatabendColumn> databaseColumns = getTableColumns(con, tableName, databaseName);
239244
boolean isView = tableName.startsWith("v");
240245
DatabendTable t = new DatabendTable(tableName, databaseColumns, isView);
241246
for (DatabendColumn c : databaseColumns) {
@@ -250,50 +255,55 @@ public static DatabendSchema fromConnection(SQLConnection con, String databaseNa
250255
private static List<String> getTableNames(SQLConnection con, String databaseName) throws SQLException {
251256
List<String> tableNames = null;
252257
tableNames = new ArrayList<>();
253-
//SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema != 'system' and table_schema != 'INFORMATION_SCHEMA' and table_type='BASE TABLE'
254-
//"SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' ",databaseName
258+
// SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema != 'system' and table_schema !=
259+
// 'INFORMATION_SCHEMA' and table_type='BASE TABLE'
260+
// "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' ",databaseName
255261
final String sqlStatement = String.format(
256-
"SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' ",databaseName);
262+
"SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' ",
263+
databaseName);
257264
try (Statement s = con.createStatement()) {
258265
try (ResultSet rs = s.executeQuery(sqlStatement)) {
259-
try{ //没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
266+
try { // 没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
260267
while (rs.next()) {
261268
tableNames.add(rs.getString("table_name"));
262269
}
263-
} catch (Exception e){
264-
// e.printStackTrace();
270+
} catch (Exception e) {
271+
// e.printStackTrace();
265272
System.out.println("TableNames->SQLException:Not a navigable ResultSet");
266273
}
267274
}
268275
}
269276
return tableNames;
270277
}
271278

272-
private static List<DatabendColumn> getTableColumns(SQLConnection con, String tableName, String databaseName) throws SQLException {
279+
private static List<DatabendColumn> getTableColumns(SQLConnection con, String tableName, String databaseName)
280+
throws SQLException {
273281
List<DatabendColumn> columns = new ArrayList<>();
274282
try (Statement s = con.createStatement()) {
275283
try (ResultSet rs = s.executeQuery(String.format(
276284
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = '%s' and table_name ='%s'",
277-
databaseName,tableName))) {
278-
try{ //没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
285+
databaseName, tableName))) {
286+
try { // 没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
279287
while (rs.next()) {
280288
String columnName = rs.getString("column_name");
281289
String dataType = rs.getString("data_type");
282290
boolean isNullable = rs.getBoolean("is_nullable");
283-
// boolean isPrimaryKey = rs.getString("pk").contains("true");
284-
boolean isPrimaryKey = false; //没找到主键元数据
285-
DatabendColumn c = new DatabendColumn(columnName, getColumnType(dataType), isPrimaryKey, isNullable);
291+
// boolean isPrimaryKey = rs.getString("pk").contains("true");
292+
boolean isPrimaryKey = false; // 没找到主键元数据
293+
DatabendColumn c = new DatabendColumn(columnName, getColumnType(dataType), isPrimaryKey,
294+
isNullable);
286295
columns.add(c);
287296
}
288297
} catch (Exception e) {
289298
System.out.println("TableColumns->SQLException:Not a navigable ResultSet");
290299
}
291300
}
292301
}
293-
if (columns.stream().noneMatch(c -> c.isPrimaryKey())) {
294-
// TODO: implement an option to enable/disable rowids
295-
// columns.add(new DatabendColumn("rowid", new DatabendCompositeDataType(DatabendDataType.INT, 4), false, false));
296-
}
302+
// if (columns.stream().noneMatch(c -> c.isPrimaryKey())) {
303+
// TODO: implement an option to enable/disable rowids
304+
// columns.add(new DatabendColumn("rowid", new DatabendCompositeDataType(DatabendDataType.INT, 4), false,
305+
// false));
306+
// }
297307
return columns;
298308
}
299309

src/sqlancer/databend/DatabendToStringVisitor.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import sqlancer.common.ast.newast.NewToStringVisitor;
44
import sqlancer.common.ast.newast.Node;
5-
import sqlancer.common.ast.newast.TableReferenceNode;
65
import sqlancer.databend.ast.DatabendConstant;
76
import sqlancer.databend.ast.DatabendExpression;
87
import sqlancer.databend.ast.DatabendJoin;
@@ -43,14 +42,14 @@ private void visit(DatabendConstant constant) {
4342
sb.append(constant.toString());
4443
}
4544

46-
// private void visitFromList(List<Node<DatabendExpression>> fromList) {
47-
// for (int i = 0; i < fromList.size(); i++) {
48-
// if (i != 0) {
49-
// sb.append(" INNER JOIN ");
50-
// }
51-
// visit(fromList.get(i));
52-
// }
53-
// }
45+
// private void visitFromList(List<Node<DatabendExpression>> fromList) {
46+
// for (int i = 0; i < fromList.size(); i++) {
47+
// if (i != 0) {
48+
// sb.append(" INNER JOIN ");
49+
// }
50+
// visit(fromList.get(i));
51+
// }
52+
// }
5453

5554
private void visit(DatabendSelect select) {
5655
sb.append("SELECT ");

0 commit comments

Comments
 (0)