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é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