keyword_column_test.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package vrtxsql
  2. import "testing"
  3. // 列名与聚合函数同名 (count) — 关键字冲突回归。
  4. func TestCountColumnName(t *testing.T) {
  5. db := openTestDB(t)
  6. if _, err := db.Exec("CREATE TABLE t (id BIGINT PRIMARY KEY, `count` BIGINT, last_seen BIGINT)"); err != nil {
  7. t.Fatal(err)
  8. }
  9. if _, err := db.Exec("INSERT INTO t (id, count, last_seen) VALUES (1, 5, 100), (2, 9, 200), (3, 7, 300)"); err != nil {
  10. t.Fatal(err)
  11. }
  12. // ORDER BY count (GORM 实触发形态: SELECT * ... ORDER BY count DESC, last_seen DESC)
  13. rows2, err := db.Query("SELECT id FROM t ORDER BY count DESC, last_seen DESC LIMIT 100")
  14. if err != nil {
  15. t.Fatalf("ORDER BY count: %v", err)
  16. }
  17. defer rows2.Close()
  18. var ids []int64
  19. for rows2.Next() {
  20. var id int64
  21. if err := rows2.Scan(&id); err != nil {
  22. t.Fatal(err)
  23. }
  24. ids = append(ids, id)
  25. }
  26. if len(ids) != 3 || ids[0] != 2 || ids[1] != 3 || ids[2] != 1 {
  27. t.Fatalf("排序结果 %v", ids)
  28. }
  29. // WHERE 里用 count
  30. var n int64
  31. if err := db.QueryRow("SELECT COUNT(*) FROM t WHERE count > 6").Scan(&n); err != nil {
  32. t.Fatalf("WHERE count: %v", err)
  33. }
  34. if n != 2 {
  35. t.Fatalf("count>6 应 2 行, 实际 %d", n)
  36. }
  37. // 聚合 COUNT(*) 不受影响
  38. if err := db.QueryRow("SELECT COUNT(*) FROM t").Scan(&n); err != nil || n != 3 {
  39. t.Fatalf("COUNT(*) 异常: %v %d", err, n)
  40. }
  41. // UPDATE/DELETE 用 count 列
  42. if _, err := db.Exec("UPDATE t SET count = 99 WHERE id = 1"); err != nil {
  43. t.Fatalf("UPDATE count: %v", err)
  44. }
  45. if _, err := db.Exec("DELETE FROM t WHERE count = 7"); err != nil {
  46. t.Fatalf("DELETE count: %v", err)
  47. }
  48. }