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?
- Drop a Line Chart onto the canvas and connect a source carrying both numeric and string columns.
- Set a line's Value X or Value Y to a string column — it is accepted, and no type warning appears.
- 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)
What happened?
attributeTypeRulesmaps a property name to the column types that property accepts. The operator form looks each key up as a property —findAttributeType(propertyName)inoperator-property-edit-frame.component.tsreturnsundefinedwhenmapSource.properties[propertyName]is absent, andcheckConstraintthen 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:
attributeTypeRuleskeysLineChartOpDesc(inLineConfig)yValue,xValuey,x,mode,name,colorScatterMatrixChartOpDescvalueSelected Attributes,ColorScatter3dChartOpDesctitlex,y,zFunnelPlotOpDesctitlex,y,colorNone of the four keys matches a declared property, so all four rules are dead:
LineConfigused the Scala field names rather than the@JsonPropertynames, 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.ScatterMatrixChartOpDescnamesvaluewhere the property isSelected Attributes, so the matrix dimensions are unconstrained.Scatter3dChartOpDescandFunnelPlotOpDescconstraintitle, which neither operator has. Their value is also the bare string"string"rather than an object such as{"enum": [...]}, so even under a correct keyconstraint.enum/const/allOfwould 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
attributeTypeRuleskey names a declared property. These four went unnoticed because nothing reports them — the same mistake will otherwise recur.How to reproduce?
Version/Branch
1.3.0-incubating-SNAPSHOT (main)
Relevant log output