001: /**
002: * com.mckoi.database.interpret.SelectColumn 09 Sep 2001
003: *
004: * Mckoi SQL Database ( http://www.mckoi.com/database )
005: * Copyright (C) 2000, 2001, 2002 Diehl and Associates, Inc.
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * Version 2 as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License Version 2 for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * Version 2 along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: *
020: * Change Log:
021: *
022: *
023: */package com.mckoi.database.interpret;
024:
025: import com.mckoi.database.*;
026:
027: /**
028: * Represents a column selected to be in the output of a select statement.
029: * This includes being either an aggregate function, a column or "*" which
030: * is the entire set of columns.
031: *
032: * @author Tobias Downer
033: */
034:
035: public final class SelectColumn implements java.io.Serializable,
036: StatementTreeObject, Cloneable {
037:
038: static final long serialVersionUID = 2507375247510606004L;
039:
040: /**
041: * If the column represents a glob of columns (eg. 'Part.*' or '*') then
042: * this is set to the glob string and 'expression' is left blank.
043: */
044: public String glob_name;
045:
046: /**
047: * The fully resolved name that this column is given in the resulting table.
048: */
049: public Variable resolved_name;
050:
051: /**
052: * The alias of this column string.
053: */
054: public String alias;
055:
056: /**
057: * The expression of this column. This is only NOT set when name == "*"
058: * indicating all the columns.
059: */
060: public Expression expression;
061:
062: /**
063: * The name of this column used internally to reference it.
064: */
065: public Variable internal_name;
066:
067: // /**
068: // * Makes a deep clone of this object.
069: // */
070: // SelectColumn deepClone() {
071: // SelectColumn sc = new SelectColumn();
072: // sc.glob_name = glob_name;
073: // sc.resolved_name = resolved_name;
074: // sc.alias = alias;
075: // sc.expression = new Expression(expression);
076: // sc.internal_name = internal_name;
077: // return sc;
078: // }
079:
080: // Implemented from StatementTreeObject
081: public void prepareExpressions(ExpressionPreparer preparer)
082: throws DatabaseException {
083: if (expression != null) {
084: expression.prepare(preparer);
085: }
086: }
087:
088: public Object clone() throws CloneNotSupportedException {
089: SelectColumn v = (SelectColumn) super .clone();
090: if (resolved_name != null) {
091: v.resolved_name = (Variable) resolved_name.clone();
092: }
093: if (expression != null) {
094: v.expression = (Expression) expression.clone();
095: }
096: if (internal_name != null) {
097: v.internal_name = (Variable) internal_name.clone();
098: }
099: return v;
100: }
101:
102: public String toString() {
103: String str = "";
104: if (glob_name != null)
105: str += " GLOB_NAME = " + glob_name;
106: if (resolved_name != null)
107: str += " RESOLVED_NAME = " + resolved_name;
108: if (alias != null)
109: str += " ALIAS = " + alias;
110: if (expression != null)
111: str += " EXPRESSION = " + expression;
112: if (internal_name != null)
113: str += " INTERNAL_NAME = " + internal_name;
114: return str;
115: }
116:
117: }
|