From 364ab463338e75f7b2b7be520a507bd5632d7669 Mon Sep 17 00:00:00 2001 From: Khadija Sidhpuri <59063821+squarebat@users.noreply.github.com> Date: Fri, 23 Jul 2021 02:03:34 +0530 Subject: [PATCH] dialect/sql: append UNION before ORDER BY (#1761) * fix: builder to append UNION before ORDER_BY * gofmt builder_test.go --- dialect/sql/builder.go | 6 +++--- dialect/sql/builder_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/dialect/sql/builder.go b/dialect/sql/builder.go index 3874b2113..d820510e6 100644 --- a/dialect/sql/builder.go +++ b/dialect/sql/builder.go @@ -2320,6 +2320,9 @@ func (s *Selector) Query() (string, []interface{}) { b.WriteString(" HAVING ") b.Join(s.having) } + if len(s.union) > 0 { + s.joinUnion(&b) + } if len(s.order) > 0 { s.joinOrder(&b) } @@ -2331,9 +2334,6 @@ func (s *Selector) Query() (string, []interface{}) { b.WriteString(" OFFSET ") b.WriteString(strconv.Itoa(*s.offset)) } - if len(s.union) > 0 { - s.joinUnion(&b) - } s.joinLock(&b) s.total = b.total s.AddError(b.Err()) diff --git a/dialect/sql/builder_test.go b/dialect/sql/builder_test.go index 4a10bf389..8b60abcff 100644 --- a/dialect/sql/builder_test.go +++ b/dialect/sql/builder_test.go @@ -1703,3 +1703,15 @@ func TestSelectWithLock(t *testing.T) { require.Equal(t, "SELECT * FROM `users` WHERE `id` = ? LOCK IN SHARE MODE", query) require.Equal(t, 20, args[0]) } + +func TestSelector_UnionOrderBy(t *testing.T) { + table := Table("users") + query, _ := Dialect(dialect.Postgres). + Select("*"). + From(table). + Where(EQ("active", true)). + Union(Select("*").From(Table("old_users1"))). + OrderBy(table.C("whatever")). + Query() + require.Equal(t, `SELECT * FROM "users" WHERE "active" = $1 UNION SELECT * FROM "old_users1" ORDER BY "users"."whatever"`, query) +}