{"record":{"id":"842d0006eb4bc938","repo":"apache/seatunnel","slug":"table-name-must-not-be-blank-when-use-regex-is","errorCode":null,"errorMessage":"`table_name` must not be blank when `use_regex` is enabled","messagePattern":"`table_name` must not be blank when `use_regex` is enabled","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/source/config/HiveTableNamePattern.java","lineNumber":36,"sourceCode":"package org.apache.seatunnel.connectors.seatunnel.hive.source.config;\n\nimport java.util.Optional;\n\nfinal class HiveTableNamePattern {\n\n    private static final String DOT_PLACEHOLDER = \"__$DOT$__\";\n\n    private final String databasePattern;\n    private final String tablePattern;\n\n    private HiveTableNamePattern(String databasePattern, String tablePattern) {\n        this.databasePattern = databasePattern;\n        this.tablePattern = tablePattern;\n    }\n\n    static HiveTableNamePattern parse(String rawPattern) {\n        if (rawPattern == null || rawPattern.trim().isEmpty()) {\n            throw new IllegalArgumentException(\n                    \"`table_name` must not be blank when `use_regex` is enabled\");\n        }\n\n        String processed = rawPattern.trim().replace(\"\\\\.\", DOT_PLACEHOLDER);\n        Optional<Integer> separatorIndex = findTableSeparator(processed);\n        if (!separatorIndex.isPresent()) {\n            throw new IllegalArgumentException(\n                    \"Hive `table_name` must use `databasePattern.tablePattern` when `use_regex` is enabled. \"\n                            + \"Invalid `table_name`: \"\n                            + processed.replace(DOT_PLACEHOLDER, \".\"));\n        }\n\n        int index = separatorIndex.get();\n        String databasePattern = processed.substring(0, index).trim();\n        String tablePattern = processed.substring(index + 1).trim();\n\n        if (databasePattern.isEmpty() || tablePattern.isEmpty()) {\n            throw new IllegalArgumentException(","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/source/config/HiveTableNamePattern.java#L18-L54","documentation":"HiveTableNamePattern.parse validates the raw `table_name` string before splitting it into database and table regex fragments. A null or whitespace-only pattern cannot yield meaningful database/table fragments, so parse rejects it immediately with this dedicated message. It duplicates the check in HiveSourceTableDiscovery as a defensive guard inside the parser itself.","triggerScenarios":"Calling HiveTableNamePattern.parse(null), parse(\"\"), or parse(\"   \") — reachable whenever the `table_name` option is missing or blank while use_regex is enabled.","commonSituations":"Same as error 1350: use_regex enabled without a table_name; whitespace-only value from a templated config; unit tests calling parse directly with null.","solutions":["Provide a non-blank `table_name` such as \"mydb.\\\\.*\"","Turn off use_regex if regex discovery is not intended","Trim the configured value in upstream config generation so an all-whitespace value becomes visible/absent rather than silently invalid"],"exampleFix":"// before\ntable_name = \"   \"\n\n// after\ntable_name = \"mydb.\\\\.*\"","handlingStrategy":"validation","validationCode":"String raw = config.getOptional(HiveSourceOptions.TABLE_NAME).orElse(\"\");\nif (raw.trim().isEmpty()) {\n    throw new IllegalArgumentException(\"table_name must not be blank when use_regex is enabled\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Trim config values at generation time","Reject whitespace-only values in config linting","Provide defaults in templates"],"tags":["hive","config","regex","blank-value"],"backgroundTag":"empty-required-field","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}