Skip to content

Four attributeTypeRules declare keys that match no property, so the rules silently do nothing #7210

Description

@kz930

What happened?

attributeTypeRules maps a property name to the column types that property accepts. The operator form looks each key up as a property — findAttributeType(propertyName) in operator-property-edit-frame.component.ts returns undefined when mapSource.properties[propertyName] is absent, and checkConstraint then returns immediately. So a key that names no property is not an error: the rule is simply skipped, with no warning anywhere.

Comparing each operator's generated schema against the property names declared in that same schema:

Operator attributeTypeRules keys Properties actually declared
LineChartOpDesc (in LineConfig) yValue, xValue y, x, mode, name, color
ScatterMatrixChartOpDesc value Selected Attributes, Color
Scatter3dChartOpDesc title x, y, z
FunnelPlotOpDesc title x, y, color

None of the four keys matches a declared property, so all four rules are dead:

  • LineConfig used the Scala field names rather than the @JsonProperty names, so a line's x and y axes accept string columns despite the declared ["integer","long","double"]. BandConfig, which extends it, inherits the same dead rule.
  • ScatterMatrixChartOpDesc names value where the property is Selected Attributes, so the matrix dimensions are unconstrained.
  • Scatter3dChartOpDesc and FunnelPlotOpDesc constrain title, which neither operator has. Their value is also the bare string "string" rather than an object such as {"enum": [...]}, so even under a correct key constraint.enum / const / allOf would all be undefined and the check would still no-op.

Expected: a declared type constraint applies, or fails the build if it cannot.

Worth adding alongside the four fixes: a check when the schema is generated that every attributeTypeRules key names a declared property. These four went unnoticed because nothing reports them — the same mistake will otherwise recur.

How to reproduce?

  1. Drop a Line Chart onto the canvas and connect a source carrying both numeric and string columns.
  2. Set a line's Value X or Value Y to a string column — it is accepted, and no type warning appears.
  3. Compare with an operator whose rule key is correct, e.g. ECDF Plot's Value Column, which does warn.

Version/Branch

1.3.0-incubating-SNAPSHOT (main)

Relevant log output

(no error is produced — the rule is skipped silently)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions