t8y2/dbx · error

parse IoTDB URL parameters: %w

Error message

parse IoTDB URL parameters: %w

What it means

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.

Source

Thrown at agents/drivers/iotdb/driver.go:148

			config.Port = port
		}
		if parsed.User != nil {
			if username := parsed.User.Username(); username != "" {
				config.Username = username
			}
			if password, ok := parsed.User.Password(); ok {
				config.Password = password
			}
		}
		if database := strings.Trim(strings.TrimSpace(parsed.Path), "/"); database != "" {
			config.Database = database
		}
		query = parsed.Query()
	}
	if raw := strings.TrimSpace(params.URLParams); raw != "" {
		values, err := url.ParseQuery(strings.TrimPrefix(raw, "?"))
		if err != nil {
			return connectionConfig{}, fmt.Errorf("parse IoTDB URL parameters: %w", err)
		}
		for key, entries := range values {
			query[key] = entries
		}
	}

	if dialect := strings.ToLower(strings.TrimSpace(firstQueryValue(query, "sql_dialect", "dialect"))); dialect != "" {
		switch dialect {
		case client.TreeSqlDialect, client.TableSqlDialect:
			config.Dialect = dialect
		default:
			return connectionConfig{}, fmt.Errorf("unsupported IoTDB SQL dialect: %s", dialect)
		}
	}
	if database := strings.TrimSpace(firstQueryValue(query, "database", "db")); database != "" {
		config.Database = database
	}
	if value := firstQueryValue(query, "fetch_size", "fetchSize"); value != "" {

View on GitHub (pinned to c0390bff16)

Solutions

  1. Check the URLParams string for invalid percent-escapes; every '%' must be followed by two hex digits.
  2. URL-encode special characters (%, &, =) with url.QueryEscape before passing them as URLParams.
  3. If assembling from parts, use url.Values.Encode() instead of hand-built query strings.
  4. Inspect the wrapped %w error, which pinpoints the exact parse failure.

Example fix

// before
params.URLParams = "fetch_size=10&token=abc%"
// after
params.URLParams = "fetch_size=10&token=" + url.QueryEscape("abc%")
Defensive patterns

Strategy: validation

Validate before calling

func validURLParams(raw string) error {
    raw = strings.TrimSpace(raw)
    if raw == "" {
        return nil
    }
    _, err := url.ParseQuery(strings.TrimPrefix(raw, "?"))
    return err
}

Try / catch

cfg, err := parseConnectionConfig(params)
if err != nil {
    var uerr *url.Error
    if errors.As(err, &uerr) || strings.Contains(err.Error(), "parse IoTDB URL parameters") {
        return fmt.Errorf("check URLParams encoding: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Passing a URLParams string containing invalid percent-escapes (e.g. '%ZZ', a bare '%'), an unterminated escape, or query syntax rejected by net/url.

Common situations: 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.

Related errors


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/d33b53863cb83f74. Report an issue: GitHub.