Skip to content

feat(arrays): native primitive + enum array columns via prop.ARRAY_OF - #90

Merged
uladkasach merged 1 commit into
mainfrom
beav/native-primitive-enum-array-columns
Jul 28, 2026
Merged

feat(arrays): native primitive + enum array columns via prop.ARRAY_OF#90
uladkasach merged 1 commit into
mainfrom
beav/native-primitive-enum-array-columns

Conversation

@ehm-seaturtle

Copy link
Copy Markdown
Contributor

feat(arrays): native primitive + enum array columns via prop.ARRAY_OF

teach sql-schema-generator to accept prop.ARRAY_OF() and
prop.ARRAY_OF(prop.ENUM([...])) and emit a native postgres array column
(varchar[]/numeric[]/boolean[]/timestamptz[]/[]) on the base and version
tables, instead of throwing. reference and uuid arrays keep their join-table
behavior unchanged (element-level FK integrity), so the change is additive.

  • ARRAY_OF accepts primitive + enum element props (was: REFERENCES/UUID only)
  • primitive/enum arrays -> native array column on base/version table
  • enum arrays -> varchar[] + element-membership CHECK (col <@ ARRAY[...])
  • upsert writes the array in one native arg; view selects it straight through
  • change-detection compares by value (IS NOT DISTINCT FROM), null-safe, so an
    unchanged array does not spuriously bump the version
  • fail-fast at declare time for nested arrays, serial elements, and
    scalar/custom checks on array columns

verification adds a full acceptance round-trip: the CLI generate output is
applied to a real postgres and round-tripped through the generated upsert +
hydrated view, plus a repo brief that requires acceptance tests to fully
round-trip (produce -> apply -> exercise -> read-back -> assert+snapshot).


🐢🌊 surfed in by seaturtle[bot]

teach sql-schema-generator to accept prop.ARRAY_OF(<primitive>) and
prop.ARRAY_OF(prop.ENUM([...])) and emit a native postgres array column
(varchar[]/numeric[]/boolean[]/timestamptz[]/<enum>[]) on the base and version
tables, instead of throwing. reference and uuid arrays keep their join-table
behavior unchanged (element-level FK integrity), so the change is additive.

- ARRAY_OF accepts primitive + enum element props (was: REFERENCES/UUID only)
- primitive/enum arrays -> native array column on base/version table
- enum arrays -> varchar[] + element-membership CHECK (col <@ ARRAY[...])
- upsert writes the array in one native arg; view selects it straight through
- change-detection compares by value (IS NOT DISTINCT FROM), null-safe, so an
  unchanged array does not spuriously bump the version
- fail-fast at declare time for nested arrays, serial elements, and
  scalar/custom checks on array columns

verification adds a full acceptance round-trip: the CLI generate output is
applied to a real postgres and round-tripped through the generated upsert +
hydrated view, plus a repo brief that requires acceptance tests to fully
round-trip (produce -> apply -> exercise -> read-back -> assert+snapshot).

Co-authored-by: ulad kasach <uladkasach@gmail.com>
@uladkasach
uladkasach merged commit b995390 into main Jul 28, 2026
16 checks passed
@uladkasach
uladkasach deleted the beav/native-primitive-enum-array-columns branch July 28, 2026 12:34
@rhelease rhelease Bot mentioned this pull request Jul 28, 2026
@rhelease

rhelease Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants