/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/duckdb/gen/DuckDBIndexGenerator.java
59 строк
2 KB
Hao Wu
Fix typos for dbmsSpecificOptions
21 июл 2021, 11:23
21 июл 2021, 11:23
8c15ec8
Код
Авторство
О чём код?
package sqlancer.duckdb.gen; import java.util.List; import sqlancer.Randomly; import sqlancer.common.ast.newast.Node; import sqlancer.common.query.ExpectedErrors; import sqlancer.common.query.SQLQueryAdapter; import sqlancer.duckdb.DuckDBProvider.DuckDBGlobalState; import sqlancer.duckdb.DuckDBSchema.DuckDBColumn; import sqlancer.duckdb.DuckDBSchema.DuckDBTable; import sqlancer.duckdb.DuckDBToStringVisitor; import sqlancer.duckdb.ast.DuckDBExpression; public final class DuckDBIndexGenerator { private DuckDBIndexGenerator() { } public static SQLQueryAdapter getQuery(DuckDBGlobalState globalState) { ExpectedErrors errors = new ExpectedErrors(); StringBuilder sb = new StringBuilder(); sb.append("CREATE "); if (Randomly.getBoolean()) { errors.add("Cant create unique index, table contains duplicate data on indexed column(s)"); sb.append("UNIQUE "); } sb.append("INDEX "); sb.append(Randomly.fromOptions("i0", "i1", "i2", "i3", "i4")); // cannot query this information sb.append(" ON "); DuckDBTable table = globalState.getSchema().getRandomTable(t -> !t.isView()); sb.append(table.getName()); sb.append("("); List<DuckDBColumn> columns = table.getRandomNonEmptyColumnSubset(); for (int i = 0; i < columns.size(); i++) { if (i != 0) { sb.append(", "); } sb.append(columns.get(i).getName()); sb.append(" "); if (Randomly.getBooleanWithRatherLowProbability()) { sb.append(Randomly.fromOptions("ASC", "DESC")); } } sb.append(")"); if (Randomly.getBoolean()) { sb.append(" WHERE "); Node<DuckDBExpression> expr = new DuckDBExpressionGenerator(globalState).setColumns(table.getColumns()) .generateExpression(); sb.append(DuckDBToStringVisitor.asString(expr)); } errors.add("already exists!"); if (globalState.getDbmsSpecificOptions().testRowid) { errors.add("Cannot create an index on the rowid!"); } return new SQLQueryAdapter(sb.toString(), errors, true); } }