MCPcopy Create free account
hub / github.com/CovenantSQL/CovenantSQL / convertQueryAndBuildArgs

Function convertQueryAndBuildArgs

xenomint/query_sanitizer.go:77–222  ·  view source on GitHub ↗
(pattern string, args []types.NamedArg)

Source from the content-addressed store, hash-verified

75)
76
77func convertQueryAndBuildArgs(pattern string, args []types.NamedArg) (containsDDL bool, p string, ifs []interface{}, err error) {
78 if lower := strings.ToLower(pattern); strings.Contains(lower, "begin") ||
79 strings.Contains(lower, "rollback") || strings.Contains(lower, "commit") {
80 return false, pattern, nil, nil
81 }
82 var (
83 tokenizer = sqlparser.NewStringTokenizer(pattern)
84 queryParts []string
85 statements []sqlparser.Statement
86 i int
87 origQuery string
88 query string
89 )
90
91 if queryParts, statements, err = sqlparser.ParseMultiple(tokenizer); err != nil {
92 err = errors.Wrap(err, "parse sql failed")
93 return
94 }
95
96 for i = range queryParts {
97 walkNodes := []sqlparser.SQLNode{statements[i]}
98
99 switch stmt := statements[i].(type) {
100 case *sqlparser.Show:
101 origQuery = queryParts[i]
102
103 switch stmt.Type {
104 case "table":
105 if stmt.ShowCreate {
106 query = fmt.Sprintf(`SELECT sql
107FROM sqlite_master
108WHERE type = "table" AND tbl_name = "%s"
109 AND tbl_name NOT LIKE "sqlite%%"`,
110 stmt.OnTable.Name.String())
111 } else {
112 query = fmt.Sprintf(`PRAGMA table_info(%s)`, stmt.OnTable.Name.String())
113 }
114 case "index":
115 query = fmt.Sprintf(`SELECT name
116FROM sqlite_master
117WHERE type = "index" AND tbl_name = "%s"
118 AND name NOT LIKE "sqlite%%"`, stmt.OnTable.Name.String())
119 case "tables":
120 query = `SELECT name FROM sqlite_master WHERE type = "table" AND name NOT LIKE "sqlite%"`
121 }
122
123 log.WithFields(log.Fields{
124 "from": origQuery,
125 "to": query,
126 }).Debug("query translated")
127
128 queryParts[i] = query
129 case *sqlparser.DDL:
130 containsDDL = true
131 if stmt.TableSpec != nil {
132 // walk table default values for invalid stateful expressions
133 for _, c := range stmt.TableSpec.Columns {
134 if c == nil || c.Type.Default == nil {

Callers 3

readSingleFunction · 0.85
writeSingleMethod · 0.85

Calls 4

WithFieldsFunction · 0.92
ContainsMethod · 0.80
DebugMethod · 0.80
StringMethod · 0.45

Tested by 1