From 302e9f3cd76d5c255ab367d77ceedc94d9a366bd Mon Sep 17 00:00:00 2001 From: Nicolas Micoud <58596990+nmicoud@users.noreply.github.com> Date: Wed, 1 Jun 2022 13:46:45 +0200 Subject: [PATCH] IDEMPIERE-5305 : ORA-01704: string literal too long when trying to update a mail template --- .../src/org/compiere/model/PO.java | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java index fef7a270a4..581f33eb1f 100644 --- a/org.adempiere.base/src/org/compiere/model/PO.java +++ b/org.adempiere.base/src/org/compiere/model/PO.java @@ -4049,6 +4049,7 @@ && is_ValueChanged(p_info.getColumnName(i))) .append(tableName).append("_Trl SET "); // + ArrayList values = new ArrayList(); StringBuilder sqlcols = new StringBuilder(); for (int i = 0; i < p_info.getColumnCount(); i++) { @@ -4056,19 +4057,8 @@ && is_ValueChanged(p_info.getColumnName(i))) if (p_info.isColumnTranslated(i) && is_ValueChanged(columnName)) { - sqlcols.append(columnName).append("="); - Object value = get_Value(columnName); - if (value == null) - sqlcols.append("NULL"); - else if (value instanceof String) - sqlcols.append(DB.TO_STRING((String)value)); - else if (value instanceof Boolean) - sqlcols.append(((Boolean)value).booleanValue() ? "'Y'" : "'N'"); - else if (value instanceof Timestamp) - sqlcols.append(DB.TO_DATE((Timestamp)value)); - else - sqlcols.append(value.toString()); - sqlcols.append(","); + sqlcols.append(columnName).append("=?,"); + values.add(get_Value(columnName)); // Reset of related translation cache entries String[] availableLanguages = Language.getNames(); @@ -4088,6 +4078,9 @@ else if (value instanceof Timestamp) int no = -1; try { + Object[] params = new Object[values.size()]; + values.toArray(params); + if (client.isMultiLingualDocument()) { if (client.getAD_Language().equals(baselang)) { // tenant language = base language @@ -4108,7 +4101,7 @@ else if (value instanceof Timestamp) .append("IsTranslated='Y'") .append(whereid) .append(getAD_Client_ID() == 0 ? andBaseLang : andClientLang); - no = DB.executeUpdateEx(sqlexec.toString(), m_trxName); + no = DB.executeUpdateEx(sqlexec.toString(), params, m_trxName); if (log.isLoggable(Level.FINE)) log.fine("#" + no); if (no >= 0) { // set other translations as untranslated @@ -4129,7 +4122,7 @@ else if (value instanceof Timestamp) .append(sqlcols) .append("IsTranslated='Y'") .append(whereid); - no = DB.executeUpdateEx(sqlexec.toString(), m_trxName); + no = DB.executeUpdateEx(sqlexec.toString(), params, m_trxName); if (log.isLoggable(Level.FINE)) log.fine("#" + no); } } catch (DBException e) {