Package adql.db
Class DBCommonColumn
- java.lang.Object
-
- adql.db.DBCommonColumn
-
- All Implemented Interfaces:
DBColumn
public class DBCommonColumn extends java.lang.Object implements DBColumn
This is a special column which exists only after a NATURAL JOIN or a JOIN ... USING between two tables. It lets unify several columns of the joined tables in a single column. Thus, the writer of an ADQL query can use the column name without table prefix (since after the join there will be only one) or with a prefix table of the joined tables. The list of all covered tables is stored in this object and can be extended in case of several JOINs.- Since:
- 1.2
- Version:
- 1.3 (05/2015)
- Author:
- Grégory Mantelet (ARI) - gmantele@ari.uni-heidelberg.de
-
-
Field Summary
Fields Modifier and Type Field Description protected DBColumngeneralColumnDescprotected java.util.ArrayList<DBTable>lstCoveredTables
-
Constructor Summary
Constructors Constructor Description DBCommonColumn(DBColumn leftCol, DBColumn rightCol)Create a column which merges both of the given columns.DBCommonColumn(DBCommonColumn toCopy, java.lang.String dbName, java.lang.String adqlName)Constructor by copy.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddCoveredTable(DBTable table)Add a table that this common column must cover from now.DBColumncopy(java.lang.String dbName, java.lang.String adqlName, DBTable dbTable)WARNING: This copy function does not make a real copy of this DBCommonColumn ! It returns a modified copy of the general column description it contains.java.lang.StringgetADQLName()Gets the name of this column (without any prefix and double-quotes).java.util.Iterator<DBTable>getCoveredTables()Get an iterator over the list of all tables covered by this common column.DBTypegetDatatype()Get the type of this column (as closed as possible from the "database" type).java.lang.StringgetDBName()Gets the name of this column in the "database".DBTablegetTable()Gets the table which contains thisDBColumn.
-
-
-
Constructor Detail
-
DBCommonColumn
public DBCommonColumn(DBColumn leftCol, DBColumn rightCol) throws UnresolvedJoinException
Create a column which merges both of the given columns. This specialDBColumnimplementation is not associated with one table, and can be listed in aDBTableONLY IF the latter is the result of a sub-query (seeADQLQuery.getResultingColumns()). A column resulting from a tables join is common only to the joined tables. That's why a list of all tables covered by this column is created or update at each merge. It can be accessed thanks togetCoveredTables(). Note: In the case one or both of the columns to join areDBCommonColumn, the list of their covered tables are also merged.- Parameters:
leftCol- Column of the left join table. May be aDBCommonColumn.rightCol- Column of the right join table. May be aDBCommonColumn.- Throws:
UnresolvedJoinException- If the type of the two given columns are not roughly (just testing numeric, string or geometry) compatible.
-
DBCommonColumn
public DBCommonColumn(DBCommonColumn toCopy, java.lang.String dbName, java.lang.String adqlName)
Constructor by copy. It returns a copy of this instance ofDBCommonColumn. Note: The list of covered tables is NOT deeply copied!- Parameters:
toCopy- TheDBCommonColumnto copy.dbName- The new DB name of thisDBCommonColumn.adqlName- The new ADQL name of thisDBCommonColumn.
-
-
Method Detail
-
getADQLName
public final java.lang.String getADQLName()
Description copied from interface:DBColumnGets the name of this column (without any prefix and double-quotes).- Specified by:
getADQLNamein interfaceDBColumn- Returns:
- Its ADQL name.
-
getDBName
public final java.lang.String getDBName()
Description copied from interface:DBColumnGets the name of this column in the "database".
-
getDatatype
public final DBType getDatatype()
Description copied from interface:DBColumnGet the type of this column (as closed as possible from the "database" type).
Note: The returned type should be as closed as possible from a type listed by the IVOA in the TAP protocol description into the section UPLOAD.
- Specified by:
getDatatypein interfaceDBColumn- Returns:
- Its type.
-
getTable
public final DBTable getTable()
Description copied from interface:DBColumnGets the table which contains thisDBColumn.
-
getCoveredTables
public final java.util.Iterator<DBTable> getCoveredTables()
Get an iterator over the list of all tables covered by this common column.- Returns:
- Iterator over all covered tables.
-
addCoveredTable
protected void addCoveredTable(DBTable table)
Add a table that this common column must cover from now. Warning: no unicity check is never done !- Parameters:
table- Table to add in the covered tables list.
-
copy
public DBColumn copy(java.lang.String dbName, java.lang.String adqlName, DBTable dbTable)
WARNING: This copy function does not make a real copy of this DBCommonColumn ! It returns a modified copy of the general column description it contains. Note: To make a real copy of this DBCommonColumn use the Constructor by copyDBCommonColumn(DBCommonColumn, String, String).- Specified by:
copyin interfaceDBColumn- Parameters:
dbName- Its new DB name.adqlName- Its new ADQL name.dbTable- Its new DBTable- Returns:
- A modified copy of the general column description this common column represents.
- See Also:
DBColumn.copy(java.lang.String, java.lang.String, adql.db.DBTable)
-
-