From 1fda6f1e29c9b6a2fa498bf8700bf3e1dd824bd3 Mon Sep 17 00:00:00 2001 From: Henrik Johansson Date: Tue, 14 May 2019 10:58:37 +0200 Subject: [PATCH] qb: tuples now returns the correct names The names are auto generated in the form param_0, param_1, ... --- qb/cmp_test.go | 16 ++++++++-------- qb/delete_test.go | 6 +++--- qb/insert_test.go | 4 ++-- qb/select_test.go | 4 ++-- qb/update_test.go | 2 +- qb/value.go | 11 +++++++++-- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/qb/cmp_test.go b/qb/cmp_test.go index dcc4cdc..b475a12 100644 --- a/qb/cmp_test.go +++ b/qb/cmp_test.go @@ -31,7 +31,7 @@ func TestCmp(t *testing.T) { { C: LtTuple("lt", 2), S: "lt<(?,?)", - N: []string{"lt"}, + N: []string{"lt_0", "lt_1"}, }, { C: LtOrEq("lt"), @@ -41,7 +41,7 @@ func TestCmp(t *testing.T) { { C: LtOrEqTuple("lt", 2), S: "lt<=(?,?)", - N: []string{"lt"}, + N: []string{"lt_0", "lt_1"}, }, { C: Gt("gt"), @@ -51,7 +51,7 @@ func TestCmp(t *testing.T) { { C: GtTuple("gt", 2), S: "gt>(?,?)", - N: []string{"gt"}, + N: []string{"gt_0", "gt_1"}, }, { C: GtOrEq("gt"), @@ -61,7 +61,7 @@ func TestCmp(t *testing.T) { { C: GtOrEqTuple("gt", 2), S: "gt>=(?,?)", - N: []string{"gt"}, + N: []string{"gt_0", "gt_1"}, }, { C: In("in"), @@ -71,7 +71,7 @@ func TestCmp(t *testing.T) { { C: InTuple("in", 2), S: "in IN (?,?)", - N: []string{"in"}, + N: []string{"in_0", "in_1"}, }, { C: Contains("cnt"), @@ -81,7 +81,7 @@ func TestCmp(t *testing.T) { { C: ContainsTuple("cnt", 2), S: "cnt CONTAINS (?,?)", - N: []string{"cnt"}, + N: []string{"cnt_0", "cnt_1"}, }, { C: ContainsKey("cntKey"), @@ -91,7 +91,7 @@ func TestCmp(t *testing.T) { { C: ContainsKeyTuple("cntKey", 2), S: "cntKey CONTAINS KEY (?,?)", - N: []string{"cntKey"}, + N: []string{"cntKey_0", "cntKey_1"}, }, { C: Like("like"), @@ -101,7 +101,7 @@ func TestCmp(t *testing.T) { { C: LikeTuple("like", 2), S: "like LIKE (?,?)", - N: []string{"like"}, + N: []string{"like_0", "like_1"}, }, // Custom bind names diff --git a/qb/delete_test.go b/qb/delete_test.go index f0fb7d3..caba21d 100644 --- a/qb/delete_test.go +++ b/qb/delete_test.go @@ -47,19 +47,19 @@ func TestDeleteBuilder(t *testing.T) { { B: Delete("cycling.cyclist_name").Where(EqTuple("id", 2)).Columns("stars"), S: "DELETE stars FROM cycling.cyclist_name WHERE id=(?,?) ", - N: []string{"id"}, + N: []string{"id_0", "id_1"}, }, // Add WHERE for tuple column { B: Delete("cycling.cyclist_name").Where(w, GtTuple("firstname", 2)), S: "DELETE FROM cycling.cyclist_name WHERE id=? AND firstname>(?,?) ", - N: []string{"expr", "firstname"}, + N: []string{"expr", "firstname_0", "firstname_1"}, }, // Add WHERE for all tuple columns { B: Delete("cycling.cyclist_name").Where(EqTuple("id", 2), GtTuple("firstname", 2)), S: "DELETE FROM cycling.cyclist_name WHERE id=(?,?) AND firstname>(?,?) ", - N: []string{"id", "firstname"}, + N: []string{"id_0", "id_1", "firstname_0", "firstname_1"}, }, // Add IF { diff --git a/qb/insert_test.go b/qb/insert_test.go index 9c8b233..6cc0aa7 100644 --- a/qb/insert_test.go +++ b/qb/insert_test.go @@ -80,12 +80,12 @@ func TestInsertBuilder(t *testing.T) { { B: Insert("cycling.cyclist_name").TupleColumn("id", 2), S: "INSERT INTO cycling.cyclist_name (id) VALUES ((?,?)) ", - N: []string{"id"}, + N: []string{"id_0", "id_1"}, }, { B: Insert("cycling.cyclist_name").TupleColumn("id", 2).Columns("user_uuid"), S: "INSERT INTO cycling.cyclist_name (id,user_uuid) VALUES ((?,?),?) ", - N: []string{"id", "user_uuid"}, + N: []string{"id_0", "id_1", "user_uuid"}, }, // Add IF NOT EXISTS { diff --git a/qb/select_test.go b/qb/select_test.go index 8f0f307..097ae92 100644 --- a/qb/select_test.go +++ b/qb/select_test.go @@ -69,13 +69,13 @@ func TestSelectBuilder(t *testing.T) { { B: Select("cycling.cyclist_name").Where(EqTuple("id", 2), Gt("firstname")), S: "SELECT * FROM cycling.cyclist_name WHERE id=(?,?) AND firstname>? ", - N: []string{"id", "firstname"}, + N: []string{"id_0", "id_1", "firstname"}, }, // Add WHERE with only tuples { B: Select("cycling.cyclist_name").Where(EqTuple("id", 2), GtTuple("firstname", 2)), S: "SELECT * FROM cycling.cyclist_name WHERE id=(?,?) AND firstname>(?,?) ", - N: []string{"id", "firstname"}, + N: []string{"id_0", "id_1", "firstname_0", "firstname_1"}, }, // Add GROUP BY { diff --git a/qb/update_test.go b/qb/update_test.go index d1212e4..48f771a 100644 --- a/qb/update_test.go +++ b/qb/update_test.go @@ -48,7 +48,7 @@ func TestUpdateBuilder(t *testing.T) { { B: Update("cycling.cyclist_name").SetTuple("id", 2).Set("user_uuid", "firstname").Where(EqTuple("id", 2)), S: "UPDATE cycling.cyclist_name SET id=(?,?),user_uuid=?,firstname=? WHERE id=(?,?) ", - N: []string{"id", "user_uuid", "firstname", "id"}, + N: []string{"id_0", "id_1", "user_uuid", "firstname", "id_0", "id_1"}, }, // Add SET SetFunc { diff --git a/qb/value.go b/qb/value.go index 8ac87ba..518ec3e 100644 --- a/qb/value.go +++ b/qb/value.go @@ -4,7 +4,10 @@ package qb -import "bytes" +import ( + "bytes" + "strconv" +) // value is a CQL value expression for use in an initializer, assignment, // or comparison. @@ -29,14 +32,18 @@ type tupleParam struct { } func (t tupleParam) writeCql(cql *bytes.Buffer) (names []string) { + baseName := string(t.param) + "_" cql.WriteByte('(') for i := 0; i < t.count-1; i++ { cql.WriteByte('?') cql.WriteByte(',') + names = append(names, baseName+strconv.Itoa(i)) } cql.WriteByte('?') cql.WriteByte(')') - return []string{string(t.param)} + names = append(names, baseName+strconv.Itoa(t.count-1)) + + return } // lit is a literal CQL value.