package com.venky.swf.sql; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import com.venky.swf.db.model.Model; import com.venky.swf.db.model.reflection.ModelReflector; import com.venky.swf.db.table.BindVariable; public class Update extends DataManupulationStatement{ private String table = null; private Map<String,BindVariable> values = new HashMap<String, BindVariable>(); private Map<String,String> unBoundedValues = new HashMap<String, String>(); private SortedSet<String> keys = new TreeSet<String>(); public <M extends Model> Update(ModelReflector<M> ref){ this(ref.getPool(),ref.getTableName()); } public Update(String pool,String table){ super(pool); this.table = table; } public Update setUnBounded(String name,String value){ assert !values.containsKey(name); unBoundedValues.put(name, value); keys.add(name); return this; } public Update set(String name,BindVariable value){ assert !unBoundedValues.containsKey(name); values.put(name, value); keys.add(name); return this; } public Update set(Map<String,BindVariable> values){ for (String key : values.keySet()){ set(key,values.get(key)); } return this; } @Override protected void finalizeParameterizedSQL() { StringBuilder builder = getQuery(); builder.append("UPDATE ").append(table); builder.append(" SET "); Iterator<String> ki = keys.iterator(); while (ki.hasNext()){ String key = ki.next(); if (unBoundedValues.containsKey(key)){ builder.append(key).append(" = ").append(unBoundedValues.get(key)); }else { builder.append(key).append(" = ? " ); getValues().add(values.get(key)); } if (ki.hasNext()){ builder.append(","); } } Expression where = getWhereExpression(); if (where != null){ builder.append(" WHERE "); builder.append(where.getParameterizedSQL()); getValues().addAll(where.getValues()); } } private Expression whereExpression ; public Update where(Expression expression){ this.whereExpression = expression; return this; } public Expression getWhereExpression(){ return whereExpression; } }