{"record":{"id":"36cc1a325e6195f0","repo":"cube-js/cube","slug":"no-time-dimension-provided","errorCode":null,"errorMessage":"No time dimension provided.","messagePattern":"No time dimension provided\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"rust/cube/cubeorchestrator/src/query_result_transform.rs","lineNumber":236,"sourceCode":"                .unwrap_or_else(|_| s.clone());\n            DBResponsePrimitive::String(formatted)\n        }\n        other => other,\n    }\n}\n\n/// Parse date range value from time dimension.\npub fn get_date_range_value(\n    time_dimensions: Option<&Vec<QueryTimeDimension>>,\n) -> Result<DBResponsePrimitive> {\n    let time_dimensions = match time_dimensions {\n        Some(time_dimensions) => time_dimensions,\n        None => bail!(\"QueryTimeDimension should be specified for the compare date range query.\"),\n    };\n\n    let dim = match time_dimensions.first() {\n        Some(dim) => dim,\n        None => bail!(\"No time dimension provided.\"),\n    };\n\n    let date_range: &Vec<String> = match &dim.date_range {\n        Some(date_range) => date_range,\n        None => bail!(\"Inconsistent QueryTimeDimension configuration: dateRange required.\"),\n    };\n\n    if date_range.len() == 1 {\n        bail!(\n            \"Inconsistent dateRange configuration for the compare date range query: {}\",\n            date_range[0]\n        );\n    }\n\n    Ok(DBResponsePrimitive::String(\n        date_range.join(COMPARE_DATE_RANGE_SEPARATOR),\n    ))\n}","sourceCodeStart":218,"sourceCodeEnd":254,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/rust/cube/cubeorchestrator/src/query_result_transform.rs#L218-L254","documentation":"get_date_range_value requires at least one QueryTimeDimension to extract a date range for compare-date-range queries. When the provided vector is present but empty (no first element), this error is raised — distinct from 678, where the whole parameter was None. The compare logic reads time_dimensions.first() and needs a concrete dimension to pull dateRange from.","triggerScenarios":"Passing Some(vec![]) (an empty timeDimensions array) to get_date_range_value — e.g. a compareDateRange query whose timeDimensions list serializes as empty, exercised by test_get_date_range_value_empty_time_dimensions.","commonSituations":"Client filters time dimensions down to nothing before sending; SDK emits an empty array instead of omitting the field; generated queries where the user unset all time dimensions but left compareDateRange enabled.","solutions":["Include at least one timeDimensions entry with dimension and dateRange when using compareDateRange","If no time dimension applies, remove the compareDateRange option from the query","Check client-side transforms/filters that may empty the timeDimensions array"],"exampleFix":"// before: empty time dimensions\n{\"timeDimensions\": [], \"compareDateRange\": {\"compares\": [...]}}\n\n// after\n{\"timeDimensions\": [{\"dimension\": \"Orders.createdAt\", \"dateRange\": [\"2024-01-01\", \"2024-03-31\"]}], \"compareDateRange\": {\"compares\": [...]}}","handlingStrategy":"validation","validationCode":"fn has_time_dimensions(q: &Query) -> bool {\n    q.time_dimensions.as_ref().map_or(false, |t| !t.is_empty())\n}\n// empty arrays must also be rejected, not just None\nassert!(has_time_dimensions(&query), \"timeDimensions must contain at least one entry\");","typeGuard":"fn first_time_dimension(q: &Query) -> Option<&QueryTimeDimension> {\n    q.time_dimensions.as_ref().and_then(|t| t.first())\n}","tryCatchPattern":"match get_date_range_value(query.time_dimensions.as_ref()) {\n    Err(e) if e.to_string().contains(\"No time dimension provided\") => {\n        eprintln!(\"timeDimensions was empty — supply a dimension with dateRange\");\n    }\n    other => other?,\n}","preventionTips":["Omit compareDateRange rather than sending an empty timeDimensions array","Guard client code that filters time dimensions so it cannot reduce the list to zero while compare is enabled","Validate that serialized queries keep at least one timeDimensions entry for compare queries"],"tags":["query-orchestrator","compare-date-range","missing-parameter","rust"],"backgroundTag":"missing-query-time-dimension","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}