diff --git a/src/adql/translator/MySQLTranslator.java b/src/adql/translator/MySQLTranslator.java index ac80f4538d7f605844804d55f31e76e8edc11cd5..ba81c6ad37fe393b79c6aba8e931d359c73f0a67 100644 --- a/src/adql/translator/MySQLTranslator.java +++ b/src/adql/translator/MySQLTranslator.java @@ -33,6 +33,7 @@ import adql.query.operand.ADQLOperand; import adql.query.operand.Concatenation; import adql.query.operand.Operation; import adql.query.operand.function.InUnitFunction; +import adql.query.operand.function.MathFunction; import adql.query.operand.function.geometry.AreaFunction; import adql.query.operand.function.geometry.BoxFunction; import adql.query.operand.function.geometry.CentroidFunction; @@ -205,6 +206,20 @@ public class MySQLTranslator extends JDBCTranslator { } } + @Override + public String translate(MathFunction fct) throws TranslationException { + switch(fct.getType()) { + case TRUNCATE: + if (fct.getNbParameters() >= 2) + return "truncate(" + translate(fct.getParameter(0)) + ", " + translate(fct.getParameter(1)) + ")"; + else + return "truncate(" + translate(fct.getParameter(0)) + ", 0)"; + + default: + return getDefaultADQLFunction(fct); + } + } + @Override public String translate(Comparison comp) throws TranslationException { switch(comp.getOperator()) { diff --git a/src/adql/translator/PostgreSQLTranslator.java b/src/adql/translator/PostgreSQLTranslator.java index 46d7a1a6deff668b446193b392c0839bb8fc14a6..fc34b036f4a92e5629977fa7d8abf043fad20dec 100644 --- a/src/adql/translator/PostgreSQLTranslator.java +++ b/src/adql/translator/PostgreSQLTranslator.java @@ -204,17 +204,13 @@ public class PostgreSQLTranslator extends JDBCTranslator { case TRUNCATE: if (fct.getNbParameters() >= 2) return "trunc(CAST(" + translate(fct.getParameter(0)) + " AS numeric), " + translate(fct.getParameter(1)) + ")"; - else if (fct.getNbParameters() >= 1) - return "trunc(CAST(" + translate(fct.getParameter(0)) + " AS numeric)" + ")"; else - return "trunc()"; + return "trunc(CAST(" + translate(fct.getParameter(0)) + " AS numeric)" + ")"; case ROUND: if (fct.getNbParameters() >= 2) return "round(CAST(" + translate(fct.getParameter(0)) + " AS numeric), " + translate(fct.getParameter(1)) + ")"; - else if (fct.getNbParameters() >= 1) - return "round(CAST(" + translate(fct.getParameter(0)) + " AS numeric))"; else - return "round()"; + return "round(CAST(" + translate(fct.getParameter(0)) + " AS numeric))"; case PI: return getDefaultADQLFunction(fct); default: diff --git a/src/adql/translator/SQLServerTranslator.java b/src/adql/translator/SQLServerTranslator.java index 677e671b85a9216e19411d97d130554d73f0e640..57078170f75693bb0bb8c128c59f770991a1a759 100644 --- a/src/adql/translator/SQLServerTranslator.java +++ b/src/adql/translator/SQLServerTranslator.java @@ -456,7 +456,10 @@ public class SQLServerTranslator extends JDBCTranslator { switch(fct.getType()) { case TRUNCATE: // third argument to round nonzero means do a truncate - return "round(convert(float, " + ((fct.getNbParameters() >= 2) ? (translate(fct.getParameter(0)) + ", " + translate(fct.getParameter(1))) : "") + "),1)"; + if (fct.getNbParameters() >= 2) + return "round(convert(float, " + translate(fct.getParameter(0)) + "), convert(float, " + translate(fct.getParameter(1)) + "), 1)"; + else + return "round(convert(float, " + translate(fct.getParameter(0)) + "), 0, 1)"; case MOD: return ((fct.getNbParameters() >= 2) ? ("convert(float, " + translate(fct.getParameter(0)) + ") % convert(float, " + translate(fct.getParameter(1)) + ")") : ""); case ATAN2: @@ -478,7 +481,10 @@ public class SQLServerTranslator extends JDBCTranslator { case RADIANS: return "radians(convert(float, " + translate(fct.getParameter(0)) + "))"; case ROUND: - return "round(convert(float, " + translate(fct.getParameter(0)) + ")" + ", " + translate(fct.getParameter(1)) + ")"; + if (fct.getNbParameters() >= 2) + return "round(convert(float, " + translate(fct.getParameter(0)) + ")" + ", " + translate(fct.getParameter(1)) + ")"; + else + return "round(convert(float, " + translate(fct.getParameter(0)) + ")" + ", 0)"; default: return getDefaultADQLFunction(fct);