@@ -720,21 +720,43 @@ def concatQuery(self, query, unpack=True):
720720 warnMsg = "applying generic concatenation (CONCAT)"
721721 singleTimeWarnMessage (warnMsg )
722722
723+ if FROM_DUMMY_TABLE .get (Backend .getIdentifiedDbms ()):
724+ _ = re .sub (r"(?i)%s\Z" % re .escape (FROM_DUMMY_TABLE [Backend .getIdentifiedDbms ()]), "" , concatenatedQuery )
725+ if _ != concatenatedQuery :
726+ concatenatedQuery = _
727+ fieldsSelectFrom = None
728+
723729 if fieldsExists :
724730 concatenatedQuery = concatenatedQuery .replace ("SELECT " , "CONCAT(CONCAT('%s'," % kb .chars .start , 1 )
725731 concatenatedQuery += "),'%s')" % kb .chars .stop
726732 elif fieldsSelectCase :
727733 concatenatedQuery = concatenatedQuery .replace ("SELECT " , "CONCAT(CONCAT('%s'," % kb .chars .start , 1 )
728734 concatenatedQuery += "),'%s')" % kb .chars .stop
729- elif fieldsSelectFrom :
735+ elif fieldsSelectFrom or fieldsSelect :
736+ fromTable = ""
737+
730738 _ = unArrayizeValue (zeroDepthSearch (concatenatedQuery , " FROM " ))
731- concatenatedQuery = "%s),'%s')%s" % (concatenatedQuery [:_ ].replace ("SELECT " , "CONCAT(CONCAT('%s'," % kb .chars .start , 1 ), kb .chars .stop , concatenatedQuery [_ :])
739+ if _ :
740+ concatenatedQuery , fromTable = concatenatedQuery [:_ ], concatenatedQuery [_ :]
741+
742+ concatenatedQuery = re .sub (r"(?i)\ASELECT " , "" , concatenatedQuery )
743+ replacement = "'%s',%s,'%s'" % (kb .chars .start , concatenatedQuery , kb .chars .stop )
744+ chars = [_ for _ in replacement ]
745+
746+ count = 0
747+ for index in zeroDepthSearch (replacement , ',' )[1 :]:
748+ chars [index ] = "),"
749+ count += 1
750+
751+ replacement = "CONCAT(%s%s)" % ("CONCAT(" * count , "" .join (chars ))
752+ concatenatedQuery = "%s%s" % (replacement , fromTable )
732753 elif fieldsSelect :
733754 concatenatedQuery = concatenatedQuery .replace ("SELECT " , "CONCAT(CONCAT('%s'," % kb .chars .start , 1 )
734755 concatenatedQuery += "),'%s')" % kb .chars .stop
735756 elif fieldsNoSelect :
736757 concatenatedQuery = "CONCAT(CONCAT('%s',%s),'%s')" % (kb .chars .start , concatenatedQuery , kb .chars .stop )
737758
759+
738760 return concatenatedQuery
739761
740762 def forgeUnionQuery (self , query , position , count , comment , prefix , suffix , char , where , multipleUnions = None , limited = False , fromTable = None ):
0 commit comments