tledkov-gridgain commented on a change in pull request #194:
URL: https://github.com/apache/ignite-3/pull/194#discussion_r664365653



##########
File path: 
modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/SchemaChangeTableViewTest.java
##########
@@ -113,4 +117,220 @@ public void testAddNewColumn() {
         assertEquals(222, (Integer)tbl.get(keyTuple2).value("valInt"));
         assertEquals("str", tbl.get(keyTuple2).value("valStrNew"));
     }
+
+    /**
+     * Check column renaming.
+     */
+    @Test
+    void testRenameColumn() {
+        List<Ignite> grid = startGrid();
+
+        createTable(grid);
+
+        Table tbl = grid.get(0).tables().table(TABLE);
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 1L).set("valInt", 
111).build());
+
+            assertThrows(ColumnNotFoundException.class,
+                    () -> tbl.insert(tbl.tupleBuilder().set("key", 
2L).set("valRenamed", -222).build())
+            );
+        }
+
+        renameColumn(grid, "valInt", "valRenamed");
+
+        {
+            // Check old row conversion.
+            Tuple keyTuple1 = tbl.tupleBuilder().set("key", 1L).build();
+
+            assertEquals(1, (Long) tbl.get(keyTuple1).value("key"));
+            assertEquals(111, (Integer) 
tbl.get(keyTuple1).value("valRenamed"));
+            assertThrows(ColumnNotFoundException.class, () -> 
tbl.get(keyTuple1).value("valInt"));
+
+            // Check tuple of outdated schema.
+            assertThrows(ColumnNotFoundException.class,
+                    () -> tbl.insert(tbl.tupleBuilder().set("key", 
2L).set("valInt", -222).build())
+            );
+
+            // Check tuple of correct schema.
+            tbl.insert(tbl.tupleBuilder().set("key", 2L).set("valRenamed", 
222).build());
+
+            Tuple keyTuple2 = tbl.tupleBuilder().set("key", 2L).build();
+
+            assertEquals(2, (Long) tbl.get(keyTuple2).value("key"));
+            assertEquals(222, (Integer) 
tbl.get(keyTuple2).value("valRenamed"));
+            assertThrows(ColumnNotFoundException.class, () -> 
tbl.get(keyTuple2).value("valInt"));
+        }
+    }
+
+    /**
+     * Rename column then add a new column with same name.
+     */
+    @Test
+    void testRenameThenAddColumnWithSameName() {
+        List<Ignite> grid = startGrid();
+
+        createTable(grid);
+
+        Table tbl = grid.get(0).tables().table(TABLE);
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 1L).set("valInt", 
111).build());
+
+            assertThrows(ColumnNotFoundException.class,
+                () -> tbl.insert(tbl.tupleBuilder().set("key", 2L).set("val2", 
-222).build())
+            );
+        }
+
+        renameColumn(grid, "valInt", "val2");
+        addColumn(grid, SchemaBuilders.column("valInt", 
ColumnType.INT32).asNullable().withDefaultValue(-1).build());
+
+        {
+            // Check old row conversion.
+            Tuple keyTuple1 = tbl.tupleBuilder().set("key", 1L).build();
+
+            assertEquals(1, (Long)tbl.get(keyTuple1).value("key"));
+            assertEquals(111, (Integer)tbl.get(keyTuple1).value("val2"));
+            assertEquals(-1, (Integer)tbl.get(keyTuple1).value("valInt"));
+
+            // Check tuple of outdated schema.
+            assertNull(tbl.get(tbl.tupleBuilder().set("key", 2L).build()));
+
+            // Check tuple of correct schema.
+            tbl.insert(tbl.tupleBuilder().set("key", 2L).set("val2", 
222).build());
+
+            Tuple keyTuple2 = tbl.tupleBuilder().set("key", 2L).build();
+
+            assertEquals(2, (Long)tbl.get(keyTuple2).value("key"));
+            assertEquals(222, (Integer)tbl.get(keyTuple2).value("val2"));
+            assertEquals(-1, (Integer)tbl.get(keyTuple2).value("valInt"));
+        }
+    }
+
+    /**
+     * Check merge table schema changes.
+     */
+    @Test
+    public void testMergeChangesAddDropAdd() {
+        List<Ignite> grid = startGrid();
+
+        createTable(grid);
+
+        final Column column = SchemaBuilders.column("val", 
ColumnType.string()).asNullable().withDefaultValue("default").build();
+
+        Table tbl = grid.get(0).tables().table(TABLE);
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 1L).set("valInt", 
111).build());
+
+            assertThrows(ColumnNotFoundException.class, () -> tbl.insert(
+                tbl.tupleBuilder().set("key", 2L).set("val", "I'not 
exists").build())
+            );
+        }
+
+        addColumn(grid, column);
+
+        {
+            assertNull(tbl.get(tbl.tupleBuilder().set("key", 2L).build()));
+
+            tbl.insert(tbl.tupleBuilder().set("key", 2L).set("valInt", 
222).set("val", "string").build());
+
+            tbl.insert(tbl.tupleBuilder().set("key", 3L).set("valInt", 
333).build());
+        }
+
+        dropColumn(grid, column.name());
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 4L).set("valInt", 
444).build());
+
+            assertThrows(ColumnNotFoundException.class, () -> tbl.insert(
+                tbl.tupleBuilder().set("key", 4L).set("val", "I'm not 
exist").build())
+            );
+        }
+
+        addColumn(grid, SchemaBuilders.column("val", 
ColumnType.string()).withDefaultValue("default").build());
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 5L).set("valInt", 
555).build());
+
+            // Check old row conversion.
+            Tuple keyTuple1 = tbl.tupleBuilder().set("key", 1L).build();
+
+            assertEquals(111, (Integer)tbl.get(keyTuple1).value("valInt"));
+            assertEquals("default", tbl.get(keyTuple1).value("val"));
+
+            Tuple keyTuple2 = tbl.tupleBuilder().set("key", 2L).build();
+
+            assertEquals(222, (Integer)tbl.get(keyTuple2).value("valInt"));
+            assertEquals("default", tbl.get(keyTuple2).value("val"));
+
+            Tuple keyTuple3 = tbl.tupleBuilder().set("key", 3L).build();
+
+            assertEquals(333, (Integer)tbl.get(keyTuple3).value("valInt"));
+            assertEquals("default", tbl.get(keyTuple3).value("val"));
+
+            Tuple keyTuple4 = tbl.tupleBuilder().set("key", 4L).build();
+
+            assertEquals(444, (Integer)tbl.get(keyTuple4).value("valInt"));
+            assertEquals("default", tbl.get(keyTuple4).value("val"));
+
+            Tuple keyTuple5 = tbl.tupleBuilder().set("key", 5L).build();
+
+            assertEquals(555, (Integer)tbl.get(keyTuple5).value("valInt"));
+            assertEquals("default", tbl.get(keyTuple5).value("val"));
+        }
+    }
+
+    /**
+     * Check merge column default value changes.
+     */
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-14479";)
+    @Test
+    public void testMergeDefaultChanges() {
+        List<Ignite> grid = startGrid();
+
+        createTable(grid);
+
+        Table tbl = grid.get(0).tables().table(TABLE);
+
+        final String colName = "valStr";
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 1L).set("valInt", 
111).build());
+        }
+
+        changeDefault(grid, colName, (Supplier<Object> & Serializable)() -> 
"newDefault");
+        addColumn(grid, SchemaBuilders.column("val", 
ColumnType.string()).withDefaultValue("newDefault").build());
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 2L).set("valInt", 
222).build());
+        }
+
+        changeDefault(grid, colName, (Supplier<Object> & Serializable)() -> 
"brandNewDefault");
+        changeDefault(grid, "val", (Supplier<Object> & Serializable)() -> 
"brandNewDefault");
+
+        {
+            tbl.insert(tbl.tupleBuilder().set("key", 3L).set("valInt", 
333).build());
+
+            // Check old row conversion.
+            Tuple keyTuple1 = tbl.tupleBuilder().set("key", 1L).build();
+
+            assertEquals(111, (Integer)tbl.get(keyTuple1).value("valInt"));
+            assertEquals("default", tbl.get(keyTuple1).value("valStr"));
+            assertEquals("newDefault", tbl.get(keyTuple1).value("val"));
+
+            Tuple keyTuple2 = tbl.tupleBuilder().set("key", 2L).build();
+
+            assertEquals(222, (Integer)tbl.get(keyTuple2).value("valInt"));
+            assertEquals("newDefault", tbl.get(keyTuple2).value("valStr"));
+            assertEquals("newDefault", tbl.get(keyTuple2).value("val"));
+
+            Tuple keyTuple3 = tbl.tupleBuilder().set("key", 3L).build();
+
+            assertEquals(333, (Integer)tbl.get(keyTuple3).value("valInt"));
+            assertEquals("brandNewDefault", 
tbl.get(keyTuple3).value("valStr"));
+            assertEquals("brandNewDefault", tbl.get(keyTuple3).value("val"));
+

Review comment:
       Please remove empty line

##########
File path: 
modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/SchemaChangeKVViewTest.java
##########
@@ -116,4 +120,188 @@ public void testAddNewColumn() {
             assertEquals("str", kvView.get(keyTuple2).value("valStrNew"));
         }
     }
+
+    /**
+     * Check rename column from table schema.
+     */
+    @Test
+    public void testRenameColumn() {
+        List<Ignite> grid = startGrid();
+
+        createTable(grid);
+
+        KeyValueBinaryView kvView = grid.get(1).tables().table(TABLE).kvView();
+
+        {
+            kvView.put(kvView.tupleBuilder().set("key", 1L).build(), 
kvView.tupleBuilder().set("valInt", 111).build());
+
+            assertThrows(ColumnNotFoundException.class, () -> kvView.put(
+                kvView.tupleBuilder().set("key", 2L).build(),
+                kvView.tupleBuilder().set("valRenamed", 222).build())
+            );
+        }
+
+        renameColumn(grid, "valInt", "valRenamed");
+
+        {
+            assertNull(kvView.get(kvView.tupleBuilder().set("key", 
2L).build()));
+
+            // Check old row conversion.
+            Tuple keyTuple1 = kvView.tupleBuilder().set("key", 1L).build();
+
+            assertEquals(111, 
(Integer)kvView.get(keyTuple1).value("valRenamed"));
+            assertThrows(ColumnNotFoundException.class, () -> 
kvView.get(keyTuple1).value("valInt"));
+
+            // Check tuple of correct schema.
+            assertThrows(ColumnNotFoundException.class, () -> kvView.put(
+                kvView.tupleBuilder().set("key", 2L).build(),
+                kvView.tupleBuilder().set("valInt", -222).build())
+            );
+
+            assertNull(kvView.get(kvView.tupleBuilder().set("key", 
2L).build()));
+
+            // Check tuple of new schema.
+            kvView.put(kvView.tupleBuilder().set("key", 2L).build(), 
kvView.tupleBuilder().set("valRenamed", 222).build());
+
+            Tuple keyTuple2 = kvView.tupleBuilder().set("key", 2L).build();
+
+            assertEquals(222, 
(Integer)kvView.get(keyTuple2).value("valRenamed"));
+            assertThrows(ColumnNotFoundException.class, () -> 
kvView.get(keyTuple2).value("valInt"));
+        }
+    }
+
+    /**
+     * Check merge table schema changes.
+     */
+    @Test
+    public void testMergeChangesAddDropAdd() {
+        List<Ignite> grid = startGrid();
+
+        createTable(grid);
+
+        final Column column = SchemaBuilders.column("val", 
ColumnType.string()).asNullable().withDefaultValue("default").build();
+
+        KeyValueBinaryView kvView = grid.get(1).tables().table(TABLE).kvView();
+
+        {
+            kvView.put(kvView.tupleBuilder().set("key", 1L).build(),
+                kvView.tupleBuilder().set("valInt", 111).build());
+
+            assertThrows(ColumnNotFoundException.class, () -> kvView.put(
+                kvView.tupleBuilder().set("key", 2L).build(),
+                kvView.tupleBuilder().set("val", "I'not exists").build())
+            );
+        }
+
+        addColumn(grid, column);
+
+        {
+            assertNull(kvView.get(kvView.tupleBuilder().set("key", 
2L).build()));
+
+            kvView.put(kvView.tupleBuilder().set("key", 2L).build(),
+                kvView.tupleBuilder().set("valInt", 222).set("val", 
"string").build());
+
+            kvView.put(kvView.tupleBuilder().set("key", 3L).build(),
+                kvView.tupleBuilder().set("valInt", 333).build());
+        }
+
+        dropColumn(grid, column.name());
+
+        {
+            kvView.put(kvView.tupleBuilder().set("key", 4L).build(),
+                kvView.tupleBuilder().set("valInt", 444).build());
+
+            assertThrows(ColumnNotFoundException.class, () -> kvView.put(
+                kvView.tupleBuilder().set("key", 4L).build(),
+                kvView.tupleBuilder().set("val", "I'm not exist").build())
+            );
+        }
+
+        addColumn(grid, SchemaBuilders.column("val", 
ColumnType.string()).asNullable().withDefaultValue("default").build());
+
+        {
+            kvView.put(kvView.tupleBuilder().set("key", 5L).build(),
+                kvView.tupleBuilder().set("valInt", 555).build());
+
+            // Check old row conversion.
+            Tuple keyTuple1 = kvView.tupleBuilder().set("key", 1L).build();
+
+            assertEquals(111, (Integer)kvView.get(keyTuple1).value("valInt"));
+            assertEquals("default", kvView.get(keyTuple1).value("val"));
+
+            Tuple keyTuple2 = kvView.tupleBuilder().set("key", 2L).build();
+
+            assertEquals(222, (Integer)kvView.get(keyTuple2).value("valInt"));
+            assertEquals("default", kvView.get(keyTuple2).value("val"));
+
+            Tuple keyTuple3 = kvView.tupleBuilder().set("key", 3L).build();
+
+            assertEquals(333, (Integer)kvView.get(keyTuple3).value("valInt"));
+            assertEquals("default", kvView.get(keyTuple3).value("val"));
+
+            Tuple keyTuple4 = kvView.tupleBuilder().set("key", 4L).build();
+
+            assertEquals(444, (Integer)kvView.get(keyTuple4).value("valInt"));
+            assertEquals("default", kvView.get(keyTuple4).value("val"));
+
+            Tuple keyTuple5 = kvView.tupleBuilder().set("key", 5L).build();
+
+            assertEquals(555, (Integer)kvView.get(keyTuple5).value("valInt"));
+            assertEquals("default", kvView.get(keyTuple5).value("val"));
+        }
+    }
+
+
+    /**
+     * Check merge table schema changes.
+     */
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-14479";)
+    @Test
+    public void testMergeDefaultChanges() {
+        List<Ignite> grid = startGrid();
+
+        createTable(grid);
+
+        KeyValueBinaryView vkView = grid.get(1).tables().table(TABLE).kvView();
+
+        final String colName = "valStr";
+
+        {
+            vkView.put(vkView.tupleBuilder().set("key", 1L).build(), 
vkView.tupleBuilder().set("valInt", 111).build());
+        }
+
+        changeDefault(grid, colName, (Supplier<Object> & Serializable)() -> 
"newDefault");
+        addColumn(grid, SchemaBuilders.column("val", 
ColumnType.string()).withDefaultValue("newDefault").build());
+
+        {
+            vkView.put(vkView.tupleBuilder().set("key", 2L).build(), 
vkView.tupleBuilder().set("valInt", 222).build());
+        }
+
+        changeDefault(grid, colName, (Supplier<Object> & Serializable)() -> 
"brandNewDefault");
+        changeDefault(grid, "val", (Supplier<Object> & Serializable)() -> 
"brandNewDefault");
+
+        {
+            vkView.put(vkView.tupleBuilder().set("key", 3L).build(), 
vkView.tupleBuilder().set("valInt", 333).build());
+
+            // Check old row conversion.
+            Tuple keyTuple1 = vkView.tupleBuilder().set("key", 1L).build();
+
+            assertEquals(111, (Integer)vkView.get(keyTuple1).value("valInt"));
+            assertEquals("default", vkView.get(keyTuple1).value("valStr"));
+            assertEquals("newDefault", vkView.get(keyTuple1).value("val"));
+
+            Tuple keyTuple2 = vkView.tupleBuilder().set("key", 2L).build();
+
+            assertEquals(222, (Integer)vkView.get(keyTuple2).value("valInt"));
+            assertEquals("newDefault", vkView.get(keyTuple2).value("valStr"));
+            assertEquals("newDefault", vkView.get(keyTuple2).value("val"));
+
+            Tuple keyTuple3 = vkView.tupleBuilder().set("key", 3L).build();
+
+            assertEquals(333, (Integer)vkView.get(keyTuple3).value("valInt"));
+            assertEquals("brandNewDefault", 
vkView.get(keyTuple3).value("valStr"));
+            assertEquals("brandNewDefault", 
vkView.get(keyTuple3).value("val"));
+

Review comment:
       Remove empty line




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to