Skip to content

Commit cbda679

Browse files
committed
Check for invalid views in the ProviderAdapter base class
1 parent d4ae16d commit cbda679

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

src/sqlancer/ProviderAdapter.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import sqlancer.StateToReproduce.OracleRunReproductionState;
88
import sqlancer.common.oracle.CompositeTestOracle;
99
import sqlancer.common.oracle.TestOracle;
10+
import sqlancer.common.query.QueryAdapter;
11+
import sqlancer.common.schema.AbstractTable;
1012

1113
public abstract class ProviderAdapter<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions<? extends OracleFactory<G>>>
1214
implements DatabaseProvider<G, O> {
@@ -38,6 +40,7 @@ public Class<O> getOptionClass() {
3840
public void generateAndTestDatabase(G globalState) throws SQLException {
3941
try {
4042
generateDatabase(globalState);
43+
checkViewsAreValid(globalState);
4144
globalState.getManager().incrementCreateDatabase();
4245

4346
TestOracle oracle = getTestOracle(globalState);
@@ -59,6 +62,18 @@ public void generateAndTestDatabase(G globalState) throws SQLException {
5962
}
6063
}
6164

65+
private void checkViewsAreValid(G globalState) {
66+
List<? extends AbstractTable<?, ?>> views = globalState.getSchema().getViews();
67+
for (AbstractTable<?, ?> view : views) {
68+
QueryAdapter q = new QueryAdapter("SELECT 1 FROM " + view.getName() + " LIMIT 1");
69+
try {
70+
q.execute(globalState);
71+
} catch (Throwable t) {
72+
throw new IgnoreMeException();
73+
}
74+
}
75+
}
76+
6277
protected TestOracle getTestOracle(G globalState) throws SQLException {
6378
List<? extends OracleFactory<G>> testOracleFactory = globalState.getDmbsSpecificOptions()
6479
.getTestOracleFactory();

0 commit comments

Comments
 (0)