summaryrefslogtreecommitdiff
path: root/src/main/java/com/amazon/carbonado/raw
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2007-06-29 05:03:09 +0000
committerBrian S. O'Neill <bronee@gmail.com>2007-06-29 05:03:09 +0000
commitdf422c9673316b6a7ecdb96e314aeabd660985ad (patch)
treebf12ddea3ddb19c08064cbf95ff3781050f3c101 /src/main/java/com/amazon/carbonado/raw
parent214be70045e4dde7b15aac6e33d764163dec0762 (diff)
Fixed IllegalArgumentException with optimized join queries of the form "a.b = ? & (a.c = ? | a.d = ?)".
Diffstat (limited to 'src/main/java/com/amazon/carbonado/raw')
-rw-r--r--src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java12
-rw-r--r--src/main/java/com/amazon/carbonado/raw/RawSupport.java12
2 files changed, 19 insertions, 5 deletions
diff --git a/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java b/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java
index d741c08..4c295dd 100644
--- a/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java
+++ b/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java
@@ -1462,8 +1462,8 @@ public class GenericEncodingStrategy<S extends Storable> {
/**
* Generates code to get a Lob from a locator from RawSupport. RawSupport
- * instance and long locator must be on the stack. Result is a Lob on the
- * stack, which may be null.
+ * instance, Storable instance, property name and long locator must be on
+ * the stack. Result is a Lob on the stack, which may be null.
*/
private void getLobFromLocator(CodeAssembler a, StorablePropertyInfo info) {
if (!info.isLob()) {
@@ -1481,7 +1481,8 @@ public class GenericEncodingStrategy<S extends Storable> {
}
a.invokeInterface(TypeDesc.forClass(RawSupport.class), name,
- type, new TypeDesc[] {TypeDesc.LONG});
+ type, new TypeDesc[] {TypeDesc.forClass(Storable.class),
+ TypeDesc.STRING, TypeDesc.LONG});
}
/////////////////////////////////////////////////////////////////////////////////
@@ -1601,6 +1602,11 @@ public class GenericEncodingStrategy<S extends Storable> {
if (info.isLob()) {
// Need RawSupport instance for getting Lob from locator.
pushRawSupport(a, instanceVar);
+
+ // Also need to pass this stuff along when getting Lob.
+ a.loadThis();
+ a.loadConstant(info.getPropertyName());
+
// Locator is encoded as a long.
storageType = TypeDesc.LONG;
}
diff --git a/src/main/java/com/amazon/carbonado/raw/RawSupport.java b/src/main/java/com/amazon/carbonado/raw/RawSupport.java
index 63577d7..b83e548 100644
--- a/src/main/java/com/amazon/carbonado/raw/RawSupport.java
+++ b/src/main/java/com/amazon/carbonado/raw/RawSupport.java
@@ -73,8 +73,12 @@ public interface RawSupport<S extends Storable> extends MasterSupport<S> {
/**
* Returns the Blob for the given locator, returning null if not found.
+ *
+ * @param storable storable that contains Blob
+ * @param name name of Blob property
+ * @param locator Blob locator
*/
- Blob getBlob(long locator) throws FetchException;
+ Blob getBlob(S storable, String name, long locator) throws FetchException;
/**
* Returns the locator for the given Blob, returning zero if null.
@@ -85,8 +89,12 @@ public interface RawSupport<S extends Storable> extends MasterSupport<S> {
/**
* Returns the Clob for the given locator, returning null if not found.
+ *
+ * @param storable storable that contains Blob
+ * @param name name of Clob property
+ * @param locator Clob locator
*/
- Clob getClob(long locator) throws FetchException;
+ Clob getClob(S storable, String name, long locator) throws FetchException;
/**
* Returns the locator for the given Clob, returning zero if null.