View Javadoc

1   package org.apache.torque.engine.database.model;
2   
3   /*
4    * Copyright 2001-2004 The Apache Software Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License")
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  import java.util.Hashtable;
20  import java.sql.Types;
21  
22  // I don't know if the peer system deals
23  // with the recommended mappings.
24  //
25  //import java.sql.Date;
26  //import java.sql.Time;
27  //import java.sql.Timestamp;
28  
29  /***
30   * A class that maps JDBC types to their corresponding
31   * Java object types, and Java native types. Used
32   * by Column.java to perform object/native mappings.
33   *
34   * These are the official SQL type to Java type mappings.
35   * These don't quite correspond to the way the peer
36   * system works so we'll have to make some adjustments.
37   * <pre>
38   * -------------------------------------------------------
39   * SQL Type      | Java Type            | Peer Type
40   * -------------------------------------------------------
41   * CHAR          | String               | String
42   * VARCHAR       | String               | String
43   * LONGVARCHAR   | String               | String
44   * NUMERIC       | java.math.BigDecimal | java.math.BigDecimal
45   * DECIMAL       | java.math.BigDecimal | java.math.BigDecimal
46   * BIT           | boolean OR Boolean   | Boolean
47   * TINYINT       | byte OR Byte         | Byte
48   * SMALLINT      | short OR Short       | Short
49   * INTEGER       | int OR Integer       | Integer
50   * BIGINT        | long OR Long         | Long
51   * REAL          | float OR Float       | Float
52   * FLOAT         | double OR Double     | Double
53   * DOUBLE        | double OR Double     | Double
54   * BINARY        | byte[]               | ?
55   * VARBINARY     | byte[]               | ?
56   * LONGVARBINARY | byte[]               | ?
57   * DATE          | java.sql.Date        | java.util.Date
58   * TIME          | java.sql.Time        | java.util.Date
59   * TIMESTAMP     | java.sql.Timestamp   | java.util.Date
60   *
61   * -------------------------------------------------------
62   * A couple variations have been introduced to cover cases
63   * that may arise, but are not covered above
64   * BOOLEANCHAR   | boolean OR Boolean   | String
65   * BOOLEANINT    | boolean OR Boolean   | Integer
66   * </pre>
67   *
68   * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
69   * @version $Id: TypeMap.java,v 1.2.2.4 2004/08/26 05:16:03 seade Exp $
70   */
71  public class TypeMap
72  {
73      public static final String CHAR = "CHAR";
74      public static final String VARCHAR = "VARCHAR";
75      public static final String LONGVARCHAR = "LONGVARCHAR";
76      public static final String CLOB = "CLOB";
77      public static final String NUMERIC = "NUMERIC";
78      public static final String DECIMAL = "DECIMAL";
79      public static final String BIT = "BIT";
80      public static final String TINYINT = "TINYINT";
81      public static final String SMALLINT = "SMALLINT";
82      public static final String INTEGER = "INTEGER";
83      public static final String BIGINT = "BIGINT";
84      public static final String REAL = "REAL";
85      public static final String FLOAT = "FLOAT";
86      public static final String DOUBLE = "DOUBLE";
87      public static final String BINARY = "BINARY";
88      public static final String VARBINARY = "VARBINARY";
89      public static final String LONGVARBINARY = "LONGVARBINARY";
90      public static final String BLOB = "BLOB";
91      public static final String DATE = "DATE";
92      public static final String TIME = "TIME";
93      public static final String TIMESTAMP = "TIMESTAMP";
94      public static final String BOOLEANCHAR = "BOOLEANCHAR";
95      public static final String BOOLEANINT = "BOOLEANINT";
96      private static final String[] TEXT_TYPES =
97      {
98          CHAR, VARCHAR, LONGVARCHAR, CLOB, DATE, TIME, TIMESTAMP, BOOLEANCHAR
99      };
100 
101     public static final String CHAR_OBJECT_TYPE = "\"\"";
102     public static final String VARCHAR_OBJECT_TYPE = "\"\"";
103     public static final String LONGVARCHAR_OBJECT_TYPE = "\"\"";
104     public static final String CLOB_OBJECT_TYPE = "\"\"";
105     public static final String NUMERIC_OBJECT_TYPE = "new BigDecimal(0)";
106     public static final String DECIMAL_OBJECT_TYPE = "new BigDecimal(0)";
107     public static final String BIT_OBJECT_TYPE = "Boolean.TRUE";
108     public static final String TINYINT_OBJECT_TYPE = "new Byte((byte)0)";
109     public static final String SMALLINT_OBJECT_TYPE = "new Short((short)0)";
110     public static final String INTEGER_OBJECT_TYPE = "new Integer(0)";
111     public static final String BIGINT_OBJECT_TYPE = "new Long(0)";
112     public static final String REAL_OBJECT_TYPE = "new Float(0)";
113     public static final String FLOAT_OBJECT_TYPE = "new Double(0)";
114     public static final String DOUBLE_OBJECT_TYPE = "new Double(0)";
115     public static final String BINARY_OBJECT_TYPE = "new Object()"; //?
116     public static final String VARBINARY_OBJECT_TYPE = "new Object()"; //?
117     public static final String LONGVARBINARY_OBJECT_TYPE = "new Object()"; //?
118     public static final String BLOB_OBJECT_TYPE = "new Object()"; //?
119     public static final String DATE_OBJECT_TYPE = "new Date()";
120     public static final String TIME_OBJECT_TYPE = "new Date()";
121     public static final String TIMESTAMP_OBJECT_TYPE = "new Date()";
122     public static final String BOOLEANCHAR_OBJECT_TYPE = "\"\"";
123     public static final String BOOLEANINT_OBJECT_TYPE = "new Integer(0)";
124 
125     public static final String CHAR_NATIVE_TYPE = "String";
126     public static final String VARCHAR_NATIVE_TYPE = "String";
127     public static final String LONGVARCHAR_NATIVE_TYPE = "String";
128     public static final String CLOB_NATIVE_TYPE = "String";
129     public static final String NUMERIC_NATIVE_TYPE = "BigDecimal";
130     public static final String DECIMAL_NATIVE_TYPE = "BigDecimal";
131     public static final String BIT_NATIVE_TYPE = "boolean";
132     public static final String TINYINT_NATIVE_TYPE = "byte";
133     public static final String SMALLINT_NATIVE_TYPE = "short";
134     public static final String INTEGER_NATIVE_TYPE = "int";
135     public static final String BIGINT_NATIVE_TYPE = "long";
136     public static final String REAL_NATIVE_TYPE = "float";
137     public static final String FLOAT_NATIVE_TYPE = "double";
138     public static final String DOUBLE_NATIVE_TYPE = "double";
139     public static final String BINARY_NATIVE_TYPE = "byte[]";
140     public static final String VARBINARY_NATIVE_TYPE = "byte[]";
141     public static final String LONGVARBINARY_NATIVE_TYPE = "byte[]";
142     public static final String BLOB_NATIVE_TYPE = "byte[]";
143     public static final String DATE_NATIVE_TYPE = "Date";
144     public static final String TIME_NATIVE_TYPE = "Date";
145     public static final String TIMESTAMP_NATIVE_TYPE = "Date";
146     public static final String BOOLEANCHAR_NATIVE_TYPE = "boolean";
147     public static final String BOOLEANINT_NATIVE_TYPE = "boolean";
148 
149     public static final String BIT_NATIVE_OBJECT_TYPE = "Boolean";
150     public static final String TINYINT_NATIVE_OBJECT_TYPE = "Byte";
151     public static final String SMALLINT_NATIVE_OBJECT_TYPE = "Short";
152     public static final String INTEGER_NATIVE_OBJECT_TYPE = "Integer";
153     public static final String BIGINT_NATIVE_OBJECT_TYPE = "Long";
154     public static final String REAL_NATIVE_OBJECT_TYPE = "Float";
155     public static final String FLOAT_NATIVE_OBJECT_TYPE = "Double";
156     public static final String DOUBLE_NATIVE_OBJECT_TYPE = "Double";
157     public static final String BOOLEANCHAR_NATIVE_OBJECT_TYPE = "Boolean";
158     public static final String BOOLEANINT_NATIVE_OBJECT_TYPE = "Boolean";
159 
160     public static final String CHAR_VILLAGE_METHOD = "asString()";
161     public static final String VARCHAR_VILLAGE_METHOD = "asString()";
162     public static final String LONGVARCHAR_VILLAGE_METHOD = "asString()";
163     public static final String CLOB_VILLAGE_METHOD = "asString()";
164     public static final String NUMERIC_VILLAGE_METHOD = "asBigDecimal()";
165     public static final String DECIMAL_VILLAGE_METHOD = "asBigDecimal()";
166     public static final String BIT_VILLAGE_METHOD = "asBoolean()";
167     public static final String TINYINT_VILLAGE_METHOD = "asByte()";
168     public static final String SMALLINT_VILLAGE_METHOD = "asShort()";
169     public static final String INTEGER_VILLAGE_METHOD = "asInt()";
170     public static final String BIGINT_VILLAGE_METHOD = "asLong()";
171     public static final String REAL_VILLAGE_METHOD = "asFloat()";
172     public static final String FLOAT_VILLAGE_METHOD = "asDouble()";
173     public static final String DOUBLE_VILLAGE_METHOD = "asDouble()";
174     public static final String BINARY_VILLAGE_METHOD = "asBytes()";
175     public static final String VARBINARY_VILLAGE_METHOD = "asBytes()";
176     public static final String LONGVARBINARY_VILLAGE_METHOD = "asBytes()";
177     public static final String BLOB_VILLAGE_METHOD = "asBytes()";
178     public static final String DATE_VILLAGE_METHOD = "asUtilDate()";
179     public static final String TIME_VILLAGE_METHOD = "asUtilDate()";
180     public static final String TIMESTAMP_VILLAGE_METHOD = "asUtilDate()";
181     public static final String BOOLEANCHAR_VILLAGE_METHOD = "asBoolean()";
182     public static final String BOOLEANINT_VILLAGE_METHOD = "asBoolean()";
183 
184     public static final String BIT_VILLAGE_OBJECT_METHOD = "asBooleanObj()";
185     public static final String TINYINT_VILLAGE_OBJECT_METHOD = "asByteObj()";
186     public static final String SMALLINT_VILLAGE_OBJECT_METHOD = "asShortObj()";
187     public static final String INTEGER_VILLAGE_OBJECT_METHOD = "asIntegerObj()";
188     public static final String BIGINT_VILLAGE_OBJECT_METHOD = "asLongObj()";
189     public static final String REAL_VILLAGE_OBJECT_METHOD = "asFloatObj()";
190     public static final String FLOAT_VILLAGE_OBJECT_METHOD = "asDoubleObj()";
191     public static final String DOUBLE_VILLAGE_OBJECT_METHOD = "asDoubleObj()";
192     public static final String BOOLEANCHAR_VILLAGE_OBJECT_METHOD = "asBooleanObj()";
193     public static final String BOOLEANINT_VILLAGE_OBJECT_METHOD = "asBooleanObj()";
194 
195     public static final String CHAR_PP_METHOD = "getString(ppKey)";
196     public static final String VARCHAR_PP_METHOD = "getString(ppKey)";
197     public static final String LONGVARCHAR_PP_METHOD = "getString(ppKey)";
198     public static final String NUMERIC_PP_METHOD = "getBigDecimal(ppKey)";
199     public static final String DECIMAL_PP_METHOD = "getBigDecimal(ppKey)";
200     public static final String BIT_PP_METHOD = "getBoolean(ppKey)";
201     public static final String TINYINT_PP_METHOD = "getByte(ppKey)";
202     public static final String SMALLINT_PP_METHOD = "getShort(ppKey)";
203     public static final String INTEGER_PP_METHOD = "getInt(ppKey)";
204     public static final String BIGINT_PP_METHOD = "getLong(ppKey)";
205     public static final String REAL_PP_METHOD = "getFloat(ppKey)";
206     public static final String FLOAT_PP_METHOD = "getDouble(ppKey)";
207     public static final String DOUBLE_PP_METHOD = "getDouble(ppKey)";
208     public static final String BINARY_PP_METHOD = "getBytes(ppKey)";
209     public static final String VARBINARY_PP_METHOD = "getBytes(ppKey)";
210     public static final String LONGVARBINARY_PP_METHOD = "getBytes(ppKey)";
211     public static final String DATE_PP_METHOD = "getDate(ppKey)";
212     public static final String TIME_PP_METHOD = "getDate(ppKey)";
213     public static final String TIMESTAMP_PP_METHOD = "getDate(ppKey)";
214     public static final String BOOLEANCHAR_PP_METHOD = "getBoolean(ppKey)";
215     public static final String BOOLEANINT_PP_METHOD = "getBoolean(ppKey)";
216 
217     private static Hashtable jdbcToJavaObjectMap = null;
218     private static Hashtable jdbcToJavaNativeMap = null;
219     private static Hashtable jdbcToJavaNativeObjectMap = null;
220     private static Hashtable jdbcToVillageMethodMap = null;
221     private static Hashtable jdbcToVillageObjectMethodMap = null;
222     private static Hashtable jdbcToPPMethodMap = null;
223     private static Hashtable torqueTypeToJdbcTypeMap = null;
224     private static Hashtable jdbcToTorqueTypeMap = null;
225     private static boolean isInitialized = false;
226 
227     /***
228      * Initializes the SQL to Java map so that it
229      * can be used by client code.
230      */
231     public synchronized static void initialize()
232     {
233         if (!isInitialized)
234         {
235             /*
236              * Create JDBC -> Java object mappings.
237              */
238 
239             jdbcToJavaObjectMap = new Hashtable();
240 
241             jdbcToJavaObjectMap.put(CHAR, CHAR_OBJECT_TYPE);
242             jdbcToJavaObjectMap.put(VARCHAR, VARCHAR_OBJECT_TYPE);
243             jdbcToJavaObjectMap.put(LONGVARCHAR, LONGVARCHAR_OBJECT_TYPE);
244             jdbcToJavaObjectMap.put(CLOB, CLOB_OBJECT_TYPE);
245             jdbcToJavaObjectMap.put(NUMERIC, NUMERIC_OBJECT_TYPE);
246             jdbcToJavaObjectMap.put(DECIMAL, DECIMAL_OBJECT_TYPE);
247             jdbcToJavaObjectMap.put(BIT, BIT_OBJECT_TYPE);
248             jdbcToJavaObjectMap.put(TINYINT, TINYINT_OBJECT_TYPE);
249             jdbcToJavaObjectMap.put(SMALLINT, SMALLINT_OBJECT_TYPE);
250             jdbcToJavaObjectMap.put(INTEGER, INTEGER_OBJECT_TYPE);
251             jdbcToJavaObjectMap.put(BIGINT, BIGINT_OBJECT_TYPE);
252             jdbcToJavaObjectMap.put(REAL, REAL_OBJECT_TYPE);
253             jdbcToJavaObjectMap.put(FLOAT, FLOAT_OBJECT_TYPE);
254             jdbcToJavaObjectMap.put(DOUBLE, DOUBLE_OBJECT_TYPE);
255             jdbcToJavaObjectMap.put(BINARY, BINARY_OBJECT_TYPE);
256             jdbcToJavaObjectMap.put(VARBINARY, VARBINARY_OBJECT_TYPE);
257             jdbcToJavaObjectMap.put(LONGVARBINARY, LONGVARBINARY_OBJECT_TYPE);
258             jdbcToJavaObjectMap.put(BLOB, BLOB_OBJECT_TYPE);
259             jdbcToJavaObjectMap.put(DATE, DATE_OBJECT_TYPE);
260             jdbcToJavaObjectMap.put(TIME, TIME_OBJECT_TYPE);
261             jdbcToJavaObjectMap.put(TIMESTAMP, TIMESTAMP_OBJECT_TYPE);
262             jdbcToJavaObjectMap.put(BOOLEANCHAR, BOOLEANCHAR_OBJECT_TYPE);
263             jdbcToJavaObjectMap.put(BOOLEANINT, BOOLEANINT_OBJECT_TYPE);
264 
265             /*
266              * Create JDBC -> native Java type mappings.
267              */
268 
269             jdbcToJavaNativeMap = new Hashtable();
270 
271             jdbcToJavaNativeMap.put(CHAR, CHAR_NATIVE_TYPE);
272             jdbcToJavaNativeMap.put(VARCHAR, VARCHAR_NATIVE_TYPE);
273             jdbcToJavaNativeMap.put(LONGVARCHAR, LONGVARCHAR_NATIVE_TYPE);
274             jdbcToJavaNativeMap.put(CLOB, CLOB_NATIVE_TYPE);
275             jdbcToJavaNativeMap.put(NUMERIC, NUMERIC_NATIVE_TYPE);
276             jdbcToJavaNativeMap.put(DECIMAL, DECIMAL_NATIVE_TYPE);
277             jdbcToJavaNativeMap.put(BIT, BIT_NATIVE_TYPE);
278             jdbcToJavaNativeMap.put(TINYINT, TINYINT_NATIVE_TYPE);
279             jdbcToJavaNativeMap.put(SMALLINT, SMALLINT_NATIVE_TYPE);
280             jdbcToJavaNativeMap.put(INTEGER, INTEGER_NATIVE_TYPE);
281             jdbcToJavaNativeMap.put(BIGINT, BIGINT_NATIVE_TYPE);
282             jdbcToJavaNativeMap.put(REAL, REAL_NATIVE_TYPE);
283             jdbcToJavaNativeMap.put(FLOAT, FLOAT_NATIVE_TYPE);
284             jdbcToJavaNativeMap.put(DOUBLE, DOUBLE_NATIVE_TYPE);
285             jdbcToJavaNativeMap.put(BINARY, BINARY_NATIVE_TYPE);
286             jdbcToJavaNativeMap.put(VARBINARY, VARBINARY_NATIVE_TYPE);
287             jdbcToJavaNativeMap.put(LONGVARBINARY, LONGVARBINARY_NATIVE_TYPE);
288             jdbcToJavaNativeMap.put(BLOB, BLOB_NATIVE_TYPE);
289             jdbcToJavaNativeMap.put(DATE, DATE_NATIVE_TYPE);
290             jdbcToJavaNativeMap.put(TIME, TIME_NATIVE_TYPE);
291             jdbcToJavaNativeMap.put(TIMESTAMP, TIMESTAMP_NATIVE_TYPE);
292             jdbcToJavaNativeMap.put(BOOLEANCHAR, BOOLEANCHAR_NATIVE_TYPE);
293             jdbcToJavaNativeMap.put(BOOLEANINT, BOOLEANINT_NATIVE_TYPE);
294 
295             jdbcToJavaNativeObjectMap = new Hashtable();
296             jdbcToJavaNativeObjectMap.put(BIT, BIT_NATIVE_OBJECT_TYPE);
297             jdbcToJavaNativeObjectMap.put(TINYINT, TINYINT_NATIVE_OBJECT_TYPE);
298             jdbcToJavaNativeObjectMap.put(SMALLINT, SMALLINT_NATIVE_OBJECT_TYPE);
299             jdbcToJavaNativeObjectMap.put(INTEGER, INTEGER_NATIVE_OBJECT_TYPE);
300             jdbcToJavaNativeObjectMap.put(BIGINT, BIGINT_NATIVE_OBJECT_TYPE);
301             jdbcToJavaNativeObjectMap.put(REAL, REAL_NATIVE_OBJECT_TYPE);
302             jdbcToJavaNativeObjectMap.put(FLOAT, FLOAT_NATIVE_OBJECT_TYPE);
303             jdbcToJavaNativeObjectMap.put(DOUBLE, DOUBLE_NATIVE_OBJECT_TYPE);
304             jdbcToJavaNativeObjectMap.put(BOOLEANCHAR,
305                                           BOOLEANCHAR_NATIVE_OBJECT_TYPE);
306             jdbcToJavaNativeObjectMap.put(BOOLEANINT,
307                                           BOOLEANINT_NATIVE_OBJECT_TYPE);
308 
309             /*
310              * Create JDBC -> Village asX() mappings.
311              */
312 
313             jdbcToVillageMethodMap = new Hashtable();
314 
315             jdbcToVillageMethodMap.put(CHAR, CHAR_VILLAGE_METHOD);
316             jdbcToVillageMethodMap.put(VARCHAR, VARCHAR_VILLAGE_METHOD);
317             jdbcToVillageMethodMap.put(LONGVARCHAR, LONGVARCHAR_VILLAGE_METHOD);
318             jdbcToVillageMethodMap.put(CLOB, CLOB_VILLAGE_METHOD);
319             jdbcToVillageMethodMap.put(NUMERIC, NUMERIC_VILLAGE_METHOD);
320             jdbcToVillageMethodMap.put(DECIMAL, DECIMAL_VILLAGE_METHOD);
321             jdbcToVillageMethodMap.put(BIT, BIT_VILLAGE_METHOD);
322             jdbcToVillageMethodMap.put(TINYINT, TINYINT_VILLAGE_METHOD);
323             jdbcToVillageMethodMap.put(SMALLINT, SMALLINT_VILLAGE_METHOD);
324             jdbcToVillageMethodMap.put(INTEGER, INTEGER_VILLAGE_METHOD);
325             jdbcToVillageMethodMap.put(BIGINT, BIGINT_VILLAGE_METHOD);
326             jdbcToVillageMethodMap.put(REAL, REAL_VILLAGE_METHOD);
327             jdbcToVillageMethodMap.put(FLOAT, FLOAT_VILLAGE_METHOD);
328             jdbcToVillageMethodMap.put(DOUBLE, DOUBLE_VILLAGE_METHOD);
329             jdbcToVillageMethodMap.put(BINARY, BINARY_VILLAGE_METHOD);
330             jdbcToVillageMethodMap.put(VARBINARY, VARBINARY_VILLAGE_METHOD);
331             jdbcToVillageMethodMap.put(LONGVARBINARY, LONGVARBINARY_VILLAGE_METHOD);
332             jdbcToVillageMethodMap.put(BLOB, BLOB_VILLAGE_METHOD);
333             jdbcToVillageMethodMap.put(DATE, DATE_VILLAGE_METHOD);
334             jdbcToVillageMethodMap.put(TIME, TIME_VILLAGE_METHOD);
335             jdbcToVillageMethodMap.put(TIMESTAMP, TIMESTAMP_VILLAGE_METHOD);
336             jdbcToVillageMethodMap.put(BOOLEANCHAR, BOOLEANCHAR_VILLAGE_METHOD);
337             jdbcToVillageMethodMap.put(BOOLEANINT, BOOLEANINT_VILLAGE_METHOD);
338 
339 
340             jdbcToVillageObjectMethodMap = new Hashtable();
341             jdbcToVillageObjectMethodMap.put(BIT, BIT_VILLAGE_OBJECT_METHOD);
342             jdbcToVillageObjectMethodMap.put(TINYINT,
343                                              TINYINT_VILLAGE_OBJECT_METHOD);
344             jdbcToVillageObjectMethodMap.put(SMALLINT,
345                                              SMALLINT_VILLAGE_OBJECT_METHOD);
346             jdbcToVillageObjectMethodMap.put(INTEGER,
347                                              INTEGER_VILLAGE_OBJECT_METHOD);
348             jdbcToVillageObjectMethodMap.put(BIGINT,
349                                              BIGINT_VILLAGE_OBJECT_METHOD);
350             jdbcToVillageObjectMethodMap.put(REAL, REAL_VILLAGE_OBJECT_METHOD);
351             jdbcToVillageObjectMethodMap.put(FLOAT, FLOAT_VILLAGE_OBJECT_METHOD);
352             jdbcToVillageObjectMethodMap.put(DOUBLE,
353                                              DOUBLE_VILLAGE_OBJECT_METHOD);
354             jdbcToVillageObjectMethodMap.put(BOOLEANCHAR,
355                                              BOOLEANCHAR_VILLAGE_OBJECT_METHOD);
356             jdbcToVillageObjectMethodMap.put(BOOLEANINT,
357                                              BOOLEANINT_VILLAGE_OBJECT_METHOD);
358 
359             /*
360              * Create JDBC -> ParameterParser getX() mappings.
361              */
362 
363             jdbcToPPMethodMap = new Hashtable();
364 
365             jdbcToPPMethodMap.put(CHAR, CHAR_PP_METHOD);
366             jdbcToPPMethodMap.put(VARCHAR, VARCHAR_PP_METHOD);
367             jdbcToPPMethodMap.put(LONGVARCHAR, LONGVARCHAR_PP_METHOD);
368             jdbcToPPMethodMap.put(NUMERIC, NUMERIC_PP_METHOD);
369             jdbcToPPMethodMap.put(DECIMAL, DECIMAL_PP_METHOD);
370             jdbcToPPMethodMap.put(BIT, BIT_PP_METHOD);
371             jdbcToPPMethodMap.put(TINYINT, TINYINT_PP_METHOD);
372             jdbcToPPMethodMap.put(SMALLINT, SMALLINT_PP_METHOD);
373             jdbcToPPMethodMap.put(INTEGER, INTEGER_PP_METHOD);
374             jdbcToPPMethodMap.put(BIGINT, BIGINT_PP_METHOD);
375             jdbcToPPMethodMap.put(REAL, REAL_PP_METHOD);
376             jdbcToPPMethodMap.put(FLOAT, FLOAT_PP_METHOD);
377             jdbcToPPMethodMap.put(DOUBLE, DOUBLE_PP_METHOD);
378             jdbcToPPMethodMap.put(BINARY, BINARY_PP_METHOD);
379             jdbcToPPMethodMap.put(VARBINARY, VARBINARY_PP_METHOD);
380             jdbcToPPMethodMap.put(LONGVARBINARY, LONGVARBINARY_PP_METHOD);
381             jdbcToPPMethodMap.put(DATE, DATE_PP_METHOD);
382             jdbcToPPMethodMap.put(TIME, TIME_PP_METHOD);
383             jdbcToPPMethodMap.put(TIMESTAMP, TIMESTAMP_PP_METHOD);
384             jdbcToPPMethodMap.put(BOOLEANCHAR, BOOLEANCHAR_PP_METHOD);
385             jdbcToPPMethodMap.put(BOOLEANINT, BOOLEANINT_PP_METHOD);
386 
387             /*
388              * Create JDBC -> Java object mappings.
389              */
390 
391             torqueTypeToJdbcTypeMap = new Hashtable();
392 
393             torqueTypeToJdbcTypeMap.put(CHAR, CHAR);
394             torqueTypeToJdbcTypeMap.put(VARCHAR, VARCHAR);
395             torqueTypeToJdbcTypeMap.put(LONGVARCHAR, LONGVARCHAR);
396             torqueTypeToJdbcTypeMap.put(CLOB, CLOB);
397             torqueTypeToJdbcTypeMap.put(NUMERIC, NUMERIC);
398             torqueTypeToJdbcTypeMap.put(DECIMAL, DECIMAL);
399             torqueTypeToJdbcTypeMap.put(BIT, BIT);
400             torqueTypeToJdbcTypeMap.put(TINYINT, TINYINT);
401             torqueTypeToJdbcTypeMap.put(SMALLINT, SMALLINT);
402             torqueTypeToJdbcTypeMap.put(INTEGER, INTEGER);
403             torqueTypeToJdbcTypeMap.put(BIGINT, BIGINT);
404             torqueTypeToJdbcTypeMap.put(REAL, REAL);
405             torqueTypeToJdbcTypeMap.put(FLOAT, FLOAT);
406             torqueTypeToJdbcTypeMap.put(DOUBLE, DOUBLE);
407             torqueTypeToJdbcTypeMap.put(BINARY, BINARY);
408             torqueTypeToJdbcTypeMap.put(VARBINARY, VARBINARY);
409             torqueTypeToJdbcTypeMap.put(LONGVARBINARY, LONGVARBINARY);
410             torqueTypeToJdbcTypeMap.put(BLOB, BLOB);
411             torqueTypeToJdbcTypeMap.put(DATE, DATE);
412             torqueTypeToJdbcTypeMap.put(TIME, TIME);
413             torqueTypeToJdbcTypeMap.put(TIMESTAMP, TIMESTAMP);
414             torqueTypeToJdbcTypeMap.put(BOOLEANCHAR, CHAR);
415             torqueTypeToJdbcTypeMap.put(BOOLEANINT, INTEGER);
416 
417             /*
418              * Create JDBC type code to torque type map.
419              */
420             jdbcToTorqueTypeMap = new Hashtable();
421 
422             jdbcToTorqueTypeMap.put(new Integer(Types.CHAR), CHAR);
423             jdbcToTorqueTypeMap.put(new Integer(Types.VARCHAR), VARCHAR);
424             jdbcToTorqueTypeMap.put(new Integer(Types.LONGVARCHAR), LONGVARCHAR);
425             jdbcToTorqueTypeMap.put(new Integer(Types.CLOB), CLOB);
426             jdbcToTorqueTypeMap.put(new Integer(Types.NUMERIC), NUMERIC);
427             jdbcToTorqueTypeMap.put(new Integer(Types.DECIMAL), DECIMAL);
428             jdbcToTorqueTypeMap.put(new Integer(Types.BIT), BIT);
429             jdbcToTorqueTypeMap.put(new Integer(Types.TINYINT), TINYINT);
430             jdbcToTorqueTypeMap.put(new Integer(Types.SMALLINT), SMALLINT);
431             jdbcToTorqueTypeMap.put(new Integer(Types.INTEGER), INTEGER);
432             jdbcToTorqueTypeMap.put(new Integer(Types.BIGINT), BIGINT);
433             jdbcToTorqueTypeMap.put(new Integer(Types.REAL), REAL);
434             jdbcToTorqueTypeMap.put(new Integer(Types.FLOAT), FLOAT);
435             jdbcToTorqueTypeMap.put(new Integer(Types.DOUBLE), DOUBLE);
436             jdbcToTorqueTypeMap.put(new Integer(Types.BINARY), BINARY);
437             jdbcToTorqueTypeMap.put(new Integer(Types.VARBINARY), VARBINARY);
438             jdbcToTorqueTypeMap.put(new Integer(Types.LONGVARBINARY), LONGVARBINARY);
439             jdbcToTorqueTypeMap.put(new Integer(Types.BLOB), BLOB);
440             jdbcToTorqueTypeMap.put(new Integer(Types.DATE), DATE);
441             jdbcToTorqueTypeMap.put(new Integer(Types.TIME), TIME);
442             jdbcToTorqueTypeMap.put(new Integer(Types.TIMESTAMP), TIMESTAMP);
443 
444             isInitialized = true;
445         }
446     }
447 
448     /***
449      * Report whether this object has been initialized.
450      *
451      * @return true if this object has been initialized
452      */
453     public static boolean isInitialized()
454     {
455         return isInitialized;
456     }
457 
458     /***
459      * Return a Java object which corresponds to the
460      * JDBC type provided. Use in MapBuilder generation.
461      *
462      * @param jdbcType the JDBC type
463      * @return name of the Object
464      */
465     public static String getJavaObject(String jdbcType)
466     {
467         // Make sure the we are initialized.
468         if (!isInitialized)
469         {
470             initialize();
471         }
472         return (String) jdbcToJavaObjectMap.get(jdbcType);
473     }
474 
475     /***
476      * Return native java type which corresponds to the
477      * JDBC type provided. Use in the base object class generation.
478      *
479      * @param jdbcType the JDBC type
480      * @return name of the native java type
481      */
482     public static String getJavaNative(String jdbcType)
483     {
484         // Make sure the we are initialized.
485         if (!isInitialized)
486         {
487             initialize();
488         }
489         return (String) jdbcToJavaNativeMap.get(jdbcType);
490     }
491 
492     /***
493      * Return native java type which corresponds to the
494      * JDBC type provided. Use in the base object class generation.
495      *
496      * @param jdbcType the JDBC type
497      * @return name of the Object
498      */
499     public static String getJavaNativeObject(String jdbcType)
500     {
501         // Make sure the we are initialized.
502         if (!isInitialized)
503         {
504             initialize();
505         }
506         String s = (String) jdbcToJavaNativeObjectMap.get(jdbcType);
507         if (s == null)
508         {
509             s = (String) jdbcToJavaNativeMap.get(jdbcType);
510         }
511         return s;
512     }
513 
514     /***
515      * Return Village asX() method which corresponds to the
516      * JDBC type provided. Use in the Peer class generation.
517      *
518      * @param jdbcType the JDBC type
519      * @return name of the Village asX() method
520      */
521     public static String getVillageMethod(String jdbcType)
522     {
523         // Make sure the we are initialized.
524         if (!isInitialized)
525         {
526             initialize();
527         }
528         return (String) jdbcToVillageMethodMap.get(jdbcType);
529     }
530 
531     /***
532      * Return Village asX() method which corresponds to the
533      * JDBC type provided. Use in the Peer class generation.
534      *
535      * @param jdbcType the JDBC type
536      * @return name of the Village asX() method
537      */
538     public static String getVillageObjectMethod(String jdbcType)
539     {
540         // Make sure the we are initialized.
541         if (!isInitialized)
542         {
543             initialize();
544         }
545         String s = (String) jdbcToVillageObjectMethodMap.get(jdbcType);
546         if (s == null)
547         {
548             s = (String) jdbcToVillageMethodMap.get(jdbcType);
549         }
550         return s;
551     }
552 
553     /***
554      * Return ParameterParser getX() method which corresponds to the
555      * JDBC type provided. Use in the Object class generation.
556      *
557      * @param jdbcType the JDBC type
558      * @return name of the ParameterParser getX() method
559      */
560     public static String getPPMethod(String jdbcType)
561     {
562         // Make sure the we are initialized.
563         if (!isInitialized)
564         {
565             initialize();
566         }
567         return (String) jdbcToPPMethodMap.get(jdbcType);
568     }
569 
570     /***
571      * Returns the correct jdbc type for torque added types
572      *
573      * @param type the torque added type
574      * @return name of the the correct jdbc type
575      */
576     public static String getJdbcType(String type)
577     {
578         // Make sure the we are initialized.
579         if (!isInitialized)
580         {
581             initialize();
582         }
583         return (String) torqueTypeToJdbcTypeMap.get(type);
584     }
585 
586     /***
587      * Returns Torque type constant corresponding to JDBC type code.
588      * Used but Torque JDBC task.
589      *
590      * @param sqlType the SQL type
591      * @return Torque type constant
592      */
593     public static String getTorqueType(Integer sqlType)
594     {
595         // Make sure the we are initialized.
596         if (!isInitialized)
597         {
598             initialize();
599         }
600         return (String) jdbcToTorqueTypeMap.get(sqlType);
601     }
602 
603     /***
604      * Returns true if the type is boolean in the java
605      * object and a numeric (1 or 0) in the db.
606      *
607      * @param type The type to check.
608      * @return true if the type is BOOLEANINT
609      */
610     public static boolean isBooleanInt(String type)
611     {
612         return BOOLEANINT.equals(type);
613     }
614 
615     /***
616      * Returns true if the type is boolean in the
617      * java object and a String "Y" or "N" in the db.
618      *
619      * @param type The type to check.
620      * @return true if the type is BOOLEANCHAR
621      */
622     public static boolean isBooleanChar(String type)
623     {
624         return BOOLEANCHAR.equals(type);
625     }
626 
627     /***
628      * Returns true if the type is boolean in the
629      * java object and a Bit "1" or "0" in the db.
630      *
631      * @param type The type to check.
632      * @return true if the type is BIT
633      */
634     public static boolean isBit(String type)
635     {
636         return BIT.equals(type);
637     }
638 
639     /***
640      * Returns true if values for the type need to be quoted.
641      *
642      * @param type The type to check.
643      * @return true if values for the type need to be quoted.
644      */
645     public static final boolean isTextType(String type)
646     {
647         for (int i = 0; i < TEXT_TYPES.length; i++)
648         {
649             if (type.equals(TEXT_TYPES[i]))
650             {
651                 return true;
652             }
653         }
654 
655         // If we get this far, there were no matches.
656         return false;
657     }
658 }