package com.querydsl.sql.dml; import static com.querydsl.sql.SQLExpressions.select; import static org.junit.Assert.assertEquals; import org.junit.Test; import com.google.common.collect.ImmutableList; import com.querydsl.sql.KeyAccessorsTest.QEmployee; import com.querydsl.sql.SQLBindings; import com.querydsl.sql.SQLTemplates; public class SQLUpdateClauseTest { @Test(expected = IllegalStateException.class) public void noConnection() { QEmployee emp1 = new QEmployee("emp1"); SQLUpdateClause update = new SQLUpdateClause(null, SQLTemplates.DEFAULT, emp1); update.set(emp1.id, 1); update.execute(); } @Test public void getSQL() { QEmployee emp1 = new QEmployee("emp1"); SQLUpdateClause update = new SQLUpdateClause(null, SQLTemplates.DEFAULT, emp1); update.set(emp1.id, 1); SQLBindings sql = update.getSQL().get(0); assertEquals("update EMPLOYEE\nset ID = ?", sql.getSQL()); assertEquals(ImmutableList.of(1), sql.getBindings()); } @Test public void intertable() { QEmployee emp1 = new QEmployee("emp1"); QEmployee emp2 = new QEmployee("emp2"); SQLUpdateClause update = new SQLUpdateClause(null, SQLTemplates.DEFAULT, emp1); update.set(emp1.id, 1) .where(emp1.id.eq(select(emp2.id).from(emp2) .where(emp2.superiorId.isNotNull()))); SQLBindings sql = update.getSQL().get(0); assertEquals("update EMPLOYEE\n" + "set ID = ?\n" + "where EMPLOYEE.ID = (select emp2.ID\n" + "from EMPLOYEE emp2\n" + "where emp2.SUPERIOR_ID is not null)", sql.getSQL()); } @Test public void intertable2() { QEmployee emp1 = new QEmployee("emp1"); QEmployee emp2 = new QEmployee("emp2"); SQLUpdateClause update = new SQLUpdateClause(null, SQLTemplates.DEFAULT, emp1); update.set(emp1.id, select(emp2.id).from(emp2) .where(emp2.superiorId.isNotNull())); SQLBindings sql = update.getSQL().get(0); assertEquals("update EMPLOYEE\n" + "set ID = (select emp2.ID\n" + "from EMPLOYEE emp2\n" + "where emp2.SUPERIOR_ID is not null)", sql.getSQL()); } @Test public void intertable3() { QEmployee emp1 = new QEmployee("emp1"); QEmployee emp2 = new QEmployee("emp2"); SQLUpdateClause update = new SQLUpdateClause(null, SQLTemplates.DEFAULT, emp1); update.set(emp1.superiorId, select(emp2.id).from(emp2) .where(emp2.id.eq(emp1.id))); SQLBindings sql = update.getSQL().get(0); assertEquals("update EMPLOYEE\n" + "set SUPERIOR_ID = (select emp2.ID\n" + "from EMPLOYEE emp2\n" + "where emp2.ID = EMPLOYEE.ID)", sql.getSQL()); } @Test public void clear() { QEmployee emp1 = new QEmployee("emp1"); SQLUpdateClause update = new SQLUpdateClause(null, SQLTemplates.DEFAULT, emp1); update.set(emp1.id, 1); update.addBatch(); assertEquals(1, update.getBatchCount()); update.clear(); assertEquals(0, update.getBatchCount()); } }