forked from fixin.me/fixin.me
Several fixes to make complex Arel/CTE queries work with both MySQL and SQLite: Unit model: - Add guard for description length validation (text column .limit returns nil in SQLite) - defaults_diff: rename 'units' CTE to 'all_units' to avoid SQLite circular reference (SQLite treats any CTE in WITH RECURSIVE that references a same-named table as circular) - defaults_diff: read from 'all_units' CTE explicitly in UNION parts via AR::Relation instead of relying on CTE name shadowing; use AR::Relation (not SelectManager) for UNION parts to avoid extra parentheses (visit_Arel_SelectManager always wraps in parens) - defaults_diff: qualify GROUP BY and ORDER BY columns to avoid ambiguity when bases_units join adds a second table with same column names - Qualify :symbol in ordering to avoid ambiguous column in joined queries Quantity model: - Add guard for description length validation (text column .limit returns nil in SQLite) - ordered: rename recursive CTE from 'quantities' to 'q_ordered' to avoid circular reference; use AR::Relation for UNION parts; fix column qualifiers; use printf() instead of LPAD() for SQLite (LPAD not supported), BLOB instead of BINARY cast - common_ancestors: rename CTE to 'q_common', use AR::Relation for UNION parts - with_ancestors: rename CTE to 'q_ancestors', use AR::Relation for UNION parts - successive: replace SQL LAG window function approach (which causes nested WITH RECURSIVE) with Ruby array approach for SQLite compatibility Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>