From 9d5116876393709356a5fa128b74c18442c1e79a Mon Sep 17 00:00:00 2001
From: gmantele <gmantele@ari.uni-heidelberg.de>
Date: Wed, 29 Oct 2014 16:51:47 +0100
Subject: [PATCH] [ADQL] Support the special escaping syntax for string
 literals in Postgres (strings to escape must be prefixed by a E before the
 starting ').

---
 src/adql/translator/PostgreSQLTranslator.java | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/adql/translator/PostgreSQLTranslator.java b/src/adql/translator/PostgreSQLTranslator.java
index 4102bdf..4a5b5e9 100644
--- a/src/adql/translator/PostgreSQLTranslator.java
+++ b/src/adql/translator/PostgreSQLTranslator.java
@@ -21,6 +21,7 @@ package adql.translator;
  */
 
 import adql.query.IdentifierField;
+import adql.query.operand.StringConstant;
 import adql.query.operand.function.MathFunction;
 import adql.query.operand.function.geometry.AreaFunction;
 import adql.query.operand.function.geometry.BoxFunction;
@@ -45,7 +46,7 @@ import adql.query.operand.function.geometry.RegionFunction;
  * </i></p>
  * 
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 1.3 (08/2014)
+ * @version 1.3 (10/2014)
  * 
  * @see PgSphereTranslator
  */
@@ -98,6 +99,19 @@ public class PostgreSQLTranslator extends JDBCTranslator {
 		return field == null ? false : field.isCaseSensitive(caseSensitivity);
 	}
 
+	@Override
+	public String translate(StringConstant strConst) throws TranslationException{
+		// Deal with the special escaping syntax of Postgres:
+		/* A string containing characters to escape must be prefixed by an E.
+		 * Without this prefix, Potsgres does not escape the concerned characters and
+		 * consider backslashes as normal characters.
+		 * For instance: E'foo\tfoo2'. */
+		if (strConst.getValue() != null && strConst.getValue().contains("\\"))
+			return "E'" + strConst.getValue() + "'";
+		else
+			return super.translate(strConst);
+	}
+
 	@Override
 	public String translate(MathFunction fct) throws TranslationException{
 		switch(fct.getType()){
-- 
GitLab