From f863f9b652a54d27a57ddec02268d66ae6f7a447 Mon Sep 17 00:00:00 2001 From: hengsin Date: Tue, 26 Oct 2021 19:05:44 +0800 Subject: [PATCH] IDEMPIERE-5009 Syntax error while installing PackIn (native postgres) (#946) * IDEMPIERE-5009 Syntax error while installing PackIn (native postgres) * IDEMPIERE-5009 Syntax error while installing PackIn (native postgres) Incorporate patch from Carlos --- .../src/org/compiere/db/DB_Oracle.java | 12 ++++++++++++ .../src/org/compiere/db/DB_PostgreSQL.java | 17 ++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java b/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java index f6fd3858af..47c5e9b435 100644 --- a/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java +++ b/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java @@ -1480,6 +1480,7 @@ public class DB_Oracle implements AdempiereDatabase StringBuilder sqlDefault = new StringBuilder(sqlBase) .append(" ").append(column.getSQLDataType()); String defaultValue = column.getDefaultValue(); + String originalDefaultValue = defaultValue; if (defaultValue != null && defaultValue.length() > 0 && defaultValue.indexOf('@') == -1 // no variables @@ -1512,6 +1513,17 @@ public class DB_Oracle implements AdempiereDatabase // Null Values if (column.isMandatory() && defaultValue != null && defaultValue.length() > 0) { + if (!(DisplayType.isText(column.getAD_Reference_ID()) + || DisplayType.isList(column.getAD_Reference_ID()) + || column.getAD_Reference_ID() == DisplayType.YesNo + || column.getAD_Reference_ID() == DisplayType.Payment + // Two special columns: Defined as Table but DB Type is String + || column.getColumnName().equals("EntityType") || column.getColumnName().equals("AD_Language") + || (column.getAD_Reference_ID() == DisplayType.Button && + !(column.getColumnName().endsWith("_ID"))))) + { + defaultValue = originalDefaultValue; + } StringBuilder sqlSet = new StringBuilder("UPDATE ") .append(table.getTableName()) .append(" SET ").append(column.getColumnName()) diff --git a/org.compiere.db.postgresql.provider/src/org/compiere/db/DB_PostgreSQL.java b/org.compiere.db.postgresql.provider/src/org/compiere/db/DB_PostgreSQL.java index 6e6c6ace59..691fdaaa44 100755 --- a/org.compiere.db.postgresql.provider/src/org/compiere/db/DB_PostgreSQL.java +++ b/org.compiere.db.postgresql.provider/src/org/compiere/db/DB_PostgreSQL.java @@ -1390,6 +1390,7 @@ public class DB_PostgreSQL implements AdempiereDatabase // Default String defaultValue = column.getDefaultValue(); + String originalDefaultValue = defaultValue; if (defaultValue != null && defaultValue.length() > 0 && defaultValue.indexOf('@') == -1 // no variables @@ -1398,12 +1399,13 @@ public class DB_PostgreSQL implements AdempiereDatabase if (defaultValue.equalsIgnoreCase("sysdate")) defaultValue = "getDate()"; if (!defaultValue.startsWith("'") && !defaultValue.endsWith("'")) - defaultValue = "'" + defaultValue + "'"; + defaultValue = DB.TO_STRING(defaultValue); sql.append(defaultValue); } else { sql.append("null"); + defaultValue = null; } sql.append(")"); @@ -1411,6 +1413,19 @@ public class DB_PostgreSQL implements AdempiereDatabase // Null Values if (column.isMandatory() && defaultValue != null && defaultValue.length() > 0) { + if (!(DisplayType.isText(column.getAD_Reference_ID()) + || DisplayType.isList(column.getAD_Reference_ID()) + || column.getAD_Reference_ID() == DisplayType.YesNo + || column.getAD_Reference_ID() == DisplayType.Payment + // Two special columns: Defined as Table but DB Type is String + || column.getColumnName().equals("EntityType") || column.getColumnName().equals("AD_Language") + || (column.getAD_Reference_ID() == DisplayType.Button && + !(column.getColumnName().endsWith("_ID"))))) + { + defaultValue = originalDefaultValue; + if (defaultValue.equalsIgnoreCase("sysdate")) + defaultValue = "getDate()"; + } StringBuilder sqlSet = new StringBuilder("UPDATE ") .append(table.getTableName()) .append(" SET ").append(quoteColumnName(column.getColumnName()))