/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/duckdb/gen/DuckDBUpdateGenerator.java
48 строк
2 KB
Patrick
Continuation of Reworking Connection to DB to support non-SQL connections
26 ноя 2020, 15:40
26 ноя 2020, 15:40
62e302e
Код
Авторство
О чём код?
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.DuckDBErrors; 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 DuckDBUpdateGenerator { private DuckDBUpdateGenerator() { } public static SQLQueryAdapter getQuery(DuckDBGlobalState globalState) { StringBuilder sb = new StringBuilder("UPDATE "); ExpectedErrors errors = new ExpectedErrors(); DuckDBTable table = globalState.getSchema().getRandomTable(t -> !t.isView()); sb.append(table.getName()); DuckDBExpressionGenerator gen = new DuckDBExpressionGenerator(globalState).setColumns(table.getColumns()); sb.append(" SET "); 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("="); Node<DuckDBExpression> expr; if (Randomly.getBooleanWithSmallProbability()) { expr = gen.generateExpression(); DuckDBErrors.addExpressionErrors(errors); } else { expr = gen.generateConstant(); } sb.append(DuckDBToStringVisitor.asString(expr)); } DuckDBErrors.addInsertErrors(errors); return new SQLQueryAdapter(sb.toString(), errors); } }