KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > utils > ColumnCharacteristicsUtilities


1 package com.daffodilwoods.daffodildb.utils;
2
3 import com.daffodilwoods.database.resource.*;
4 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
5 import com.daffodilwoods.database.utility.P;
6 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
7 import com.daffodilwoods.daffodildb.server.datasystem.utility.RecordVersion;
8
9 public class ColumnCharacteristicsUtilities implements Datatype {
10
11    public static int[] getColumnsType(int[] columns, _ColumnCharacteristics cc) throws DException {
12       int[] columnsType = new int[columns.length];
13       for (int i = 0; i < columns.length; i++) {
14          columnsType[i] = cc.getColumnType(columns[i]);
15       }
16       return columnsType;
17    }
18
19    public static int[] getColumnsSize(int[] columns, _ColumnCharacteristics cc) throws DException {
20       int[] columnsType = new int[columns.length];
21       for (int i = 0; i < columns.length; i++)
22          columnsType[i] = cc.getPrecision(columns[i]);
23       return columnsType;
24    }
25
26    public static boolean isFixed(int type) throws DException {
27       return! (type == ARRAY || type == BIGDECIMAL || type == VARCHAR ||
28                type == NUMERIC || type == DECIMAL || type == DEC ||
29                type == CHARACTERVARYING || type == CHARVARYING ||
30                type == BITVARYING || type == SUM ||
31                type == VARBINARY || type == REF || type == STRUCT);
32    }
33
34    public static boolean isFixedTable(_ColumnCharacteristics columnCharacteristics) throws DException {
35       for (int i = 0, columnCount = columnCharacteristics.getColumnCount(); i < columnCount; i++)
36          if (!isFixed(columnCharacteristics.getColumnType(i)))
37             return false;
38       return true;
39    }
40
41    public static Object JavaDoc[] getObjectOfRespectiveType(Object JavaDoc[] objects, int[] dataType, int[] size) throws DException {
42       if (objects == null)
43          return null;
44       Object JavaDoc[] objectToReturn = new Object JavaDoc[objects.length];
45       for (int i = 0; i < objects.length; i++) {
46          if (objects[i] != null) {
47             objectToReturn[i] = com.daffodilwoods.database.general.TypeConverter.ConvertObjectToDatabaseType(objects[i], dataType[i], size[i]);
48          }
49       }
50       return objectToReturn;
51    }
52
53    public static int getPrecision(int type, int byteSize) throws DException {
54       switch (type) {
55          case INT:
56          case INTEGER:
57             return INT_PRECISION;
58          case DATE:
59             return DATE_PRECISION;
60          case BIGINT:
61          case LONG:
62             return LONG_PRECISION;
63          case FLOAT:
64          case DOUBLE:
65          case DOUBLEPRECISION:
66             return DOUBLE_PRECISION;
67          case REAL:
68             return REAL_PRECISION;
69          case SHORT:
70          case SMALLINT:
71             return SHORT_PRECISION;
72          case BOOLEAN:
73             return BOOLEAN_PRECISION;
74          case TINYINT:
75          case BYTE:
76             return BYTE_PRECISION;
77          case TIME:
78             return TIME_PRECISION;
79          case TIMESTAMP:
80             return TIMESTAMP_PRECISION;
81          case DEC:
82          case DECIMAL:
83          case BIGDECIMAL:
84             return BIGDECIMAL_PRECISION;
85       }
86       return byteSize;
87    }
88
89    public static int getMemoryUsage(int[] indexes, Object JavaDoc[] values, _ColumnCharacteristics cc) throws DException {
90       int memoryUsage = 0;
91       if (indexes.length == values.length)
92          for (int i = 0; i < indexes.length; i++)
93             memoryUsage += getMemoryUsage(cc.getColumnType(indexes[i]), values[i]);
94       else
95          for (int i = 0; i < indexes.length; i++)
96             memoryUsage += getMemoryUsage(cc.getColumnType(indexes[i]), values[indexes[i]]);
97       return memoryUsage;
98    }
99
100 // else*/
101

102    public static int getMemoryUsage(Object JavaDoc[] values, _ColumnCharacteristics cc) throws DException {
103       int memoryUsage = 0;
104       for (int i = 0; i < values.length; i++)
105          memoryUsage += getMemoryUsage(cc.getColumnType(i), values[i]);
106       return memoryUsage;
107    }
108
109
110    private static int getMemoryUsage(int columnType, Object JavaDoc value) throws DException {
111       int referenceMemory = 8;
112       if (value == null)
113          return referenceMemory;
114       try {
115          switch (columnType) {
116             case BINARY:
117             case VARBINARY:
118             case CHAR:
119             case CHARVARYING:
120             case CHARACTERVARYING:
121             case CHARACTER:
122             case VARCHAR:
123
124                String JavaDoc str = value.toString();
125                return str.length() + referenceMemory;
126             case BIT:
127             case BITVARYING:
128                String JavaDoc binaryValue = (String JavaDoc) value;
129                return binaryValue.length() + referenceMemory;
130
131             case INT:
132             case INTEGER:
133                return Datatype.INTSIZE + referenceMemory;
134             case BIGINT:
135             case LONG:
136                return Datatype.LONGSIZE + referenceMemory;
137             case SMALLINT:
138             case SHORT:
139                return Datatype.SHORTSIZE + referenceMemory;
140             case BOOLEAN:
141                return Datatype.BOOLEANSIZE + referenceMemory;
142             case FLOAT:
143                return Datatype.FLOATSIZE + referenceMemory;
144             case DOUBLEPRECISION:
145             case DOUBLE:
146                return Datatype.DOUBLESIZE + referenceMemory;
147             case DATE:
148                return 16 + referenceMemory;
149             case MODULE:
150                return MODULESIZE + referenceMemory;
151             case SUM:
152                return 16 + referenceMemory;
153             case ARRAY:
154                return referenceMemory;
155             case RECORD:
156                return 8 + referenceMemory;
157             case RECORDSET:
158                return referenceMemory;
159             case DECIMAL:
160             case DEC:
161             case NUMERIC:
162             case BIGDECIMAL:
163                return 32 + 8 + referenceMemory; // 32 -- BigInteger in this class
164
case REAL:
165                return REALSIZE + referenceMemory;
166             case TIME:
167                return 16 + referenceMemory;
168             case TIMESTAMP:
169                return 24 + referenceMemory;
170             case TINYINT:
171             case BYTE:
172                return 1 + referenceMemory;
173             case LONGVARBINARY:
174             case BINARYLARGEOBJECT:
175             case BLOB:
176                return (int) ( (java.sql.Blob JavaDoc) value).length() + referenceMemory;
177             case LONGVARCHAR:
178             case CHARACTERLARGEOBJECT:
179             case CHARLARGEOBJECT:
180             case CLOB:
181                return (int) ( (java.sql.Clob JavaDoc) value).length() + referenceMemory;
182             case REF:
183                return referenceMemory;
184             case STRUCT:
185                return referenceMemory;
186          }
187       } catch (Exception JavaDoc ex) {
188       }
189       throw new DException("DSE1018", new Object JavaDoc[] {new Integer JavaDoc(columnType)});
190    }
191
192    public static boolean isStringType(int type) {
193       return type == CHAR || type == CHARACTER || type == CHARACTERVARYING ||
194           type == CHARVARYING || type == VARCHAR;
195    }
196
197    public static Object JavaDoc[] getAutoIncrementColumnIndexes(_ColumnCharacteristics cc, int[] columnindexes, RecordVersion recordVersion) throws DException {
198       int count = cc.getColumnCount();
199       int[] autoIncrementColumnIndexes = new int[count];
200       Object JavaDoc[] autoIncrementColumnValues = new Object JavaDoc[count];
201       int counter = 0;
202       int vcounter = 0;
203       for (int i = 0; i < count; i++) {
204          if (cc.isAutoIncrement(i)) {
205             autoIncrementColumnIndexes[counter] = i;
206             if (P.indexOf( (columnindexes), i) == -1) {
207                autoIncrementColumnValues[counter] = recordVersion.getCurrentRecord().
208                    getObject(i);
209                vcounter++;
210             }
211             counter++;
212          }
213       }
214       if (counter > 0) {
215          int[] temp = new int[counter];
216          Object JavaDoc[] values = null;
217          System.arraycopy(autoIncrementColumnIndexes, 0, temp, 0, counter);
218          if (vcounter > 0) {
219             values = new Object JavaDoc[counter];
220             System.arraycopy(autoIncrementColumnValues, 0, values, 0, counter);
221          }
222          return new Object JavaDoc[] {temp, values};
223       } else {
224          int[] temp = new int[0];
225          Object JavaDoc[] values = new Object JavaDoc[0];
226          return new Object JavaDoc[] {temp, values};
227       }
228    }
229
230    public static int[] getColumnsScale(int[] columns, _ColumnCharacteristics cc) throws DException {
231       int[] columnsType = new int[columns.length];
232       for (int i = 0; i < columns.length; i++) {
233          columnsType[i] = cc.getScale(columns[i]);
234       }
235       return columnsType;
236    }
237 }
238
Popular Tags