sql_validator.go 931 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package xsql
  2. import "fmt"
  3. func Validate(stmt *SelectStatement) error {
  4. if HasAggFuncs(stmt.Condition) {
  5. return fmt.Errorf("Not allowed to call aggregate functions in WHERE clause.")
  6. }
  7. if HasNoAggFuncs(stmt.Having) {
  8. return fmt.Errorf("Not allowed to call none-aggregate functions in HAVING clause.")
  9. }
  10. for _, d := range stmt.Dimensions {
  11. if HasAggFuncs(d.Expr) {
  12. return fmt.Errorf("Not allowed to call aggregate functions in GROUP BY clause.")
  13. }
  14. }
  15. //Cannot GROUP BY alias fields with aggregate funcs
  16. // for _, d := range stmt.Dimensions {
  17. // if f, ok := d.Expr.(*FieldRef); ok {
  18. // for _, f1 := range stmt.Fields {
  19. // if f.Name == f1.Name || f.Name == f1.AName {
  20. // if HasAggFuncs(f1.Expr) {
  21. // return fmt.Errorf("Cannot group on %s.", f.Name)
  22. // }
  23. // break
  24. // }
  25. // }
  26. // } else {
  27. // return fmt.Errorf("Invalid use of group function")
  28. // }
  29. //
  30. // }
  31. return nil
  32. }