163
}
164
165
>
func buildDSN(cfg *config.SQL) (string, error) {
plugin.go
166
>
if cfg.ConnectAttributes == nil {
167
cfg.ConnectAttributes = make(map[string]string)
168
}
169
>
vals, err := buildDSNAttr(cfg)
plugin.go
170
>
if err != nil {
171
return "", err
172
}
174
>
"file:%s?%v",
175
>
cfg.DatabaseName,
176
>
vals.Encode(),
177
>
)
178
>
return dsn, nil
179
}
180
181
>
func buildDSNAttr(cfg *config.SQL) (url.Values, error) {
plugin.go
182
>
parameters := url.Values{}
183
>
184
>
// sort ConnectAttributes to get a deterministic order
185
>
keys := expmaps.Keys(cfg.ConnectAttributes)
186
>
sort.Strings(keys)
187
>
188
>
for _, k := range keys {
189
>
key := strings.TrimSpace(k)
190
>
value := strings.TrimSpace(cfg.ConnectAttributes[k])
191
>
if parameters.Get(key) != "" {
192
return nil, fmt.Errorf("duplicate connection attr: %v:%v, %v:%v",
193
key,