aggregates_test.go 1.2 KB

12345678910111213141516171819202122232425262728
  1. package pgserver
  2. import "testing"
  3. func TestGroupConcatAndTotalOverSimpleQuery(t *testing.T) {
  4. c, client := newDataConnection(t)
  5. runQuery(t, c, client, &Message{Type: MsgQuery, Data: append([]byte("CREATE TABLE t (id INTEGER, name TEXT, n INTEGER)"), 0)})
  6. 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)})
  7. 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)})
  8. values := dataRowValues(t, msgs[1])
  9. want := []string{"a,b,a", "a|b|a", "a,b", "6"}
  10. if len(values) != len(want) {
  11. t.Fatalf("values = %v, want %v", values, want)
  12. }
  13. for i := range want {
  14. if values[i] != want[i] {
  15. t.Fatalf("values = %v, want %v", values, want)
  16. }
  17. }
  18. // Empty input: GROUP_CONCAT is NULL, TOTAL is 0.
  19. msgs = runQuery(t, c, client, &Message{Type: MsgQuery, Data: append([]byte("SELECT GROUP_CONCAT(name), TOTAL(n) FROM t WHERE id = 99"), 0)})
  20. values = dataRowValues(t, msgs[1])
  21. if len(values) != 2 || values[0] != "<null>" || values[1] != "0" {
  22. t.Fatalf("empty aggregate values = %v, want [<null> 0]", values)
  23. }
  24. }