Package adql.db

Class DBCommonColumn

java.lang.Object
adql.db.DBCommonColumn
All Implemented Interfaces:
DBColumn

public class DBCommonColumn extends 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
  • Field Details

    • generalColumnDesc

      protected DBColumn generalColumnDesc
    • lstCoveredTables

      protected ArrayList<DBTable> lstCoveredTables
  • Constructor Details

    • DBCommonColumn

      public DBCommonColumn(DBColumn leftCol, DBColumn rightCol) throws UnresolvedJoinException
      Create a column which merges both of the given columns.

      This special DBColumn implementation is not associated with one table, and can be listed in a DBTable ONLY IF the latter is the result of a sub-query (see ADQLQuery.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 to getCoveredTables().

      Note: In the case one or both of the columns to join are DBCommonColumn, the list of their covered tables are also merged.

      Parameters:
      leftCol - Column of the left join table. May be a DBCommonColumn.
      rightCol - Column of the right join table. May be a DBCommonColumn.
      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, String dbName, String adqlName)
      Constructor by copy. It returns a copy of this instance of DBCommonColumn.

      Note: The list of covered tables is NOT deeply copied!

      Parameters:
      toCopy - The DBCommonColumn to copy.
      dbName - The new DB name of this DBCommonColumn.
      adqlName - The new ADQL name of this DBCommonColumn.
  • Method Details

    • getADQLName

      public final String getADQLName()
      Description copied from interface: DBColumn
      Gets the name of this column.

      Notes: The returned ADQL name is:

      • non-empty/NULL
      • non-delimited (i.e. not between double quotes),
      • non-prefixed (i.e. no table/schema/catalog name)
      • and in the same case as provided at initialization (even if not case sensitive).
      Specified by:
      getADQLName in interface DBColumn
      Returns:
      Its ADQL name.
    • isCaseSensitive

      public final boolean isCaseSensitive()
      Description copied from interface: DBColumn
      Tell whether the column name used in ADQL queries must be delimited (i.e. surrounded by "). In such case, it will be case sensitive.
      Specified by:
      isCaseSensitive in interface DBColumn
      Returns:
      true if the ADQL column name is case sensitive, false otherwise.
    • getDBName

      public final String getDBName()
      Description copied from interface: DBColumn
      Gets the name of this column in the "database" (e.g. as it should be used in SQL queries).

      Notes The returned DB name is:

      • non-empty/NULL
      • non-delimited (i.e. not between double quotes),
      • non-prefixed (i.e. no table/schema/catalog name)
      • and in the EXACT case as it MUST be used.
      Specified by:
      getDBName in interface DBColumn
      Returns:
      Its DB name.
    • getDatatype

      public final DBType getDatatype()
      Description copied from interface: DBColumn
      Get 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:
      getDatatype in interface DBColumn
      Returns:
      Its type.
    • getTable

      public final DBTable getTable()
      Description copied from interface: DBColumn
      Gets the table which contains this DBColumn.
      Specified by:
      getTable in interface DBColumn
      Returns:
      Its table or NULL if no table is specified.
    • getCoveredTables

      public final 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(String dbName, 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 copy DBCommonColumn(DBCommonColumn, String, String).

      Specified by:
      copy in interface DBColumn
      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: