From 093d340bfb11eaae89cb2c440b682840fc7ad086 Mon Sep 17 00:00:00 2001 From: BZsoldos Date: Mon, 26 Mar 2018 16:11:16 +0200 Subject: [PATCH 1/3] [SQL] Apply column name override in executeWithKey call --- .../main/java/com/querydsl/sql/dml/AbstractSQLInsertClause.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLInsertClause.java b/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLInsertClause.java index 7901424f5..d8c22a5c8 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLInsertClause.java @@ -325,6 +325,7 @@ public abstract class AbstractSQLInsertClause path = entity.getPrimaryKey().getLocalColumns().get(i); String column = ColumnMetadata.getName(path); + column = configuration.getColumnOverride(entity.getSchemaAndTable(), column); target[i] = column; } stmt = connection().prepareStatement(queryString, target); From f8d10a847c83c98ed8b00b77bccc323a893a0e84 Mon Sep 17 00:00:00 2001 From: BZsoldos Date: Mon, 26 Mar 2018 17:00:15 +0200 Subject: [PATCH 2/3] Testing column override with execute_with_key insertion --- .../java/com/querydsl/sql/InsertBase.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java index 4cd444d2e..8a796b81a 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java @@ -31,6 +31,7 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; +import com.querydsl.core.QueryException; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.Tuple; import com.querydsl.core.testutil.ExcludeIn; @@ -299,6 +300,24 @@ public class InsertBase extends AbstractBaseTest { assertNotNull(id); } + @Test(expected = QueryException.class) + @IncludeIn({DERBY, HSQLDB}) + public void insert_with_keys_OverriddenColumn() throws SQLException { + String originalColumnName = ColumnMetadata.getName(survey.id); + try { + configuration.registerColumnOverride(survey.getSchemaName(), survey.getTableName(), + originalColumnName, "wrongColumnName"); + + SQLInsertClause sqlInsertClause = new SQLInsertClause(connection, configuration, survey); + sqlInsertClause.addListener(new TestLoggingListener()); + Object id = sqlInsertClause.set(survey.name, "Hello you").executeWithKey(survey.id); + assertNotNull(id); + } finally { + configuration.registerColumnOverride(survey.getSchemaName(), survey.getTableName(), + originalColumnName, originalColumnName); + } + } + // http://sourceforge.net/tracker/index.php?func=detail&aid=3513432&group_id=280608&atid=2377440 @Test From 39dac82a586bb6bbcb4747c4bb48eb9a6317f085 Mon Sep 17 00:00:00 2001 From: Balazs Zsoldos Date: Mon, 11 May 2020 22:43:20 +0200 Subject: [PATCH 3/3] #2582 Keys are sorted in generated metadata classes --- .../querydsl/sql/codegen/KeyDataFactory.java | 8 +++---- .../sql/codegen/MetaDataExporter.java | 2 +- .../sql/codegen/KeyDataFactoryTest.java | 24 ++++++++++++------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java index 308183032..197bcc3a7 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java @@ -16,8 +16,8 @@ package com.querydsl.sql.codegen; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; import javax.annotation.Nullable; @@ -72,7 +72,7 @@ public class KeyDataFactory { public Map getExportedKeys(DatabaseMetaData md, String catalog, String schema, String tableName) throws SQLException { ResultSet foreignKeys = md.getExportedKeys(catalog, schema, tableName); - Map inverseForeignKeyData = new HashMap(); + Map inverseForeignKeyData = new TreeMap(); try { while (foreignKeys.next()) { String name = foreignKeys.getString(FK_NAME); @@ -101,7 +101,7 @@ public class KeyDataFactory { public Map getImportedKeys(DatabaseMetaData md, String catalog, String schema, String tableName) throws SQLException { ResultSet foreignKeys = md.getImportedKeys(catalog, schema, tableName); - Map foreignKeyData = new HashMap(); + Map foreignKeyData = new TreeMap(); try { while (foreignKeys.next()) { String name = foreignKeys.getString(FK_NAME); @@ -130,7 +130,7 @@ public class KeyDataFactory { public Map getPrimaryKeys(DatabaseMetaData md, String catalog, String schema, String tableName) throws SQLException { ResultSet primaryKeys = md.getPrimaryKeys(catalog, schema, tableName); - Map primaryKeyData = new HashMap(); + Map primaryKeyData = new TreeMap(); try { while (primaryKeys.next()) { String name = primaryKeys.getString(PK_NAME); diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java index 7203a73ac..32c620f38 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java @@ -356,7 +356,7 @@ public class MetaDataExporter { Map foreignKeyData = keyDataFactory .getImportedKeys(md, catalog, schema, tableName); if (!foreignKeyData.isEmpty()) { - Collection foreignKeysToGenerate = new HashSet(); + Collection foreignKeysToGenerate = new LinkedHashSet(); for (ForeignKeyData fkd : foreignKeyData.values()) { if (namingStrategy.shouldGenerateForeignKey(schemaAndTable, fkd)) { foreignKeysToGenerate.add(fkd); diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java index c92d50e6c..ab61daef1 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java @@ -13,11 +13,13 @@ */ package com.querydsl.sql.codegen; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.sql.DatabaseMetaData; import java.sql.SQLException; +import java.util.Iterator; import java.util.Map; import org.junit.Test; @@ -43,11 +45,13 @@ public class KeyDataFactoryTest extends AbstractJDBCTest { statement.execute("create table employee(" + "id INT, " + "superior_id int, " + + "superior_id2 int, " + "survey_id int, " + "survey_name varchar(30), " + "CONSTRAINT PK_employee PRIMARY KEY (id), " + "CONSTRAINT FK_survey FOREIGN KEY (survey_id, survey_name) REFERENCES survey(id,name), " - + "CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))"); + + "CONSTRAINT FK_superior2 FOREIGN KEY (superior_id) REFERENCES employee(id), " + + "CONSTRAINT FK_superior1 FOREIGN KEY (superior_id2) REFERENCES employee(id))"); KeyDataFactory keyDataFactory = new KeyDataFactory(new DefaultNamingStrategy(), "Q","","test", false); @@ -58,15 +62,19 @@ public class KeyDataFactoryTest extends AbstractJDBCTest { // primary key Map primaryKeys = keyDataFactory.getPrimaryKeys(md, null, null, "EMPLOYEE"); assertFalse(primaryKeys.isEmpty()); - // inverse foreign keys + // inverse foreign keys sorted in abc Map exportedKeys = keyDataFactory.getExportedKeys(md, null, null, "EMPLOYEE"); - assertFalse(exportedKeys.isEmpty()); - assertTrue(exportedKeys.containsKey("FK_SUPERIOR")); - // foreign keys + assertEquals(2, exportedKeys.size()); + Iterator exportedKeysIterator = exportedKeys.keySet().iterator(); + assertEquals("FK_SUPERIOR1", exportedKeysIterator.next()); + assertEquals("FK_SUPERIOR2", exportedKeysIterator.next()); + // foreign keys sorted in abc Map importedKeys = keyDataFactory.getImportedKeys(md, null, null, "EMPLOYEE"); - assertFalse(importedKeys.isEmpty()); - assertTrue(importedKeys.containsKey("FK_SUPERIOR")); - assertTrue(importedKeys.containsKey("FK_SURVEY")); + assertEquals(3, importedKeys.size()); + Iterator importedKeysIterator = importedKeys.keySet().iterator(); + assertEquals("FK_SUPERIOR1", importedKeysIterator.next()); + assertEquals("FK_SUPERIOR2", importedKeysIterator.next()); + assertEquals("FK_SURVEY", importedKeysIterator.next()); // SURVEY