@@ -85,14 +85,8 @@ object SqlStr {
8585
8686 def rec (self : SqlStr , topLevel : Boolean ): Unit = {
8787 val queryParts = self.queryParts
88- val params = self.interps
89- finalExprs.addAll(self.referencedExprs)
90- var boundary = true
91- val parenthesize = ! topLevel && self.isCompleteQuery
92- if (parenthesize) addFinalPart(" (" )
93- boundary = true
94-
95- def addFinalPart (s : CharSequence ) = {
88+
89+ def addFinalPart (boundary : Boolean , s : CharSequence ) = {
9690 if (boundary && lastFinalPart != null ) {
9791 lastFinalPart.append(s)
9892 } else {
@@ -101,26 +95,41 @@ object SqlStr {
10195 finalParts.addOne(lastFinalPart)
10296 }
10397 }
98+ queryParts.length match {
99+ case 0 => // do nothing
100+ case 1 =>
101+ addFinalPart(true , queryParts.head)
102+ finalExprs.addAll(self.referencedExprs)
103+ case _ =>
104+ val params = self.interps
105+ finalExprs.addAll(self.referencedExprs)
106+ var boundary = true
107+ val parenthesize = ! topLevel && self.isCompleteQuery
108+ if (parenthesize) addFinalPart(boundary, " (" )
109+ boundary = true
110+
111+
112+ var i = 0
113+ val length = params.length
114+ while (i < length) {
115+ val p = queryParts(i)
116+ val a = params(i)
117+ addFinalPart(boundary, p)
118+ boundary = false
119+ a match {
120+ case si : Interp .SqlStrInterp =>
121+ rec(si.s, false )
122+ boundary = true
123+
124+ case s : Interp .TypeInterp [_] => finalInterps.addOne(s)
125+ }
126+ i += 1
127+ }
104128
105- var i = 0
106- val length = params.length
107- while (i < length) {
108- val p = queryParts(i)
109- val a = params(i)
110- addFinalPart(p)
111- boundary = false
112- a match {
113- case si : Interp .SqlStrInterp =>
114- rec(si.s, false )
115- boundary = true
116-
117- case s : Interp .TypeInterp [_] => finalInterps.addOne(s)
118- }
119- i += 1
129+ addFinalPart(boundary, queryParts.last)
130+ if (parenthesize) addFinalPart(boundary, " )" )
120131 }
121132
122- addFinalPart(queryParts.last)
123- if (parenthesize) addFinalPart(" )" )
124133 }
125134
126135 rec(self, true )
0 commit comments