/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/postgres/gen/PostgresRandomQueryGenerator.java
63 строки
3 KB
Manuel Rigger
Enforce the checkstyle FinalClass rule
28 май 2020, 22:41
28 май 2020, 22:41
2cca29d
Код
Авторство
О чём код?
package sqlancer.postgres.gen; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import sqlancer.Randomly; import sqlancer.postgres.PostgresGlobalState; import sqlancer.postgres.PostgresSchema.PostgresDataType; import sqlancer.postgres.PostgresSchema.PostgresTables; import sqlancer.postgres.ast.PostgresConstant; import sqlancer.postgres.ast.PostgresExpression; import sqlancer.postgres.ast.PostgresSelect; import sqlancer.postgres.ast.PostgresSelect.ForClause; import sqlancer.postgres.ast.PostgresSelect.PostgresFromTable; import sqlancer.postgres.ast.PostgresSelect.SelectType; public final class PostgresRandomQueryGenerator { private PostgresRandomQueryGenerator() { } public static PostgresSelect createRandomQuery(int nrColumns, PostgresGlobalState globalState) { List<PostgresExpression> columns = new ArrayList<>(); PostgresTables tables = globalState.getSchema().getRandomTableNonEmptyTables(); PostgresExpressionGenerator gen = new PostgresExpressionGenerator(globalState).setColumns(tables.getColumns()); for (int i = 0; i < nrColumns; i++) { columns.add(gen.generateExpression(0)); } PostgresSelect select = new PostgresSelect(); select.setSelectType(SelectType.getRandom()); if (select.getSelectOption() == SelectType.DISTINCT && Randomly.getBoolean()) { select.setDistinctOnClause(gen.generateExpression(0)); } select.setFromList(tables.getTables().stream().map(t -> new PostgresFromTable(t, Randomly.getBoolean())) .collect(Collectors.toList())); select.setFetchColumns(columns); if (Randomly.getBoolean()) { select.setWhereClause(gen.generateExpression(0, PostgresDataType.BOOLEAN)); } if (Randomly.getBooleanWithRatherLowProbability()) { select.setGroupByExpressions(gen.generateExpressions(Randomly.smallNumber() + 1)); if (Randomly.getBoolean()) { select.setHavingClause(gen.generateHavingClause()); } } if (Randomly.getBooleanWithRatherLowProbability()) { select.setOrderByExpressions(gen.generateOrderBy()); } if (Randomly.getBoolean()) { select.setLimitClause(PostgresConstant.createIntConstant(Randomly.getPositiveOrZeroNonCachedInteger())); if (Randomly.getBoolean()) { select.setOffsetClause( PostgresConstant.createIntConstant(Randomly.getPositiveOrZeroNonCachedInteger())); } } if (Randomly.getBooleanWithRatherLowProbability()) { select.setForClause(ForClause.getRandom()); } return select; } }