@@ -545,7 +545,7 @@ def getFields(self, query):
545545 """
546546
547547 prefixRegex = r"(?:\s+(?:FIRST|SKIP|LIMIT(?: \d+)?)\s+\d+)*"
548- fieldsSelectTop = re .search (r"\ASELECT\s+TOP\s+( [\d]|\([^)]+\))+ \s+(.+?)\s+FROM" , query , re .I )
548+ fieldsSelectTop = re .search (r"\ASELECT\s+TOP( \s+[\d]|\s*\ ([^)]+\))\s+(.+?)\s+FROM" , query , re .I )
549549 fieldsSelectRownum = re .search (r"\ASELECT\s+([^()]+?),\s*ROWNUM AS LIMIT FROM" , query , re .I )
550550 fieldsSelectDistinct = re .search (r"\ASELECT%s\s+DISTINCT\((.+?)\)\s+FROM" % prefixRegex , query , re .I )
551551 fieldsSelectCase = re .search (r"\ASELECT%s\s+(\(CASE WHEN\s+.+\s+END\))" % prefixRegex , query , re .I )
@@ -693,8 +693,8 @@ def concatQuery(self, query, unpack=True):
693693 concatenatedQuery = concatenatedQuery .replace ("SELECT " , "'%s'+" % kb .chars .start , 1 )
694694 concatenatedQuery += "+'%s'" % kb .chars .stop
695695 elif fieldsSelectTop :
696- topNum = re .search (r"\ASELECT\s+TOP\s+( [\d]+ )\s+" , concatenatedQuery , re .I ).group (1 )
697- concatenatedQuery = concatenatedQuery .replace ("SELECT TOP %s " % topNum , "TOP %s '%s'+" % (topNum , kb .chars .start ), 1 )
696+ topNum = re .search (r"\ASELECT\s+TOP( \s+[\d]|\s*\([^)]+\) )\s+" , concatenatedQuery , re .I ).group (1 )
697+ concatenatedQuery = concatenatedQuery .replace ("SELECT TOP%s " % topNum , "TOP%s '%s'+" % (topNum , kb .chars .start ), 1 )
698698 concatenatedQuery = concatenatedQuery .replace (" FROM " , "+'%s' FROM " % kb .chars .stop , 1 )
699699 elif fieldsSelectCase :
700700 concatenatedQuery = concatenatedQuery .replace ("SELECT " , "'%s'+" % kb .chars .start , 1 )
0 commit comments