diff --git a/pom.xml b/pom.xml index e8b35ba..736396b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.gump worm - 1.1.4 + 1.1.7 diff --git a/src/main/java/dev/gump/worm/field/FieldType.java b/src/main/java/dev/gump/worm/field/FieldType.java index c443fe5..55f24d7 100644 --- a/src/main/java/dev/gump/worm/field/FieldType.java +++ b/src/main/java/dev/gump/worm/field/FieldType.java @@ -2,6 +2,7 @@ import dev.gump.worm.entity.Entity; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZonedDateTime; @@ -21,7 +22,8 @@ public enum FieldType { TIME("TIME", List.of(), true), TIMESTAMP("TIMESTAMP", List.of(), true), BOOL("BOOL", List.of(Boolean.class)), - ENTITY("ENTITY",List.of(Entity.class), true); + ENTITY("ENTITY",List.of(Entity.class), true), + DECIMAL("DECIMAL(19,2)", List.of(BigDecimal.class), true); private final String value; private final List> classes; private final boolean needAsps; diff --git a/src/main/java/dev/gump/worm/field/WormField.java b/src/main/java/dev/gump/worm/field/WormField.java index bfdbd65..d79e1cf 100644 --- a/src/main/java/dev/gump/worm/field/WormField.java +++ b/src/main/java/dev/gump/worm/field/WormField.java @@ -103,16 +103,29 @@ public String getEntityId(Object obj) throws IllegalAccessException, NoSuchField public String getSqlCreation(){ if(type == FieldType.ENTITY && fieldClass_relational != null){ EntityMeta cMeta = Worm.getRegistry().getTableMeta(fieldClass_relational); - if(cMeta.getUniqueKeyColumns().size() != 1) + if (cMeta.getUniqueKeyColumns().size() != 1) throw new WormException("Relational Worm tables need to have only one unique keys"); + WormField key = cMeta.getUniqueKeyColumns().toArray(WormField[]::new)[0]; - StringBuilder sql = new StringBuilder(key.getSqlCreation()); - sql.append(", CONSTRAINT FK_").append(getName()).append("_").append(cMeta.getName()).append(" FOREIGN KEY (").append(getName()).append(") REFERENCES ") + + StringBuilder sql = new StringBuilder(); + sql.append(key.getType().getValue()); + if (key.getLength() > 0) + sql.append('(').append(key.getLength()).append(')'); + + if (!nullable) + sql.append(" NOT NULL"); + + sql.append(", CONSTRAINT FK_").append(getName()).append("_").append(cMeta.getName()) + .append(" FOREIGN KEY (").append(getName()).append(") REFERENCES ") .append(cMeta.getName()).append(" (").append(key.getName()).append(")"); - if(onDelete != null) - sql.append(" ON DELETE ").append(onDelete.getValue()); - if(onUpdate != null) - sql.append(" ON UPDATE ").append(onUpdate.getValue()); + + if (onDelete != null) + sql.append(" ON DELETE ").append(onDelete.name()); + + if (onUpdate != null) + sql.append(" ON UPDATE ").append(onUpdate.name()); + return sql.toString(); }