]> review.fuel-infra Code Review - packages/trusty/mysql-wsrep-5.6.git/blob
59ce712255717cc9fff9a6ec89c623c916da955c
[packages/trusty/mysql-wsrep-5.6.git] /
1 /*
2  *  Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
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 as published by
6  *  the Free Software Foundation; version 2 of the License.
7  *
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.
12  *
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
16  */
17
18 package com.mysql.clusterj.jdbc;
19
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;
25
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.
29  */
30 public class DomainFieldHandlerImpl extends AbstractDomainFieldHandlerImpl {
31
32     /** My message translator */
33     static final I18NHelper local = I18NHelper.getInstance(DomainFieldHandlerImpl.class);
34
35     /** My logger */
36     static final Logger logger = LoggerFactoryService.getFactory().getInstance(DomainFieldHandlerImpl.class);
37
38     public int compareTo(Object other) {
39         return compareTo((DomainFieldHandlerImpl)other);
40     }
41
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 "
56                     + charsetName);
57         primaryKey = storeColumn.isPrimaryKey();
58         if (primaryKey) {
59             domainTypeHandler.registerPrimaryKeyColumn(this, columnName);
60         }
61         if (primaryKey) {
62             // primary key
63             switch (column.getType()) {
64             case Int:
65             case Unsigned:
66             case Mediumint:
67             case Mediumunsigned:
68                 objectOperationHandlerDelegate = objectOperationHandlerKeyInt;
69                 break;
70             case Bigint:
71                 objectOperationHandlerDelegate = objectOperationHandlerKeyLong;
72                 break;
73             case Char:
74             case Varchar:
75             case Longvarchar:
76                 objectOperationHandlerDelegate = objectOperationHandlerKeyString;
77                 break;
78             default:
79                     // bad primary key type
80                 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
81                 error(
82                         local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name));
83             }
84         } else if (storeColumn.getNullable()) {
85             // nullable columns
86             switch (column.getType()) {
87             case Int:
88             case Unsigned:
89             case Mediumint:
90             case Mediumunsigned:
91                 objectOperationHandlerDelegate = objectOperationHandlerObjectInteger;
92                 break;
93             case Bigint:
94                 objectOperationHandlerDelegate = objectOperationHandlerObjectLong;
95                 break;
96             case Char:
97             case Varchar:
98             case Longvarchar:
99                 objectOperationHandlerDelegate = objectOperationHandlerString;
100                 break;
101             case Binary:
102             case Varbinary:
103             case Longvarbinary:
104                 objectOperationHandlerDelegate = objectOperationHandlerBytes;
105                 break;
106             case Blob:
107                 objectOperationHandlerDelegate = objectOperationHandlerBytesLob;
108                 break;
109             case Date:
110                 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlDate;
111                 break;
112             case Decimal:
113             case Decimalunsigned:
114                 objectOperationHandlerDelegate = objectOperationHandlerDecimal;
115                 break;
116             case Double:
117                 objectOperationHandlerDelegate = objectOperationHandlerObjectDouble;
118                 break;
119             case Float:
120                 objectOperationHandlerDelegate = objectOperationHandlerObjectFloat;
121                 break;
122             case Smallint:
123                 objectOperationHandlerDelegate = objectOperationHandlerObjectShort;
124                 break;
125             case Text:
126                 objectOperationHandlerDelegate = objectOperationHandlerStringLob;
127                 break;
128             case Time:
129                 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTime;
130                 break;
131             case Timestamp:
132                 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTimestamp;
133                 break;
134             case Tinyint:
135             case Tinyunsigned:
136                 objectOperationHandlerDelegate = objectOperationHandlerObjectByte;
137                 break;
138             default:
139                 // unsupported column type
140                 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
141                 error(
142                         local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name));
143             }
144         } else {
145             // not nullable columns
146             switch (column.getType()) {
147             case Int:
148             case Unsigned:
149             case Mediumint:
150             case Mediumunsigned:
151                 objectOperationHandlerDelegate = objectOperationHandlerInt;
152                 break;
153             case Bigint:
154                 objectOperationHandlerDelegate = objectOperationHandlerLong;
155                 break;
156             case Char:
157             case Varchar:
158             case Longvarchar:
159                 objectOperationHandlerDelegate = objectOperationHandlerString;
160                 break;
161             case Binary:
162             case Varbinary:
163             case Longvarbinary:
164                 objectOperationHandlerDelegate = objectOperationHandlerBytes;
165                 break;
166             case Blob:
167                 objectOperationHandlerDelegate = objectOperationHandlerBytesLob;
168                 break;
169             case Date:
170                 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlDate;
171                 break;
172             case Decimal:
173             case Decimalunsigned:
174                 objectOperationHandlerDelegate = objectOperationHandlerDecimal;
175                 break;
176             case Double:
177                 objectOperationHandlerDelegate = objectOperationHandlerDouble;
178                 break;
179             case Float:
180                 objectOperationHandlerDelegate = objectOperationHandlerFloat;
181                 break;
182             case Smallint:
183                 objectOperationHandlerDelegate = objectOperationHandlerShort;
184                 break;
185             case Text:
186                 objectOperationHandlerDelegate = objectOperationHandlerStringLob;
187                 break;
188             case Time:
189                 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTime;
190                 break;
191             case Timestamp:
192                 objectOperationHandlerDelegate = objectOperationHandlerJavaSqlTimestamp;
193                 break;
194             case Tinyint:
195             case Tinyunsigned:
196                 objectOperationHandlerDelegate = objectOperationHandlerByte;
197                 break;
198             default:
199                 // unsupported column type
200                 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
201                 error(
202                         local.message("ERR_Unsupported_Field_Type", storeColumnType.name(), name));
203             }
204         }
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());
209
210         reportErrors();
211     }
212
213 }