Skip to content

Commit 969ba86

Browse files
committed
Fix based on feedback
1 parent 5c13edb commit 969ba86

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

core/src/main/java/com/scalar/db/storage/jdbc/JdbcDatabase.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -396,11 +396,9 @@ private List<Put> dividePutForSourceTables(Put put, VirtualTableInfo virtualTabl
396396
putBuilderForLeftSourceTable.condition(ConditionBuilder.putIf(leftExpressions));
397397
}
398398
if (!rightExpressions.isEmpty()) {
399-
if (virtualTableInfo.getJoinType() == VirtualTableJoinType.LEFT_OUTER
399+
if (isAllIsNullOnRightColumnsInLeftOuterJoin(virtualTableInfo, rightExpressions)
400400
&& JdbcOperationAttributes
401-
.isLeftOuterVirtualTablePutIfIsNullOnRightColumnsConversionEnabled(put)
402-
&& rightExpressions.stream()
403-
.allMatch(e -> e.getOperator() == ConditionalExpression.Operator.IS_NULL)) {
401+
.isLeftOuterVirtualTablePutIfIsNullOnRightColumnsConversionEnabled(put)) {
404402
// In a LEFT_OUTER join, when all conditions on the right source table columns are
405403
// IS_NULL, we cannot distinguish whether we should check for the existence of a
406404
// right-side record with NULL values or for the case where the right-side record does
@@ -479,11 +477,9 @@ private List<Delete> divideDeleteForSourceTables(Delete delete, VirtualTableInfo
479477
deleteBuilderForLeftSourceTable.condition(ConditionBuilder.deleteIf(leftExpressions));
480478
}
481479
if (!rightExpressions.isEmpty()) {
482-
if (virtualTableInfo.getJoinType() == VirtualTableJoinType.LEFT_OUTER
480+
if (isAllIsNullOnRightColumnsInLeftOuterJoin(virtualTableInfo, rightExpressions)
483481
&& !JdbcOperationAttributes
484-
.isLeftOuterVirtualTableDeleteIfIsNullOnRightColumnsAllowed(delete)
485-
&& rightExpressions.stream()
486-
.allMatch(e -> e.getOperator() == ConditionalExpression.Operator.IS_NULL)) {
482+
.isLeftOuterVirtualTableDeleteIfIsNullOnRightColumnsAllowed(delete)) {
487483
// In a LEFT_OUTER join, when all conditions on the right source table columns are
488484
// IS_NULL, we cannot distinguish whether we should check for the existence of a
489485
// right-side record with NULL values or for the case where the right-side record does
@@ -509,6 +505,13 @@ private List<Delete> divideDeleteForSourceTables(Delete delete, VirtualTableInfo
509505
return Arrays.asList(deleteForLeftSourceTable, deleteForRightSourceTable);
510506
}
511507

508+
private boolean isAllIsNullOnRightColumnsInLeftOuterJoin(
509+
VirtualTableInfo virtualTableInfo, List<ConditionalExpression> rightExpressions) {
510+
return virtualTableInfo.getJoinType() == VirtualTableJoinType.LEFT_OUTER
511+
&& rightExpressions.stream()
512+
.allMatch(e -> e.getOperator() == ConditionalExpression.Operator.IS_NULL);
513+
}
514+
512515
private void close(Connection connection) {
513516
try {
514517
if (connection != null) {

core/src/main/java/com/scalar/db/storage/jdbc/JdbcOperationAttributes.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public final class JdbcOperationAttributes {
1313
OPERATION_ATTRIBUTE_PREFIX
1414
+ "left-outer-virtual-table-put-if-is-null-on-right-columns-conversion-enabled";
1515

16-
public static final String LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_FOR_RIGHT_ALLOWED =
16+
public static final String LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_ON_RIGHT_COLUMNS_ALLOWED =
1717
OPERATION_ATTRIBUTE_PREFIX
1818
+ "left-outer-virtual-table-delete-if-is-null-on-right-columns-allowed";
1919

@@ -35,14 +35,15 @@ public static void setLeftOuterVirtualTablePutIfIsNullOnRightColumnsConversionEn
3535

3636
public static boolean isLeftOuterVirtualTableDeleteIfIsNullOnRightColumnsAllowed(Delete delete) {
3737
return delete
38-
.getAttribute(LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_FOR_RIGHT_ALLOWED)
38+
.getAttribute(LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_ON_RIGHT_COLUMNS_ALLOWED)
3939
.map(Boolean::parseBoolean)
4040
.orElse(false);
4141
}
4242

4343
public static void setLeftOuterVirtualTableDeleteIfIsNullOnRightColumnsAllowed(
4444
Map<String, String> attributes, boolean allowed) {
4545
attributes.put(
46-
LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_FOR_RIGHT_ALLOWED, Boolean.toString(allowed));
46+
LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_ON_RIGHT_COLUMNS_ALLOWED,
47+
Boolean.toString(allowed));
4748
}
4849
}

core/src/test/java/com/scalar/db/storage/jdbc/JdbcOperationAttributesTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ public class JdbcOperationAttributesTest {
171171
// Assert
172172
assertThat(attributes)
173173
.containsEntry(
174-
JdbcOperationAttributes.LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_FOR_RIGHT_ALLOWED,
174+
JdbcOperationAttributes
175+
.LEFT_OUTER_VIRTUAL_TABLE_DELETE_IF_IS_NULL_ON_RIGHT_COLUMNS_ALLOWED,
175176
"true");
176177
}
177178
}

0 commit comments

Comments
 (0)