diff --git a/qb/cmp_test.go b/qb/cmp_test.go index f9f459d..32e3a2c 100644 --- a/qb/cmp_test.go +++ b/qb/cmp_test.go @@ -151,6 +151,24 @@ func TestCmp(t *testing.T) { C: EqFunc("eq", Now()), S: "eq=now()", }, + { + C: LtFunc("eq", Now()), + S: "eqnow()", + }, + { + C: GtOrEqFunc("eq", MaxTimeuuid("arg0")), + S: "eq>=maxTimeuuid(?)", + N: []string{"arg0"}, + }, } buf := bytes.Buffer{} diff --git a/qb/insert_test.go b/qb/insert_test.go index 91196c5..53b4f87 100644 --- a/qb/insert_test.go +++ b/qb/insert_test.go @@ -76,6 +76,17 @@ func TestInsertBuilder(t *testing.T) { S: "INSERT INTO cycling.cyclist_name (id,user_uuid,firstname) VALUES (?,?,?) IF NOT EXISTS ", N: []string{"id", "user_uuid", "firstname"}, }, + // Add FuncColumn + { + B: Insert("cycling.cyclist_name").FuncColumn("id", Now()), + S: "INSERT INTO cycling.cyclist_name (id) VALUES (now()) ", + N: nil, + }, + { + B: Insert("cycling.cyclist_name").FuncColumn("id", Now()).Columns("user_uuid"), + S: "INSERT INTO cycling.cyclist_name (id,user_uuid) VALUES (now(),?) ", + N: []string{"user_uuid"}, + }, } for _, test := range table { diff --git a/qb/select_test.go b/qb/select_test.go index 7ed3ca5..87145e8 100644 --- a/qb/select_test.go +++ b/qb/select_test.go @@ -33,6 +33,12 @@ func TestSelectBuilder(t *testing.T) { B: Select("cycling.cyclist_name").Columns("id", "user_uuid", As("firstname", "name")), S: "SELECT id,user_uuid,firstname AS name FROM cycling.cyclist_name ", }, + // Add a SELECT AS column 2 + { + B: Select("cycling.cyclist_name"). + Columns(As("firstname", "name"), "id", As("user_uuid", "user")), + S: "SELECT firstname AS name,id,user_uuid AS user FROM cycling.cyclist_name ", + }, // Basic test for select distinct { B: Select("cycling.cyclist_name").Distinct("id"), @@ -70,6 +76,12 @@ func TestSelectBuilder(t *testing.T) { S: "SELECT * FROM cycling.cyclist_name WHERE id=? ORDER BY firstname ASC ", N: []string{"expr"}, }, + // Add ORDER BY + { + B: Select("cycling.cyclist_name").Where(w).OrderBy("firstname", DESC), + S: "SELECT * FROM cycling.cyclist_name WHERE id=? ORDER BY firstname DESC ", + N: []string{"expr"}, + }, // Add ORDER BY two columns { B: Select("cycling.cyclist_name").Where(w).OrderBy("firstname", ASC).OrderBy("lastname", DESC), @@ -110,6 +122,21 @@ func TestSelectBuilder(t *testing.T) { B: Select("cycling.cyclist_name").Min("stars"), S: "SELECT min(stars) FROM cycling.cyclist_name ", }, + // Add Sum + { + B: Select("cycling.cyclist_name").Sum("*") , + S: "SELECT sum(*) FROM cycling.cyclist_name ", + }, + // Add Avg + { + B: Select("cycling.cyclist_name").Avg("stars"), + S: "SELECT avg(stars) FROM cycling.cyclist_name ", + }, + // Add Max + { + B: Select("cycling.cyclist_name").Max("stars"), + S: "SELECT max(stars) FROM cycling.cyclist_name ", + }, } for _, test := range table { diff --git a/qb/update_test.go b/qb/update_test.go index e510893..94c4a05 100644 --- a/qb/update_test.go +++ b/qb/update_test.go @@ -125,6 +125,24 @@ func TestUpdateBuilder(t *testing.T) { S: "UPDATE cycling.cyclist_name SET id=?,user_uuid=?,firstname=? WHERE id=? IF EXISTS ", N: []string{"id", "user_uuid", "firstname", "expr"}, }, + // Add SET column + { + B: Update("cycling.cyclist_name").SetNamed("firstname", "name"), + S: "UPDATE cycling.cyclist_name SET firstname=? ", + N: []string{"name"}, + }, + // Add AddFunc + { + B: Update("cycling.cyclist_name").AddFunc("timestamp", Now()), + S: "UPDATE cycling.cyclist_name SET timestamp=timestamp+now() ", + N: nil, + }, + // Add RemoveFunc + { + B: Update("cycling.cyclist_name").RemoveFunc("timestamp", Now()), + S: "UPDATE cycling.cyclist_name SET timestamp=timestamp-now() ", + N: nil, + }, } for _, test := range table { diff --git a/qb/using_test.go b/qb/using_test.go index 96dbe1d..d9983af 100644 --- a/qb/using_test.go +++ b/qb/using_test.go @@ -57,12 +57,38 @@ func TestUsing(t *testing.T) { B: new(using).TTL(time.Second).Timestamp(time.Date(2005, 05, 05, 0, 0, 0, 0, time.UTC)), S: "USING TTL 1 AND TIMESTAMP 1115251200000000 ", }, + // TTL TimestampNamed + { + B: new(using).TTL(time.Second).TimestampNamed("ts"), + S: "USING TTL 1 AND TIMESTAMP ? ", + N: []string{"ts"}, + }, // TTLNamed TimestampNamed { B: new(using).TTLNamed("ttl").TimestampNamed("ts"), S: "USING TTL ? AND TIMESTAMP ? ", N: []string{"ttl", "ts"}, }, + // TTLNamed Timestamp + { + B: new(using).TTLNamed("ttl").Timestamp(time.Date(2005, 05, 05, 0, 0, 0, 0, time.UTC)), + S: "USING TTL ? AND TIMESTAMP 1115251200000000 ", + N: []string{"ttl"}, + }, + // TTL with no duration + { + B: new(using).TTL(0 * time.Second), + S: "USING TTL 0 ", + }, + { + B: new(using).TTL(-1 * time.Second), + S: "USING TTL 0 ", + }, + { + // TODO patch this maybe in the future + B: new(using).TTL(-2 * time.Second), + S: "USING TTL -2 ", + }, // TTL TTLNamed { B: new(using).TTL(time.Second).TTLNamed("ttl"),