From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 7A02E287A1 for ; Tue, 20 Mar 2018 19:49:59 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5h9IFyMmxmXl for ; Tue, 20 Mar 2018 19:49:59 -0400 (EDT) Received: from smtp42.i.mail.ru (smtp42.i.mail.ru [94.100.177.102]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 7DEB727815 for ; Tue, 20 Mar 2018 19:49:58 -0400 (EDT) From: Nikita Pettik Subject: [tarantool-patches] [PATCH 0/4] Replace space id with space ptrs in VDBE runtime Date: Wed, 21 Mar 2018 02:48:38 +0300 Message-Id: Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-subscribe: List-owner: List-post: List-archive: To: tarantool-patches@freelists.org Cc: Nikita Pettik Branch: https://github.com/tarantool/tarantool/tree/np/gh-3252-slit-dml-and-ddl-sql Issue: https://github.com/tarantool/tarantool/issues/3252 In order to avoid additional lookups during VDBE execution, it was suggested to pass pointer fetched at query compilation time to opcodes which create cursors (i.e. OP_OpenRead and OP_OpenWrite). However, any DDL routine may invalidate pointers. Thus, to operate on system spaces (which are used during DDL) new opcodes have been introduced: OP_SInsert and OP_SDelete. But originally, SQL DDL under hood used nested parsing to generate code for non-trivial deletion. For instance: "DELETE FROM _INDEX WHERE id = space_id AND iid > 0" -- to remove all secondary indexes. To use new operands such nested parsing has been substituted with hardcoded VDBE programs. Finally, fresh pointer to space can also be obtained at VDBE rutime using new opcode OP_SIDtoPtr, which converts space id to ptr and saves it to given register. This opcode should be used when it is impossible to avoid mixing DDL and DML routine in the same query (e.g. CREATE TABLE AS SELECT FROM ...). Nikita Pettik (4): sql: pass space pointer to OP_OpenRead/OpenWrite sql: introduce opcodes to operate on system spaces sql: rework code generation for DDL routine sql: rework OP_OpenWrite/OpenRead src/box/sql.c | 51 ++++--- src/box/sql/analyze.c | 17 ++- src/box/sql/build.c | 321 ++++++++++++++++++++++--------------------- src/box/sql/expr.c | 14 +- src/box/sql/fkey.c | 11 +- src/box/sql/insert.c | 37 ++++- src/box/sql/opcodes.c | 51 +++---- src/box/sql/opcodes.h | 59 ++++---- src/box/sql/select.c | 11 +- src/box/sql/sqliteInt.h | 5 + src/box/sql/tarantoolInt.h | 11 +- src/box/sql/trigger.c | 27 ++-- src/box/sql/vdbe.c | 310 +++++++++++++++++++++-------------------- src/box/sql/vdbe.h | 1 + src/box/sql/vdbeInt.h | 1 + src/box/sql/vdbeaux.c | 13 ++ src/box/sql/where.c | 12 +- test/sql/transition.result | 11 +- test/sql/transition.test.lua | 8 +- 19 files changed, 550 insertions(+), 421 deletions(-) -- 2.15.1