1 /* 2 * Copyright (c) 2011, 2021, Oracle and/or its affiliates. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License, version 2.0, 6 * as published by the Free Software Foundation. 7 * 8 * This program is also distributed with certain software (including 9 * but not limited to OpenSSL) that is licensed under separate terms, 10 * as designated in a particular file or component or in included license 11 * documentation. The authors of MySQL hereby grant you an additional 12 * permission to link the program and your derivative works with the 13 * separately licensed software that they have included with MySQL. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License, version 2.0, for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 23 */ 24 25 package com.mysql.clusterj.jdbc; 26 27 import com.mysql.clusterj.core.metadata.AbstractDomainFieldHandlerImpl; 28 import com.mysql.clusterj.core.store.Table; 29 import com.mysql.clusterj.core.util.I18NHelper; 30 import com.mysql.clusterj.core.util.Logger; 31 import com.mysql.clusterj.core.util.LoggerFactoryService; 32 33 /** An instance of this class handles a column of a table. Most of the behavior 34 * is in the superclass, which is common to all implementations. The constructor 35 * determines which type is used for the Java representation of the database type. 36 */ 37 public class DomainFieldHandlerImpl extends AbstractDomainFieldHandlerImpl { 38 39 /** My message translator */ 40 static final I18NHelper local = I18NHelper.getInstance(DomainFieldHandlerImpl.class); 41 42 /** My logger */ 43 static final Logger logger = LoggerFactoryService.getFactory().getInstance(DomainFieldHandlerImpl.class); 44 compareTo(Object other)45 public int compareTo(Object other) { 46 return compareTo((DomainFieldHandlerImpl)other); 47 } 48 DomainFieldHandlerImpl(DomainTypeHandlerImpl<?> domainTypeHandler, Table table, int fieldNumber, com.mysql.clusterj.core.store.Column column)49 public DomainFieldHandlerImpl(DomainTypeHandlerImpl<?> domainTypeHandler, 50 Table table, int fieldNumber, com.mysql.clusterj.core.store.Column column) { 51 this.domainTypeHandler = domainTypeHandler; 52 this.fieldNumber = fieldNumber; 53 this.name = column.getName(); 54 this.storeColumn = column; 55 this.columnName = storeColumn.getName(); 56 this.columnNames = new String[] {columnName}; 57 storeColumnType = storeColumn.getType(); 58 charsetName = storeColumn.getCharsetName(); 59 if (logger.isDebugEnabled()) logger.debug("new DomainFieldHandlerImpl: fieldNumber: " + fieldNumber + "; name: " + name); 60 if (logger.isDebugEnabled()) 61 logger.debug("Column type for " + name + " is " 62 + storeColumnType.toString() + "; charset name is " 63 + charsetName); 64 primaryKey = storeColumn.isPrimaryKey(); 65 if (primaryKey) { 66 domainTypeHandler.registerPrimaryKeyColumn(this, columnName); 67 } 68 if (primaryKey) { 69 // primary key 70 switch (column.getType()) { 71 case Int: 72 case Unsigned: 73 case Mediumint: 74 case Mediumunsigned: 75 objectOperationHandlerDelegate = objectOperationHandlerKeyInt; 76 break; 77 case Bigint: 78 objectOperationHandlerDelegate = objectOperationHandlerKeyLong; 79 break; 80 case Char: 81 case Varchar: 82 case Longvarchar: 83 objectOperationHandlerDelegate = objectOperationHandlerKeyString; 84 break; 85 default: 86 // bad primary key type 87 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType; 88 error( 89 local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name)); 90 } 91 } else if (storeColumn.getNullable()) { 92 // nullable columns 93 switch (column.getType()) { 94 case Int: 95 case Unsigned: 96 case Mediumint: 97 case Mediumunsigned: 98 objectOperationHandlerDelegate = objectOperationHandlerObjectInteger; 99 break; 100 case Bigint: 101 objectOperationHandlerDelegate = objectOperationHandlerObjectLong; 102 break; 103 case Char: 104 case Varchar: 105 case Longvarchar: 106 objectOperationHandlerDelegate = objectOperationHandlerString; 107 break; 108 case Binary: 109 case Varbinary: 110 case Longvarbinary: 111 objectOperationHandlerDelegate = objectOperationHandlerBytes; 112 break; 113 case Blob: 114 objectOperationHandlerDelegate = objectOperationHandlerBytesLob; 115 break; 116 case Date: 117 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlDate; 118 break; 119 case Decimal: 120 case Decimalunsigned: 121 objectOperationHandlerDelegate = objectOperationHandlerDecimal; 122 break; 123 case Double: 124 objectOperationHandlerDelegate = objectOperationHandlerObjectDouble; 125 break; 126 case Float: 127 objectOperationHandlerDelegate = objectOperationHandlerObjectFloat; 128 break; 129 case Smallint: 130 objectOperationHandlerDelegate = objectOperationHandlerObjectShort; 131 break; 132 case Text: 133 objectOperationHandlerDelegate = objectOperationHandlerStringLob; 134 break; 135 case Time: 136 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTime; 137 break; 138 case Timestamp: 139 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTimestamp; 140 break; 141 case Tinyint: 142 case Tinyunsigned: 143 objectOperationHandlerDelegate = objectOperationHandlerObjectByte; 144 break; 145 default: 146 // unsupported column type 147 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType; 148 error( 149 local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name)); 150 } 151 } else { 152 // not nullable columns 153 switch (column.getType()) { 154 case Int: 155 case Unsigned: 156 case Mediumint: 157 case Mediumunsigned: 158 objectOperationHandlerDelegate = objectOperationHandlerInt; 159 break; 160 case Bigint: 161 objectOperationHandlerDelegate = objectOperationHandlerLong; 162 break; 163 case Char: 164 case Varchar: 165 case Longvarchar: 166 objectOperationHandlerDelegate = objectOperationHandlerString; 167 break; 168 case Binary: 169 case Varbinary: 170 case Longvarbinary: 171 objectOperationHandlerDelegate = objectOperationHandlerBytes; 172 break; 173 case Blob: 174 objectOperationHandlerDelegate = objectOperationHandlerBytesLob; 175 break; 176 case Date: 177 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlDate; 178 break; 179 case Decimal: 180 case Decimalunsigned: 181 objectOperationHandlerDelegate = objectOperationHandlerDecimal; 182 break; 183 case Double: 184 objectOperationHandlerDelegate = objectOperationHandlerDouble; 185 break; 186 case Float: 187 objectOperationHandlerDelegate = objectOperationHandlerFloat; 188 break; 189 case Smallint: 190 objectOperationHandlerDelegate = objectOperationHandlerShort; 191 break; 192 case Text: 193 objectOperationHandlerDelegate = objectOperationHandlerStringLob; 194 break; 195 case Time: 196 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTime; 197 break; 198 case Timestamp: 199 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTimestamp; 200 break; 201 case Tinyint: 202 case Tinyunsigned: 203 objectOperationHandlerDelegate = objectOperationHandlerByte; 204 break; 205 default: 206 // unsupported column type 207 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType; 208 error( 209 local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name)); 210 } 211 } 212 indices = domainTypeHandler.registerIndices(this, columnName); 213 indexNames = domainTypeHandler.getIndexNames(indices); 214 logger.debug("Index names for " + name + " are " + indexNames); 215 logger.debug("Indices for " + name + " are " + printIndices()); 216 217 reportErrors(); 218 } 219 220 } 221