t8y2/dbx · error

invalid TDengine database name: {value}

Error message

invalid TDengine database name: {value}

What it means

Thrown by validate_database_name in the TDengine driver when a database name fails its identifier rules: it must start with '_' or an ASCII letter and contain only allowed identifier characters. Firing during use_database/effective_database, it rejects malformed database names before any SQL is composed, preventing injection through the db name.

Source

Thrown at agents/drivers/tdengine/src/driver.rs:833

fn effective_database<'a>(requested: &'a str, current: &'a str) -> Result<&'a str> {
    let requested = requested.trim();
    if !requested.is_empty() {
        return validate_database_name(requested);
    }
    let current = current.trim();
    if current.is_empty() {
        bail!("TDengine database is required");
    }
    validate_database_name(current)
}

fn validate_database_name(value: &str) -> Result<&str> {
    let value = value.trim();
    let mut chars = value.chars();
    let valid_start = chars.next().is_some_and(|char| char == '_' || char.is_ascii_alphabetic());
    if !valid_start || !chars.all(|char| char == '_' || char.is_ascii_alphanumeric()) {
        bail!("invalid TDengine database name: {value}");
    }
    Ok(value)
}

fn table_from_show_row(row: Vec<Value>, table_type: &str, includes_stable_name: bool) -> Option<TableInfo> {
    let name = row.first().and_then(json_text)?.to_string();
    let parent_name = includes_stable_name
        .then(|| row.get(3).and_then(json_text).map(str::trim).filter(|value| !value.is_empty()).map(str::to_string))
        .flatten();
    Some(TableInfo { name, table_type: table_type.to_string(), comment: None, parent_schema: None, parent_name })
}

fn parse_describe_columns(rows: Vec<Vec<Value>>) -> Vec<ColumnInfo> {
    rows.into_iter()
        .enumerate()
        .filter_map(|(index, row)| {
            let name = row.first().and_then(json_text)?.to_string();
            let data_type = row.get(1).and_then(json_text).unwrap_or_default().to_string();

View on GitHub (pinned to c0390bff16)

Solutions

  1. Use a database name starting with a letter or underscore, containing only letters, digits, and underscores
  2. Remove quotes, spaces, dashes, or special characters from the database parameter
  3. Create the database with a compliant name if the current one is invalid
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at agents/drivers/tdengine/src/driver.rs:833 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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