diff --git a/dbPort/src/org/compiere/dbPort/Convert_PostgreSQL.java b/dbPort/src/org/compiere/dbPort/Convert_PostgreSQL.java index dca105ba49..1072aaba2a 100644 --- a/dbPort/src/org/compiere/dbPort/Convert_PostgreSQL.java +++ b/dbPort/src/org/compiere/dbPort/Convert_PostgreSQL.java @@ -192,6 +192,7 @@ public class Convert_PostgreSQL extends Convert_SQL92 { for (int cont = 0; cont < retVars.size(); cont++) { //hengsin, special character in replacement can cause exception String replacement = (String) retVars.get(cont); + replacement = escapeBackSlash(replacement); retValue = m.replaceFirst(Matcher.quoteReplacement(replacement)); if (retValue.indexOf(replacement) < 0) System.err.println("Failed to recover: " + replacement); @@ -199,6 +200,30 @@ public class Convert_PostgreSQL extends Convert_SQL92 { } return retValue; } + + private String escapeBackSlash(String in) + { + StringBuffer out = new StringBuffer(); + boolean escape = false; + int size = in.length(); + for(int i = 0; i < size; i++) { + char c = in.charAt(i); + out.append(c); + if (c == '\\') + { + escape = true; + out.append(c); + } + } + if (escape) + { + return "E" + out.toString(); + } + else + { + return out.toString(); + } + } /** * Clean up Statement. Remove all comments and while spaces Database diff --git a/dbPort/src/org/compiere/dbPort/Convert_PostgreSQLTest.java b/dbPort/src/org/compiere/dbPort/Convert_PostgreSQLTest.java index c8d5941aef..7851c86fd6 100644 --- a/dbPort/src/org/compiere/dbPort/Convert_PostgreSQLTest.java +++ b/dbPort/src/org/compiere/dbPort/Convert_PostgreSQLTest.java @@ -30,7 +30,12 @@ public final class Convert_PostgreSQLTest { //[ 1662983 ] Convert cutting backslash from string sql = "SELECT 'C:\\Documentos\\Test' FROM DUAL"; - sqe = "SELECT 'C:\\Documentos\\Test'"; + sqe = "SELECT E'C:\\\\Documentos\\\\Test'"; + r = convert.convert(sql); + verify(sql, r, sqe); + + sql = "SELECT 'C:Document' FROM DUAL"; + sqe = "SELECT 'C:Document'"; r = convert.convert(sql); verify(sql, r, sqe);