/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/postgres/gen/PostgresDiscardGenerator.java
39 строк
1 KB
Patrick
Continuation of Reworking Connection to DB to support non-SQL connections
26 ноя 2020, 15:40
26 ноя 2020, 15:40
62e302e
Код
Авторство
О чём код?
package sqlancer.postgres.gen; import sqlancer.Randomly; import sqlancer.common.query.ExpectedErrors; import sqlancer.common.query.SQLQueryAdapter; import sqlancer.postgres.PostgresGlobalState; import sqlancer.postgres.PostgresSchema.PostgresTable.TableType; public final class PostgresDiscardGenerator { private PostgresDiscardGenerator() { } public static SQLQueryAdapter create(PostgresGlobalState globalState) { StringBuilder sb = new StringBuilder(); sb.append("DISCARD "); // prevent that DISCARD discards all tables (if they are TEMP tables) boolean hasNonTempTables = globalState.getSchema().getDatabaseTables().stream() .anyMatch(t -> t.getTableType() == TableType.STANDARD); String what; if (hasNonTempTables) { what = Randomly.fromOptions("ALL", "PLANS", "SEQUENCES", "TEMPORARY", "TEMP"); } else { what = Randomly.fromOptions("PLANS", "SEQUENCES"); } sb.append(what); return new SQLQueryAdapter(sb.toString(), ExpectedErrors.from("cannot run inside a transaction block")) { @Override public boolean couldAffectSchema() { return canDiscardTemporaryTables(what); } }; } private static boolean canDiscardTemporaryTables(String what) { return what.contentEquals("TEMPORARY") || what.contentEquals("TEMP") || what.contentEquals("ALL"); } }