bytebase/bytebase · error

invalid folder value %q

Error message

invalid folder value %q

What it means

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.

Source

Thrown at backend/store/saved_query.go:774

			if !ok {
				return nil, errors.Errorf("invalid shared value %v, expect true or false", value)
			}
			granted := qb.Q().Space("FALSE")
			for _, principal := range accessMembers {
				probe, err := bindingProbe(principal)
				if err != nil {
					return nil, err
				}
				granted.Or("saved_query.bindings @> ?", probe)
			}
			if shared {
				return qb.Q().Space("(saved_query.creator <> ? AND (?))", caller, granted), nil
			}
			return qb.Q().Space("(NOT (saved_query.creator <> ? AND (?)))", caller, granted), nil
		case "folder":
			folder, ok := value.(string)
			if !ok {
				return nil, errors.Errorf("invalid folder value %q", value)
			}
			folder, err := NormalizeSavedQueryFolder(folder)
			if err != nil {
				return nil, err
			}
			return qb.Q().Space("saved_query.folder = ?", folder), nil
		default:
			return nil, errors.Errorf("unsupport variable %q", variable)
		}
	}

	getFilter = func(expr celast.Expr) (*qb.Query, error) {
		q := qb.Q()
		switch expr.Kind() {
		case celast.CallKind:
			functionName := expr.AsCall().FunctionName()
			switch functionName {
			case celoperators.LogicalOr:

View on GitHub (pinned to 1870550677)

Solutions

  1. Quote the folder value: `folder == "my-folder"`
  2. Ensure the folder string is in normalized form (see NormalizeSavedQueryFolder) or at least a valid folder name
  3. If filtering by numeric IDs, confirm the folder field is actually identified by name strings in this API, not numeric keys

Example fix

// before
filter = "folder == 7"
// after
filter = "folder == \"team-folder\""
Defensive patterns

Strategy: validation

Validate before calling

const folder = 'team-folder';
if (typeof folder !== 'string' || folder === '') {
  throw new Error('folder filter must be a non-empty string');
}
const filter = `folder == "${folder}"`;

Type guard

function isNonEmptyString(v) { return typeof v === 'string' && v.length > 0; }

Prevention

When it happens

Trigger: A filter like `folder == 123`, `folder == true`, or `folder == someVar` sent with the saved query list request.

Common situations: 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.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of bytebase/bytebase@1870550677 (2026-09-06). Data as JSON: /api/errors/2e8484f3b479064b. Report an issue: GitHub.