-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
vtenv.go
97 lines (82 loc) · 2.63 KB
/
vtenv.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
Copyright 2024 The Vitess Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package vtenv
import (
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/mysql/config"
"vitess.io/vitess/go/vt/sqlparser"
)
type Environment struct {
collationEnv *collations.Environment
parser *sqlparser.Parser
mysqlVersion string
truncateUILen int
truncateErrLen int
}
type Options struct {
MySQLServerVersion string
TruncateUILen int
TruncateErrLen int
}
func New(cfg Options) (*Environment, error) {
if cfg.MySQLServerVersion == "" {
cfg.MySQLServerVersion = config.DefaultMySQLVersion
}
parser, err := sqlparser.New(sqlparser.Options{
MySQLServerVersion: cfg.MySQLServerVersion,
TruncateErrLen: cfg.TruncateErrLen,
TruncateUILen: cfg.TruncateUILen,
})
if err != nil {
return nil, err
}
return &Environment{
collationEnv: collations.NewEnvironment(cfg.MySQLServerVersion),
parser: parser,
mysqlVersion: cfg.MySQLServerVersion,
truncateUILen: cfg.TruncateUILen,
truncateErrLen: cfg.TruncateErrLen,
}, nil
}
func NewTestEnv() *Environment {
return &Environment{
collationEnv: collations.NewEnvironment(config.DefaultMySQLVersion),
parser: sqlparser.NewTestParser(),
mysqlVersion: config.DefaultMySQLVersion,
truncateUILen: 512,
truncateErrLen: 0,
}
}
func (e *Environment) CollationEnv() *collations.Environment {
return e.collationEnv
}
func (e *Environment) Parser() *sqlparser.Parser {
return e.parser
}
func (e *Environment) MySQLVersion() string {
return e.mysqlVersion
}
// TruncateForUI is used when displaying queries on various Vitess status pages
// to keep the pages small enough to load and render properly
func (e *Environment) TruncateForUI(query string) string {
return sqlparser.TruncateQuery(query, e.truncateUILen)
}
// TruncateForLog is used when displaying queries as part of error logs
// to avoid overwhelming logging systems with potentially long queries and
// bind value data.
func (e *Environment) TruncateForLog(query string) string {
return sqlparser.TruncateQuery(query, e.truncateErrLen)
}
func (e *Environment) TruncateErrLen() int {
return e.truncateErrLen
}