/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/postgres/gen/PostgresReindexGenerator.java
67 строк
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.postgres.gen; import java.util.List; import java.util.stream.Collectors; import sqlancer.IgnoreMeException; import sqlancer.Randomly; import sqlancer.common.query.ExpectedErrors; import sqlancer.common.query.SQLQueryAdapter; import sqlancer.postgres.PostgresGlobalState; import sqlancer.postgres.PostgresSchema.PostgresIndex; public final class PostgresReindexGenerator { private PostgresReindexGenerator() { } private enum Scope { INDEX, TABLE, DATABASE; } public static SQLQueryAdapter create(PostgresGlobalState globalState) { ExpectedErrors errors = new ExpectedErrors(); errors.add("could not create unique index"); // CONCURRENT INDEX StringBuilder sb = new StringBuilder(); sb.append("REINDEX"); // if (Randomly.getBoolean()) { // sb.append(" VERBOSE"); // } sb.append(" "); Scope scope = Randomly.fromOptions(Scope.values()); switch (scope) { case INDEX: sb.append("INDEX "); if (Randomly.getBoolean()) { sb.append("CONCURRENTLY "); } List<PostgresIndex> indexes = globalState.getSchema().getRandomTable().getIndexes(); if (indexes.isEmpty()) { throw new IgnoreMeException(); } sb.append(indexes.stream().map(i -> i.getIndexName()).collect(Collectors.joining())); break; case TABLE: sb.append("TABLE "); if (Randomly.getBoolean()) { sb.append("CONCURRENTLY "); } sb.append(globalState.getSchema().getRandomTable(t -> !t.isView()).getName()); break; case DATABASE: sb.append("DATABASE "); if (Randomly.getBoolean()) { sb.append("CONCURRENTLY "); } sb.append(globalState.getSchema().getDatabaseName()); break; default: throw new AssertionError(scope); } errors.add("already contains data"); // FIXME bug report errors.add("does not exist"); // internal index errors.add("REINDEX is not yet implemented for partitioned indexes"); return new SQLQueryAdapter(sb.toString(), errors); } }