Skip to content

Commit

Permalink
[Bugfix][Oracle] Add ESCAPE when compiling LIKE
Browse files Browse the repository at this point in the history
The oracle SQL documentation specifies that *there is no default escape character* and *the escape character, if specified, must be a character string of length 1*.
In expression the underscore (_) and the percent sign (%) can be escaped with the backslash (\). So in the Oracle Expression Compiler if the ESCAPE clause is not specified, the pattern is not valid.
To fix it, the Oracle Expression Compiler has to add the ESCAPE clause.

https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions016.htm
  • Loading branch information
rldhont committed Jan 16, 2019
1 parent 5ff59ce commit d42a7b2
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/providers/oracle/qgsoracleexpressioncompiler.cpp
Expand Up @@ -58,11 +58,11 @@ QgsSqlExpressionCompiler::Result QgsOracleExpressionCompiler::compileNode( const
return Complete; return Complete;


case QgsExpressionNodeBinaryOperator::boILike: case QgsExpressionNodeBinaryOperator::boILike:
result = QStringLiteral( "lower(%1) LIKE lower(%2)" ).arg( op1, op2 ); result = QStringLiteral( "lower(%1) LIKE lower(%2) ESCAPE '\\'" ).arg( op1, op2 );
return Complete; return Complete;


case QgsExpressionNodeBinaryOperator::boNotILike: case QgsExpressionNodeBinaryOperator::boNotILike:
result = QStringLiteral( "NOT lower(%1) LIKE lower(%2)" ).arg( op1, op2 ); result = QStringLiteral( "NOT lower(%1) LIKE lower(%2) ESCAPE '\\'" ).arg( op1, op2 );
return Complete; return Complete;


case QgsExpressionNodeBinaryOperator::boIntDiv: case QgsExpressionNodeBinaryOperator::boIntDiv:
Expand Down

0 comments on commit d42a7b2

Please sign in to comment.