Skip to content

Commit ad59804

Browse files
dmealingclaude
andcommitted
feat(metadata-java): accept @dbColumnType uuid_array / text_array (loader side)
The JVM loader's closed dbColumnType value set rejected the array values the migrate-ts side now emits. Add uuid_array/text_array to VALID_DB_COLUMN_TYPES and the legal (subtype × value) pairing (both legal on field.string), so JVM consumers can load metadata using native-array columns. codegen-kotlin emission (List<T> property + Exposed array<T> column) follows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018mjBXyYKk6tbQymzhgMmdB
1 parent 57ba81f commit ad59804

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

server/java/metadata/src/main/java/com/metaobjects/database/CoreDBMetaDataProvider.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,15 @@ public class CoreDBMetaDataProvider implements MetaDataTypeProvider {
6767
public static final String DB_COLUMN_TYPE_JSONB = "jsonb";
6868
/** {@code @dbColumnType} value → {@code timestamp with time zone} column (on {@code field.timestamp}). */
6969
public static final String DB_COLUMN_TYPE_TIMESTAMP_TZ = "timestamp_with_tz";
70+
/** {@code @dbColumnType} value → native Postgres {@code uuid[]} array column (on {@code field.string}). */
71+
public static final String DB_COLUMN_TYPE_UUID_ARRAY = "uuid_array";
72+
/** {@code @dbColumnType} value → native Postgres {@code text[]} array column (on {@code field.string}). */
73+
public static final String DB_COLUMN_TYPE_TEXT_ARRAY = "text_array";
7074

7175
/** The closed set of legal {@code @dbColumnType} values. */
7276
public static final java.util.List<String> VALID_DB_COLUMN_TYPES = java.util.List.of(
73-
DB_COLUMN_TYPE_UUID, DB_COLUMN_TYPE_JSONB, DB_COLUMN_TYPE_TIMESTAMP_TZ);
77+
DB_COLUMN_TYPE_UUID, DB_COLUMN_TYPE_JSONB, DB_COLUMN_TYPE_TIMESTAMP_TZ,
78+
DB_COLUMN_TYPE_UUID_ARRAY, DB_COLUMN_TYPE_TEXT_ARRAY);
7479

7580
@Override
7681
public String getProviderId() {

server/java/metadata/src/main/java/com/metaobjects/loader/ValidationPhase.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,9 @@ private static void validateDbColumnTypeNode(MetaData node) {
710710
String subType = node.getSubType();
711711
String requiredSubType = switch (value) {
712712
case CoreDBMetaDataProvider.DB_COLUMN_TYPE_UUID,
713-
CoreDBMetaDataProvider.DB_COLUMN_TYPE_JSONB -> StringField.SUBTYPE_STRING;
713+
CoreDBMetaDataProvider.DB_COLUMN_TYPE_JSONB,
714+
CoreDBMetaDataProvider.DB_COLUMN_TYPE_UUID_ARRAY,
715+
CoreDBMetaDataProvider.DB_COLUMN_TYPE_TEXT_ARRAY -> StringField.SUBTYPE_STRING;
714716
case CoreDBMetaDataProvider.DB_COLUMN_TYPE_TIMESTAMP_TZ -> TimestampField.SUBTYPE_TIMESTAMP;
715717
default -> null; // unreachable — Rule 1 already rejected unknown values
716718
};
@@ -721,7 +723,8 @@ private static void validateDbColumnTypeNode(MetaData node) {
721723
+ "' @" + CoreDBMetaDataProvider.DB_COLUMN_TYPE + " '" + value
722724
+ "' is not valid on field." + subType
723725
+ " (requires field." + requiredSubType + "); allowed pairings: "
724-
+ "uuid→field.string, jsonb→field.string, timestamp_with_tz→field.timestamp",
726+
+ "uuid→field.string, jsonb→field.string, uuid_array→field.string, "
727+
+ "text_array→field.string, timestamp_with_tz→field.timestamp",
725728
ErrorCode.ERR_BAD_ATTR_VALUE, node.getSource());
726729
}
727730
}

0 commit comments

Comments
 (0)