2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 package com.mysql.clusterj.jdbc;
20 import com.mysql.clusterj.core.metadata.AbstractDomainFieldHandlerImpl;
21 import com.mysql.clusterj.core.store.Table;
22 import com.mysql.clusterj.core.util.I18NHelper;
23 import com.mysql.clusterj.core.util.Logger;
24 import com.mysql.clusterj.core.util.LoggerFactoryService;
26 /** An instance of this class handles a column of a table. Most of the behavior
27 * is in the superclass, which is common to all implementations. The constructor
28 * determines which type is used for the Java representation of the database type.
30 public class DomainFieldHandlerImpl extends AbstractDomainFieldHandlerImpl {
32 /** My message translator */
33 static final I18NHelper local = I18NHelper.getInstance(DomainFieldHandlerImpl.class);
36 static final Logger logger = LoggerFactoryService.getFactory().getInstance(DomainFieldHandlerImpl.class);
38 public int compareTo(Object other) {
39 return compareTo((DomainFieldHandlerImpl)other);
42 public DomainFieldHandlerImpl(DomainTypeHandlerImpl<?> domainTypeHandler,
43 Table table, int fieldNumber, com.mysql.clusterj.core.store.Column column) {
44 this.domainTypeHandler = domainTypeHandler;
45 this.fieldNumber = fieldNumber;
46 this.name = column.getName();
47 this.storeColumn = column;
48 this.columnName = storeColumn.getName();
49 this.columnNames = new String[] {columnName};
50 storeColumnType = storeColumn.getType();
51 charsetName = storeColumn.getCharsetName();
52 if (logger.isDebugEnabled()) logger.debug("new DomainFieldHandlerImpl: fieldNumber: " + fieldNumber + "; name: " + name);
53 if (logger.isDebugEnabled())
54 logger.debug("Column type for " + name + " is "
55 + storeColumnType.toString() + "; charset name is "
57 primaryKey = storeColumn.isPrimaryKey();
59 domainTypeHandler.registerPrimaryKeyColumn(this, columnName);
63 switch (column.getType()) {
68 objectOperationHandlerDelegate = objectOperationHandlerKeyInt;
71 objectOperationHandlerDelegate = objectOperationHandlerKeyLong;
76 objectOperationHandlerDelegate = objectOperationHandlerKeyString;
79 // bad primary key type
80 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
82 local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name));
84 } else if (storeColumn.getNullable()) {
86 switch (column.getType()) {
91 objectOperationHandlerDelegate = objectOperationHandlerObjectInteger;
94 objectOperationHandlerDelegate = objectOperationHandlerObjectLong;
99 objectOperationHandlerDelegate = objectOperationHandlerString;
104 objectOperationHandlerDelegate = objectOperationHandlerBytes;
107 objectOperationHandlerDelegate = objectOperationHandlerBytesLob;
110 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlDate;
113 case Decimalunsigned:
114 objectOperationHandlerDelegate = objectOperationHandlerDecimal;
117 objectOperationHandlerDelegate = objectOperationHandlerObjectDouble;
120 objectOperationHandlerDelegate = objectOperationHandlerObjectFloat;
123 objectOperationHandlerDelegate = objectOperationHandlerObjectShort;
126 objectOperationHandlerDelegate = objectOperationHandlerStringLob;
129 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTime;
132 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTimestamp;
136 objectOperationHandlerDelegate = objectOperationHandlerObjectByte;
139 // unsupported column type
140 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
142 local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name));
145 // not nullable columns
146 switch (column.getType()) {
151 objectOperationHandlerDelegate = objectOperationHandlerInt;
154 objectOperationHandlerDelegate = objectOperationHandlerLong;
159 objectOperationHandlerDelegate = objectOperationHandlerString;
164 objectOperationHandlerDelegate = objectOperationHandlerBytes;
167 objectOperationHandlerDelegate = objectOperationHandlerBytesLob;
170 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlDate;
173 case Decimalunsigned:
174 objectOperationHandlerDelegate = objectOperationHandlerDecimal;
177 objectOperationHandlerDelegate = objectOperationHandlerDouble;
180 objectOperationHandlerDelegate = objectOperationHandlerFloat;
183 objectOperationHandlerDelegate = objectOperationHandlerShort;
186 objectOperationHandlerDelegate = objectOperationHandlerStringLob;
189 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTime;
192 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTimestamp;
196 objectOperationHandlerDelegate = objectOperationHandlerByte;
199 // unsupported column type
200 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
202 local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name));
205 indices = domainTypeHandler.registerIndices(this, columnName);
206 indexNames = domainTypeHandler.getIndexNames(indices);
207 logger.debug("Index names for " + name + " are " + indexNames);
208 logger.debug("Indices for " + name + " are " + printIndices());