sqlserver.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package sqlserver
  2. import (
  3. "github.com/doug-martin/goqu/v9"
  4. "github.com/doug-martin/goqu/v9/exp"
  5. "github.com/doug-martin/goqu/v9/sqlgen"
  6. )
  7. func DialectOptions() *goqu.SQLDialectOptions {
  8. opts := goqu.DefaultDialectOptions()
  9. opts.UseLiteralIsBools = false
  10. opts.SupportsReturn = false
  11. opts.SupportsOrderByOnUpdate = false
  12. opts.SupportsLimitOnUpdate = false
  13. opts.SupportsLimitOnDelete = false
  14. opts.SupportsOrderByOnDelete = true
  15. opts.SupportsConflictUpdateWhere = false
  16. opts.SupportsInsertIgnoreSyntax = false
  17. opts.SupportsConflictTarget = false
  18. opts.SupportsWithCTE = false
  19. opts.SupportsWithCTERecursive = false
  20. opts.SupportsDistinctOn = false
  21. opts.SupportsWindowFunction = false
  22. opts.PlaceHolderFragment = []byte("@p")
  23. opts.LimitFragment = []byte(" TOP ")
  24. opts.IncludePlaceholderNum = true
  25. opts.DefaultValuesFragment = []byte("")
  26. opts.True = []byte("1")
  27. opts.False = []byte("0")
  28. opts.TimeFormat = "2006-01-02 15:04:05"
  29. opts.BooleanOperatorLookup = map[exp.BooleanOperation][]byte{
  30. exp.EqOp: []byte("="),
  31. exp.NeqOp: []byte("!="),
  32. exp.GtOp: []byte(">"),
  33. exp.GteOp: []byte(">="),
  34. exp.LtOp: []byte("<"),
  35. exp.LteOp: []byte("<="),
  36. exp.InOp: []byte("IN"),
  37. exp.NotInOp: []byte("NOT IN"),
  38. exp.IsOp: []byte("="),
  39. exp.IsNotOp: []byte("IS NOT"),
  40. exp.LikeOp: []byte("LIKE"),
  41. exp.NotLikeOp: []byte("NOT LIKE"),
  42. exp.ILikeOp: []byte("LIKE"),
  43. exp.NotILikeOp: []byte("NOT LIKE"),
  44. exp.RegexpLikeOp: []byte("REGEXP BINARY"),
  45. exp.RegexpNotLikeOp: []byte("NOT REGEXP BINARY"),
  46. exp.RegexpILikeOp: []byte("REGEXP"),
  47. exp.RegexpNotILikeOp: []byte("NOT REGEXP"),
  48. }
  49. opts.FetchFragment = []byte(" FETCH FIRST ")
  50. opts.SelectSQLOrder = []sqlgen.SQLFragmentType{
  51. sqlgen.CommonTableSQLFragment,
  52. sqlgen.SelectWithLimitSQLFragment,
  53. sqlgen.FromSQLFragment,
  54. sqlgen.JoinSQLFragment,
  55. sqlgen.WhereSQLFragment,
  56. sqlgen.GroupBySQLFragment,
  57. sqlgen.HavingSQLFragment,
  58. sqlgen.WindowSQLFragment,
  59. sqlgen.CompoundsSQLFragment,
  60. sqlgen.OrderWithOffsetFetchSQLFragment,
  61. sqlgen.ForSQLFragment,
  62. }
  63. opts.EscapedRunes = map[rune][]byte{
  64. '\'': []byte("\\'"),
  65. '"': []byte("\\\""),
  66. '\\': []byte("\\\\"),
  67. '\n': []byte("\\n"),
  68. '\r': []byte("\\r"),
  69. 0: []byte("\\x00"),
  70. 0x1a: []byte("\\x1a"),
  71. }
  72. opts.ConflictFragment = []byte("")
  73. opts.ConflictDoUpdateFragment = []byte("")
  74. opts.ConflictDoNothingFragment = []byte("")
  75. return opts
  76. }
  77. func init() {
  78. goqu.RegisterDialect("sqlserver", DialectOptions())
  79. }