From f1b402b1034dbc68d88f52a407f249bf8bc139b1 Mon Sep 17 00:00:00 2001 From: Bernardo Damele Date: Thu, 20 Jan 2011 21:58:50 +0000 Subject: [PATCH] Proper handling of CASE in Oracle, finally --- lib/core/agent.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/core/agent.py b/lib/core/agent.py index 0aa3758a0..a88440476 100644 --- a/lib/core/agent.py +++ b/lib/core/agent.py @@ -448,8 +448,8 @@ class Agent: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.misc.start, 1) concatenatedQuery += "||'%s'" % kb.misc.stop elif fieldsSelectCase: - concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.misc.start, 1) - concatenatedQuery += "||'%s'" % kb.misc.stop + concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||(SELECT " % kb.misc.start, 1) + concatenatedQuery += ")||'%s'" % kb.misc.stop elif fieldsSelectFrom: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.misc.start, 1) concatenatedQuery = concatenatedQuery.replace(" FROM ", "||'%s' FROM " % kb.misc.stop, 1) @@ -459,9 +459,6 @@ class Agent: elif fieldsNoSelect: concatenatedQuery = "'%s'||%s||'%s'" % (kb.misc.start, concatenatedQuery, kb.misc.stop) - if backend.getIdentifiedDbms() == DBMS.ORACLE and " FROM " not in concatenatedQuery and (fieldsSelect or fieldsNoSelect): - concatenatedQuery += " FROM DUAL" - elif backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): if fieldsExists: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'+" % kb.misc.start, 1) @@ -552,7 +549,7 @@ class Agent: inbandQuery += query[conditionIndex:] if backend.getIdentifiedDbms() in FROM_TABLE: - if " FROM " not in inbandQuery: + if " FROM " not in inbandQuery or "(CASE " in inbandQuery: inbandQuery += FROM_TABLE[backend.getIdentifiedDbms()] if intoRegExp: