@@ -246,10 +246,15 @@ def getFields(self, query):
246246 @rtype: C{str}
247247 """
248248
249- fieldsSelectTop = re .search ("\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM" , query , re .I )
250- fieldsSelectDistinct = re .search ("\ASELECT\s+DISTINCT\((.+?)\)\s+FROM" , query , re .I )
251- fieldsSelectFrom = re .search ("\ASELECT\s+(.+?)\s+FROM\s+" , query , re .I )
252- fieldsSelect = re .search ("\ASELECT\s+(.*)" , query , re .I )
249+ if "(SELECT " in query :
250+ firstChar = "\\ ("
251+ else :
252+ firstChar = "\\ A"
253+
254+ fieldsSelectTop = re .search ("%sSELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM" % firstChar , query , re .I )
255+ fieldsSelectDistinct = re .search ("%sSELECT\s+DISTINCT\((.+?)\)\s+FROM" % firstChar , query , re .I )
256+ fieldsSelectFrom = re .search ("%sSELECT\s+(.+?)\s+FROM\s+" % firstChar , query , re .I )
257+ fieldsSelect = re .search ("%sSELECT\s+(.*)" % firstChar , query , re .I )
253258 fieldsNoSelect = query
254259
255260 if fieldsSelectTop :
@@ -296,11 +301,11 @@ def concatQuery(self, query):
296301 """
297302
298303 concatQuery = ""
299- query = query .replace (", " , "," )
304+ query = query .replace (", " , "," )
300305
301306 fieldsSelectFrom , fieldsSelect , fieldsNoSelect , _ , fieldsToCastStr = self .getFields (query )
302307 castedFields = self .nullCastConcatFields (fieldsToCastStr )
303- concatQuery = query .replace (fieldsToCastStr , castedFields , 1 )
308+ concatQuery = query .replace (fieldsToCastStr , castedFields , 1 )
304309
305310 if kb .dbms == "MySQL" :
306311 if fieldsSelectFrom :
0 commit comments