77import sqlancer .StateToReproduce .OracleRunReproductionState ;
88import sqlancer .common .oracle .CompositeTestOracle ;
99import sqlancer .common .oracle .TestOracle ;
10+ import sqlancer .common .query .QueryAdapter ;
11+ import sqlancer .common .schema .AbstractTable ;
1012
1113public 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