/*
* This file is part of Zql.
*
* Zql is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Zql 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Zql. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gibello.zql;
import java.io.* ;
import java.util.* ;
/**
* A name/alias association<br>
* Names can have two forms:
* <ul>
* <li>FORM_TABLE for table names ([schema.]table)</li>
* <li>FORM_COLUMN for column names ([[schema.]table.]column)</li>
* </ul>
*/
public class ZAliasedName implements java.io.Serializable {
String strform_ = "";
String schema_ = null;
String table_ = null;
String column_ = null;
String alias_ = null;
public static int FORM_TABLE = 1;
public static int FORM_COLUMN = 2;
int form_ = FORM_COLUMN;
public ZAliasedName() {}
/**
* Create a new ZAliasedName given it's full name.
* @param fullname The full name: [[schema.]table.]column
* @param form The name form (FORM_TABLE or FORM_COLUMN)
*/
public ZAliasedName(String fullname, int form) {
form_ = form;
strform_ = new String(fullname);
StringTokenizer st = new StringTokenizer(fullname, ".");
switch(st.countTokens()) {
case 1:
if(form == FORM_TABLE) table_ = new String(st.nextToken());
else column_ = new String(st.nextToken());
break;
case 2:
if(form == FORM_TABLE) {
schema_ = new String(st.nextToken());
table_ = new String(st.nextToken());
} else {
table_ = new String(st.nextToken());
column_ = new String(st.nextToken());
}
break;
case 3:
default:
schema_ = new String(st.nextToken());
table_ = new String(st.nextToken());
column_ = new String(st.nextToken());
break;
}
schema_ = postProcess(schema_);
table_ = postProcess(table_);
column_ = postProcess(column_);
}
private String postProcess(String val) {
if(val == null) return null;
if(val.indexOf("(") >= 0) val = val.substring(val.lastIndexOf("(") + 1);
if(val.indexOf(")") >= 0) val = val.substring(0, val.indexOf(")"));
return val.trim();
}
public String toString() {
if(alias_ == null) return strform_;
else return strform_ + " " + alias_;
}
/**
* @return If the name is of the form schema.table.column,
* returns the schema part
*/
public String getSchema() { return schema_; }
/**
* @return If the name is of the form [schema.]table.column,
* returns the schema part
*/
public String getTable() { return table_; }
/**
* @return The name is of the form [[schema.]table.]column:
* return the column part
*/
public String getColumn() { return column_; }
/**
* @return true if column is "*", false otherwise.
* Example: *, table.* are wildcards.
*/
public boolean isWildcard() {
if(form_ == FORM_TABLE) return table_ != null && table_.equals("*");
else return column_ != null && column_.indexOf('*') >= 0;
}
/**
* @return the alias associated to the current name.
*/
public String getAlias() { return alias_; }
/**
* Associate an alias with the current name.
* @param a the alias associated to the current name.
*/
public void setAlias(String a) { alias_ = new String(a); }
}