This is an automated email from the ASF dual-hosted git repository.

nzw921rx pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new cc54bb4333 [Fix][Transform-V2] Restore archived LLM wrapper 
deserialization (#12938)
cc54bb4333 is described below

commit cc54bb433357b4cb45db9cd5d0743589c3111b79
Author: JeremyXin <[email protected]>
AuthorDate: Thu Oct 22 18:26:40 2026 +0800

    [Fix][Transform-V2] Restore archived LLM wrapper deserialization (#12938)
    
    Co-authored-by: JeremyXin <--golbal>
---
 .../jdbc/JdbcOptionRuleCompletenessTest.java       | 27 ++++++++++++++++++++--
 .../common/AbstractMultiCatalogTransform.java      |  6 ++++-
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOptionRuleCompletenessTest.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOptionRuleCompletenessTest.java
index bb8ea91d84..1f1276befa 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOptionRuleCompletenessTest.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOptionRuleCompletenessTest.java
@@ -21,6 +21,7 @@ import org.apache.seatunnel.api.configuration.Option;
 import org.apache.seatunnel.api.configuration.ReadonlyConfig;
 import org.apache.seatunnel.api.configuration.util.ConfigValidator;
 import org.apache.seatunnel.api.configuration.util.OptionRule;
+import org.apache.seatunnel.api.configuration.util.OptionValidationException;
 import org.apache.seatunnel.connectors.seatunnel.jdbc.config.JdbcCommonOptions;
 import org.apache.seatunnel.connectors.seatunnel.jdbc.config.JdbcSinkOptions;
 import org.apache.seatunnel.connectors.seatunnel.jdbc.config.JdbcSourceOptions;
@@ -40,7 +41,7 @@ import java.util.Map;
 import java.util.Set;
 
 /**
- * Every option the Jdbc connector defines must be declared in the factory 
option rule.
+ * Every applicable Jdbc option must be declared in its source or sink factory 
option rule.
  *
  * <p>{@code --check}, {@code --dry-run} and the Flink/Spark config validation 
reject any key that
  * is not declared in the rule ({@link ConfigValidator#validateUnknownKeys}), 
so a defined but
@@ -54,6 +55,10 @@ class JdbcOptionRuleCompletenessTest {
             Collections.unmodifiableSet(
                     new 
HashSet<>(Arrays.asList(JdbcCommonOptions.SCHEMA.key())));
 
+    /** Source-only options that the sink does not read. */
+    private static final Set<String> NOT_SINK_OPTIONS =
+            
Collections.singleton(JdbcCommonOptions.NUMERIC_SPECIAL_VALUE_AS_NULL.key());
+
     @Test
     void testSourceRuleDeclaresAllSourceOptions() {
         assertAllDeclared(
@@ -65,7 +70,25 @@ class JdbcOptionRuleCompletenessTest {
     void testSinkRuleDeclaresAllSinkOptions() {
         assertAllDeclared(
                 new JdbcSinkFactory().optionRule(),
-                collectOptionKeys(JdbcSinkOptions.class, 
Collections.emptySet()));
+                collectOptionKeys(JdbcSinkOptions.class, NOT_SINK_OPTIONS));
+    }
+
+    @Test
+    void testNumericSpecialValueAsNullIsSourceOnly() {
+        String key = JdbcCommonOptions.NUMERIC_SPECIAL_VALUE_AS_NULL.key();
+        ReadonlyConfig config = 
ReadonlyConfig.fromMap(Collections.singletonMap(key, true));
+
+        Assertions.assertDoesNotThrow(
+                () ->
+                        ConfigValidator.validateUnknownKeys(
+                                config, new JdbcSourceFactory().optionRule(), 
"Jdbc"));
+        OptionValidationException exception =
+                Assertions.assertThrows(
+                        OptionValidationException.class,
+                        () ->
+                                ConfigValidator.validateUnknownKeys(
+                                        config, new 
JdbcSinkFactory().optionRule(), "Jdbc"));
+        Assertions.assertTrue(exception.getMessage().contains(key));
     }
 
     private static void assertAllDeclared(OptionRule rule, Set<String> 
optionKeys) {
diff --git 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/common/AbstractMultiCatalogTransform.java
 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/common/AbstractMultiCatalogTransform.java
index aafe181023..4b3415dab7 100644
--- 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/common/AbstractMultiCatalogTransform.java
+++ 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/common/AbstractMultiCatalogTransform.java
@@ -40,13 +40,17 @@ import java.util.stream.Collectors;
  */
 public abstract class AbstractMultiCatalogTransform implements 
SeaTunnelTransform<SeaTunnelRow> {
 
+    private static final long serialVersionUID = 7090258061839605137L;
+
     protected List<CatalogTable> inputCatalogTables;
 
     protected List<CatalogTable> outputCatalogTables;
 
     protected Map<String, SeaTunnelTransform<SeaTunnelRow>> transformMap;
 
-    protected final ReadonlyConfig transformLevelConfig;
+    // Used only while constructing the per-table transforms; the constructed 
transforms are
+    // serialized.
+    protected final transient ReadonlyConfig transformLevelConfig;
 
     public AbstractMultiCatalogTransform(
             List<CatalogTable> inputCatalogTables, ReadonlyConfig config) {

Reply via email to