From a3fb6f5b9c53caf96f0020e9350237f3b0b2726d Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Sat, 18 May 2024 04:14:09 +0200 Subject: [PATCH] IDEMPIERE-6149 Model[Class|Interface]Generator must have a predictable order independent of the developer language (collation) (#2368) --- .../src/org/adempiere/util/ModelClassGenerator.java | 8 ++++++++ .../src/org/adempiere/util/ModelInterfaceGenerator.java | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/org.adempiere.base/src/org/adempiere/util/ModelClassGenerator.java b/org.adempiere.base/src/org/adempiere/util/ModelClassGenerator.java index 760aa3b4cc..5221aa6e9e 100644 --- a/org.adempiere.base/src/org/adempiere/util/ModelClassGenerator.java +++ b/org.adempiere.base/src/org/adempiere/util/ModelClassGenerator.java @@ -318,6 +318,10 @@ public class ModelClassGenerator + " AND c.IsActive='Y' AND (c.ColumnSQL IS NULL OR c.ColumnSQL NOT LIKE '@SQL%') " + (!Util.isEmpty(entityTypeFilter) ? " AND c." + entityTypeFilter : "") + " ORDER BY c.ColumnName"; + if (DB.isOracle()) + sql += " COLLATE \"BINARY\""; + else if (DB.isPostgreSQL()) + sql += " COLLATE \"C\""; boolean isKeyNamePairCreated = false; // true if the method "getKeyNamePair" is already generated PreparedStatement pstmt = null; ResultSet rs = null; @@ -669,6 +673,10 @@ public class ModelClassGenerator StringBuilder statement = new StringBuilder(); // String sql = "SELECT Value, Name FROM AD_Ref_List WHERE AD_Reference_ID=? ORDER BY Value"; // even inactive, see IDEMPIERE-4979 + if (DB.isOracle()) + sql += " COLLATE \"BINARY\""; + else if (DB.isPostgreSQL()) + sql += " COLLATE \"C\""; PreparedStatement pstmt = null; ResultSet rs = null; try diff --git a/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java b/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java index 6b7a47da2c..97736811c0 100644 --- a/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java +++ b/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java @@ -252,6 +252,10 @@ public class ModelInterfaceGenerator + " AND c.IsActive='Y' AND (c.ColumnSQL IS NULL OR c.ColumnSQL NOT LIKE '@SQL%') " + (!Util.isEmpty(entityTypeFilter) ? " AND c." + entityTypeFilter : "") + " ORDER BY c.ColumnName"; + if (DB.isOracle()) + sql += " COLLATE \"BINARY\""; + else if (DB.isPostgreSQL()) + sql += " COLLATE \"C\""; PreparedStatement pstmt = null; ResultSet rs = null; try {