diff options
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java')
-rw-r--r-- | container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java index e06855f..48f8adc 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java @@ -74,7 +74,7 @@ public class EntityMirror implements Comparable<EntityMirror> { } else if (field instanceof ReferenceFieldMirror) { ReferenceFieldMirror ref = (ReferenceFieldMirror) field; EntityMirror referenced = unit.get(ref.type); - if(referenced.idFields.size() == 1) { + if (referenced.idFields.size() == 1) { FieldMirror idField = referenced.idFields.get(0); TypeHandler typeHandler = generatorConfiguration.typeHandler(idField.type); s = " " + field.sqlName + " " + typeHandler.sqlType(field); @@ -84,8 +84,7 @@ public class EntityMirror implements Comparable<EntityMirror> { } else if (field.unique) { s += " UNIQUE"; } - } - else { + } else { throw new NotImplementedException(); } } else { @@ -103,16 +102,20 @@ public class EntityMirror implements Comparable<EntityMirror> { return "DROP TABLE " + tableName + ";"; } - public String insertIntoSql() { - List<String> names = new ArrayList<>(); - List<String> placeholders = new ArrayList<>(); + public String insertIntoSql(SqlUnitModel unit) { + List<String> columns = new ArrayList<>(); + List<String> values = new ArrayList<>(); for (FieldMirror field : fields) { - names.add(field.sqlName); - placeholders.add("?"); + columns.add(field.sqlName); + if (field.id) { + values.add("nextval('" + unit.getDefaultSequence().name + "')"); + } else { + values.add("?"); + } } - return "INSERT INTO " + tableName + "(" + join(names, ", ") + ") " + - "VALUES(" + join(placeholders, ", ") + ");"; + return "INSERT INTO " + tableName + "(" + join(columns, ", ") + ") " + + "VALUES(" + join(values, ", ") + ");"; } public String deleteFromSql() { @@ -145,20 +148,26 @@ public class EntityMirror implements Comparable<EntityMirror> { List<String> body = new ArrayList<>(); body.add("try(" + psType + " stmt = " + con.name + ".prepareStatement(insertIntoSql)) {"); - for (int i = 0; i < fields.size(); i++) { - FieldMirror field = fields.get(i); - if(field instanceof PrimitiveFieldMirror) { + int i = 0; + for (FieldMirror field : fields) { + // Assume all ID fields are generated for now. + if (field.id) { + continue; + } + + i++; + + if (field instanceof PrimitiveFieldMirror) { TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); String access = o.name + "." + field.javaName; - String setter = " stmt." + typeHandler.setter(i + 1, access) + ";"; + String setter = " stmt." + typeHandler.setter(i, access) + ";"; - if(field.notNull) { + if (field.notNull) { body.add(setter); - } - else { + } else { body.add(" " + field.type + " " + field.javaName + " = " + access + ";"); body.add(" if(" + field.javaName + " == null) {"); - body.add(" stmt.setNull(" + (i + 1) + ", " + typesType + "." + typeHandler.typeName() + ");"); + body.add(" stmt.setNull(" + i + ", " + typesType + "." + typeHandler.typeName() + ");"); body.add(" } else {"); body.add(" " + setter); body.add(" }"); @@ -168,7 +177,7 @@ public class EntityMirror implements Comparable<EntityMirror> { EntityMirror referenced = unit.get(ref.type); FieldMirror idField = referenced.getIdField(); TypeHandler typeHandler = generatorConfiguration.typeHandler(idField.type); - body.add(" stmt." + typeHandler.setter(i + 1, o.name + "." + field.javaName + "." + idField.javaName) + ";"); + body.add(" stmt." + typeHandler.setter(i, o.name + "." + field.javaName + "." + idField.javaName) + ";"); } } body.add(" stmt.executeUpdate();"); @@ -231,7 +240,7 @@ public class EntityMirror implements Comparable<EntityMirror> { return typedQuery; } - public MethodRef query(SqlUnitModel sqlUnit, Imports imports) { + public MethodRef query(Imports imports) { TypeRef conType = imports.add(Connection.class); TypeRef typedQueryType = imports.add(TypedQuery.class).args(type); TypeRef entityTypedQuery = new TypeRef(type.className + "TypedQuery"); @@ -244,7 +253,7 @@ public class EntityMirror implements Comparable<EntityMirror> { return new MethodRef(PUBLIC | STATIC, typedQueryType, "query", p, body); } - public MethodRef fromResultSet(SqlUnitModel unit, Imports g) { + public MethodRef fromResultSet(Imports g) { TypeRef rsType = g.add(ResultSet.class); Parameters p = new Parameters(); ParameterRef rs = p.addParameter(rsType, "rs"); @@ -253,7 +262,7 @@ public class EntityMirror implements Comparable<EntityMirror> { List<String> names = new ArrayList<>(); for (int i = 0; i < fields.size(); i++) { FieldMirror field = fields.get(i); - if(field instanceof PrimitiveFieldMirror) { + if (field instanceof PrimitiveFieldMirror) { TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); body.add(field.type + " " + field.javaName + " = " + typeHandler.getter(rs.name, i + 1) + ";"); } else if (field instanceof ReferenceFieldMirror) { |