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