diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/amazon/carbonado/gen/StorableGenerator.java | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java b/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java index 6a66528..e28f07c 100644 --- a/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java +++ b/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java @@ -617,18 +617,15 @@ public final class StorableGenerator<S extends Storable> { // Now load the object.
b.loadLocal(join);
- if (!property.isNullable()) {
- b.invokeInterface(storableDesc, LOAD_METHOD_NAME, null, null);
- } else {
- b.invokeInterface
- (storableDesc, TRY_LOAD_METHOD_NAME, TypeDesc.BOOLEAN, null);
- Label wasLoaded = b.createLabel();
- b.ifZeroComparisonBranch(wasLoaded, "!=");
- // Not loaded, so replace joined object with null.
- b.loadNull();
- b.storeLocal(join);
- wasLoaded.setLocation();
- }
+ // Always call "try load", even for non-nullable joins.
+ b.invokeInterface
+ (storableDesc, TRY_LOAD_METHOD_NAME, TypeDesc.BOOLEAN, null);
+ Label wasLoaded = b.createLabel();
+ b.ifZeroComparisonBranch(wasLoaded, "!=");
+ // Not loaded, so replace joined object with null.
+ b.loadNull();
+ b.storeLocal(join);
+ wasLoaded.setLocation();
} else {
// Generate query load form.
@@ -671,11 +668,9 @@ public final class StorableGenerator<S extends Storable> { // Just save and return the query.
b.storeLocal(join);
} else {
- String loadMethod =
- property.isNullable() ?
- TRY_LOAD_ONE_METHOD_NAME :
- LOAD_ONE_METHOD_NAME;
- b.invokeInterface(queryType, loadMethod, storableDesc, null);
+ // Always call "try load", even for non-nullable joins.
+ b.invokeInterface
+ (queryType, TRY_LOAD_ONE_METHOD_NAME, storableDesc, null);
b.checkCast(type);
b.storeLocal(join);
}
@@ -687,7 +682,14 @@ public final class StorableGenerator<S extends Storable> { b.loadLocal(join);
b.storeField(property.getName(), type);
- // Add code to identify this property as being loaded.
+ // Add code to identify this property as being loaded,
+ // except if value is null and join is not nullable.
+
+ if (!property.isNullable()) {
+ b.loadLocal(join);
+ b.ifNullBranch(isLoaded, true);
+ }
+
b.loadThis();
b.loadThis();
b.loadField(stateFieldName, TypeDesc.INT);
|