From 7a667bc5dba9050d2df8c4916c509ee073dbe06a Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 26 Jul 2024 08:10:10 +0200 Subject: [PATCH] IDEMPIERE-6194 2Pack must ignore the SIMILAR TO preference from user (#2423) - make the SIMILAR TO conversion work just for SELECT queries --- .../src/org/compiere/dbPort/Convert_PostgreSQL.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java b/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java index 9d05187b3a..13f8bd3a80 100644 --- a/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java +++ b/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java @@ -171,11 +171,16 @@ public class Convert_PostgreSQL extends Convert_SQL92 { return retValue; } + /** + * Convert LIKE to SIMILAR TO depending on the user preference P|IsUseSimilarTo - applies just to SELECT queries + * @param statement + * @return + */ private String convertSimilarTo(String statement) { String retValue = statement; boolean useSimilarTo = isUseSimilarTo(); - if (useSimilarTo) { - String replacement = "SIMILAR TO"; + if (useSimilarTo && statement.matches("(?i)^\\s*SELECT\\b.*")) { + final String replacement = "SIMILAR TO"; try { Matcher m = likePattern.matcher(retValue); retValue = m.replaceAll(replacement); @@ -188,6 +193,10 @@ public class Convert_PostgreSQL extends Convert_SQL92 { return retValue; } + /** + * True if the user preference IsUseSimilarTo is set to Y + * @return + */ private boolean isUseSimilarTo() { return "Y".equals(Env.getContext(Env.getCtx(), "P|IsUseSimilarTo")); }