{"record":{"id":"616a896a711db122","repo":"cube-js/cube","slug":"expected-filter-but-found","errorCode":null,"errorMessage":"Expected filter but found {:?}","messagePattern":"Expected filter but found (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"rust/cubesql/cubesql/src/compile/rewrite/converter.rs","lineNumber":1948,"sourceCode":"                                        } else {\n                                            None\n                                        },\n                                        or: None,\n                                        and: None,\n                                    });\n                                }\n                            }\n                            LogicalPlanLanguage::SegmentMember(params) => {\n                                let member =\n                                    match_data_node!(node_by_id, params[0], SegmentMemberMember);\n                                segments_result.push(member);\n                            }\n                            LogicalPlanLanguage::ChangeUserMember(params) => {\n                                let member =\n                                    match_data_node!(node_by_id, params[0], ChangeUserMemberValue);\n                                change_user_result.push(member);\n                            }\n                            x => panic!(\"Expected filter but found {:?}\", x),\n                        }\n                    }\n\n                    if change_user_result.len() > 1 {\n                        return Err(CubeError::rewrite(\n                            \"Unable to use multiple __user in one Cube query\".to_string(),\n                        ));\n                    }\n\n                    Ok((result, segments_result, change_user_result.pop()))\n                }\n\n                let (filters, segments, change_user) =\n                    to_filter(&mut query_time_dimensions, filters, node_by_id, false)?;\n\n                query.filters = if filters.len() > 0 {\n                    Some(filters)\n                } else {","sourceCodeStart":1930,"sourceCodeEnd":1966,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/rust/cubesql/cubesql/src/compile/rewrite/converter.rs#L1930-L1966","documentation":"While collecting __user (ChangeUserMember) filter constraints, to_filter expects every sibling IR node in the filter group to be a filter-language node. Any other node type in that position panics with 'Expected filter but found'.","triggerScenarios":"A filter sub-tree mixing a __user reference (ChangeUserMember) with an IR node that isn't one of the expected filter languages — e.g. a malformed WHERE clause referencing __user alongside an unrecognized expression node.","commonSituations":"Security-context filters using __user composed with unsupported expression shapes; hand-written SQL using __user incorrectly; bugs in views/permissions-generated filters.","solutions":["Use only one __user comparison per query and keep it in a simple supported predicate","Move complex expressions outside the __user filter or pre-compute them","Upgrade CubeSQL / report the IR node shown in the message"],"exampleFix":"// before\nWHERE __user = id OR __user = owner_id\n// after\nWHERE __user = id","handlingStrategy":"validation","validationCode":"// Ensure at most one __user predicate and only simple comparisons\nfn validate_user_filter(where_clause: &str) -> Result<(), String> {\n    let count = where_clause.match_indices(\"__user\").count();\n    if count > 1 { return Err(\"only one __user predicate allowed\".into()); }\n    if count == 1 && (where_clause.contains(\"__user OR\") || where_clause.contains(\"OR __user\")) {\n        return Err(\"__user cannot be combined with OR\".into());\n    }\n    Ok(())\n}","typeGuard":null,"tryCatchPattern":"match run_query(q) {\n    Err(e) if e.message().contains(\"Expected filter but found\") => respond_bad_request(\"invalid __user filter structure\"),\n    other => other,\n}","preventionTips":["Use exactly one __user comparison per query","Keep __user predicates as simple equality/member checks in WHERE or security context","Let permission rules generate __user filters rather than hand-writing them"],"tags":["rust","panic","user-context-filter","sql-compilation"],"backgroundTag":"unsupported-filter-operator","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}