From f265eb17e754c8620c33bb77e912b0248e6146ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Mantelet?= <gregory.mantelet@astro.unistra.fr> Date: Mon, 26 Aug 2019 18:01:27 +0200 Subject: [PATCH] [ADQL] Add default translation for IN_UNIT(...): as geometries, same as in ADQL. --- src/adql/translator/ADQLTranslator.java | 4 ++++ src/adql/translator/JDBCTranslator.java | 3 +++ src/adql/translator/MySQLTranslator.java | 8 +++++++- src/adql/translator/PostgreSQLTranslator.java | 6 ++++++ src/adql/translator/SQLServerTranslator.java | 8 +++++++- test/adql/translator/TestJDBCTranslator.java | 6 ++++++ 6 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/adql/translator/ADQLTranslator.java b/src/adql/translator/ADQLTranslator.java index d52c999..2455ace 100644 --- a/src/adql/translator/ADQLTranslator.java +++ b/src/adql/translator/ADQLTranslator.java @@ -51,6 +51,7 @@ import adql.query.operand.WrappedOperand; import adql.query.operand.function.ADQLFunction; import adql.query.operand.function.MathFunction; import adql.query.operand.function.SQLFunction; +import adql.query.operand.function.UnitConversionFunction; import adql.query.operand.function.UserDefinedFunction; import adql.query.operand.function.geometry.AreaFunction; import adql.query.operand.function.geometry.BoxFunction; @@ -151,6 +152,9 @@ public interface ADQLTranslator { /** @since 2.0 */ public String translate(LowerFunction fct) throws TranslationException; + /** @since 2.0 */ + public String translate(UnitConversionFunction fct) throws TranslationException; + /* ***** GEOMETRICAL FUNCTIONS ***** */ public String translate(GeometryFunction fct) throws TranslationException; diff --git a/src/adql/translator/JDBCTranslator.java b/src/adql/translator/JDBCTranslator.java index 71b07f5..99fcd3c 100644 --- a/src/adql/translator/JDBCTranslator.java +++ b/src/adql/translator/JDBCTranslator.java @@ -63,6 +63,7 @@ import adql.query.operand.function.ADQLFunction; import adql.query.operand.function.MathFunction; import adql.query.operand.function.SQLFunction; import adql.query.operand.function.SQLFunctionType; +import adql.query.operand.function.UnitConversionFunction; import adql.query.operand.function.UserDefinedFunction; import adql.query.operand.function.geometry.AreaFunction; import adql.query.operand.function.geometry.BoxFunction; @@ -836,6 +837,8 @@ public abstract class JDBCTranslator implements ADQLTranslator { return translate((UserDefinedFunction)fct); else if (fct instanceof LowerFunction) return translate((LowerFunction)fct); + else if (fct instanceof UnitConversionFunction) + return translate((UnitConversionFunction)fct); else return getDefaultADQLFunction(fct); } diff --git a/src/adql/translator/MySQLTranslator.java b/src/adql/translator/MySQLTranslator.java index d9d1664..75a2438 100644 --- a/src/adql/translator/MySQLTranslator.java +++ b/src/adql/translator/MySQLTranslator.java @@ -29,6 +29,7 @@ import adql.query.constraint.Comparison; import adql.query.operand.ADQLOperand; import adql.query.operand.Concatenation; import adql.query.operand.Operation; +import adql.query.operand.function.UnitConversionFunction; import adql.query.operand.function.geometry.AreaFunction; import adql.query.operand.function.geometry.BoxFunction; import adql.query.operand.function.geometry.CentroidFunction; @@ -155,7 +156,7 @@ public class MySQLTranslator extends JDBCTranslator { switch(comp.getOperator()) { case ILIKE: case NOTILIKE: - throw new TranslationException("Translation of ILIKE impossible! This is not supported in MySQL."); + throw new TranslationException("Translation of ILIKE impossible! This is not supported natively in MySQL."); default: return translate(comp.getLeftOperand()) + " " + comp.getOperator().toADQL() + " " + translate(comp.getRightOperand()); } @@ -177,6 +178,11 @@ public class MySQLTranslator extends JDBCTranslator { return translated.toString(); } + @Override + public String translate(final UnitConversionFunction fct) throws TranslationException { + return getDefaultADQLFunction(fct); + } + /* ********************************************************************** */ /* * * */ /* * TYPE MANAGEMENT * */ diff --git a/src/adql/translator/PostgreSQLTranslator.java b/src/adql/translator/PostgreSQLTranslator.java index f762e5e..26687a9 100644 --- a/src/adql/translator/PostgreSQLTranslator.java +++ b/src/adql/translator/PostgreSQLTranslator.java @@ -30,6 +30,7 @@ import adql.query.operand.OperationType; import adql.query.operand.StringConstant; import adql.query.operand.function.ADQLFunction; import adql.query.operand.function.MathFunction; +import adql.query.operand.function.UnitConversionFunction; import adql.query.operand.function.geometry.AreaFunction; import adql.query.operand.function.geometry.BoxFunction; import adql.query.operand.function.geometry.CentroidFunction; @@ -175,6 +176,11 @@ public class PostgreSQLTranslator extends JDBCTranslator { } } + @Override + public String translate(final UnitConversionFunction fct) throws TranslationException { + return getDefaultADQLFunction(fct); + } + @Override public String translate(ExtractCoord extractCoord) throws TranslationException { return getDefaultADQLFunction(extractCoord); diff --git a/src/adql/translator/SQLServerTranslator.java b/src/adql/translator/SQLServerTranslator.java index e52880e..1f66061 100644 --- a/src/adql/translator/SQLServerTranslator.java +++ b/src/adql/translator/SQLServerTranslator.java @@ -41,6 +41,7 @@ import adql.query.operand.ADQLColumn; import adql.query.operand.ADQLOperand; import adql.query.operand.Concatenation; import adql.query.operand.function.MathFunction; +import adql.query.operand.function.UnitConversionFunction; import adql.query.operand.function.geometry.AreaFunction; import adql.query.operand.function.geometry.BoxFunction; import adql.query.operand.function.geometry.CentroidFunction; @@ -194,12 +195,17 @@ public class SQLServerTranslator extends JDBCTranslator { switch(comp.getOperator()) { case ILIKE: case NOTILIKE: - throw new TranslationException("Translation of ILIKE impossible! This is not supported in MS-SQL Server."); + throw new TranslationException("Translation of ILIKE impossible! This is not supported natively in MS-SQL Server."); default: return translate(comp.getLeftOperand()) + " " + comp.getOperator().toADQL() + " " + translate(comp.getRightOperand()); } } + @Override + public String translate(final UnitConversionFunction fct) throws TranslationException { + return getDefaultADQLFunction(fct); + } + @Override public String translate(Concatenation concat) throws TranslationException { StringBuffer translated = new StringBuffer(); diff --git a/test/adql/translator/TestJDBCTranslator.java b/test/adql/translator/TestJDBCTranslator.java index acf0499..5a24c3f 100644 --- a/test/adql/translator/TestJDBCTranslator.java +++ b/test/adql/translator/TestJDBCTranslator.java @@ -20,6 +20,7 @@ import adql.query.operand.NumericConstant; import adql.query.operand.Operation; import adql.query.operand.StringConstant; import adql.query.operand.function.DefaultUDF; +import adql.query.operand.function.UnitConversionFunction; import adql.query.operand.function.geometry.AreaFunction; import adql.query.operand.function.geometry.BoxFunction; import adql.query.operand.function.geometry.CentroidFunction; @@ -173,6 +174,11 @@ public class TestJDBCTranslator { public final static class AJDBCTranslator extends JDBCTranslator { + @Override + public String translate(UnitConversionFunction fct) throws TranslationException { + return null; + } + @Override public String translate(ExtractCoord extractCoord) throws TranslationException { return null; -- GitLab