package com.dieselpoint.norm.sqlmakers; import com.dieselpoint.norm.Query; public class MySqlMaker extends StandardSqlMaker { @Override public String getUpsertSql(Query query, Object row) { StandardPojoInfo pojoInfo = getPojoInfo(row.getClass()); return pojoInfo.upsertSql; } @Override public Object[] getUpsertArgs(Query query, Object row) { // same args as insert, but we need to duplicate the values Object [] args = super.getInsertArgs(query, row); int count = args.length; Object [] upsertArgs = new Object[count * 2]; System.arraycopy(args, 0, upsertArgs, 0, count); System.arraycopy(args, 0, upsertArgs, count, count); return upsertArgs; } @Override public void makeUpsertSql(StandardPojoInfo pojoInfo) { // INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; // mostly the same as the makeInsertSql code // it uses the same column names and argcount StringBuilder buf = new StringBuilder(); buf.append(pojoInfo.insertSql); buf.append(" on duplicate key update "); boolean first = true; for (String colName: pojoInfo.insertColumnNames) { if (first) { first = false; } else { buf.append(','); } buf.append(colName); buf.append("=?"); } pojoInfo.upsertSql = buf.toString(); } }