package adql.db; /* * This file is part of ADQLLibrary. * * ADQLLibrary is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ADQLLibrary is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with ADQLLibrary. If not, see <http://www.gnu.org/licenses/>. * * Copyright 2012,2015 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), * Astronomisches Rechen Institut (ARI) */ /** * Default implementation of {@link DBColumn}. * * @author Grégory Mantelet (CDS;ARI) * @version 1.4 (08/2015) */ public class DefaultDBColumn implements DBColumn { /** Name of the column in the "database". */ protected String dbName; /** Type of the column in the "database". * <i>Note: This should be one of the types listed by the IVOA in the TAP description.</i> * @since 1.3 */ protected DBType type; /** Table in which this column exists. */ protected DBTable table; /** Name that this column must have in ADQL queries. */ protected String adqlName = null; /** * Builds a default {@link DBColumn} with the given DB name and DB table. * * @param dbName Database column name (it will be also used for the ADQL name). * <b>Only the column name is expected. Contrary to {@link DefaultDBTable}, * if a whole column reference is given, no split will be done.</b> * @param table DB table which contains this column. * * @see #DefaultDBColumn(String, String, DBType, DBTable) */ public DefaultDBColumn(final String dbName, final DBTable table){ this(dbName, dbName, null, table); } /** * Builds a default {@link DBColumn} with the given DB name and DB table. * * @param dbName Database column name (it will be also used for the ADQL name). * <b>Only the column name is expected. Contrary to {@link DefaultDBTable}, * if a whole column reference is given, no split will be done.</b> * @param type Type of the column. * <i>Note: there is no default value. Consequently if this parameter is NULL, * the type should be considered as unknown. It means that any comparison with * any type will always return 'true'.</i> * @param table DB table which contains this column. * * @see #DefaultDBColumn(String, String, DBType, DBTable) * * @since 1.3 */ public DefaultDBColumn(final String dbName, final DBType type, final DBTable table){ this(dbName, dbName, type, table); } /** * Builds a default {@link DBColumn} with the given DB name, DB table and ADQL name. * * @param dbName Database column name. * <b>Only the column name is expected. Contrary to {@link DefaultDBTable}, * if a whole column reference is given, no split will be done.</b> * @param adqlName Column name used in ADQL queries. * <b>Only the column name is expected. Contrary to {@link DefaultDBTable}, * if a whole column reference is given, no split will be done.</b> * @param table DB table which contains this column. * * @see #DefaultDBColumn(String, String, DBType, DBTable) */ public DefaultDBColumn(final String dbName, final String adqlName, final DBTable table){ this(dbName, adqlName, null, table); } /** * Builds a default {@link DBColumn} with the given DB name, DB table and ADQL name. * * @param dbName Database column name. * <b>Only the column name is expected. Contrary to {@link DefaultDBTable}, * if a whole column reference is given, no split will be done.</b> * <b>REQUIRED parameter: it must be not NULL.</b> * @param adqlName Column name used in ADQL queries. * <b>Only the column name is expected. Contrary to {@link DefaultDBTable}, * if a whole column reference is given, no split will be done.</b> * <em>If NULL, it will be set to dbName.</em> * @param type Type of the column. * <i>Note: there is no default value. Consequently if this parameter is NULL, * the type should be considered as unknown. It means that any comparison with * any type will always return 'true'.</i> * @param table DB table which contains this column. * * @since 1.3 */ public DefaultDBColumn(final String dbName, final String adqlName, final DBType type, final DBTable table){ if (dbName == null || dbName.length() == 0) throw new NullPointerException("Missing DB name!"); this.dbName = dbName; this.adqlName = (adqlName == null) ? dbName : adqlName; this.type = type; this.table = table; } @Override public final String getADQLName(){ return adqlName; } public final void setADQLName(final String adqlName){ if (adqlName != null) this.adqlName = adqlName; } @Override public final DBType getDatatype(){ return type; } /** * <p>Set the type of this column.</p> * * <p><i>Note 1: * The given type should be as closed as possible from a type listed by the IVOA in the TAP protocol description into the section UPLOAD. * </i></p> * * <p><i>Note 2: * there is no default value. Consequently if this parameter is NULL, * the type should be considered as unknown. It means that any comparison with * any type will always return 'true'. * </i></p> * * @param type New type of this column. * * @since 1.3 */ public final void setDatatype(final DBType type){ this.type = type; } @Override public final String getDBName(){ return dbName; } @Override public final DBTable getTable(){ return table; } public final void setTable(final DBTable table){ this.table = table; } @Override public DBColumn copy(final String dbName, final String adqlName, final DBTable dbTable){ return new DefaultDBColumn(dbName, adqlName, type, dbTable); } }