/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/tidb/oracle/TiDBTLPBase.java
68 строк
2 KB
Manuel Rigger
Introduce a sqlancer.common.oracle package
13 авг 2020, 00:37
13 авг 2020, 00:37
0c736fa
Код
Авторство
О чём код?
package sqlancer.tidb.oracle; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import sqlancer.Randomly; import sqlancer.common.gen.ExpressionGenerator; import sqlancer.common.oracle.TernaryLogicPartitioningOracleBase; import sqlancer.common.oracle.TestOracle; import sqlancer.tidb.TiDBErrors; import sqlancer.tidb.TiDBExpressionGenerator; import sqlancer.tidb.TiDBProvider.TiDBGlobalState; import sqlancer.tidb.TiDBSchema; import sqlancer.tidb.TiDBSchema.TiDBTable; import sqlancer.tidb.TiDBSchema.TiDBTables; import sqlancer.tidb.ast.TiDBColumnReference; import sqlancer.tidb.ast.TiDBExpression; import sqlancer.tidb.ast.TiDBJoin; import sqlancer.tidb.ast.TiDBSelect; import sqlancer.tidb.ast.TiDBTableReference; import sqlancer.tidb.gen.TiDBHintGenerator; public abstract class TiDBTLPBase extends TernaryLogicPartitioningOracleBase<TiDBExpression, TiDBGlobalState> implements TestOracle { TiDBSchema s; TiDBTables targetTables; TiDBExpressionGenerator gen; TiDBSelect select; public TiDBTLPBase(TiDBGlobalState state) { super(state); TiDBErrors.addExpressionErrors(errors); } @Override public void check() throws SQLException { s = state.getSchema(); targetTables = s.getRandomTableNonEmptyTables(); gen = new TiDBExpressionGenerator(state).setColumns(targetTables.getColumns()); initializeTernaryPredicateVariants(); select = new TiDBSelect(); select.setFetchColumns(generateFetchColumns()); List<TiDBTable> tables = targetTables.getTables(); if (Randomly.getBoolean()) { TiDBHintGenerator.generateHints(select, tables); } List<TiDBExpression> tableList = tables.stream().map(t -> new TiDBTableReference(t)) .collect(Collectors.toList()); List<TiDBExpression> joins = TiDBJoin.getJoins(tableList, state); select.setJoinList(joins); select.setFromList(tableList); select.setWhereClause(null); } List<TiDBExpression> generateFetchColumns() { return Arrays.asList(new TiDBColumnReference(targetTables.getColumns().get(0))); } @Override protected ExpressionGenerator<TiDBExpression> getGen() { return gen; } }