{"record":{"id":"7ce9212efbec889c","repo":"benbjohnson/litestream","slug":"invalid-value-for-litestream-write-enabled-s-us","errorCode":null,"errorMessage":"invalid value for litestream_write_enabled: %s (use 0 or 1)","messagePattern":"invalid value for litestream_write_enabled: (.+?) \\(use 0 or 1\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"vfs.go","lineNumber":2525,"sourceCode":"\t\t\t\treturn &result, nil\n\t\t\t}\n\t\t\tresult := \"0\"\n\t\t\treturn &result, nil\n\t\t}\n\t\t// WRITE mode - enable or disable\n\t\tswitch strings.ToLower(*pragmaValue) {\n\t\tcase \"0\", \"false\", \"off\":\n\t\t\tif err := f.SetWriteEnabled(false); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tcase \"1\", \"true\", \"on\":\n\t\t\tif err := f.SetWriteEnabled(true); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"invalid value for litestream_write_enabled: %s (use 0 or 1)\", *pragmaValue)\n\t\t}\n\n\tdefault:\n\t\treturn nil, sqlite3vfs.NotFoundError\n\t}\n}\n\n// currentTimeString returns the current target time as a string.\nfunc (f *VFSFile) currentTimeString() string {\n\tif t := f.TargetTime(); t != nil {\n\t\treturn t.Format(time.RFC3339Nano)\n\t}\n\tif t := f.LatestLTXTime(); !t.IsZero() {\n\t\treturn t.Format(time.RFC3339Nano)\n\t}\n\treturn \"latest\" // Fallback if no LTX files loaded\n}\n","sourceCodeStart":2507,"sourceCodeEnd":2543,"githubUrl":"https://github.com/benbjohnson/litestream/blob/4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3/vfs.go#L2507-L2543","documentation":"Validation in the litestream_write_enabled PRAGMA handler: the supplied value is not one of 0/false/off or 1/true/on. Fires when a user sets the PRAGMA to an unrecognized string, since write mode is strictly boolean.","triggerScenarios":"Executing `PRAGMA litestream_write_enabled = 'yes'` (or any string other than 0/false/off/1/true/on, case-insensitive) on a connection using the Litestream VFS.","commonSituations":"Typo'd values like 'enabled', 'enable', 'yes', 'no'; locale-formatted booleans; shell quoting issues producing values with trailing whitespace beyond the ToLower-normalized set.","solutions":["Use `PRAGMA litestream_write_enabled = 1` to enable writes and `= 0` to disable","If dynamic, map your boolean to \"0\"/\"1\" before building the pragma statement","Note 'true', 'false', 'on', 'off' are also accepted, case-insensitively"],"exampleFix":"// before\nconn.Exec(\"PRAGMA litestream_write_enabled = 'yes'\")\n// after\nconn.Exec(\"PRAGMA litestream_write_enabled = 1\")","handlingStrategy":"validation","validationCode":"function writeEnabledPragmaValue(v) {\n  const s = String(v).toLowerCase();\n  if (![\"0\",\"1\",\"true\",\"false\",\"on\",\"off\"].includes(s)) throw new Error(`invalid litestream_write_enabled: ${v}`);\n  return s;\n}\n// use: `PRAGMA litestream_write_enabled = ${writeEnabledPragmaValue(flag)}`","typeGuard":null,"tryCatchPattern":"try {\n  conn.exec(`PRAGMA litestream_write_enabled = ${normalized}`);\n} catch (e) {\n  if (String(e).includes(\"invalid value for litestream_write_enabled\")) {\n    conn.exec(\"PRAGMA litestream_write_enabled = 1\");\n  } else throw e;\n}","preventionTips":["Always coerce booleans to \"0\"/\"1\" before pragma assignment","Quote and trim values carefully in shell wrappers"],"tags":["sqlite","pragma","validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3","analyzedAt":"2026-09-06T18:29:25.564Z","contentChangedAt":"2026-09-06T18:29:25.564Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}