mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
[oracle] Fixes for oracle expression compilation
On behalf of Faunalia, sponsored by ENEL
This commit is contained in:
parent
d785b904ac
commit
64bfbaaf5b
@ -29,8 +29,15 @@ QgsSqlExpressionCompiler::Result QgsOracleExpressionCompiler::compileNode( const
|
||||
|
||||
switch ( bin->op() )
|
||||
{
|
||||
case QgsExpression::boConcat:
|
||||
// oracle's handling of || WRT null is not standards compliant
|
||||
return Fail;
|
||||
|
||||
case QgsExpression::boPow:
|
||||
case QgsExpression::boRegexp:
|
||||
case QgsExpression::boILike:
|
||||
case QgsExpression::boNotILike:
|
||||
case QgsExpression::boMod:
|
||||
{
|
||||
QString op1, op2;
|
||||
|
||||
@ -48,6 +55,18 @@ QgsSqlExpressionCompiler::Result QgsOracleExpressionCompiler::compileNode( const
|
||||
result = QString( "regexp_like(%1,%2)" ).arg( op1, op2 );
|
||||
return Complete;
|
||||
|
||||
case QgsExpression::boILike:
|
||||
result = QString( "lower(%1) LIKE lower(%2)" ).arg( op1, op2 );
|
||||
return Complete;
|
||||
|
||||
case QgsExpression::boNotILike:
|
||||
result = QString( "NOT lower(%1) LIKE lower(%2)" ).arg( op1, op2 );
|
||||
return Complete;
|
||||
|
||||
case QgsExpression::boMod :
|
||||
result = QString( "MOD(%1,%2)" ).arg( op1, op2 );
|
||||
return Complete;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -70,5 +89,14 @@ QString QgsOracleExpressionCompiler::quotedIdentifier( const QString& identifier
|
||||
QString QgsOracleExpressionCompiler::quotedValue( const QVariant& value, bool& ok )
|
||||
{
|
||||
ok = true;
|
||||
return QgsOracleConn::quotedValue( value );
|
||||
|
||||
switch ( value.type() )
|
||||
{
|
||||
case QVariant::Bool:
|
||||
//no boolean literal support in Oracle, so fake it
|
||||
return value.toBool() ? "(1=1)" : "(1=0)";
|
||||
|
||||
default:
|
||||
return QgsOracleConn::quotedValue( value );
|
||||
}
|
||||
}
|
||||
|
@ -370,6 +370,7 @@ class ProviderTestCase(object):
|
||||
|
||||
def testGetFeaturesFidsTests(self):
|
||||
fids = [f.id() for f in self.provider.getFeatures()]
|
||||
self.assertEqual(len(fids), 5)
|
||||
|
||||
request = QgsFeatureRequest().setFilterFids([fids[0], fids[2]])
|
||||
result = set([f.id() for f in self.provider.getFeatures(request)])
|
||||
|
Loading…
x
Reference in New Issue
Block a user