From a4df2ea4c2003d95ff660f7fdcbab738074e72c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 19 May 2014 22:14:09 +0300 Subject: [PATCH] Fix intertable dml rendering --- .../com/mysema/query/sql/SQLSerializer.java | 8 ++-- .../mysema/query/sql/KeyAccessorsTest.java | 10 ++--- .../query/sql/dml/SQLDeleteClauseTest.java | 8 ++-- .../query/sql/dml/SQLInsertClauseTest.java | 8 ++-- .../query/sql/dml/SQLUpdateClauseTest.java | 43 ++++++++++++++++--- 5 files changed, 52 insertions(+), 25 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 7a0b65808..3801f5321 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -13,6 +13,9 @@ */ package com.mysema.query.sql; +import javax.annotation.Nullable; +import java.util.*; + import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -26,9 +29,6 @@ import com.mysema.query.support.SerializerBase; import com.mysema.query.types.*; import com.mysema.query.types.Template.Element; -import javax.annotation.Nullable; -import java.util.*; - /** * SqlSerializer serializes Querydsl queries into SQL * @@ -746,7 +746,7 @@ public class SQLSerializer extends SerializerBase { } } final PathMetadata metadata = path.getMetadata(); - if (metadata.getParent() != null && !skipParent) { + if (metadata.getParent() != null && (!skipParent || dml)) { visit(metadata.getParent(), context); append("."); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/KeyAccessorsTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/KeyAccessorsTest.java index 3f1630c9a..4406c1843 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/KeyAccessorsTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/KeyAccessorsTest.java @@ -13,14 +13,12 @@ */ package com.mysema.query.sql; -import static com.mysema.query.types.PathMetadataFactory.forVariable; -import static org.junit.Assert.assertNotNull; - import java.io.Serializable; -import org.junit.Test; - import com.mysema.query.types.path.NumberPath; +import org.junit.Test; +import static com.mysema.query.types.PathMetadataFactory.forVariable; +import static org.junit.Assert.assertNotNull; public class KeyAccessorsTest { @@ -64,7 +62,7 @@ public class KeyAccessorsTest { protected void addMetadata() { addMetadata(id, ColumnMetadata.named("ID")); - addMetadata(id, ColumnMetadata.named("SUPERIOR_ID")); + addMetadata(superiorId, ColumnMetadata.named("SUPERIOR_ID")); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLDeleteClauseTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLDeleteClauseTest.java index 96d95bf39..fa0b1e1a5 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLDeleteClauseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLDeleteClauseTest.java @@ -1,13 +1,11 @@ package com.mysema.query.sql.dml; -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - import com.google.common.collect.ImmutableList; import com.mysema.query.sql.KeyAccessorsTest.QEmployee; import com.mysema.query.sql.SQLBindings; import com.mysema.query.sql.SQLTemplates; +import org.junit.Test; +import static org.junit.Assert.assertEquals; public class SQLDeleteClauseTest { @@ -26,7 +24,7 @@ public class SQLDeleteClauseTest { delete.where(emp1.id.eq(1)); SQLBindings sql = delete.getSQL().get(0); - assertEquals("delete from EMPLOYEE\nwhere EMPLOYEE.SUPERIOR_ID = ?", sql.getSQL()); + assertEquals("delete from EMPLOYEE\nwhere EMPLOYEE.ID = ?", sql.getSQL()); assertEquals(ImmutableList.of(1), sql.getBindings()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLInsertClauseTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLInsertClauseTest.java index 25312c9a9..0c99b71b8 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLInsertClauseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLInsertClauseTest.java @@ -1,13 +1,11 @@ package com.mysema.query.sql.dml; -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - import com.google.common.collect.ImmutableList; import com.mysema.query.sql.KeyAccessorsTest.QEmployee; import com.mysema.query.sql.SQLBindings; import com.mysema.query.sql.SQLTemplates; +import org.junit.Test; +import static org.junit.Assert.assertEquals; public class SQLInsertClauseTest { @@ -18,7 +16,7 @@ public class SQLInsertClauseTest { insert.set(emp1.id, 1); SQLBindings sql = insert.getSQL().get(0); - assertEquals("insert into EMPLOYEE (SUPERIOR_ID)\nvalues (?)", sql.getSQL()); + assertEquals("insert into EMPLOYEE (ID)\nvalues (?)", sql.getSQL()); assertEquals(ImmutableList.of(1), sql.getBindings()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLUpdateClauseTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLUpdateClauseTest.java index eb5bd4578..14b320590 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLUpdateClauseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/dml/SQLUpdateClauseTest.java @@ -1,13 +1,12 @@ package com.mysema.query.sql.dml; -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - import com.google.common.collect.ImmutableList; import com.mysema.query.sql.KeyAccessorsTest.QEmployee; import com.mysema.query.sql.SQLBindings; +import com.mysema.query.sql.SQLSubQuery; import com.mysema.query.sql.SQLTemplates; +import org.junit.Test; +import static org.junit.Assert.assertEquals; public class SQLUpdateClauseTest { @@ -18,8 +17,42 @@ public class SQLUpdateClauseTest { update.set(emp1.id, 1); SQLBindings sql = update.getSQL().get(0); - assertEquals("update EMPLOYEE\nset SUPERIOR_ID = ?", sql.getSQL()); + 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(new SQLSubQuery().from(emp2) + .where(emp2.superiorId.isNotNull()) + .unique(emp2.id))); + + 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, new SQLSubQuery().from(emp2) + .where(emp2.superiorId.isNotNull()) + .unique(emp2.id)); + + 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()); + } + }