/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/cockroachdb/oracle/tlp/CockroachDBTLPExtendedWhereOracle.java
59 строк
3 KB
Manuel Rigger
Pass a global state object to Query for extensibility
07 июл 2020, 19:37
07 июл 2020, 19:37
0315e7a
Код
Авторство
О чём код?
package sqlancer.cockroachdb.oracle.tlp; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import sqlancer.ComparatorHelper; import sqlancer.Randomly; import sqlancer.cockroachdb.CockroachDBErrors; import sqlancer.cockroachdb.CockroachDBProvider.CockroachDBGlobalState; import sqlancer.cockroachdb.CockroachDBVisitor; import sqlancer.cockroachdb.ast.CockroachDBBinaryLogicalOperation; import sqlancer.cockroachdb.ast.CockroachDBBinaryLogicalOperation.CockroachDBBinaryLogicalOperator; import sqlancer.cockroachdb.ast.CockroachDBExpression; import sqlancer.cockroachdb.ast.CockroachDBNotOperation; import sqlancer.cockroachdb.ast.CockroachDBUnaryPostfixOperation; import sqlancer.cockroachdb.ast.CockroachDBUnaryPostfixOperation.CockroachDBUnaryPostfixOperator; public class CockroachDBTLPExtendedWhereOracle extends CockroachDBTLPBase { private CockroachDBExpression originalPredicate; public CockroachDBTLPExtendedWhereOracle(CockroachDBGlobalState state) { super(state); CockroachDBErrors.addExpressionErrors(errors); errors.add("GROUP BY term out of range"); } @Override public void check() throws SQLException { super.check(); originalPredicate = generatePredicate(); select.setWhereClause(originalPredicate); String originalQueryString = CockroachDBVisitor.asString(select); List<String> resultSet = ComparatorHelper.getResultSetFirstColumnAsString(originalQueryString, errors, state); boolean allowOrderBy = Randomly.getBoolean(); if (allowOrderBy) { select.setOrderByExpressions(gen.getOrderingTerms()); } select.setWhereClause(combinePredicate(predicate)); String firstQueryString = CockroachDBVisitor.asString(select); select.setWhereClause(combinePredicate(new CockroachDBNotOperation(predicate))); String secondQueryString = CockroachDBVisitor.asString(select); select.setWhereClause(combinePredicate( new CockroachDBUnaryPostfixOperation(predicate, CockroachDBUnaryPostfixOperator.IS_NULL))); String thirdQueryString = CockroachDBVisitor.asString(select); List<String> combinedString = new ArrayList<>(); List<String> secondResultSet = ComparatorHelper.getCombinedResultSet(firstQueryString, secondQueryString, thirdQueryString, combinedString, !allowOrderBy, state, errors); ComparatorHelper.assumeResultSetsAreEqual(resultSet, secondResultSet, originalQueryString, combinedString, state); } public CockroachDBExpression combinePredicate(CockroachDBExpression expr) { return new CockroachDBBinaryLogicalOperation(originalPredicate, expr, CockroachDBBinaryLogicalOperator.AND); } }