2626import sqlancer .postgres .ast .PostgresExpression ;
2727import sqlancer .postgres .ast .PostgresSelect ;
2828import sqlancer .postgres .ast .PostgresSelect .PostgresFromTable ;
29+ import sqlancer .postgres .gen .PostgresCommon ;
2930import sqlancer .postgres .gen .PostgresExpressionGenerator ;
3031
3132public class PostgresPivotedQuerySynthesisOracle
@@ -39,6 +40,8 @@ public PostgresPivotedQuerySynthesisOracle(PostgresGlobalState globalState) thro
3940 super (globalState );
4041 options = globalState .getOptions ();
4142 logger = globalState .getLogger ();
43+ PostgresCommon .addCommonExpressionErrors (errors );
44+ PostgresCommon .addCommonFetchErrors (errors );
4245 }
4346
4447 @ Override
@@ -153,20 +156,14 @@ protected boolean isContainedIn(Query query) throws SQLException {
153156 if (options .logEachSelect ()) {
154157 logger .writeCurrent (resultingQueryString );
155158 }
159+ globalState .getState ().getLocalState ().log (resultingQueryString );
160+ QueryAdapter finalQuery = new QueryAdapter (resultingQueryString , errors );
156161 try (ResultSet result = createStatement .executeQuery (resultingQueryString )) {
157162 boolean isContainedIn = result .next ();
158163 createStatement .close ();
159164 return isContainedIn ;
160165 } catch (PSQLException e ) {
161- if (e .getMessage ().contains ("out of range" ) || e .getMessage ().contains ("cannot cast" )
162- || e .getMessage ().contains ("invalid input syntax for " ) || e .getMessage ().contains ("must be type" )
163- || e .getMessage ().contains ("operator does not exist" )
164- || e .getMessage ().contains ("Could not choose a best candidate function." )
165- || e .getMessage ().contains ("division by zero" )
166- || e .getMessage ().contains ("zero raised to a negative power is undefined" )
167- || e .getMessage ().contains ("canceling statement due to statement timeout" )
168- || e .getMessage ().contains ("operator is not unique" )
169- || e .getMessage ().contains ("could not determine which collation to use for string comparison" )) {
166+ if (finalQuery .getExpectedErrors ().errorIsExpected (e .getMessage ())) {
170167 return true ;
171168 } else {
172169 throw e ;
0 commit comments