001: /*
002:
003: Derby - Class org.apache.derby.impl.sql.compile.TableElementNode
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.sql.compile;
023:
024: import org.apache.derby.iapi.services.sanity.SanityManager;
025:
026: /**
027: * A TableElementNode is an item in a TableElementList, and represents
028: * a single table element such as a column or constraint in a CREATE TABLE
029: * or ALTER TABLE statement.
030: *
031: * @author Jeff Lichtman
032: */
033:
034: public class TableElementNode extends QueryTreeNode {
035: /////////////////////////////////////////////////////////////////////////
036: //
037: // CONSTANTS
038: //
039: /////////////////////////////////////////////////////////////////////////
040:
041: public static final int AT_UNKNOWN = 0;
042: public static final int AT_ADD_FOREIGN_KEY_CONSTRAINT = 1;
043: public static final int AT_ADD_PRIMARY_KEY_CONSTRAINT = 2;
044: public static final int AT_ADD_UNIQUE_CONSTRAINT = 3;
045: public static final int AT_ADD_CHECK_CONSTRAINT = 4;
046: public static final int AT_DROP_CONSTRAINT = 5;
047: public static final int AT_MODIFY_COLUMN = 6;
048: public static final int AT_DROP_COLUMN = 7;
049:
050: /////////////////////////////////////////////////////////////////////////
051: //
052: // STATE
053: //
054: /////////////////////////////////////////////////////////////////////////
055:
056: String name;
057: int elementType; // simple element nodes can share this class,
058:
059: // eg., drop column and rename table/column/index
060: // etc., no need for more classes, an effort to
061: // minimize footprint
062:
063: /////////////////////////////////////////////////////////////////////////
064: //
065: // BEHAVIOR
066: //
067: /////////////////////////////////////////////////////////////////////////
068:
069: /**
070: * Initializer for a TableElementNode
071: *
072: * @param name The name of the table element, if any
073: */
074:
075: public void init(Object name) {
076: this .name = (String) name;
077: }
078:
079: /**
080: * Initializer for a TableElementNode
081: *
082: * @param name The name of the table element, if any
083: */
084:
085: public void init(Object name, Object elementType) {
086: this .name = (String) name;
087: this .elementType = ((Integer) elementType).intValue();
088: }
089:
090: /**
091: * Convert this object to a String. See comments in QueryTreeNode.java
092: * for how this should be done for tree printing.
093: *
094: * @return This object as a String
095: */
096:
097: public String toString() {
098: if (SanityManager.DEBUG) {
099: return "name: " + name + "\n" + super .toString();
100: } else {
101: return "";
102: }
103: }
104:
105: /**
106: * Does this element have a primary key constraint.
107: *
108: * @return boolean Whether or not this element has a primary key constraint
109: */
110: boolean hasPrimaryKeyConstraint() {
111: return false;
112: }
113:
114: /**
115: * Does this element have a unique key constraint.
116: *
117: * @return boolean Whether or not this element has a unique key constraint
118: */
119: boolean hasUniqueKeyConstraint() {
120: return false;
121: }
122:
123: /**
124: * Does this element have a foreign key constraint.
125: *
126: * @return boolean Whether or not this element has a foreign key constraint
127: */
128: boolean hasForeignKeyConstraint() {
129: return false;
130: }
131:
132: /**
133: * Does this element have a check constraint.
134: *
135: * @return boolean Whether or not this element has a check constraint
136: */
137: boolean hasCheckConstraint() {
138: return false;
139: }
140:
141: /**
142: * Does this element have a constraint on it.
143: *
144: * @return boolean Whether or not this element has a constraint on it
145: */
146: boolean hasConstraint() {
147: return false;
148: }
149:
150: /**
151: * Get the name from this node.
152: *
153: * @return String The name.
154: */
155: public String getName() {
156: return name;
157: }
158:
159: /**
160: * Get the type of this table element.
161: *
162: * @return one of the constants at the front of this file
163: */
164: int getElementType() {
165: if (hasForeignKeyConstraint()) {
166: return AT_ADD_FOREIGN_KEY_CONSTRAINT;
167: } else if (hasPrimaryKeyConstraint()) {
168: return AT_ADD_PRIMARY_KEY_CONSTRAINT;
169: } else if (hasUniqueKeyConstraint()) {
170: return AT_ADD_UNIQUE_CONSTRAINT;
171: } else if (hasCheckConstraint()) {
172: return AT_ADD_CHECK_CONSTRAINT;
173: } else if (this instanceof ConstraintDefinitionNode) {
174: return AT_DROP_CONSTRAINT;
175: } else if (this instanceof ModifyColumnNode) {
176: return AT_MODIFY_COLUMN;
177: } else {
178: return elementType;
179: }
180: }
181:
182: }
|