{"record":{"id":"2e8484f3b479064b","repo":"bytebase/bytebase","slug":"invalid-folder-value-q","errorCode":null,"errorMessage":"invalid folder value %q","messagePattern":"invalid folder value %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/store/saved_query.go","lineNumber":774,"sourceCode":"\t\t\tif !ok {\n\t\t\t\treturn nil, errors.Errorf(\"invalid shared value %v, expect true or false\", value)\n\t\t\t}\n\t\t\tgranted := qb.Q().Space(\"FALSE\")\n\t\t\tfor _, principal := range accessMembers {\n\t\t\t\tprobe, err := bindingProbe(principal)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tgranted.Or(\"saved_query.bindings @> ?\", probe)\n\t\t\t}\n\t\t\tif shared {\n\t\t\t\treturn qb.Q().Space(\"(saved_query.creator <> ? AND (?))\", caller, granted), nil\n\t\t\t}\n\t\t\treturn qb.Q().Space(\"(NOT (saved_query.creator <> ? AND (?)))\", caller, granted), nil\n\t\tcase \"folder\":\n\t\t\tfolder, ok := value.(string)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.Errorf(\"invalid folder value %q\", value)\n\t\t\t}\n\t\t\tfolder, err := NormalizeSavedQueryFolder(folder)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn qb.Q().Space(\"saved_query.folder = ?\", folder), nil\n\t\tdefault:\n\t\t\treturn nil, errors.Errorf(\"unsupport variable %q\", variable)\n\t\t}\n\t}\n\n\tgetFilter = func(expr celast.Expr) (*qb.Query, error) {\n\t\tq := qb.Q()\n\t\tswitch expr.Kind() {\n\t\tcase celast.CallKind:\n\t\t\tfunctionName := expr.AsCall().FunctionName()\n\t\t\tswitch functionName {\n\t\t\tcase celoperators.LogicalOr:","sourceCodeStart":756,"sourceCodeEnd":792,"githubUrl":"https://github.com/bytebase/bytebase/blob/1870550677fe08f0d2a78c07acd27541464eb945/backend/store/saved_query.go#L756-L792","documentation":"When the saved-query CEL filter contains `folder == ...`, the parser requires the value to be a CEL string because it is normalized (NormalizeSavedQueryFolder) and matched against `saved_query.folder`. A non-string literal throws this error before normalization is attempted.","triggerScenarios":"A filter like `folder == 123`, `folder == true`, or `folder == someVar` sent with the saved query list request.","commonSituations":"Filter strings generated with numeric folder IDs instead of folder name strings; missing quotes in hand-written CEL; templating code that does not quote string values.","solutions":["Quote the folder value: `folder == \"my-folder\"`","Ensure the folder string is in normalized form (see NormalizeSavedQueryFolder) or at least a valid folder name","If filtering by numeric IDs, confirm the folder field is actually identified by name strings in this API, not numeric keys"],"exampleFix":"// before\nfilter = \"folder == 7\"\n// after\nfilter = \"folder == \\\"team-folder\\\"\"","handlingStrategy":"validation","validationCode":"const folder = 'team-folder';\nif (typeof folder !== 'string' || folder === '') {\n  throw new Error('folder filter must be a non-empty string');\n}\nconst filter = `folder == \"${folder}\"`;","typeGuard":"function isNonEmptyString(v) { return typeof v === 'string' && v.length > 0; }","tryCatchPattern":null,"preventionTips":["Quote the folder name string in the CEL expression","Use folder names as the API identifies them, not numeric IDs","Escape quotes/backslashes in folder names derived from user input"],"tags":["cel","filter","type-mismatch","saved-queries"],"backgroundTag":"invalid-argument-value","analyzedSha":"1870550677fe08f0d2a78c07acd27541464eb945","analyzedAt":"2026-09-06T21:16:13.665Z","contentChangedAt":"2026-09-06T21:16:13.665Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}