Skip to content

Commit 0e514c1

Browse files
committed
Refactor test oracle factory
1 parent d96e49f commit 0e514c1

File tree

87 files changed

+1363
-2452
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+1363
-2452
lines changed
Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
package sqlancer.citus;
22

3-
import java.sql.SQLException;
4-
import java.util.ArrayList;
53
import java.util.Arrays;
64
import java.util.List;
75

86
import com.beust.jcommander.Parameter;
97

10-
import sqlancer.OracleFactory;
11-
import sqlancer.citus.oracle.CitusNoRECOracle;
12-
import sqlancer.citus.oracle.tlp.CitusTLPAggregateOracle;
13-
import sqlancer.citus.oracle.tlp.CitusTLPHavingOracle;
14-
import sqlancer.citus.oracle.tlp.CitusTLPWhereOracle;
15-
import sqlancer.common.oracle.CompositeTestOracle;
16-
import sqlancer.common.oracle.TestOracle;
17-
import sqlancer.postgres.PostgresGlobalState;
188
import sqlancer.postgres.PostgresOptions;
19-
import sqlancer.postgres.oracle.PostgresPivotedQuerySynthesisOracle;
209

2110
public class CitusOptions extends PostgresOptions {
2211

@@ -26,41 +15,4 @@ public class CitusOptions extends PostgresOptions {
2615
@Parameter(names = "--citusoracle", description = "Specifies which test oracle should be used for Citus extension to PostgreSQL")
2716
public List<CitusOracleFactory> citusOracle = Arrays.asList(CitusOracleFactory.QUERY_PARTITIONING);
2817

29-
public enum CitusOracleFactory implements OracleFactory<PostgresGlobalState> {
30-
NOREC {
31-
@Override
32-
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
33-
CitusGlobalState citusGlobalState = (CitusGlobalState) globalState;
34-
return new CitusNoRECOracle(citusGlobalState);
35-
}
36-
},
37-
PQS {
38-
@Override
39-
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
40-
return new PostgresPivotedQuerySynthesisOracle(globalState);
41-
}
42-
},
43-
HAVING {
44-
45-
@Override
46-
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
47-
CitusGlobalState citusGlobalState = (CitusGlobalState) globalState;
48-
return new CitusTLPHavingOracle(citusGlobalState);
49-
}
50-
51-
},
52-
QUERY_PARTITIONING {
53-
@Override
54-
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
55-
CitusGlobalState citusGlobalState = (CitusGlobalState) globalState;
56-
List<TestOracle<PostgresGlobalState>> oracles = new ArrayList<>();
57-
oracles.add(new CitusTLPWhereOracle(citusGlobalState));
58-
oracles.add(new CitusTLPHavingOracle(citusGlobalState));
59-
oracles.add(new CitusTLPAggregateOracle(citusGlobalState));
60-
return new CompositeTestOracle<PostgresGlobalState>(oracles, globalState);
61-
}
62-
};
63-
64-
}
65-
6618
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package sqlancer.citus;
2+
3+
import java.sql.SQLException;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import sqlancer.OracleFactory;
8+
import sqlancer.citus.gen.CitusCommon;
9+
import sqlancer.citus.oracle.tlp.CitusTLPAggregateOracle;
10+
import sqlancer.citus.oracle.tlp.CitusTLPHavingOracle;
11+
import sqlancer.common.oracle.CompositeTestOracle;
12+
import sqlancer.common.oracle.NoRECOracle;
13+
import sqlancer.common.oracle.TLPWhereOracle;
14+
import sqlancer.common.oracle.TestOracle;
15+
import sqlancer.common.query.ExpectedErrors;
16+
import sqlancer.postgres.PostgresGlobalState;
17+
import sqlancer.postgres.gen.PostgresCommon;
18+
import sqlancer.postgres.gen.PostgresExpressionGenerator;
19+
import sqlancer.postgres.oracle.PostgresPivotedQuerySynthesisOracle;
20+
21+
public enum CitusOracleFactory implements OracleFactory<PostgresGlobalState> {
22+
NOREC {
23+
@Override
24+
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
25+
PostgresExpressionGenerator gen = new PostgresExpressionGenerator(globalState);
26+
ExpectedErrors errors = ExpectedErrors.newErrors().with(PostgresCommon.getCommonExpressionErrors())
27+
.with(PostgresCommon.getCommonFetchErrors())
28+
.withRegex(PostgresCommon.getCommonExpressionRegexErrors())
29+
.with(CitusCommon.getCitusErrors().toArray(new String[0])).build();
30+
return new NoRECOracle<>(globalState, gen, errors);
31+
}
32+
},
33+
PQS {
34+
@Override
35+
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
36+
return new PostgresPivotedQuerySynthesisOracle(globalState);
37+
}
38+
},
39+
WHERE {
40+
@Override
41+
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
42+
PostgresExpressionGenerator gen = new PostgresExpressionGenerator(globalState);
43+
ExpectedErrors expectedErrors = ExpectedErrors.newErrors().with(PostgresCommon.getCommonExpressionErrors())
44+
.with(PostgresCommon.getCommonFetchErrors())
45+
.withRegex(PostgresCommon.getCommonExpressionRegexErrors()).with(CitusCommon.getCitusErrors())
46+
.build();
47+
48+
return new TLPWhereOracle<>(globalState, gen, expectedErrors);
49+
}
50+
},
51+
HAVING {
52+
@Override
53+
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws SQLException {
54+
CitusGlobalState citusGlobalState = (CitusGlobalState) globalState;
55+
return new CitusTLPHavingOracle(citusGlobalState);
56+
}
57+
},
58+
QUERY_PARTITIONING {
59+
@Override
60+
public TestOracle<PostgresGlobalState> create(PostgresGlobalState globalState) throws Exception {
61+
CitusGlobalState citusGlobalState = (CitusGlobalState) globalState;
62+
List<TestOracle<PostgresGlobalState>> oracles = new ArrayList<>();
63+
oracles.add(WHERE.create(citusGlobalState));
64+
oracles.add(HAVING.create(citusGlobalState));
65+
oracles.add(new CitusTLPAggregateOracle(citusGlobalState));
66+
return new CompositeTestOracle<PostgresGlobalState>(oracles, globalState);
67+
}
68+
};
69+
70+
}

src/sqlancer/citus/oracle/CitusNoRECOracle.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

src/sqlancer/citus/oracle/tlp/CitusTLPWhereOracle.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/sqlancer/clickhouse/ClickHouseOptions.java

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
11
package sqlancer.clickhouse;
22

3-
import java.sql.SQLException;
43
import java.util.Arrays;
54
import java.util.List;
65

76
import com.beust.jcommander.Parameter;
87
import com.beust.jcommander.Parameters;
98

109
import sqlancer.DBMSSpecificOptions;
11-
import sqlancer.OracleFactory;
12-
import sqlancer.clickhouse.ClickHouseOptions.ClickHouseOracleFactory;
13-
import sqlancer.clickhouse.ClickHouseProvider.ClickHouseGlobalState;
14-
import sqlancer.clickhouse.oracle.norec.ClickHouseNoRECOracle;
15-
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPAggregateOracle;
16-
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPDistinctOracle;
17-
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPGroupByOracle;
18-
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPHavingOracle;
19-
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPWhereOracle;
20-
import sqlancer.common.oracle.TestOracle;
2110

2211
@Parameters(separators = "=", commandDescription = "ClickHouse (default port: " + ClickHouseOptions.DEFAULT_PORT
2312
+ ", default host: " + ClickHouseOptions.DEFAULT_HOST + ")")
@@ -34,46 +23,6 @@ public class ClickHouseOptions implements DBMSSpecificOptions<ClickHouseOracleFa
3423
@Parameter(names = { "--analyzer" }, description = "Enable analyzer in ClickHouse", arity = 1)
3524
public boolean enableAnalyzer = true;
3625

37-
public enum ClickHouseOracleFactory implements OracleFactory<ClickHouseGlobalState> {
38-
TLPWhere {
39-
@Override
40-
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
41-
return new ClickHouseTLPWhereOracle(globalState);
42-
}
43-
},
44-
TLPDistinct {
45-
@Override
46-
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
47-
return new ClickHouseTLPDistinctOracle(globalState);
48-
}
49-
},
50-
TLPGroupBy {
51-
@Override
52-
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
53-
return new ClickHouseTLPGroupByOracle(globalState);
54-
}
55-
},
56-
TLPAggregate {
57-
@Override
58-
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
59-
return new ClickHouseTLPAggregateOracle(globalState);
60-
}
61-
},
62-
TLPHaving {
63-
@Override
64-
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
65-
return new ClickHouseTLPHavingOracle(globalState);
66-
}
67-
},
68-
NoREC {
69-
@Override
70-
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
71-
return new ClickHouseNoRECOracle(globalState);
72-
}
73-
};
74-
75-
}
76-
7726
@Override
7827
public List<ClickHouseOracleFactory> getTestOracleFactory() {
7928
return oracle;
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package sqlancer.clickhouse;
2+
3+
import java.sql.SQLException;
4+
5+
import sqlancer.OracleFactory;
6+
import sqlancer.clickhouse.ClickHouseProvider.ClickHouseGlobalState;
7+
import sqlancer.clickhouse.gen.ClickHouseExpressionGenerator;
8+
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPAggregateOracle;
9+
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPDistinctOracle;
10+
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPGroupByOracle;
11+
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPHavingOracle;
12+
import sqlancer.common.oracle.NoRECOracle;
13+
import sqlancer.common.oracle.TLPWhereOracle;
14+
import sqlancer.common.oracle.TestOracle;
15+
import sqlancer.common.query.ExpectedErrors;
16+
17+
public enum ClickHouseOracleFactory implements OracleFactory<ClickHouseGlobalState> {
18+
TLPWhere {
19+
@Override
20+
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
21+
ClickHouseExpressionGenerator gen = new ClickHouseExpressionGenerator(globalState);
22+
ExpectedErrors expectedErrors = ExpectedErrors.newErrors()
23+
.with(ClickHouseErrors.getExpectedExpressionErrors()).build();
24+
25+
return new TLPWhereOracle<>(globalState, gen, expectedErrors);
26+
}
27+
},
28+
TLPDistinct {
29+
@Override
30+
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
31+
return new ClickHouseTLPDistinctOracle(globalState);
32+
}
33+
},
34+
TLPGroupBy {
35+
@Override
36+
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
37+
return new ClickHouseTLPGroupByOracle(globalState);
38+
}
39+
},
40+
TLPAggregate {
41+
@Override
42+
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
43+
return new ClickHouseTLPAggregateOracle(globalState);
44+
}
45+
},
46+
TLPHaving {
47+
@Override
48+
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
49+
return new ClickHouseTLPHavingOracle(globalState);
50+
}
51+
},
52+
NoREC {
53+
@Override
54+
public TestOracle<ClickHouseGlobalState> create(ClickHouseGlobalState globalState) throws SQLException {
55+
ClickHouseExpressionGenerator gen = new ClickHouseExpressionGenerator(globalState);
56+
ExpectedErrors errors = ExpectedErrors.newErrors().with(ClickHouseErrors.getExpectedExpressionErrors())
57+
.with("canceling statement due to statement timeout").build();
58+
59+
return new NoRECOracle<>(globalState, gen, errors);
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)