From 26e764c2a298ee761eb4cd93136e19daa17b42a1 Mon Sep 17 00:00:00 2001 From: hengsin Date: Tue, 3 Mar 2020 16:25:54 +0800 Subject: [PATCH] IDEMPIERE-4177 Replace SYSDATE with getDate(). Add SYSDATE to getDate() translation for native dialect. Still needed as there are still many usage of SYSDATE in the Application Dictionary. --- .../org/compiere/dbPort/Convert_PostgreSQL.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 11b2c91b7c..869fdffbb2 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 @@ -53,6 +53,8 @@ public class Convert_PostgreSQL extends Convert_SQL92 { private final static Pattern likePattern = Pattern.compile("\\bLIKE\\b", REGEX_FLAGS); + private final static Pattern sysDatePattern = Pattern.compile("\\bSYSDATE\\b", REGEX_FLAGS); + /** * Is Oracle DB * @@ -77,6 +79,7 @@ public class Convert_PostgreSQL extends Convert_SQL92 { protected ArrayList convertStatement(String sqlStatement) { ArrayList result = new ArrayList(); if (DB_PostgreSQL.isUseNativeDialect()) { + sqlStatement = convertSysDate(sqlStatement); sqlStatement = convertSimilarTo(sqlStatement); result.add(sqlStatement); return result; @@ -131,6 +134,20 @@ public class Convert_PostgreSQL extends Convert_SQL92 { return result; } // convertStatement + private String convertSysDate(String statement) { + String retValue = statement; + String replacement = "getDate()"; + try { + Matcher m = sysDatePattern.matcher(retValue); + retValue = m.replaceAll(replacement); + } catch (Exception e) { + String error = "Error expression: " + sysDatePattern.pattern() + " - " + e; + log.info(error); + m_conversionError = error; + } + return retValue; + } + private String convertSimilarTo(String statement) { String retValue = statement; boolean useSimilarTo = isUseSimilarTo();