diff --git a/src/adql/translator/ADQLTranslator.java b/src/adql/translator/ADQLTranslator.java index d52c9999efd485cd6602e0493e3f8157c151fec1..2455ace569b9fcddfeed1804cea4af6eebacc35c 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 71b07f5914627beb2770da0822ad7bfae7839512..99fcd3c54c25ebcc5396e8731285cc00b530c881 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 d9d1664e42be8edbde91eb1836e9e99caa4966e3..75a2438057ee66b657fe5c3d022c750b35df821c 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 f762e5e7d143a482cd938a37bd1b194b842aefba..26687a97334152ba5eab5c1ce90e731642c203eb 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 e52880e93346cf6969adde238e3e522a58064e8a..1f6606128339fa8116e408c62a5a0ab7ecc140be 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 acf049942f9e041a48c68b53846ec5209fe362dc..5a24c3f38daca3c96523a39f99d549242c3933c1 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;