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

github-merge-queue[bot] pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/texera.git


The following commit(s) were added to refs/heads/main by this push:
     new 6cfd7244a7 feat(visualization): declare the column type Sankey 
Diagram's value requires (#7344)
6cfd7244a7 is described below

commit 6cfd7244a7fc804e73dba9386751399e4a3fb0fd
Author: Kary Zheng <[email protected]>
AuthorDate: Wed Aug 5 16:38:01 2026 -0700

    feat(visualization): declare the column type Sankey Diagram's value 
requires (#7344)
    
    ### What changes were proposed in this PR?
    
    Sankey Diagram's value column is grouped by source and target and summed
    into the width of each link, so it accepts only a number, but it
    declared no `attributeTypeRules` and the form therefore offered every
    column. It now declares `integer`, `long` or `double`, the way Range
    Slider's y-axis and Radar Chart's value columns already do.
    
    Source and target stay unconstrained: they are node labels, and any type
    reads as one.
    
    ### Any related issues, documentation, discussions?
    
    Closes #7319. Same class as #7341, for a different operator.
    
    ### How was this PR tested?
    
    `SankeyDiagramOpDescSpec` passes. The behaviour the rule prevents was
    reproduced first: with a string value column the group-and-sum
    concatenates rather than adds, so a three-row frame reaches plotly as
    `link.value = ('ab', 'c')`, and plotly accepts non-numeric link values
    without raising — the diagram renders with widths that mean nothing, and
    no error is reported anywhere. The rule key was checked against the
    property it names, since a key matching no property is silently inert
    (#7210); `Value Attribute` carries a space, which the property editor
    handles the same way it already handles Range Slider's `Y-axis`.
    
    ### Was this PR authored or co-authored using generative AI tooling?
    
    Generated-by: Claude Code (Claude Opus 5)
    
    Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
---
 .../visualization/sankeyDiagram/SankeyDiagramOpDesc.scala   | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/sankeyDiagram/SankeyDiagramOpDesc.scala
 
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/sankeyDiagram/SankeyDiagramOpDesc.scala
index b686f124af..7e6689bd72 100644
--- 
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/sankeyDiagram/SankeyDiagramOpDesc.scala
+++ 
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/sankeyDiagram/SankeyDiagramOpDesc.scala
@@ -20,7 +20,7 @@
 package org.apache.texera.amber.operator.visualization.sankeyDiagram
 
 import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription}
-import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaTitle
+import com.kjetland.jackson.jsonSchema.annotations.{JsonSchemaInject, 
JsonSchemaTitle}
 import org.apache.texera.amber.core.tuple.{AttributeType, Schema}
 import 
org.apache.texera.amber.pybuilder.PythonTemplateBuilder.PythonTemplateBuilderStringContext
 import org.apache.texera.amber.pybuilder.PyStringTypes.EncodableString
@@ -32,6 +32,17 @@ import 
org.apache.texera.amber.pybuilder.PythonTemplateBuilder
 
 import javax.validation.constraints.NotNull
 
+// The value column is summed per source/target pair and becomes the width of
+// the link, so it has to be a number: strings concatenate instead of adding 
and
+// plotly accepts the result without complaint. Source and target are node
+// labels and take any type.
+@JsonSchemaInject(json = """
+{
+  "attributeTypeRules": {
+    "Value Attribute": { "enum": ["integer", "long", "double"] }
+  }
+}
+""")
 class SankeyDiagramOpDesc extends PythonOperatorDescriptor {
 
   @JsonProperty(value = "Source Attribute", required = true)

Reply via email to