Skip to content
Snippets Groups Projects
Commit 704877d2 authored by gmantele's avatar gmantele
Browse files

[TAP] Convert any DBColumn into a TAPColumn at ResultSetTableIterator creation.

parent 3306decd
No related branches found
No related tags found
No related merge requests found
...@@ -455,7 +455,7 @@ public class ResultSetTableIterator implements TableIterator { ...@@ -455,7 +455,7 @@ public class ResultSetTableIterator implements TableIterator {
* @since 2.1 * @since 2.1
*/ */
public ResultSetTableIterator(final DBConnection dbConn, final ResultSet dataSet, final DBColumn[] metadata) throws NullPointerException, DataReadException{ public ResultSetTableIterator(final DBConnection dbConn, final ResultSet dataSet, final DBColumn[] metadata) throws NullPointerException, DataReadException{
this(dbConn, dataSet, null, null, null); this(dbConn, dataSet, metadata, null, null);
} }
/** /**
...@@ -579,9 +579,12 @@ public class ResultSetTableIterator implements TableIterator { ...@@ -579,9 +579,12 @@ public class ResultSetTableIterator implements TableIterator {
colMeta = new TAPColumn[nbColumns]; colMeta = new TAPColumn[nbColumns];
for(int i = 1; i <= nbColumns; i++){ for(int i = 1; i <= nbColumns; i++){
if (resultMeta != null && (i - 1) < resultMeta.length && resultMeta[i - 1] != null){ if (resultMeta != null && (i - 1) < resultMeta.length && resultMeta[i - 1] != null){
try{ if (resultMeta[i - 1] instanceof TAPColumn)
colMeta[i - 1] = (TAPColumn)resultMeta[i - 1]; colMeta[i - 1] = (TAPColumn)resultMeta[i - 1];
}catch(ClassCastException cce){ else if (resultMeta[i - 1].getDatatype() != null){
colMeta[i - 1] = new TAPColumn(resultMeta[i - 1].getADQLName(), resultMeta[i - 1].getDatatype());
colMeta[i - 1].setDBName(resultMeta[i - 1].getDBName());
}else{
DBType datatype = convertType(metadata.getColumnType(i), metadata.getColumnTypeName(i), dbms); DBType datatype = convertType(metadata.getColumnType(i), metadata.getColumnTypeName(i), dbms);
colMeta[i - 1] = new TAPColumn(resultMeta[i - 1].getADQLName(), datatype); colMeta[i - 1] = new TAPColumn(resultMeta[i - 1].getADQLName(), datatype);
} }
......
...@@ -12,6 +12,11 @@ import org.junit.AfterClass; ...@@ -12,6 +12,11 @@ import org.junit.AfterClass;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import adql.db.DBType;
import adql.parser.ADQLParser;
import adql.query.ADQLQuery;
import adql.translator.PgSphereTranslator;
import tap.metadata.TAPColumn;
import testtools.DBTools; import testtools.DBTools;
public class ResultSetTableIteratorTest { public class ResultSetTableIteratorTest {
...@@ -165,4 +170,41 @@ public class ResultSetTableIteratorTest { ...@@ -165,4 +170,41 @@ public class ResultSetTableIteratorTest {
} }
} }
} }
@Test
public void testGeometryColumns(){
ResultSet rs = null;
try{
ADQLQuery query = (new ADQLParser()).parseQuery("SELECT TOP 1 POINT('', ra, deg), CENTROID(CIRCLE('', ra, deg, 2)), BOX('', ra-10, deg-2, ra+10, deg+2), CIRCLE('', ra, deg, 2) FROM gums;");
// 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(4, cols.length);
// Check that the two first columns are POINTs:
for(int i = 0; i < 2; i++)
assertEquals(DBType.DBDatatype.POINT, cols[i].getDatatype().type);
// Check that the next columns are REGIONs:
for(int i = 2; i < 3; i++)
assertEquals(DBType.DBDatatype.REGION, cols[i].getDatatype().type);
}catch(Exception ex){
ex.printStackTrace(System.err);
fail("An exception occurs while formatting dates/times.");
}finally{
if (rs != null){
try{
rs.close();
}catch(Exception ex){}
}
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment