Skip to content

Commit 28860fd

Browse files
author
zhangyd
committed
修复多表查询时oracle分页的bug
1 parent b9e2ae6 commit 28860fd

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

select.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,19 +237,35 @@ func (sb *SelectBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{
237237
buf := newStringBuilder()
238238
sb.injection.WriteTo(buf, selectMarkerInit)
239239

240+
oraclePage1 := flavor == Oracle && sb.limit >= 0
241+
oraclePage2 := oraclePage1 && sb.offset > 0
242+
240243
if len(sb.selectCols) > 0 {
241244
buf.WriteLeadingString("SELECT ")
242245

243246
if sb.distinct {
244247
buf.WriteString("DISTINCT ")
245248
}
246249

247-
buf.WriteString(strings.Join(sb.selectCols, ", "))
250+
if oraclePage2 {
251+
var selectCols []string
252+
for i := range sb.selectCols {
253+
cols := strings.SplitN(sb.selectCols[i], ".", 2)
254+
if len(cols) == 1 {
255+
selectCols = append(selectCols, cols[0])
256+
} else {
257+
selectCols = append(selectCols, cols[1])
258+
}
259+
}
260+
buf.WriteString(strings.Join(selectCols, ", "))
261+
} else {
262+
buf.WriteString(strings.Join(sb.selectCols, ", "))
263+
}
248264
}
249265

250266
sb.injection.WriteTo(buf, selectMarkerAfterSelect)
251267

252-
if flavor == Oracle && sb.limit >= 0 && sb.offset > 0 {
268+
if oraclePage2 {
253269
if len(sb.selectCols) > 0 {
254270
buf.WriteLeadingString("FROM ( SELECT ")
255271

@@ -289,7 +305,7 @@ func (sb *SelectBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{
289305
sb.injection.WriteTo(buf, selectMarkerAfterJoin)
290306
}
291307

292-
if flavor == Oracle && sb.limit >= 0 {
308+
if oraclePage1 {
293309
upper := sb.limit
294310
if sb.offset >= 0 {
295311
upper += sb.offset
@@ -385,7 +401,7 @@ func (sb *SelectBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{
385401
}
386402

387403
case Oracle:
388-
if flavor == Oracle && sb.limit >= 0 && sb.offset > 0 {
404+
if oraclePage2 {
389405
buf.WriteString(" ) ")
390406
if len(sb.tables) > 0 {
391407
buf.WriteString(strings.Join(sb.tables, ", "))

0 commit comments

Comments
 (0)