Skip to content

Commit 11c48eb

Browse files
committed
Altered toUpdate() method to use dialect form. Changed unit test to use
lower case id names.
1 parent 7616104 commit 11c48eb

File tree

4 files changed

+62
-56
lines changed

4 files changed

+62
-56
lines changed

activejdbc/src/main/java/org/javalite/activejdbc/Model.java

Lines changed: 26 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2692,6 +2692,23 @@ public void manageTime(boolean manage) {
26922692
public String toInsert() {
26932693
return toInsert(getMetaModelLocal().getDialect());
26942694
}
2695+
2696+
2697+
/**
2698+
* Generates INSERT SQL based on this model with the provided dialect.
2699+
* Example:
2700+
* <pre>
2701+
* String insert = u.toInsert(new MySQLDialect());
2702+
* //yields this output:
2703+
* //INSERT INTO users (id, first_name, email, last_name) VALUES (1, 'Marilyn', 'mmonroe@yahoo.com', 'Monroe');
2704+
* </pre>
2705+
*
2706+
* @param dialect dialect to be used to generate the SQL
2707+
* @return INSERT SQL based on this model.
2708+
*/
2709+
public String toInsert(Dialect dialect) {
2710+
return dialect.insert(getMetaModelLocal(), attributes);
2711+
}
26952712

26962713
/**
26972714
* Generates UPDATE SQL based on this model. Uses single quotes for all string values.
@@ -2705,70 +2722,24 @@ public String toInsert() {
27052722
*
27062723
* @return UPDATE SQL based on this model.
27072724
*/
2708-
public String toUpdate(){
2709-
2710-
doUpdatedAt();
2711-
2712-
MetaModel metaModel = getMetaModelLocal();
2713-
StringBuilder query = new StringBuilder().append("UPDATE ").append(metaModel.getTableName()).append(" SET ");
2714-
SortedSet<String> attributeNames = metaModel.getAttributeNamesSkipGenerated(manageTime);
2715-
2716-
2717-
2718-
List<Object> values = getAttributeValues(attributeNames);
2719-
List<String> attributeNamesList = new ArrayList<String>(attributeNames);
2720-
for (int i = 0; i < values.size(); i++) {
2721-
Object value = values.get(i);
2722-
String attributeName = attributeNamesList.get(i);
2723-
if (value != null) {
2724-
query.append(attributeName + " = " + "'" + value + "'");
2725-
2726-
if (i < values.size() -1) {
2727-
query.append(" , ");
2728-
}
2729-
}
2730-
}
2731-
2732-
2733-
if (manageTime && metaModel.hasAttribute("updated_at")) {
2734-
query.append(", updated_at = ?");
2735-
values.add(get("updated_at"));
2736-
}
2737-
2738-
if(metaModel.isVersioned()){
2739-
query.append(", ").append(getMetaModelLocal().getVersionColumn()).append(" = ?");
2740-
values.add(getLong(getMetaModelLocal().getVersionColumn()) + 1);
2741-
}
2742-
query.append(" WHERE ").append(metaModel.getIdName()).append(" = " + getId());
2743-
values.add(getId());
2744-
2745-
2746-
if (metaModel.isVersioned()) {
2747-
query.append(" AND ").append(getMetaModelLocal().getVersionColumn()).append(" = ?");
2748-
values.add(get(getMetaModelLocal().getVersionColumn()));
2749-
}
2750-
2751-
if(metaModel.cached()){
2752-
QueryCache.instance().purgeTableCache(metaModel.getTableName());
2753-
}
2754-
return query.toString();
2725+
public String toUpdate() {
2726+
return toUpdate(getMetaModelLocal().getDialect());
27552727
}
27562728

2757-
27582729
/**
2759-
* Generates INSERT SQL based on this model with the provided dialect.
2730+
* Generates UPDATE SQL based on this model. Uses single quotes for all string values.
27602731
* Example:
27612732
* <pre>
2762-
* String insert = u.toInsert(new MySQLDialect());
2733+
*
2734+
* String update = u.toUpdate();
27632735
* //yields this output:
2764-
* //INSERT INTO users (id, first_name, email, last_name) VALUES (1, 'Marilyn', 'mmonroe@yahoo.com', 'Monroe');
2736+
* //UPDATE students SET DOB = '1965-12-01' , FIRST_NAME = 'Jim' , LAST_NAME = 'Cary' WHERE id = 1
27652737
* </pre>
27662738
*
2767-
* @param dialect dialect to be used to generate the SQL
2768-
* @return INSERT SQL based on this model.
2739+
* @return UPDATE SQL based on this model.
27692740
*/
2770-
public String toInsert(Dialect dialect) {
2771-
return dialect.insert(getMetaModelLocal(), attributes);
2741+
public String toUpdate(Dialect dialect) {
2742+
return dialect.update(getMetaModelLocal(), attributes);
27722743
}
27732744

27742745
/**

activejdbc/src/main/java/org/javalite/activejdbc/dialects/DefaultDialect.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,4 +219,36 @@ public String insert(MetaModel metaModel, Map<String, Object> attributes) {
219219
}
220220
return query.toString();
221221
}
222+
223+
@Override
224+
public String update(MetaModel metaModel, Map<String, Object> attributes) {
225+
StringBuilder query = new StringBuilder().append("UPDATE ").append(metaModel.getTableName()).append(' ');
226+
if (attributes.isEmpty()) {
227+
appendEmptyRow(metaModel, query);
228+
} else {
229+
230+
query.append("SET ");
231+
232+
Iterator<String> keysetIt = attributes.keySet().iterator();
233+
Iterator<Object> valueIt = attributes.values().iterator();
234+
235+
while (valueIt.hasNext()) {
236+
query.append(keysetIt.next() + " = ");
237+
appendValue(query, valueIt.next()); // Accomodates the different types
238+
239+
if (valueIt.hasNext()) {
240+
query.append(", ");
241+
} else{
242+
query.append(" ");
243+
}
244+
}
245+
246+
String idName = metaModel.getIdName();
247+
query.append("WHERE ").append(idName).append(" = " + attributes.get(idName));
248+
249+
250+
}
251+
return query.toString();
252+
}
253+
222254
}

activejdbc/src/main/java/org/javalite/activejdbc/dialects/Dialect.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,7 @@ public interface Dialect {
5151
String deleteManyToManyAssociation(Many2ManyAssociation association);
5252

5353
String insert(MetaModel metaModel, Map<String, Object> attributes);
54+
55+
String update(MetaModel metaModel, Map<String, Object> attributes);
56+
5457
}

activejdbc/src/test/java/org/javalite/activejdbc/ModelTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ public void shouldGenerateCorrectUpdateSQL(){
493493
String updateSQL = s.toUpdate();
494494
System.out.println(updateSQL);
495495

496-
the(updateSQL).shouldBeEqual("UPDATE students SET DOB = '1965-12-01' , FIRST_NAME = 'Jim' , LAST_NAME = 'Cary' WHERE id = 1");
496+
the(updateSQL).shouldBeEqual("UPDATE students SET dob = DATE '1965-12-01', first_name = 'Jim', id = 1, last_name = 'Cary' WHERE id = 1");
497497
}
498498

499499
@Test

0 commit comments

Comments
 (0)