{"record":{"id":"5c86d69b322107c3","repo":"temporalio/temporal","slug":"invalid-value-for-s-s-5c86d6","errorCode":null,"errorMessage":"invalid value for %s: %s","messagePattern":"invalid value for (.+?): (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/archiver/s3store/query_parser.go","lineNumber":185,"sourceCode":"\t\tparsedQuery.startTime = &timestamp\n\tcase SearchPrecision:\n\t\tval, err := sqlquery.ExtractStringValue(valStr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif op != \"=\" {\n\t\t\treturn fmt.Errorf(\"only operation = is support for %s\", SearchPrecision)\n\t\t}\n\t\tif parsedQuery.searchPrecision != nil && *parsedQuery.searchPrecision != val {\n\t\t\treturn fmt.Errorf(\"only one expression is allowed for %s\", SearchPrecision)\n\t\t}\n\t\tswitch val {\n\t\tcase PrecisionDay:\n\t\tcase PrecisionHour:\n\t\tcase PrecisionMinute:\n\t\tcase PrecisionSecond:\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"invalid value for %s: %s\", SearchPrecision, val)\n\t\t}\n\t\tparsedQuery.searchPrecision = new(val)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown filter name: %s\", colNameStr)\n\t}\n\n\treturn nil\n}\n","sourceCodeStart":167,"sourceCodeEnd":195,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/common/archiver/s3store/query_parser.go#L167-L195","documentation":"The SearchPrecision value must be exactly one of the constants Day, Hour, Minute, or Second. Any other string (wrong case, plural, empty) fails the switch in convertComparisonExpr and returns this error.","triggerScenarios":"Parsing `SearchPrecision = \"day\"` (lowercase), `SearchPrecision = \"Daily\"`, or any misspelled precision value.","commonSituations":"Case-sensitivity mistakes; UI passing user-friendly labels like 'per hour'; localization or capitalization drift between services composing the query.","solutions":["Use the exact capitalized constants: Day, Hour, Minute, Second","Normalize/validate user input to one of the four constants before building the query","Reference the exported constants (s3store.PrecisionDay etc.) instead of string literals in Go code"],"exampleFix":"// before\n`SearchPrecision = \"day\"`\n// after\n`SearchPrecision = \"Day\"` // or fmt.Sprintf(\"SearchPrecision = %q\", s3store.PrecisionDay)","handlingStrategy":"validation","validationCode":"var validPrecisions = map[string]bool{\"Day\": true, \"Hour\": true, \"Minute\": true, \"Second\": true}\nfunc validatePrecision(q string) error {\n    for _, p := range []string{\"Day\", \"Hour\", \"Minute\", \"Second\"} {\n        if strings.Contains(q, \"SearchPrecision = \\\"\"+p+\"\\\"\") { return nil }\n    }\n    return fmt.Errorf(\"SearchPrecision must be Day, Hour, Minute, or Second\")\n}","typeGuard":"func isValidPrecision(s string) bool {\n    switch s {\n    case \"Day\", \"Hour\", \"Minute\", \"Second\":\n        return true\n    }\n    return false\n}","tryCatchPattern":"parsed, err := parser.Parse(q)\nif err != nil {\n    if strings.Contains(err.Error(), \"invalid value for SearchPrecision\") {\n        return nil, fmt.Errorf(\"use one of Day, Hour, Minute, Second (case-sensitive): %w\", err)\n    }\n    return err\n}","preventionTips":["Use the exported constants PrecisionDay/PrecisionHour/PrecisionMinute/PrecisionSecond","Normalize user input case before building the query","Unit-test generated query strings against the parser"],"tags":["go","archiver","s3store","query-parser","search-precision","invalid-value"],"backgroundTag":"invalid-enum-value","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}