Skip to content

Commit d5693a4

Browse files
committed
Fix based on feedback
1 parent a440e25 commit d5693a4

File tree

2 files changed

+180
-8
lines changed

2 files changed

+180
-8
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,6 @@ public void createIndex(
590590
virtualTableInfo.getLeftSourceTableName(),
591591
columnName,
592592
leftSourceTableMetadata.getColumnDataType(columnName));
593-
return;
594593
}
595594

596595
TableMetadata rightSourceTableMetadata =
@@ -687,7 +686,6 @@ public void dropIndex(String namespace, String table, String columnName)
687686
virtualTableInfo.getLeftSourceTableName(),
688687
columnName,
689688
leftSourceTableMetadata.getColumnDataType(columnName));
690-
return;
691689
}
692690

693691
TableMetadata rightSourceTableMetadata =

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

Lines changed: 180 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3088,11 +3088,20 @@ private void createIndex_ForColumnTypeWithoutRequiredAlterationForX_ShouldCreate
30883088
TableMetadata.newBuilder()
30893089
.addPartitionKey("pk1")
30903090
.addColumn("pk1", DataType.TEXT)
3091-
.addColumn("col1", DataType.BOOLEAN)
3091+
.addColumn("col1", DataType.INT)
3092+
.build();
3093+
3094+
TableMetadata rightSourceTableMetadata =
3095+
TableMetadata.newBuilder()
3096+
.addPartitionKey("pk1")
3097+
.addColumn("pk1", DataType.TEXT)
3098+
.addColumn("col2", DataType.INT)
30923099
.build();
30933100

30943101
when(tableMetadataService.getTableMetadata(connection, leftSourceNamespace, leftSourceTable))
30953102
.thenReturn(leftSourceTableMetadata);
3103+
when(tableMetadataService.getTableMetadata(connection, rightSourceNamespace, rightSourceTable))
3104+
.thenReturn(rightSourceTableMetadata);
30963105

30973106
Statement statement = mock(Statement.class);
30983107
when(connection.createStatement()).thenReturn(statement);
@@ -3145,14 +3154,14 @@ private void createIndex_ForColumnTypeWithoutRequiredAlterationForX_ShouldCreate
31453154
TableMetadata.newBuilder()
31463155
.addPartitionKey("pk1")
31473156
.addColumn("pk1", DataType.TEXT)
3148-
.addColumn("col1", DataType.BOOLEAN)
3157+
.addColumn("col1", DataType.INT)
31493158
.build();
31503159

31513160
TableMetadata rightSourceTableMetadata =
31523161
TableMetadata.newBuilder()
31533162
.addPartitionKey("pk1")
31543163
.addColumn("pk1", DataType.TEXT)
3155-
.addColumn("col2", DataType.BOOLEAN)
3164+
.addColumn("col2", DataType.INT)
31563165
.build();
31573166

31583167
when(tableMetadataService.getTableMetadata(connection, leftSourceNamespace, leftSourceTable))
@@ -3189,6 +3198,82 @@ private void createIndex_ForColumnTypeWithoutRequiredAlterationForX_ShouldCreate
31893198
eq(true));
31903199
}
31913200

3201+
@Test
3202+
public void createIndex_VirtualTableWithPrimaryKeyColumn_ShouldCreateIndexOnBothSourceTables()
3203+
throws Exception {
3204+
// Arrange
3205+
String namespace = "ns";
3206+
String table = "vtable";
3207+
String leftSourceNamespace = "ns";
3208+
String leftSourceTable = "left_table";
3209+
String rightSourceNamespace = "ns";
3210+
String rightSourceTable = "right_table";
3211+
String columnName = "pk1";
3212+
3213+
when(dataSource.getConnection()).thenReturn(connection);
3214+
3215+
VirtualTableInfo virtualTableInfo = mock(VirtualTableInfo.class);
3216+
when(virtualTableInfo.getLeftSourceNamespaceName()).thenReturn(leftSourceNamespace);
3217+
when(virtualTableInfo.getLeftSourceTableName()).thenReturn(leftSourceTable);
3218+
when(virtualTableInfo.getRightSourceNamespaceName()).thenReturn(rightSourceNamespace);
3219+
when(virtualTableInfo.getRightSourceTableName()).thenReturn(rightSourceTable);
3220+
3221+
when(virtualTableMetadataService.getVirtualTableInfo(connection, namespace, table))
3222+
.thenReturn(virtualTableInfo);
3223+
3224+
TableMetadata leftSourceTableMetadata =
3225+
TableMetadata.newBuilder()
3226+
.addPartitionKey("pk1")
3227+
.addColumn("pk1", DataType.INT)
3228+
.addColumn("col1", DataType.INT)
3229+
.build();
3230+
3231+
TableMetadata rightSourceTableMetadata =
3232+
TableMetadata.newBuilder()
3233+
.addPartitionKey("pk1")
3234+
.addColumn("pk1", DataType.INT)
3235+
.addColumn("col2", DataType.INT)
3236+
.build();
3237+
3238+
when(tableMetadataService.getTableMetadata(connection, leftSourceNamespace, leftSourceTable))
3239+
.thenReturn(leftSourceTableMetadata);
3240+
when(tableMetadataService.getTableMetadata(connection, rightSourceNamespace, rightSourceTable))
3241+
.thenReturn(rightSourceTableMetadata);
3242+
3243+
Statement statement = mock(Statement.class);
3244+
when(connection.createStatement()).thenReturn(statement);
3245+
3246+
JdbcAdmin admin = createJdbcAdmin();
3247+
3248+
// Act
3249+
admin.createIndex(namespace, table, columnName, Collections.emptyMap());
3250+
3251+
// Assert
3252+
verify(virtualTableMetadataService)
3253+
.getVirtualTableInfo(eq(connection), eq(namespace), eq(table));
3254+
verify(tableMetadataService)
3255+
.getTableMetadata(eq(connection), eq(leftSourceNamespace), eq(leftSourceTable));
3256+
verify(tableMetadataService)
3257+
.getTableMetadata(eq(connection), eq(rightSourceNamespace), eq(rightSourceTable));
3258+
3259+
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
3260+
verify(statement, times(2)).execute(captor.capture());
3261+
assertThat(captor.getAllValues())
3262+
.containsExactly(
3263+
"CREATE INDEX `index_ns_left_table_pk1` ON `ns`.`left_table` (`pk1`)",
3264+
"CREATE INDEX `index_ns_right_table_pk1` ON `ns`.`right_table` (`pk1`)");
3265+
verify(tableMetadataService)
3266+
.updateTableMetadata(
3267+
eq(connection), eq(leftSourceNamespace), eq(leftSourceTable), eq(columnName), eq(true));
3268+
verify(tableMetadataService)
3269+
.updateTableMetadata(
3270+
eq(connection),
3271+
eq(rightSourceNamespace),
3272+
eq(rightSourceTable),
3273+
eq(columnName),
3274+
eq(true));
3275+
}
3276+
31923277
@Test
31933278
public void createIndex_SQLExceptionThrown_ShouldThrowExecutionException() throws Exception {
31943279
// Arrange
@@ -3479,11 +3564,20 @@ public void dropIndex_VirtualTableWithColumnInLeftSourceTable_ShouldDropIndexOnL
34793564
TableMetadata.newBuilder()
34803565
.addPartitionKey("pk1")
34813566
.addColumn("pk1", DataType.TEXT)
3482-
.addColumn("col1", DataType.BOOLEAN)
3567+
.addColumn("col1", DataType.INT)
3568+
.build();
3569+
3570+
TableMetadata rightSourceTableMetadata =
3571+
TableMetadata.newBuilder()
3572+
.addPartitionKey("pk1")
3573+
.addColumn("pk1", DataType.TEXT)
3574+
.addColumn("col2", DataType.INT)
34833575
.build();
34843576

34853577
when(tableMetadataService.getTableMetadata(connection, leftSourceNamespace, leftSourceTable))
34863578
.thenReturn(leftSourceTableMetadata);
3579+
when(tableMetadataService.getTableMetadata(connection, rightSourceNamespace, rightSourceTable))
3580+
.thenReturn(rightSourceTableMetadata);
34873581

34883582
Statement statement = mock(Statement.class);
34893583
when(connection.createStatement()).thenReturn(statement);
@@ -3539,14 +3633,14 @@ public void dropIndex_VirtualTableWithColumnInRightSourceTable_ShouldDropIndexOn
35393633
TableMetadata.newBuilder()
35403634
.addPartitionKey("pk1")
35413635
.addColumn("pk1", DataType.TEXT)
3542-
.addColumn("col1", DataType.BOOLEAN)
3636+
.addColumn("col1", DataType.INT)
35433637
.build();
35443638

35453639
TableMetadata rightSourceTableMetadata =
35463640
TableMetadata.newBuilder()
35473641
.addPartitionKey("pk1")
35483642
.addColumn("pk1", DataType.TEXT)
3549-
.addColumn("col2", DataType.BOOLEAN)
3643+
.addColumn("col2", DataType.INT)
35503644
.build();
35513645

35523646
when(tableMetadataService.getTableMetadata(connection, leftSourceNamespace, leftSourceTable))
@@ -3583,6 +3677,86 @@ public void dropIndex_VirtualTableWithColumnInRightSourceTable_ShouldDropIndexOn
35833677
eq(false));
35843678
}
35853679

3680+
@Test
3681+
public void dropIndex_VirtualTableWithPrimaryKeyColumn_ShouldDropIndexOnBothSourceTables()
3682+
throws Exception {
3683+
// Arrange
3684+
String namespace = "ns";
3685+
String table = "vtable";
3686+
String leftSourceNamespace = "ns";
3687+
String leftSourceTable = "left_table";
3688+
String rightSourceNamespace = "ns";
3689+
String rightSourceTable = "right_table";
3690+
String columnName = "pk1";
3691+
3692+
when(dataSource.getConnection()).thenReturn(connection);
3693+
3694+
VirtualTableInfo virtualTableInfo = mock(VirtualTableInfo.class);
3695+
when(virtualTableInfo.getLeftSourceNamespaceName()).thenReturn(leftSourceNamespace);
3696+
when(virtualTableInfo.getLeftSourceTableName()).thenReturn(leftSourceTable);
3697+
when(virtualTableInfo.getRightSourceNamespaceName()).thenReturn(rightSourceNamespace);
3698+
when(virtualTableInfo.getRightSourceTableName()).thenReturn(rightSourceTable);
3699+
3700+
when(virtualTableMetadataService.getVirtualTableInfo(connection, namespace, table))
3701+
.thenReturn(virtualTableInfo);
3702+
3703+
TableMetadata leftSourceTableMetadata =
3704+
TableMetadata.newBuilder()
3705+
.addPartitionKey("pk1")
3706+
.addColumn("pk1", DataType.INT)
3707+
.addColumn("col1", DataType.INT)
3708+
.build();
3709+
3710+
TableMetadata rightSourceTableMetadata =
3711+
TableMetadata.newBuilder()
3712+
.addPartitionKey("pk1")
3713+
.addColumn("pk1", DataType.INT)
3714+
.addColumn("col2", DataType.INT)
3715+
.build();
3716+
3717+
when(tableMetadataService.getTableMetadata(connection, leftSourceNamespace, leftSourceTable))
3718+
.thenReturn(leftSourceTableMetadata);
3719+
when(tableMetadataService.getTableMetadata(connection, rightSourceNamespace, rightSourceTable))
3720+
.thenReturn(rightSourceTableMetadata);
3721+
3722+
Statement statement = mock(Statement.class);
3723+
when(connection.createStatement()).thenReturn(statement);
3724+
3725+
JdbcAdmin admin = createJdbcAdmin();
3726+
3727+
// Act
3728+
admin.dropIndex(namespace, table, columnName);
3729+
3730+
// Assert
3731+
verify(virtualTableMetadataService)
3732+
.getVirtualTableInfo(eq(connection), eq(namespace), eq(table));
3733+
verify(tableMetadataService)
3734+
.getTableMetadata(eq(connection), eq(leftSourceNamespace), eq(leftSourceTable));
3735+
verify(tableMetadataService)
3736+
.getTableMetadata(eq(connection), eq(rightSourceNamespace), eq(rightSourceTable));
3737+
3738+
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
3739+
verify(statement, times(2)).execute(captor.capture());
3740+
assertThat(captor.getAllValues())
3741+
.containsExactly(
3742+
"DROP INDEX `index_ns_left_table_pk1` ON `ns`.`left_table`",
3743+
"DROP INDEX `index_ns_right_table_pk1` ON `ns`.`right_table`");
3744+
verify(tableMetadataService)
3745+
.updateTableMetadata(
3746+
eq(connection),
3747+
eq(leftSourceNamespace),
3748+
eq(leftSourceTable),
3749+
eq(columnName),
3750+
eq(false));
3751+
verify(tableMetadataService)
3752+
.updateTableMetadata(
3753+
eq(connection),
3754+
eq(rightSourceNamespace),
3755+
eq(rightSourceTable),
3756+
eq(columnName),
3757+
eq(false));
3758+
}
3759+
35863760
@Test
35873761
public void dropIndex_VirtualTableWithSQLException_ShouldThrowExecutionException()
35883762
throws Exception {

0 commit comments

Comments
 (0)