diff options
author | Brian S. O'Neill <bronee@gmail.com> | 2007-09-20 01:12:19 +0000 |
---|---|---|
committer | Brian S. O'Neill <bronee@gmail.com> | 2007-09-20 01:12:19 +0000 |
commit | 9ac1b2a5ce32426615e7aecd4c18c113f79a15e3 (patch) | |
tree | 5bf8c38076f4c032d0790346284c34b7904602e2 /src/main/java/com/amazon/carbonado/repo/jdbc | |
parent | c5e711c5a8828db5812d7b8915a85eb84772b280 (diff) |
Fix support for char data type when used with an adapter.
Diffstat (limited to 'src/main/java/com/amazon/carbonado/repo/jdbc')
4 files changed, 48 insertions, 76 deletions
diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableGenerator.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableGenerator.java index a41eebe..3f71d1c 100644 --- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableGenerator.java +++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableGenerator.java @@ -1511,7 +1511,13 @@ class JDBCStorableGenerator<S extends Storable> { }
fromType = propertyType;
} else {
- Method adaptMethod = property.getAppliedAdapterFromMethod();
+ Class toClass = psClass;
+ if (java.sql.Blob.class.isAssignableFrom(toClass)) {
+ toClass = com.amazon.carbonado.lob.Blob.class;
+ } else if (java.sql.Clob.class.isAssignableFrom(toClass)) {
+ toClass = com.amazon.carbonado.lob.Clob.class;
+ }
+ Method adaptMethod = adapter.findAdaptMethod(property.getType(), toClass);
TypeDesc adaptType = TypeDesc.forClass(adaptMethod.getReturnType());
if (mode != INITIAL_VERSION) {
// Invoke special inherited protected method that gets the field
@@ -1765,7 +1771,9 @@ class JDBCStorableGenerator<S extends Storable> { b.ifComparisonBranch(target, branchIfDirty ? "==" : "!=");
}
- private void defineExtractAllMethod(Map<JDBCStorableProperty<S>, Class<?>> lobLoaderMap) {
+ private void defineExtractAllMethod(Map<JDBCStorableProperty<S>, Class<?>> lobLoaderMap)
+ throws SupportException
+ {
MethodInfo mi = mClassFile.addMethod
(Modifiers.PRIVATE, EXTRACT_ALL_METHOD_NAME, null,
new TypeDesc[] {TypeDesc.forClass(ResultSet.class), TypeDesc.INT});
@@ -1791,7 +1799,9 @@ class JDBCStorableGenerator<S extends Storable> { b.returnVoid();
}
- private void defineExtractDataMethod(Map<JDBCStorableProperty<S>, Class<?>> lobLoaderMap) {
+ private void defineExtractDataMethod(Map<JDBCStorableProperty<S>, Class<?>> lobLoaderMap)
+ throws SupportException
+ {
MethodInfo mi = mClassFile.addMethod
(Modifiers.PRIVATE, EXTRACT_DATA_METHOD_NAME, null,
new TypeDesc[] {TypeDesc.forClass(ResultSet.class), TypeDesc.INT,
@@ -1807,6 +1817,7 @@ class JDBCStorableGenerator<S extends Storable> { LocalVariable rsVar, LocalVariable initialOffsetVar, LocalVariable lobArrayVar,
Iterable<JDBCStorableProperty<S>> properties,
Map<JDBCStorableProperty<S>, Class<?>> lobLoaderMap)
+ throws SupportException
{
LocalVariable offsetVar = null;
int lobIndex = 0;
@@ -1944,7 +1955,26 @@ class JDBCStorableGenerator<S extends Storable> { // Set protected field directly, since no adapter.
b.storeField(superType, property.getName(), propertyType);
} else {
- Method adaptMethod = property.getAppliedAdapterToMethod();
+ Method adaptMethod = adapter.findAdaptMethod
+ (resultSetType.toClass(), property.getType());
+
+ if (adaptMethod == null) {
+ if (resultSetType == TypeDesc.STRING) {
+ // Check if special case for converting String to character.
+ adaptMethod = adapter.findAdaptMethod(char.class, property.getType());
+ if (adaptMethod == null) {
+ adaptMethod = adapter.findAdaptMethod
+ (Character.class, property.getType());
+ }
+ }
+
+ if (adaptMethod == null) {
+ throw new SupportException
+ ("Unable to adapt " +
+ resultSetType.toClass().getName() + " to " + property.getType());
+ }
+ }
+
TypeDesc adaptType = TypeDesc.forClass(adaptMethod.getParameterTypes()[0]);
convertFromResultSet(b, property, resultSetType, adaptType);
wasNull.setLocation();
diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableIntrospector.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableIntrospector.java index dacb02f..27c0b13 100644 --- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableIntrospector.java +++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableIntrospector.java @@ -362,9 +362,7 @@ public class JDBCStorableIntrospector extends StorableIntrospector { autoIncrement,
accessInfo.mResultSetGet,
accessInfo.mPreparedStatementSet,
- accessInfo.getAdapter(),
- accessInfo.getAdapterFromMethod(),
- accessInfo.getAdapterToMethod());
+ accessInfo.getAdapter());
break findName;
}
@@ -533,13 +531,12 @@ public class JDBCStorableIntrospector extends StorableIntrospector { for (Method toMethod : toMethods) {
Class fromType = toMethod.getParameterTypes()[0];
// Verify that reverse adapt method exists as well...
- Method fromMethod = adapter.findAdaptMethod(property.getType(), fromType);
- if (fromMethod != null) {
+ if (adapter.findAdaptMethod(property.getType(), fromType) != null) {
// ...and try to get access info for fromType.
info = getAccessInfo
(fromType, dataType, dataTypeName, columnSize, decimalDigits);
if (info != null) {
- info.setAdapter(adapter, fromMethod, toMethod);
+ info.setAdapter(adapter);
return info;
}
}
@@ -917,8 +914,6 @@ public class JDBCStorableIntrospector extends StorableIntrospector { // Is null if no adapter needed.
private StorablePropertyAdapter mAdapter;
- private Method mAdapterFromMethod;
- private Method mAdapterToMethod;
AccessInfo(String suffix, Class actualClass) {
try {
@@ -934,18 +929,8 @@ public class JDBCStorableIntrospector extends StorableIntrospector { return mAdapter;
}
- void setAdapter(StorablePropertyAdapter adapter, Method fromMethod, Method toMethod) {
+ void setAdapter(StorablePropertyAdapter adapter) {
mAdapter = adapter;
- mAdapterFromMethod = fromMethod;
- mAdapterToMethod = toMethod;
- }
-
- Method getAdapterFromMethod() {
- return mAdapterFromMethod;
- }
-
- Method getAdapterToMethod() {
- return mAdapterToMethod;
}
}
@@ -1137,8 +1122,6 @@ public class JDBCStorableIntrospector extends StorableIntrospector { private final Method mResultSetGet;
private final Method mPreparedStatementSet;
private final StorablePropertyAdapter mAdapter;
- private final Method mAdapterFromMethod;
- private final Method mAdapterToMethod;
private final Integer mColumnSize;
private final Integer mDecimalDigits;
private final Integer mCharOctetLength;
@@ -1156,9 +1139,7 @@ public class JDBCStorableIntrospector extends StorableIntrospector { boolean autoIncrement,
Method resultSetGet,
Method preparedStatementSet,
- StorablePropertyAdapter adapter,
- Method adapterFromMethod,
- Method adapterToMethod)
+ StorablePropertyAdapter adapter)
{
mMainProperty = mainProperty;
mColumnName = columnInfo.columnName;
@@ -1167,27 +1148,11 @@ public class JDBCStorableIntrospector extends StorableIntrospector { mResultSetGet = resultSetGet;
mPreparedStatementSet = preparedStatementSet;
mAdapter = adapter;
- mAdapterFromMethod = adapterFromMethod;
- mAdapterToMethod = adapterToMethod;
mColumnSize = columnInfo.columnSize;
mDecimalDigits = columnInfo.decimalDigits;
mCharOctetLength = columnInfo.charOctetLength;
mOrdinalPosition = columnInfo.ordinalPosition;
mAutoIncrement = autoIncrement;
-
- if (adapterToMethod != null) {
- if (!getType().isAssignableFrom(adapterToMethod.getReturnType())) {
- throw new IllegalArgumentException
- ("Illegal adapter \"to\" method: " + adapterToMethod);
- }
- }
-
- if (adapterFromMethod != null) {
- if (!adapterFromMethod.getParameterTypes()[0].isAssignableFrom(getType())) {
- throw new IllegalArgumentException
- ("Illegal adapter \"from\" method: " + adapterFromMethod);
- }
- }
}
JProperty(StorableProperty<S> mainProperty) {
@@ -1198,8 +1163,6 @@ public class JDBCStorableIntrospector extends StorableIntrospector { mResultSetGet = null;
mPreparedStatementSet = null;
mAdapter = null;
- mAdapterFromMethod = null;
- mAdapterToMethod = null;
mColumnSize = null;
mDecimalDigits = null;
mCharOctetLength = null;
@@ -1364,14 +1327,6 @@ public class JDBCStorableIntrospector extends StorableIntrospector { return mAdapter;
}
- public Method getAppliedAdapterFromMethod() {
- return mAdapterFromMethod;
- }
-
- public Method getAppliedAdapterToMethod() {
- return mAdapterToMethod;
- }
-
public Integer getColumnSize() {
return mColumnSize;
}
diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableProperty.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableProperty.java index 824e0fc..bbaf5fb 100644 --- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableProperty.java +++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorableProperty.java @@ -99,25 +99,6 @@ public interface JDBCStorableProperty<S extends Storable> extends StorableProper StorablePropertyAdapter getAppliedAdapter();
/**
- * Returns the applied adapter method for converting from this property's
- * actual type. The method's single argument type is the same as for this
- * property.
- *
- * @return null if property is unsupported or if adapter not needed.
- * @since 1.2
- */
- Method getAppliedAdapterFromMethod();
-
- /**
- * Returns the applied adapter method for converting to this property's
- * actual type. The method's return type is the same as for this property.
- *
- * @return null if property is unsupported or if adapter not needed.
- * @since 1.2
- */
- Method getAppliedAdapterToMethod();
-
- /**
* The column size is either the maximum number of characters or the
* numeric precision.
*
diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java index a45c90a..25b0209 100644 --- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java +++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java @@ -484,9 +484,15 @@ class JDBCStorage<S extends Storable> extends StandardQueryFactory<S> JDBCStorableProperty<?> jProperty =
mRepository.getJDBCStorableProperty(property);
- mPreparedStatementSetMethods[i] = jProperty.getPreparedStatementSetMethod();
- mAdapterMethods[i] = jProperty.getAppliedAdapterFromMethod();
- mAdapterInstances[i] = jProperty.getAppliedAdapter();
+ Method psSetMethod = jProperty.getPreparedStatementSetMethod();
+ mPreparedStatementSetMethods[i] = psSetMethod;
+
+ StorablePropertyAdapter adapter = jProperty.getAppliedAdapter();
+ if (adapter != null) {
+ Class toType = psSetMethod.getParameterTypes()[1];
+ mAdapterMethods[i] = adapter.findAdaptMethod(jProperty.getType(), toType);
+ mAdapterInstances[i] = adapter.getAdapterInstance();
+ }
}
}
|