001: /*
002: * Helma License Notice
003: *
004: * The contents of this file are subject to the Helma License
005: * Version 2.0 (the "License"). You may not use this file except in
006: * compliance with the License. A copy of the License is available at
007: * http://adele.helma.org/download/helma/license.txt
008: *
009: * Copyright 1998-2003 Helma Software. All Rights Reserved.
010: *
011: * $RCSfile$
012: * $Author: root $
013: * $Revision: 8604 $
014: * $Date: 2007-09-28 15:16:38 +0200 (Fre, 28 Sep 2007) $
015: */
016:
017: package helma.objectmodel.db;
018:
019: import java.sql.Types;
020:
021: /**
022: * A class that encapsulates the Column name and data type of a column in a
023: * relational table.
024: */
025: public final class DbColumn {
026: private final String name;
027: private final int type;
028: private final Relation relation;
029:
030: private final boolean isId;
031: private final boolean isPrototype;
032: private final boolean isName;
033:
034: /**
035: * Constructor
036: */
037: public DbColumn(String name, int type, Relation rel, DbMapping dbmap) {
038: this .name = name;
039: this .type = type;
040: this .relation = rel;
041:
042: if (relation != null) {
043: relation.setColumnType(type);
044: }
045:
046: isId = name.equalsIgnoreCase(dbmap.getIDField());
047: isPrototype = name.equalsIgnoreCase(dbmap.getPrototypeField());
048: isName = name.equalsIgnoreCase(dbmap.getNameField());
049: }
050:
051: /**
052: * Get the column name.
053: */
054: public String getName() {
055: return name;
056: }
057:
058: /**
059: * Get this columns SQL data type.
060: */
061: public int getType() {
062: return type;
063: }
064:
065: /**
066: * Return the relation associated with this column. May be null.
067: */
068: public Relation getRelation() {
069: return relation;
070: }
071:
072: /**
073: * Returns true if this column serves as ID field for the prototype.
074: */
075: public boolean isIdField() {
076: return isId;
077: }
078:
079: /**
080: * Returns true if this column serves as prototype field for the prototype.
081: */
082: public boolean isPrototypeField() {
083: return isPrototype;
084: }
085:
086: /**
087: * Returns true if this column serves as name field for the prototype.
088: */
089: public boolean isNameField() {
090: return isName;
091: }
092:
093: /**
094: * Returns true if this field is mapped by the prototype's db mapping.
095: */
096: public boolean isMapped() {
097: // Note: not sure if check for primitive or reference relation is really
098: // needed, but we did it before, so we leave it in for safety.
099: return isId
100: || isPrototype
101: || isName
102: || (relation != null && relation
103: .isPrimitiveOrReference());
104: }
105:
106: /**
107: * Checks whether values for this column need to be quoted in insert/update
108: * stmts
109: *
110: * @return true if values need to be wrapped in quotes
111: */
112: public boolean needsQuotes() {
113: switch (type) {
114: case Types.CHAR:
115: case Types.VARCHAR:
116: case Types.LONGVARCHAR:
117: case Types.BINARY:
118: case Types.VARBINARY:
119: case Types.LONGVARBINARY:
120: case Types.DATE:
121: case Types.TIME:
122: case Types.TIMESTAMP:
123: return true;
124: default:
125: return false;
126: }
127: }
128:
129: }
|