From 3d556bfcad3eb3face9db986aa570d6e2a059448 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 4 Aug 2013 12:34:48 +0200 Subject: wip --- .../java/io/trygvis/persistence/EntityMirror.java | 53 +++++++++++++--------- 1 file changed, 31 insertions(+), 22 deletions(-) (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java') 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 { } 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 { } else if (field.unique) { s += " UNIQUE"; } - } - else { + } else { throw new NotImplementedException(); } } else { @@ -103,16 +102,20 @@ public class EntityMirror implements Comparable { return "DROP TABLE " + tableName + ";"; } - public String insertIntoSql() { - List names = new ArrayList<>(); - List placeholders = new ArrayList<>(); + public String insertIntoSql(SqlUnitModel unit) { + List columns = new ArrayList<>(); + List 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 { List 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 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 { 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 { 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 { List 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) { -- cgit v1.2.3