From 0c7762f556408f641526fc65b0fdb412bf2fedf3 Mon Sep 17 00:00:00 2001 From: ycalansy Date: Wed, 12 Oct 2022 23:59:21 +0100 Subject: [PATCH] merge: [#316](https://github.com/Masterminds/squirrel/issues/316) [#331](https://github.com/Masterminds/squirrel/pull/331) --- select.go | 7 +++++++ select_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/select.go b/select.go index 9c62ff8..399bc42 100644 --- a/select.go +++ b/select.go @@ -326,6 +326,13 @@ func (b SelectBuilder) Columns(columns ...string) SelectBuilder { return builder.Extend(b, "Columns", parts).(SelectBuilder) } +// RemoveColumns remove all columns from query. +// Must add a new column with Column or Columns methods, otherwise +// return a error. +func (b SelectBuilder) RemoveColumns() SelectBuilder { + return builder.Delete(b, "Columns").(SelectBuilder) +} + // Column adds a result column to the query. // Unlike Columns, Column accepts args which will be bound to placeholders in // the columns string, for example: diff --git a/select_test.go b/select_test.go index 728287c..b9012bd 100644 --- a/select_test.go +++ b/select_test.go @@ -312,6 +312,22 @@ func TestCTEErrorBubblesUp(t *testing.T) { assert.Error(t, err) } +func TestSelectJoinClausePlaceholderNumbering(t *testing.T) { + subquery := Select("a").Where(Eq{"b": 2}).PlaceholderFormat(Dollar) + + sql, args, err := Select("t1.a"). + From("t1"). + Where(Eq{"a": 1}). + JoinClause(subquery.Prefix("JOIN (").Suffix(") t2 ON (t1.a = t2.a)")). + PlaceholderFormat(Dollar). + FinalizeSql() + assert.NoError(t, err) + + expectedSql := "SELECT t1.a FROM t1 JOIN ( SELECT a WHERE b = $1 ) t2 ON (t1.a = t2.a) WHERE a = $2" + assert.Equal(t, expectedSql, sql) + assert.Equal(t, []interface{}{2, 1}, args) +} + func ExampleSelect() { Select("id", "created", "first_name").From("users") // ... continue building up your query @@ -468,3 +484,13 @@ func ExampleSelectBuilder_ToSql() { // scan... } } + +func TestRemoveColumns(t *testing.T) { + query := Select("id"). + From("users"). + RemoveColumns() + query = query.Columns("name") + sql, _, err := query.ToSql() + assert.NoError(t, err) + assert.Equal(t, "SELECT name FROM users", sql) +}