expression_test.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package clause_test
  2. import (
  3. "fmt"
  4. "sync"
  5. "testing"
  6. "github.com/jinzhu/gorm"
  7. "github.com/jinzhu/gorm/clause"
  8. "github.com/jinzhu/gorm/schema"
  9. "github.com/jinzhu/gorm/tests"
  10. )
  11. func TestExpr(t *testing.T) {
  12. results := []struct {
  13. SQL string
  14. Result string
  15. Vars []interface{}
  16. }{{
  17. SQL: "create table ? (? ?, ? ?)",
  18. Vars: []interface{}{clause.Table{Name: "users"}, clause.Column{Name: "id"}, clause.Expr{SQL: "int"}, clause.Column{Name: "name"}, clause.Expr{SQL: "text"}},
  19. Result: "create table `users` (`id` int, `name` text)",
  20. }}
  21. for idx, result := range results {
  22. t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) {
  23. user, _ := schema.Parse(&tests.User{}, &sync.Map{}, db.NamingStrategy)
  24. stmt := &gorm.Statement{DB: db, Table: user.Table, Schema: user, Clauses: map[string]clause.Clause{}}
  25. clause.Expr{SQL: result.SQL, Vars: result.Vars}.Build(stmt)
  26. if stmt.SQL.String() != result.Result {
  27. t.Errorf("generated SQL is not equal, expects %v, but got %v", result.Result, stmt.SQL.String())
  28. }
  29. })
  30. }
  31. }