...
1 package mysql
2
3 import (
4 "github.com/doug-martin/goqu/v9"
5 "github.com/doug-martin/goqu/v9/exp"
6 )
7
8 func DialectOptions() *goqu.SQLDialectOptions {
9 opts := goqu.DefaultDialectOptions()
10
11 opts.SupportsReturn = false
12 opts.SupportsOrderByOnUpdate = true
13 opts.SupportsLimitOnUpdate = true
14 opts.SupportsLimitOnDelete = true
15 opts.SupportsOrderByOnDelete = true
16 opts.SupportsConflictUpdateWhere = false
17 opts.SupportsInsertIgnoreSyntax = true
18 opts.SupportsConflictTarget = false
19 opts.SupportsWithCTE = false
20 opts.SupportsWithCTERecursive = false
21 opts.SupportsDistinctOn = false
22 opts.SupportsWindowFunction = false
23 opts.SupportsDeleteTableHint = true
24
25 opts.UseFromClauseForMultipleUpdateTables = false
26
27 opts.PlaceHolderFragment = []byte("?")
28 opts.IncludePlaceholderNum = false
29 opts.QuoteRune = '`'
30 opts.DefaultValuesFragment = []byte("")
31 opts.True = []byte("1")
32 opts.False = []byte("0")
33 opts.TimeFormat = "2006-01-02 15:04:05"
34 opts.BooleanOperatorLookup = map[exp.BooleanOperation][]byte{
35 exp.EqOp: []byte("="),
36 exp.NeqOp: []byte("!="),
37 exp.GtOp: []byte(">"),
38 exp.GteOp: []byte(">="),
39 exp.LtOp: []byte("<"),
40 exp.LteOp: []byte("<="),
41 exp.InOp: []byte("IN"),
42 exp.NotInOp: []byte("NOT IN"),
43 exp.IsOp: []byte("IS"),
44 exp.IsNotOp: []byte("IS NOT"),
45 exp.LikeOp: []byte("LIKE BINARY"),
46 exp.NotLikeOp: []byte("NOT LIKE BINARY"),
47 exp.ILikeOp: []byte("LIKE"),
48 exp.NotILikeOp: []byte("NOT LIKE"),
49 exp.RegexpLikeOp: []byte("REGEXP BINARY"),
50 exp.RegexpNotLikeOp: []byte("NOT REGEXP BINARY"),
51 exp.RegexpILikeOp: []byte("REGEXP"),
52 exp.RegexpNotILikeOp: []byte("NOT REGEXP"),
53 }
54 opts.BitwiseOperatorLookup = map[exp.BitwiseOperation][]byte{
55 exp.BitwiseInversionOp: []byte("~"),
56 exp.BitwiseOrOp: []byte("|"),
57 exp.BitwiseAndOp: []byte("&"),
58 exp.BitwiseXorOp: []byte("^"),
59 exp.BitwiseLeftShiftOp: []byte("<<"),
60 exp.BitwiseRightShiftOp: []byte(">>"),
61 }
62 opts.EscapedRunes = map[rune][]byte{
63 '\'': []byte("\\'"),
64 '"': []byte("\\\""),
65 '\\': []byte("\\\\"),
66 '\n': []byte("\\n"),
67 '\r': []byte("\\r"),
68 0: []byte("\\x00"),
69 0x1a: []byte("\\x1a"),
70 }
71 opts.InsertIgnoreClause = []byte("INSERT IGNORE INTO")
72 opts.ConflictFragment = []byte("")
73 opts.ConflictDoUpdateFragment = []byte(" ON DUPLICATE KEY UPDATE ")
74 opts.ConflictDoNothingFragment = []byte("")
75 return opts
76 }
77
78 func DialectOptionsV8() *goqu.SQLDialectOptions {
79 opts := DialectOptions()
80 opts.SupportsWindowFunction = true
81 return opts
82 }
83
84 func init() {
85 goqu.RegisterDialect("mysql", DialectOptions())
86 goqu.RegisterDialect("mysql8", DialectOptionsV8())
87 }
88
View as plain text