{"record":{"id":"7a121ae475fe90d0","repo":"apache/seatunnel","slug":"conditional-option-rule-for-s-with-expression","errorCode":null,"errorMessage":"conditional option rule for '%s' with expression '%s' already exists.","messagePattern":"conditional option rule for '(.+?)' with expression '(.+?)' already exists\\.","errorType":"validation","errorClass":"org.apache.seatunnel.api.configuration.util.OptionValidationException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java","lineNumber":293,"sourceCode":"                                \"conditional option '%s' must have expect values .\",\n                                conditionalOption.key()));\n            }\n\n            if (!conditionalOptionRule.hasOptions()) {\n                throw new OptionValidationException(\n                        String.format(\n                                \"conditional option rule for '%s' must have options.\",\n                                conditionalOption.key()));\n            }\n\n            Expression expression =\n                    expectValues.stream()\n                            .map(v -> Expression.of(Condition.of(conditionalOption, v)))\n                            .reduce(Expression::or)\n                            .get();\n\n            if (conditionRulesMap.containsKey(expression)) {\n                throw new OptionValidationException(\n                        String.format(\n                                \"conditional option rule for '%s' with expression '%s' already exists.\",\n                                conditionalOption.key(), expression.toString()));\n            }\n            this.conditionRulesMap.put(expression, conditionalOptionRule);\n            return this;\n        }\n\n        public <T> Builder conditionalRule(\n                @NonNull Option<T> conditionalOption,\n                @NonNull T expectValue,\n                @NonNull OptionRule conditionalOptionRule) {\n            return conditionalRule(\n                    conditionalOption,\n                    Collections.singletonList(expectValue),\n                    conditionalOptionRule);\n        }\n","sourceCodeStart":275,"sourceCodeEnd":311,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java#L275-L311","documentation":"A developer-facing duplicate guard in OptionRule.Builder.conditionalRule: a conditional rule for the same option with the same expected-value expression was already registered in this builder, so the second registration is rejected. The faulting input is the duplicate conditionalOption/expectValues pair.","triggerScenarios":"Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:293 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the duplicate conditionalRule call or merge its options into the existing rule","Use distinct expect values if different behavior per value is intended","Fix the connector's OptionRule definition code, not the user config"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}