From d42a7b27663971cf620dda57f072528d9fafdb0f Mon Sep 17 00:00:00 2001 From: rldhont Date: Wed, 16 Jan 2019 15:58:04 +0100 Subject: [PATCH] [Bugfix][Oracle] Add ESCAPE when compiling LIKE 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 --- src/providers/oracle/qgsoracleexpressioncompiler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/providers/oracle/qgsoracleexpressioncompiler.cpp b/src/providers/oracle/qgsoracleexpressioncompiler.cpp index a656852180f9..5bd85794a6f6 100644 --- a/src/providers/oracle/qgsoracleexpressioncompiler.cpp +++ b/src/providers/oracle/qgsoracleexpressioncompiler.cpp @@ -58,11 +58,11 @@ QgsSqlExpressionCompiler::Result QgsOracleExpressionCompiler::compileNode( const return Complete; 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; 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; case QgsExpressionNodeBinaryOperator::boIntDiv: