@@ -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