{"record":{"id":"d33b53863cb83f74","repo":"t8y2/dbx","slug":"parse-iotdb-url-parameters-w","errorCode":null,"errorMessage":"parse IoTDB URL parameters: %w","messagePattern":"parse IoTDB URL parameters: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/iotdb/driver.go","lineNumber":148,"sourceCode":"\t\t\tconfig.Port = port\n\t\t}\n\t\tif parsed.User != nil {\n\t\t\tif username := parsed.User.Username(); username != \"\" {\n\t\t\t\tconfig.Username = username\n\t\t\t}\n\t\t\tif password, ok := parsed.User.Password(); ok {\n\t\t\t\tconfig.Password = password\n\t\t\t}\n\t\t}\n\t\tif database := strings.Trim(strings.TrimSpace(parsed.Path), \"/\"); database != \"\" {\n\t\t\tconfig.Database = database\n\t\t}\n\t\tquery = parsed.Query()\n\t}\n\tif raw := strings.TrimSpace(params.URLParams); raw != \"\" {\n\t\tvalues, err := url.ParseQuery(strings.TrimPrefix(raw, \"?\"))\n\t\tif err != nil {\n\t\t\treturn connectionConfig{}, fmt.Errorf(\"parse IoTDB URL parameters: %w\", err)\n\t\t}\n\t\tfor key, entries := range values {\n\t\t\tquery[key] = entries\n\t\t}\n\t}\n\n\tif dialect := strings.ToLower(strings.TrimSpace(firstQueryValue(query, \"sql_dialect\", \"dialect\"))); dialect != \"\" {\n\t\tswitch dialect {\n\t\tcase client.TreeSqlDialect, client.TableSqlDialect:\n\t\t\tconfig.Dialect = dialect\n\t\tdefault:\n\t\t\treturn connectionConfig{}, fmt.Errorf(\"unsupported IoTDB SQL dialect: %s\", dialect)\n\t\t}\n\t}\n\tif database := strings.TrimSpace(firstQueryValue(query, \"database\", \"db\")); database != \"\" {\n\t\tconfig.Database = database\n\t}\n\tif value := firstQueryValue(query, \"fetch_size\", \"fetchSize\"); value != \"\" {","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/iotdb/driver.go#L130-L166","documentation":"Thrown by parseConnectionConfig when the URLParams string of the connect params cannot be parsed by url.ParseQuery, e.g. malformed percent-encoding or an invalid escape sequence. The underlying net/url error is wrapped with 'parse IoTDB URL parameters: %w' so callers know connection setup failed at the parameter-parsing stage.","triggerScenarios":"Passing a URLParams string containing invalid percent-escapes (e.g. '%ZZ', a bare '%'), an unterminated escape, or query syntax rejected by net/url.","commonSituations":"Users paste a JDBC-style parameter string encoded for a different consumer, environment variables leave a malformed '%' after shell expansion, or a literal '%' from a password was not re-encoded.","solutions":["Check the URLParams string for invalid percent-escapes; every '%' must be followed by two hex digits.","URL-encode special characters (%, &, =) with url.QueryEscape before passing them as URLParams.","If assembling from parts, use url.Values.Encode() instead of hand-built query strings.","Inspect the wrapped %w error, which pinpoints the exact parse failure."],"exampleFix":"// before\nparams.URLParams = \"fetch_size=10&token=abc%\"\n// after\nparams.URLParams = \"fetch_size=10&token=\" + url.QueryEscape(\"abc%\")","handlingStrategy":"validation","validationCode":"func validURLParams(raw string) error {\n    raw = strings.TrimSpace(raw)\n    if raw == \"\" {\n        return nil\n    }\n    _, err := url.ParseQuery(strings.TrimPrefix(raw, \"?\"))\n    return err\n}","typeGuard":null,"tryCatchPattern":"cfg, err := parseConnectionConfig(params)\nif err != nil {\n    var uerr *url.Error\n    if errors.As(err, &uerr) || strings.Contains(err.Error(), \"parse IoTDB URL parameters\") {\n        return fmt.Errorf(\"check URLParams encoding: %w\", err)\n    }\n    return err\n}","preventionTips":["Build query strings with url.Values.Encode() instead of concatenation.","Percent-encode user-supplied values with url.QueryEscape.","Run validURLParams on config before connecting."],"tags":["go","url-parsing","configuration"],"backgroundTag":"invalid-url-encoding","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}