{"record":{"id":"39dbba0fbbba5484","repo":"databendlabs/databend","slug":"input-path-is-not-a-valid-glob-err","errorCode":null,"errorMessage":"input path is not a valid glob: {err:?}","messagePattern":"input path is not a valid glob: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/query/sql/src/planner/binder/location.rs","lineNumber":615,"sourceCode":"    let sp = match protocol {\n        Scheme::Azblob => parse_azure_params(l, root)?,\n        Scheme::Gcs => parse_gcs_params(l, root)?,\n        #[cfg(feature = \"storage-hdfs\")]\n        Scheme::Hdfs => parse_hdfs_params(l, root)?,\n        Scheme::Ipfs => parse_ipfs_params(l, root)?,\n        Scheme::S3 => parse_s3_params(l, root)?,\n        Scheme::Obs => parse_obs_params(l, root)?,\n        Scheme::Oss => parse_oss_params(l, root)?,\n        Scheme::Cos => parse_cos_params(l, root)?,\n        Scheme::Http => {\n            // Make sure path has been percent decoded before parse pattern.\n            let cfg = StorageHttpConfig {\n                endpoint_url: format!(\"{}://{}\", l.protocol, l.name),\n                paths: globiter::Pattern::parse(&l.path)\n                    .map_err(|err| {\n                        Error::new(\n                            ErrorKind::InvalidInput,\n                            anyhow!(\"input path is not a valid glob: {err:?}\"),\n                        )\n                    })?\n                    .iter()\n                    .collect(),\n                network_config: None,\n            };\n\n            // HTTP is special that we don't support dir, always return / instead.\n            check_storage_params_endpoints(&StorageParams::Http(cfg.clone()))\n                .await\n                .map_err(|err| Error::new(ErrorKind::InvalidInput, err.to_string()))?;\n            return Ok((StorageParams::Http(cfg), \"/\".to_string()));\n        }\n        Scheme::Fs => {\n            if root == \"/\" && path == STDIN_FD {\n                StorageParams::Memory\n            } else {\n                let cfg = StorageFsConfig { root };","sourceCodeStart":597,"sourceCodeEnd":633,"githubUrl":"https://github.com/databendlabs/databend/blob/288d84d76e20a2f8f7173bda9691eb6ece301aa9/src/query/sql/src/planner/binder/location.rs#L597-L633","documentation":"This error is raised when parsing the `path` portion of a storage LOCATION URI as a glob pattern fails (`globiter::Pattern::parse`). Databend uses the parsed glob to enumerate matching object keys, so an unparseable pattern makes the location unusable. The underlying glob parse error is attached via `anyhow!` with debug formatting.","triggerScenarios":"Calling a stage/table-location binder with a URI whose path component contains malformed glob syntax — e.g. unterminated `[`, unmatched `*`/`**` misuse, or invalid character-class ranges — via `StorageHttpConfig` construction from a parsed location.","commonSituations":"Typos in COPY INTO / external location strings like `s3://bucket/data/[tmp]/x.csv`, brackets used literally without escaping, or paths copied from templates with unresolved placeholders (`{date}` with bad syntax).","solutions":["Fix the glob syntax in the location path: balance brackets `[...]`, validate ranges like `[a-z]`, and escape literal `[`/`*` characters if they are meant literally.","Test the path with a glob library (or the globiter crate) locally before putting it into the DDL statement.","If a literal path (no globbing) is intended, ensure it contains no glob metacharacters at all.","Read the debug-formatted `err` in the message; it names the exact offset/reason the pattern failed."],"exampleFix":"// before\n'azblob://container/reports[2024/file.csv'\n// after\n'azblob://container/reports\\\\[2024\\\\]/file.csv'  (escaped literals) or 'azblob://container/reports/file.csv'","handlingStrategy":"validation","validationCode":"fn validate_glob(path: &str) -> Result<(), String> {\n    globiter::Pattern::parse(path)\n        .map(|_| ())\n        .map_err(|e| format!(\"invalid glob {:?}: {:?}\", path, e))\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Escape literal glob metacharacters ([, ], *, ?) in paths","Lint location strings in CI before deploying DDL","Test glob patterns locally with the same globiter crate version"],"tags":["storage","glob","validation"],"backgroundTag":"invalid-regex-pattern","analyzedSha":"288d84d76e20a2f8f7173bda9691eb6ece301aa9","analyzedAt":"2026-09-11T11:29:36.208Z","contentChangedAt":"2026-09-11T11:29:36.208Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}