18 package com.mysql.clusterj.jdbc;
20 import com.mysql.clusterj.ClusterJFatalInternalException;
21 import com.mysql.clusterj.ClusterJUserException;
23 import com.mysql.clusterj.core.metadata.AbstractDomainTypeHandlerImpl;
24 import com.mysql.clusterj.core.metadata.IndexHandlerImpl;
26 import com.mysql.clusterj.core.spi.DomainFieldHandler;
27 import com.mysql.clusterj.core.spi.ValueHandler;
29 import com.mysql.clusterj.core.store.Column;
30 import com.mysql.clusterj.core.store.Dictionary;
31 import com.mysql.clusterj.core.store.Index;
32 import com.mysql.clusterj.core.store.Table;
34 import com.mysql.clusterj.core.util.I18NHelper;
35 import com.mysql.clusterj.core.util.Logger;
36 import com.mysql.clusterj.core.util.LoggerFactoryService;
38 import java.lang.reflect.Proxy;
39 import java.util.Arrays;
40 import java.util.HashMap;
48 public class DomainTypeHandlerImpl<T>
extends AbstractDomainTypeHandlerImpl<T> {
57 static Map<String, DomainTypeHandlerImpl<?>> domainTypeHandlerMap =
new HashMap<String, DomainTypeHandlerImpl<?>>();
66 DomainTypeHandlerImpl<?> result = null;
67 synchronized (domainTypeHandlerMap) {
68 result = domainTypeHandlerMap.get(tableName);
72 result =
new DomainTypeHandlerImpl(tableName, dictionary);
73 domainTypeHandlerMap.put(tableName, result);
74 if (logger.isDetailEnabled()) logger.detail(
"New DomainTypeHandler created for table " + tableName);
76 if (logger.isDetailEnabled()) logger.detail(
"DomainTypeHandler for table " + tableName
77 +
" not created; table is not an ndb table.");
80 if (logger.isDetailEnabled()) logger.detail(
"Found DomainTypeHandler for table " + tableName);
90 if (logger.isDebugEnabled()) logger.debug(
"New JDBC DomainTypeHandlerImpl for table " + tableName);
91 this.tableName = tableName;
92 this.
table = dictionary.getTable(tableName);
97 fieldNames = columnNames;
98 if (logger.isDebugEnabled()) logger.debug(
"Found Table for " + tableName
99 +
" with columns " + Arrays.toString(columnNames));
101 this.primaryKeyColumnNames =
table.getPrimaryKeyColumnNames();
102 this.numberOfIdFields = primaryKeyColumnNames.length;
104 this.idFieldNumbers =
new int[numberOfIdFields];
106 this.partitionKeyColumnNames =
table.getPartitionKeyColumnNames();
107 this.numberOfPartitionKeyColumns = partitionKeyColumnNames.length;
113 Index primaryIndex = dictionary.getIndex(
"PRIMARY$KEY", tableName,
"PRIMARY");
115 new IndexHandlerImpl(
this, dictionary, primaryIndex, primaryKeyColumnNames);
116 indexHandlerImpls.add(primaryIndexHandler);
119 for (
String indexName: indexNames) {
121 String indexAlias = removeUniqueSuffix(indexName);
122 Index index = dictionary.getIndex(indexName, tableName, indexAlias);
125 indexHandlerImpls.add(imd);
129 for (
String columnName: columnNames) {
132 numberOfFields++, column);
133 fieldNameToNumber.put(domainFieldHandler.getName(), domainFieldHandler.getFieldNumber());
134 persistentFieldHandlers.add(domainFieldHandler);
136 nonPKFieldHandlers.add(domainFieldHandler);
142 indexHandler.assertAllColumnsHaveFields();
154 throws IllegalArgumentException {
156 return (ValueHandler)instance;
158 ValueHandler
handler = (ValueHandler)
159 Proxy.getInvocationHandler(instance);
165 public void objectResetModified(ValueHandler
handler) {
169 public void objectSetKeys(Object arg0, Object arg1) {
170 throw new ClusterJFatalInternalException(
"Not implemented.");