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