refactoring: insert redistribution
Previosly we had a very complicated logic for INSERT operator: we always generated a motion node under INSERT and generated bucket_id with a special motion command in this virtual table. As a side effect we made motions even for those INSERTs that was possible to execute locally. Another problem was caused by the column type derivation in INSERT .. VALUES .. expressions. If any column in the first row contained NULL it confuses Tarantool and it returns scalar (or even boolean!) type instead. And there is no projection type cast in Tarantool's insertion. As a result we often had type mismatch errors in INSERT .. VALUES .. queries. The solution is to rewrite this weird logic from the scratch. Now we rewrite the tree somehow like this: insert into t1 (a, b) values (1, 2) => insert into t1 (a, b, bucket_id) select COL_1, COL_2, bucket_id( coalesce(cast(COL_2 as string), '') || coalesce(cast(COL_1 as string), '') ) from ( select cast(COLUMN_1 as integer) as COL_1, cast(COLUMN_2 as unsigned) as COL_2 from (values (1, 2)) )
Showing
- sbroad-cartridge/src/cartridge/router.rs 6 additions, 1 deletionsbroad-cartridge/src/cartridge/router.rs
- sbroad-cartridge/test_app/test/integration/explain_test.lua 4 additions, 4 deletionssbroad-cartridge/test_app/test/integration/explain_test.lua
- sbroad-cartridge/test_app/test/integration/insert_test.lua 100 additions, 1 deletionsbroad-cartridge/test_app/test/integration/insert_test.lua
- sbroad-core/src/backend/sql/tree.rs 6 additions, 2 deletionssbroad-core/src/backend/sql/tree.rs
- sbroad-core/src/executor.rs 4 additions, 27 deletionssbroad-core/src/executor.rs
- sbroad-core/src/executor/result.rs 46 additions, 10 deletionssbroad-core/src/executor/result.rs
- sbroad-core/src/executor/result/tests.rs 2 additions, 1 deletionsbroad-core/src/executor/result/tests.rs
- sbroad-core/src/executor/tests.rs 72 additions, 128 deletionssbroad-core/src/executor/tests.rs
- sbroad-core/src/executor/tests/empty_motion.rs 3 additions, 7 deletionssbroad-core/src/executor/tests/empty_motion.rs
- sbroad-core/src/executor/tests/subtree.rs 4 additions, 12 deletionssbroad-core/src/executor/tests/subtree.rs
- sbroad-core/src/frontend/sql/ir/tests.rs 50 additions, 34 deletionssbroad-core/src/frontend/sql/ir/tests.rs
- sbroad-core/src/frontend/sql/ir/tests/params.rs 1 addition, 1 deletionsbroad-core/src/frontend/sql/ir/tests/params.rs
- sbroad-core/src/ir/explain.rs 32 additions, 23 deletionssbroad-core/src/ir/explain.rs
- sbroad-core/src/ir/explain/tests.rs 31 additions, 19 deletionssbroad-core/src/ir/explain/tests.rs
- sbroad-core/src/ir/explain/tests/concat.rs 1 addition, 1 deletionsbroad-core/src/ir/explain/tests/concat.rs
- sbroad-core/src/ir/expression.rs 7 additions, 20 deletionssbroad-core/src/ir/expression.rs
- sbroad-core/src/ir/expression/cast.rs 22 additions, 0 deletionssbroad-core/src/ir/expression/cast.rs
- sbroad-core/src/ir/operator.rs 1 addition, 5 deletionssbroad-core/src/ir/operator.rs
- sbroad-core/src/ir/relation.rs 19 additions, 5 deletionssbroad-core/src/ir/relation.rs
- sbroad-core/src/ir/transformation/redistribution.rs 134 additions, 194 deletionssbroad-core/src/ir/transformation/redistribution.rs
Loading
Please register or sign in to comment