locking_test.go 1016 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package parser
  2. import (
  3. "errors"
  4. "testing"
  5. "github.com/danfragoso/pizzasql-next/pkg/lexer"
  6. "github.com/danfragoso/pizzasql-next/pkg/pgerror"
  7. )
  8. func TestSelectLockingClauseRejected(t *testing.T) {
  9. for _, sql := range []string{
  10. "SELECT * FROM t FOR UPDATE",
  11. "SELECT * FROM t WHERE id = 1 FOR UPDATE NOWAIT",
  12. "SELECT * FROM t FOR SHARE",
  13. "SELECT * FROM t FOR NO KEY UPDATE SKIP LOCKED",
  14. "SELECT id FROM t ORDER BY id LIMIT 10 FOR UPDATE",
  15. "SELECT id FROM t UNION SELECT id FROM u FOR UPDATE",
  16. } {
  17. t.Run(sql, func(t *testing.T) {
  18. _, err := New(lexer.New(sql)).Parse()
  19. if !errors.Is(err, pgerror.ErrFeatureNotSupported) {
  20. t.Fatalf("error = %v, want ErrFeatureNotSupported", err)
  21. }
  22. })
  23. }
  24. }
  25. func TestSelectWithoutLockingClauseStillParses(t *testing.T) {
  26. for _, sql := range []string{
  27. "SELECT * FROM t",
  28. "SELECT * FROM t WHERE id = 1",
  29. "SELECT * FROM t ORDER BY id LIMIT 1",
  30. } {
  31. if _, err := New(lexer.New(sql)).Parse(); err != nil {
  32. t.Fatalf("%s: %v", sql, err)
  33. }
  34. }
  35. }