Package adql.db

## Class DefaultDBTable

- java.lang.Object
- - adql.db.DefaultDBTable

- All Implemented Interfaces:
    `DBTable`, `java.lang.Iterable<DBColumn>`
  Direct Known Subclasses:
    `DBTableAlias`

      public class DefaultDBTable
      extends java.lang.Object
      implements DBTable

  Default implementation of `DBTable`.
  Version:
    1.4 (08/2015)
  Author:
    Grégory Mantelet (CDS;ARI)

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected java.lang.String` | `adqlCatalogName` |
    `protected java.lang.String` | `adqlName` |
    `protected java.lang.String` | `adqlSchemaName` |
    `protected java.util.Map<java.lang.String,​DBColumn>` | `columns` |
    `protected java.lang.String` | `dbCatalogName` |
    `protected java.lang.String` | `dbName` |
    `protected java.lang.String` | `dbSchemaName` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DefaultDBTable​(java.lang.String dbName)` | Builds a default `DBTable` with the given DB name.
    `DefaultDBTable​(java.lang.String dbName, java.lang.String adqlName)` | Builds a default `DBTable` with the given DB and ADQL names.
    `DefaultDBTable​(java.lang.String dbCatName, java.lang.String dbSchemName, java.lang.String dbName)` | Builds default `DBTable` with a DB catalog, schema and table names.
    `DefaultDBTable​(java.lang.String dbCatName, java.lang.String adqlCatName, java.lang.String dbSchemName, java.lang.String adqlSchemName, java.lang.String dbName, java.lang.String adqlName)` | Builds default `DBTable` with the DB and ADQL names for the catalog, schema and table.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addAllColumns​(java.util.Collection<DBColumn> colList)` |
    `void` | `addColumn​(DBColumn column)` |
    `DBTable` | `copy​(java.lang.String dbName, java.lang.String adqlName)` | Makes a copy of this instance of `DBTable`, with the possibility to change the DB and ADQL names.
    `java.lang.String` | `getADQLCatalogName()` | Gets the ADQL name of the catalog which contains this table.
    `java.lang.String` | `getADQLName()` | Gets the name of this table (without any prefix and double-quotes).
    `java.lang.String` | `getADQLSchemaName()` | Gets the ADQL name of the schema which contains this table.
    `DBColumn` | `getColumn​(java.lang.String colName, boolean byAdqlName)` | Case sensitive !
    `java.lang.String` | `getDBCatalogName()` | Gets the DB name of the catalog which contains this table.
    `java.lang.String` | `getDBName()` | Gets the name of this table in the "database".
    `java.lang.String` | `getDBSchemaName()` | Gets the DB name of the schema which contains this table.
    `boolean` | `hasColumn​(java.lang.String colName, boolean byAdqlName)` |
    `java.util.Iterator<DBColumn>` | `iterator()` |
    `static java.lang.String` | `joinTableName​(java.lang.String[] nameParts)` | Join the last 3 items of the given string array with a dot ('.').
    `void` | `setADQLCatalogName​(java.lang.String name)` |
    `void` | `setADQLName​(java.lang.String name)` |
    `void` | `setADQLSchemaName​(java.lang.String name)` |
    `static java.lang.String[]` | `splitTableName​(java.lang.String table)` | Splits the given table name in 3 parts: catalog, schema, table.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Field Detail

    - #### dbCatalogName

          protected java.lang.String dbCatalogName

    - #### dbSchemaName

          protected java.lang.String dbSchemaName

    - #### dbName

          protected java.lang.String dbName

    - #### adqlCatalogName

          protected java.lang.String adqlCatalogName

    - #### adqlSchemaName

          protected java.lang.String adqlSchemaName

    - #### adqlName

          protected java.lang.String adqlName

    - #### columns

          protected java.util.Map<java.lang.String,​DBColumn> columns

  - ### Constructor Detail

    - #### DefaultDBTable

          public DefaultDBTable​(java.lang.String dbName)

      Builds a default `DBTable` with the given DB name.

      With this constructor: ADQL name = DB name.

      Note: The table name can be prefixed by a schema and a catalog: t1 or schema1.t1 or cat1.schema1.t2

      Parameters:
        `dbName` - Database name (it will be also used as ADQL table name).
      See Also:
        `DefaultDBTable(String, String)`

    - #### DefaultDBTable

          public DefaultDBTable​(java.lang.String dbName,
                                java.lang.String adqlName)

      Builds a default `DBTable` with the given DB and ADQL names.

      Note: The table names can be prefixed by a schema and a catalog: t1 or schema1.t1 or cat1.schema1.t2

      Parameters:
        `dbName` - Database name.
        `adqlName` - Name used in ADQL queries.

    - #### DefaultDBTable

          public DefaultDBTable​(java.lang.String dbCatName,
                                java.lang.String dbSchemName,
                                java.lang.String dbName)

      Builds default `DBTable` with a DB catalog, schema and table names.
      Parameters:
        `dbCatName` - Database catalog name (it will be also used as ADQL catalog name).
        `dbSchemName` - Database schema name (it will be also used as ADQL schema name).
        `dbName` - Database table name (it will be also used as ADQL table name).
      See Also:
        `DefaultDBTable(String, String, String, String, String, String)`

    - #### DefaultDBTable

          public DefaultDBTable​(java.lang.String dbCatName,
                                java.lang.String adqlCatName,
                                java.lang.String dbSchemName,
                                java.lang.String adqlSchemName,
                                java.lang.String dbName,
                                java.lang.String adqlName)

      Builds default `DBTable` with the DB and ADQL names for the catalog, schema and table.
      Parameters:
        `dbCatName` - Database catalog name.
        `adqlCatName` - Catalog name used in ADQL queries. If NULL, it will be set to dbCatName.
        `dbSchemName` - Database schema name.
        `adqlSchemName` - Schema name used in ADQL queries. If NULL, it will be set to dbSchemName.
        `dbName` - Database table name.
        `adqlName` - Table name used in ADQL queries. If NULL, it will be set to dbName.

  - ### Method Detail

    - #### getDBName

          public final java.lang.String getDBName()

      Description copied from interface: `DBTable`
      Gets the name of this table in the "database".
      Specified by:
        `getDBName` in interface `DBTable`
      Returns:
        Its DB name.

    - #### getDBSchemaName

          public final java.lang.String getDBSchemaName()

      Description copied from interface: `DBTable`
      Gets the DB name of the schema which contains this table.
      Specified by:
        `getDBSchemaName` in interface `DBTable`
      Returns:
        DB name of its schema.

    - #### getDBCatalogName

          public final java.lang.String getDBCatalogName()

      Description copied from interface: `DBTable`
      Gets the DB name of the catalog which contains this table.
      Specified by:
        `getDBCatalogName` in interface `DBTable`
      Returns:
        DB name of its catalog.

    - #### getADQLName

          public final java.lang.String getADQLName()

      Description copied from interface: `DBTable`
      Gets the name of this table (without any prefix and double-quotes).
      Specified by:
        `getADQLName` in interface `DBTable`
      Returns:
        Its ADQL name.

    - #### setADQLName

          public void setADQLName​(java.lang.String name)

    - #### getADQLSchemaName

          public final java.lang.String getADQLSchemaName()

      Description copied from interface: `DBTable`
      Gets the ADQL name of the schema which contains this table.
      Specified by:
        `getADQLSchemaName` in interface `DBTable`
      Returns:
        ADQL name of its schema.

    - #### setADQLSchemaName

          public void setADQLSchemaName​(java.lang.String name)

    - #### getADQLCatalogName

          public final java.lang.String getADQLCatalogName()

      Description copied from interface: `DBTable`
      Gets the ADQL name of the catalog which contains this table.
      Specified by:
        `getADQLCatalogName` in interface `DBTable`
      Returns:
        ADQL name of its catalog.

    - #### setADQLCatalogName

          public void setADQLCatalogName​(java.lang.String name)

    - #### getColumn

          public DBColumn getColumn​(java.lang.String colName,
                                    boolean byAdqlName)

      Case sensitive !

      Research optimized for researches by ADQL name.

      Specified by:
        `getColumn` in interface `DBTable`
      Parameters:
        `colName` - Name of the column (may be the ADQL or DB name depending of the second parameter).
        `byAdqlName` - true means the given name is the ADQL name of the column and that the research must be done on the ADQL name of columns, false means the same thing but with the DB name.
      Returns:
        The corresponding column, or null if the specified column had not been found.
      See Also:
        `DBTable.getColumn(java.lang.String, boolean)`

    - #### hasColumn

          public boolean hasColumn​(java.lang.String colName,
                                   boolean byAdqlName)

    - #### iterator

          public java.util.Iterator<DBColumn> iterator()

      Specified by:
        `iterator` in interface `java.lang.Iterable<DBColumn>`

    - #### addColumn

          public void addColumn​(DBColumn column)

    - #### addAllColumns

          public void addAllColumns​(java.util.Collection<DBColumn> colList)

    - #### splitTableName

          public static final java.lang.String[] splitTableName​(java.lang.String table)

      Splits the given table name in 3 parts: catalog, schema, table.
      Parameters:
        `table` - The table name to split.
      Returns:
        A String array of 3 items: [0]=catalog, [1]=schema, [0]=table.

    - #### joinTableName

          public static final java.lang.String joinTableName​(java.lang.String[] nameParts)

      Join the last 3 items of the given string array with a dot ('.'). These three parts should be: [0]=catalog name, [1]=schema name, [2]=table name.

      If the array contains less than 3 items, all the given items will be though joined. However, if it contains more than 3 items, only the three last items will be.

      A null item will be written as an empty string (string of length 0 ; "").

      In the case the first and the third items are not null, but the second is null, the final string will contain in the middle two dots. Example: if the array is {"cat", NULL, "table"}, then the joined string will be: "cat..table".

      Parameters:
        `nameParts` - String items to join.
      Returns:
        A string joining the 3 last string items of the given array, or an empty string if the given array is NULL.
      Since:
        1.3

    - #### copy

          public DBTable copy​(java.lang.String dbName,
                              java.lang.String adqlName)

      Description copied from interface: `DBTable`

      Makes a copy of this instance of `DBTable`, with the possibility to change the DB and ADQL names.

      IMPORTANT: The given DB and ADQL name may be NULL. If NULL, the copy will contain exactly the same full name (DB and/or ADQL).
      And they may be qualified (that's to say: prefixed by the schema name or by the catalog and schema name). It means that it is possible to change the catalog, schema and table name in the copy.
      For instance:

      - .copy(null, "foo") => a copy with the same full DB name, but with no ADQL catalog and schema name and with an ADQL table name equals to "foo"
      - .copy("schema.table", ) => a copy with the same full ADQL name, but with no DB catalog name, with a DB schema name equals to "schema" and with a DB table name equals to "table"
      Specified by:
        `copy` in interface `DBTable`
      Parameters:
        `dbName` - Its new DB name. It may be qualified. It may also be NULL ; if so, the full DB name won't be different in the copy.
        `adqlName` - Its new ADQL name. It may be qualified. It may also be NULL ; if so, the full DB name won't be different in the copy.
      Returns:
        A modified copy of this `DBTable`.