{"record":{"id":"203d8dd6cc3789f1","repo":"t8y2/dbx","slug":"tdengine-query-returned-an-empty-value","errorCode":null,"errorMessage":"TDengine query returned an empty value","messagePattern":"TDengine query returned an empty value","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/tdengine/src/driver.rs","lineNumber":775,"sourceCode":"}\n\nasync fn query_scalar_string(\n    connection: &Taos,\n    sql: &str,\n    token: &CancellationToken,\n    timeout_secs: u64,\n) -> Result<String> {\n    let mut result = cancellable(token, timeout_secs, connection.query(sql)).await?;\n    let timezone = result.timezone();\n    loop {\n        let block = cancellable(token, timeout_secs, poll_fn(|context| result.fetch_raw_block(context))).await?;\n        let Some(block) = block else {\n            bail!(\"TDengine query returned no rows\");\n        };\n        if block.nrows() == 0 || block.ncols() == 0 {\n            continue;\n        }\n        let value = block.get_ref(0, 0).ok_or_else(|| anyhow!(\"TDengine query returned an empty value\"))?;\n        return match borrowed_value_to_json(value, preferred_timezone(timezone, block.timezone(), None)) {\n            Value::String(value) => Ok(value),\n            value => Ok(value.to_string()),\n        };\n    }\n}\n\nfn preferred_timezone(\n    query_timezone: Option<Tz>,\n    block_timezone: Option<Tz>,\n    session_timezone: Option<Tz>,\n) -> Option<Tz> {\n    query_timezone.or(block_timezone).or(session_timezone)\n}\n\nfn parse_server_timezone(value: &str) -> Option<Tz> {\n    value.split_whitespace().next()?.parse().ok()\n}","sourceCodeStart":757,"sourceCodeEnd":793,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/tdengine/src/driver.rs#L757-L793","documentation":"Bailed by query_scalar_string (TDengine driver) when a scalar query expected to return exactly one string value produced an empty/unusable result — the fetched block carried no convertible text (distinct from the 'returned no rows' case where no block arrived at all). The caller (connect or validate_connection) relies on that scalar, so the operation aborts.","triggerScenarios":"Thrown at agents/drivers/tdengine/src/driver.rs:775 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify server_version()/timezone() queries return values by running them in the TDengine CLI","Check for a server version the WebSocket connector cannot parse","Reconnect and retry; a wedged taosAdapter can return empty results"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}