From eddd2ec17e44da819d2f79109778cae3aba44ad1 Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Wed, 10 Aug 2016 10:50:22 +0200 Subject: [PATCH] [TAP] MAJOR FIX: the type of computed columns was ALWAYS returned as VARCHAR. This is particularly annoying for numeric functions like sqrt(...) (example query: SELECT TOP 1 sqrt(2) as s2 FROM whatever_table). This bug has been raised by M. Taylor. --- src/adql/translator/PostgreSQLTranslator.java | 8 ++++---- src/tap/data/ResultSetTableIterator.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/adql/translator/PostgreSQLTranslator.java b/src/adql/translator/PostgreSQLTranslator.java index 8e3b922..e20690d 100644 --- a/src/adql/translator/PostgreSQLTranslator.java +++ b/src/adql/translator/PostgreSQLTranslator.java @@ -16,7 +16,7 @@ package adql.translator; * You should have received a copy of the GNU Lesser General Public License * along with ADQLLibrary. If not, see <http://www.gnu.org/licenses/>. * - * Copyright 2012-2015 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), + * Copyright 2012-2016 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), * Astronomisches Rechen Institut (ARI) */ @@ -50,7 +50,7 @@ import adql.query.operand.function.geometry.RegionFunction; * </i></p> * * @author Grégory Mantelet (CDS;ARI) - * @version 1.4 (12/2015) + * @version 1.4 (08/2016) * * @see PgSphereTranslator */ @@ -77,7 +77,7 @@ public class PostgreSQLTranslator extends JDBCTranslator { * Builds a PostgreSQLTranslator which always translates in SQL all identifiers (schema, table and column) in the specified case sensitivity ; * in other words, schema, table and column names will all be surrounded or not by double quotes in the SQL translation. * - * @param allCaseSensitive <i>true</i> to translate all identifiers in a case sensitive manner (surrounded by double quotes), <i>false</i> for case insensitivity. + * @param allCaseSensitive <i>true</i> to translate all identifiers in a case sensitive manner (surrounded by double quotes), <i>false</i> for case insensitivity. */ public PostgreSQLTranslator(final boolean allCaseSensitive){ caseSensitivity = allCaseSensitive ? (byte)0x0F : (byte)0x00; @@ -241,7 +241,7 @@ public class PostgreSQLTranslator extends JDBCTranslator { else if (dbmsTypeName.equals("real") || dbmsTypeName.equals("float4")) return new DBType(DBDatatype.REAL); // DOUBLE - else if (dbmsTypeName.equals("double precision") || dbmsTypeName.equals("float8")) + else if (dbmsTypeName.equals("double precision") || dbmsTypeName.equals("float8") || dbmsTypeName.equals("numeric")) return new DBType(DBDatatype.DOUBLE); // BINARY else if (dbmsTypeName.equals("bit")) diff --git a/src/tap/data/ResultSetTableIterator.java b/src/tap/data/ResultSetTableIterator.java index c3ecf6f..bee5725 100644 --- a/src/tap/data/ResultSetTableIterator.java +++ b/src/tap/data/ResultSetTableIterator.java @@ -43,7 +43,7 @@ import uws.ISO8601Format; * </i></p> * * @author Grégory Mantelet (ARI) - * @version 2.1 (04/2016) + * @version 2.1 (08/2016) * @since 2.0 */ public class ResultSetTableIterator implements TableIterator { @@ -779,7 +779,7 @@ public class ResultSetTableIterator implements TableIterator { dbType = translator.convertTypeFromDB(dbmsType, dbmsTypeName, dbmsTypePrefix, typeParams); // And if unsuccessful, apply a default conversion: - if (dbType == null) + if (dbType == null || dbType.isUnknown()) dbType = defaultTypeConversion(dbmsTypePrefix, typeParams, dbms); return dbType; @@ -861,7 +861,7 @@ public class ResultSetTableIterator implements TableIterator { else if (dbmsTypeName.equals("real") || dbmsTypeName.equals("float4") || (dbmsTypeName.equals("float") && lengthParam <= 63)) return new DBType(DBDatatype.REAL); // DOUBLE - else if (dbmsTypeName.equals("double") || dbmsTypeName.equals("double precision") || dbmsTypeName.equals("float8") || (dbmsTypeName.equals("float") && lengthParam > 63)) + else if (dbmsTypeName.equals("double") || dbmsTypeName.equals("double precision") || dbmsTypeName.equals("float8") || (dbmsTypeName.equals("float") && lengthParam > 63) || dbmsTypeName.equals("numeric")) return new DBType(DBDatatype.DOUBLE); // BINARY else if (dbmsTypeName.equals("bit") || dbmsTypeName.equals("binary") || dbmsTypeName.equals("raw") || ((dbmsTypeName.equals("char") || dbmsTypeName.equals("character")) && dbmsTypeName.endsWith(" for bit data"))) -- GitLab