...
1 package sqlite3
2
3 import (
4 "time"
5
6 "github.com/doug-martin/goqu/v9"
7 "github.com/doug-martin/goqu/v9/exp"
8 )
9
10 func DialectOptions() *goqu.SQLDialectOptions {
11 opts := goqu.DefaultDialectOptions()
12
13 opts.SupportsReturn = false
14 opts.SupportsOrderByOnUpdate = true
15 opts.SupportsLimitOnUpdate = true
16 opts.SupportsOrderByOnDelete = true
17 opts.SupportsLimitOnDelete = true
18 opts.SupportsConflictUpdateWhere = false
19 opts.SupportsInsertIgnoreSyntax = true
20 opts.SupportsConflictTarget = true
21 opts.SupportsMultipleUpdateTables = false
22 opts.WrapCompoundsInParens = false
23 opts.SupportsDistinctOn = false
24 opts.SupportsWindowFunction = false
25 opts.SupportsLateral = 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 = time.RFC3339Nano
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"),
46 exp.NotLikeOp: []byte("NOT LIKE"),
47 exp.ILikeOp: []byte("LIKE"),
48 exp.NotILikeOp: []byte("NOT LIKE"),
49 exp.RegexpLikeOp: []byte("REGEXP"),
50 exp.RegexpNotLikeOp: []byte("NOT REGEXP"),
51 exp.RegexpILikeOp: []byte("REGEXP"),
52 exp.RegexpNotILikeOp: []byte("NOT REGEXP"),
53 }
54 opts.UseLiteralIsBools = false
55 opts.BitwiseOperatorLookup = map[exp.BitwiseOperation][]byte{
56 exp.BitwiseOrOp: []byte("|"),
57 exp.BitwiseAndOp: []byte("&"),
58 exp.BitwiseLeftShiftOp: []byte("<<"),
59 exp.BitwiseRightShiftOp: []byte(">>"),
60 }
61 opts.EscapedRunes = map[rune][]byte{
62 '\'': []byte("''"),
63 }
64 opts.InsertIgnoreClause = []byte("INSERT OR IGNORE INTO ")
65 opts.ConflictFragment = []byte(" ON CONFLICT ")
66 opts.ConflictDoUpdateFragment = []byte(" DO UPDATE SET ")
67 opts.ConflictDoNothingFragment = []byte(" DO NOTHING ")
68 opts.ForUpdateFragment = []byte("")
69 opts.OfFragment = []byte("")
70 opts.NowaitFragment = []byte("")
71 return opts
72 }
73
74 func init() {
75 goqu.RegisterDialect("sqlite3", DialectOptions())
76 }
77
View as plain text