diff --git a/src/tap/data/ResultSetTableIterator.java b/src/tap/data/ResultSetTableIterator.java index 91a8faa980e0a9ffdec6271968dc32a8a57e6d50..d90f9447565ed0ecff3ae1a2fe320374340f4db4 100644 --- a/src/tap/data/ResultSetTableIterator.java +++ b/src/tap/data/ResultSetTableIterator.java @@ -581,7 +581,7 @@ public class ResultSetTableIterator implements TableIterator { if (resultMeta != null && (i - 1) < resultMeta.length && resultMeta[i - 1] != null){ if (resultMeta[i - 1] instanceof TAPColumn) colMeta[i - 1] = (TAPColumn)resultMeta[i - 1]; - else if (resultMeta[i - 1].getDatatype() != null){ + else if (resultMeta[i - 1].getDatatype() != null && !resultMeta[i - 1].getDatatype().isUnknown()){ colMeta[i - 1] = new TAPColumn(resultMeta[i - 1].getADQLName(), resultMeta[i - 1].getDatatype()); colMeta[i - 1].setDBName(resultMeta[i - 1].getDBName()); }else{ diff --git a/test/tap/data/ResultSetTableIteratorTest.java b/test/tap/data/ResultSetTableIteratorTest.java index 2b177f61508a76a87313a83aefe55c09066c6388..063cc3ca0e052231007d697555e8a690e4dbc8ab 100644 --- a/test/tap/data/ResultSetTableIteratorTest.java +++ b/test/tap/data/ResultSetTableIteratorTest.java @@ -198,7 +198,43 @@ public class ResultSetTableIteratorTest { }catch(Exception ex){ ex.printStackTrace(System.err); - fail("An exception occurs while formatting dates/times."); + fail("An exception occurs while checking geometrical functions datatypes."); + }finally{ + if (rs != null){ + try{ + rs.close(); + }catch(Exception ex){} + } + } + } + + @Test + public void testSQLFunctions(){ + ResultSet rs = null; + try{ + ADQLQuery query = (new ADQLParser()).parseQuery("SELECT COUNT(*), MIN(vmag), AVG(plx) FROM hipparcos;"); + + // create a valid ResultSet: + rs = DBTools.select(conn, (new PgSphereTranslator()).translate(query)); + + // Create the iterator: + ResultSetTableIterator rsit = new ResultSetTableIterator(rs, query.getResultingColumns()); + assertTrue(rsit.nextRow()); + + // Fetch the metadata: + TAPColumn[] cols = rsit.getMetadata(); + assertEquals(3, cols.length); + + // Check that the first column is a BIGINT: + assertEquals(DBType.DBDatatype.BIGINT, cols[0].getDatatype().type); + + // Check that the two next columns are REAL: + for(int i = 1; i < 3; i++) + assertEquals(DBType.DBDatatype.REAL, cols[i].getDatatype().type); + + }catch(Exception ex){ + ex.printStackTrace(System.err); + fail("An exception occurs while checking SQL functions datatypes"); }finally{ if (rs != null){ try{