Skip to content

Regression (v0.13.0): enum literal in conditional Visible/Editable expression mangled to a string → CE0117 #677

@ako

Description

@ako

Summary

Release regression in v0.13.0. An enum literal in a widget visible:/editable: expression is mis-encoded as a string, so MxBuild fails with CE0117 "Error(s) in expression." This blocks authoring enum-based conditional visibility (e.g. status pills) via mxcli.

Repro

create enumeration Mod.EquipmentStatus ( Running, Stopped );
create or modify persistent entity Mod.Equip (Name: String(100), Status: Mod.EquipmentStatus);
create page Mod.Pg (title: 'Pg', layout: Atlas_Core.Atlas_Default, params: { $Equip: Mod.Equip })
{
  dataview dv (datasource: $Equip) {
    container pill (visible: [$currentObject/Status = Mod.EquipmentStatus.Running]) {
      dynamictext t (content: 'Running')
    }
  }
}

mxcli exec reports success, then mx check:

Written Stored (v0.13.0) mx check
[$currentObject/Status = Mod.EquipmentStatus.Running] $currentObject/Status = 'Running' ❌ CE0117

Impact

  • Pages written by ≤0.12 retain the enum literal and still build (existing dashboards report 0 errors).
  • Re-running page generators on v0.13.0 mis-encodes every enum-based status pill → CE0117.
  • The expression type-checker does not catch this at mxcli check (it's a write-path mis-encoding, not a type error).

Root cause

conditionalExprToString (added with #627, mdl/visitor/visitor_page_v3.go) routed a qualified-enum QualifiedNameExpr to its default case → xpathExprToString, which converts a 3-part enum name to a string literal ('Running'). That conversion is correct for an XPath datasource constraint (evaluated at the database level, where enums are strings) but wrong for a client visibility/editability expression, which compares to the qualified enum value.

Fix

Add an explicit *ast.QualifiedNameExpr case to conditionalExprToString returning the qualified literal (Module.Enum.Value). The datasource where path (buildXPathString/xpathExprToString) is left untouched, so DB-level enums still correctly stringify to 'Value'. Applies to CREATE and ALTER (both use conditionalExprToString).

Fixed by commit 558856da1 (on the issues branch). Verified on Mendix 11.11.0, both engines: visibility enum stays Mod.EquipmentStatus.Running, datasource enum stays 'Running', mx check = 0 errors. Covered by a regression unit test and mdl-examples/bug-tests/680-enum-literal-conditional-visibility.mdl.

Recommendation

Patch release (v0.13.1) — this is a release blocker for enum-based conditional visibility authoring.

Workaround (until patched)

Don't re-run page generators on v0.13.0 for pages with enum-based visibility (existing pages keep the working enum literal). Set such visibility expressions manually in Studio Pro if a page must be regenerated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions