{"record":{"id":"449473a54ce5730a","repo":"apache/beam","slug":"unsupported-database-adapter-type-self-name","errorCode":null,"errorMessage":"Unsupported database adapter type: {self.name}","messagePattern":"Unsupported database adapter type: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/transforms/enrichment_handlers/cloudsql.py","lineNumber":110,"sourceCode":"class DatabaseTypeAdapter(Enum):\n  POSTGRESQL = \"pg8000\"\n  MYSQL = \"pymysql\"\n  SQLSERVER = \"pytds\"\n\n  def to_sqlalchemy_dialect(self):\n    \"\"\"Map the adapter type to its corresponding SQLAlchemy dialect.\n\n    Returns:\n        str: SQLAlchemy dialect string.\n    \"\"\"\n    if self == DatabaseTypeAdapter.POSTGRESQL:\n      return f\"postgresql+{self.value}\"\n    elif self == DatabaseTypeAdapter.MYSQL:\n      return f\"mysql+{self.value}\"\n    elif self == DatabaseTypeAdapter.SQLSERVER:\n      return f\"mssql+{self.value}\"\n    else:\n      raise ValueError(f\"Unsupported database adapter type: {self.name}\")\n\n\nclass ConnectionConfig(ABC):\n  @abstractmethod\n  def get_connector_handler(self) -> Callable[[], DBAPIConnection]:\n    pass\n\n  @abstractmethod\n  def get_db_url(self) -> str:\n    pass\n\n\n@dataclass\nclass CloudSQLConnectionConfig(ConnectionConfig):\n  \"\"\"Connects to Google Cloud SQL using Cloud SQL Python Connector.\n\n    Args:\n        db_adapter: The database adapter type (PostgreSQL, MySQL, SQL Server).","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/transforms/enrichment_handlers/cloudsql.py#L92-L128","documentation":"DatabaseTypeAdapter.to_sqlalchemy_dialect maps the adapter enum (POSTGRESQL, MYSQL, SQLSERVER) to a sqlalchemy dialect prefix; an unrecognized enum member falls through and raises ValueError. This happens only if a new enum value was added without a corresponding dialect mapping.","triggerScenarios":"Calling to_sqlalchemy_dialect (directly or via start_sql_db_container) on a DatabaseTypeAdapter member not covered by the if/elif chain.","commonSituations":"Extending the enum with a new adapter (e.g. Oracle) in a fork or newer Beam version without updating the mapping; monkeypatching/constructing a fake enum member in tests.","solutions":["Use one of the supported values: POSTGRESQL, MYSQL, or SQLSERVER","Add the new member to to_sqlalchemy_dialect's mapping if you control the code","Check installed apache-beam version for enum compatibility with your config"],"exampleFix":"// before\nDB_TYPE = DatabaseTypeAdapter.ORACLE  # unmapped member\n// after\nDB_TYPE = DatabaseTypeAdapter.POSTGRESQL  # supported adapter","handlingStrategy":"validation","validationCode":"supported = {DatabaseTypeAdapter.POSTGRESQL, DatabaseTypeAdapter.MYSQL, DatabaseTypeAdapter.SQLSERVER}\nif adapter not in supported:\n    raise ValueError(f'{adapter} not supported; use one of {supported}')","typeGuard":null,"tryCatchPattern":"try:\n    dialect = adapter.to_sqlalchemy_dialect()\nexcept ValueError as e:\n    log.error('falling back to postgresql: %s', e)\n    dialect = DatabaseTypeAdapter.POSTGRESQL.to_sqlalchemy_dialect()","preventionTips":["Only use enum members documented as supported","If extending the enum, add the dialect mapping and a test in the same change","Pin apache-beam versions when configs reference enum members"],"tags":["python","apache-beam","cloudsql","enum","sqlalchemy"],"backgroundTag":"unsupported-enum-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}