{"record":{"id":"b0b799234c3e80c0","repo":"databendlabs/databend","slug":"input-connection-is-not-a-valid-protocol-err","errorCode":null,"errorMessage":"input connection is not a valid protocol: {err:?}","messagePattern":"input connection is not a valid protocol: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/query/sql/src/planner/binder/location.rs","lineNumber":565,"sourceCode":"        return Err(Error::new(\n            ErrorKind::InvalidInput,\n            anyhow!(\"can not use connection_name when create connection\"),\n        ));\n    }\n\n    parse_uri_location_resolved(l, parts).await\n}\n\npub fn apply_uri_connection(\n    l: &mut UriLocation,\n    name: &str,\n    conn: UserDefinedConnection,\n) -> Result<()> {\n    let protocol = l.protocol.parse::<Scheme>()?;\n    let proto = conn.storage_type.parse::<Scheme>().map_err(|err| {\n        Error::new(\n            ErrorKind::InvalidInput,\n            anyhow!(\"input connection is not a valid protocol: {err:?}\"),\n        )\n    })?;\n    if proto != protocol {\n        return Err(Error::new(\n            ErrorKind::InvalidInput,\n            anyhow!(\n                \"protocol from connection_name={name} ({proto}) not match with uri protocol ({protocol}).\"\n            ),\n        ));\n    }\n    l.connection.check().map_err(|_| {\n        Error::new(\n            ErrorKind::InvalidInput,\n            anyhow!(\"connection_name can not be used with other connection options\"),\n        )\n    })?;\n    l.connection = Connection::new(conn.storage_params);\n","sourceCodeStart":547,"sourceCodeEnd":583,"githubUrl":"https://github.com/databendlabs/databend/blob/288d84d76e20a2f8f7173bda9691eb6ece301aa9/src/query/sql/src/planner/binder/location.rs#L547-L583","documentation":"apply_uri_connection compares the storage_type of the referenced named connection with the protocol parsed from the URI. If the connection's storage_type cannot be parsed as an OpenDAL Scheme, this InvalidInput error is thrown, meaning the stored connection has an unrecognized or invalid storage type.","triggerScenarios":"Using CONNECTION_NAME to apply a stored connection whose storage_type string is not a valid scheme (corrupted or legacy meta record, hand-edited connection), during resolve_uri_connection.","commonSituations":"Connections created by older versions with scheme strings no longer parseable; corrupted meta-service records; typos in storage_type when a connection was created via API.","solutions":["Recreate the named connection with a valid STORAGE_TYPE (e.g. 's3','gcs','oss','azblob')","Inspect the connection definition (SHOW CONNECTIONS / meta inspect) and fix storage_type","Upgrade/repair legacy connections whose storage_type strings no longer parse"],"exampleFix":"-- before (invalid storage type)\nCREATE CONNECTION c STORAGE_TYPE='s3legacy' ...;\n-- after\nCREATE CONNECTION c STORAGE_TYPE='s3' ENDPOINT_URL='https://s3.amazonaws.com';","handlingStrategy":"validation","validationCode":"let stored = get_connection(name)?.storage_type;\nif opendal::Scheme::from_str(&stored).is_err() {\n    return Err(format!(\"connection {name} has invalid storage_type {stored:?}; recreate it\"));\n}","typeGuard":null,"tryCatchPattern":"match err.kind() { ErrorKind::InvalidInput if msg.contains(\"not a valid protocol\") => /* recreate/repair the named connection */, _ => return Err(err) }","preventionTips":["Create connections only with valid STORAGE_TYPE values","Audit old connections after version upgrades","Validate storage_type against the Scheme enum when provisioning"],"tags":["connection","scheme","storage","validation"],"backgroundTag":"invalid-enum-value","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"}