Bladeren bron

test(pgserver): cover GROUP_CONCAT and TOTAL over the pg wire

Exercise normal, custom-separator, DISTINCT, NULL-skipping, and empty-input
behavior through the simple-query path.
PizzaSQL Bot 22 uur geleden
bovenliggende
commit
f95683b7dc
1 gewijzigde bestanden met toevoegingen van 28 en 0 verwijderingen
  1. 28 0
      pkg/pgserver/aggregates_test.go

+ 28 - 0
pkg/pgserver/aggregates_test.go

@@ -0,0 +1,28 @@
+package pgserver
+
+import "testing"
+
+func TestGroupConcatAndTotalOverSimpleQuery(t *testing.T) {
+	c, client := newDataConnection(t)
+	runQuery(t, c, client, &Message{Type: MsgQuery, Data: append([]byte("CREATE TABLE t (id INTEGER, name TEXT, n INTEGER)"), 0)})
+	runQuery(t, c, client, &Message{Type: MsgQuery, Data: append([]byte("INSERT INTO t VALUES (1, 'a', 1), (2, 'b', 2), (3, NULL, NULL), (4, 'a', 3)"), 0)})
+
+	msgs := runQuery(t, c, client, &Message{Type: MsgQuery, Data: append([]byte("SELECT GROUP_CONCAT(name), GROUP_CONCAT(name, '|'), GROUP_CONCAT(DISTINCT name), TOTAL(n) FROM t"), 0)})
+	values := dataRowValues(t, msgs[1])
+	want := []string{"a,b,a", "a|b|a", "a,b", "6"}
+	if len(values) != len(want) {
+		t.Fatalf("values = %v, want %v", values, want)
+	}
+	for i := range want {
+		if values[i] != want[i] {
+			t.Fatalf("values = %v, want %v", values, want)
+		}
+	}
+
+	// Empty input: GROUP_CONCAT is NULL, TOTAL is 0.
+	msgs = runQuery(t, c, client, &Message{Type: MsgQuery, Data: append([]byte("SELECT GROUP_CONCAT(name), TOTAL(n) FROM t WHERE id = 99"), 0)})
+	values = dataRowValues(t, msgs[1])
+	if len(values) != 2 || values[0] != "<null>" || values[1] != "0" {
+		t.Fatalf("empty aggregate values = %v, want [<null> 0]", values)
+	}
+}