Tarantool discussions archive
 help / color / mirror / Atom feed
From: Sergey Ostanevich <sergos@tarantool.org>
To: Mergen Imeev <imeevma@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org,
	tarantool-discussions@dev.tarantool.org, georgy@tarantool.org
Subject: Re: [Tarantool-discussions] [Tarantool-patches] [PATCH v3 0/5] Replace control pragmas by SET
Date: Fri, 6 Dec 2019 17:06:31 +0300	[thread overview]
Message-ID: <20191206140631.GJ1718@tarantool.org> (raw)
In-Reply-To: <20191206135009.GA6394@tarantool.org>

Hi!

I believe it can be a missing point: the system space described actually
contains no data at no time. On SELECT from this space a tuple is filled
from the session settings and on UPDATE corresponding setting will be
set in session structure and no data will be present in the space 
thereafter.

Given that - the space will be the same for all sessions, but since it 
contains no data there will be no cross-session interaction.

Regards,
Sergos

On 06 Dec 16:50, Mergen Imeev wrote:
> 
> Hello Kirill!
> 
> Below you can see my idea of solving the problem. Also,
> after that I will answer your questions.
> 
> In the last discussion, we decided to solve the problem more
> globally: we are going to create a way to change session settings
> that can be used from any interface. So, here are the requirements
> for this method:
> 1) All settings must be in the system space or system view.
> 2) We should be able to SELECT from this space.
> 3) We should be able to UPDATE data in this space. INSERT, DELETE
> and REPLACE cannot be used on this space.
> 4) This space should not affect performance.
> 5) This space should not be involved in transactions.
> 6) We should be able to change the settings on master and on
> replica.
> 7) Space does not have to be persistent.
> 
> To fulfill these requirements, I decided to create and use a new
> engine. This engine will only be used for this space. The format
> of the space will be {{name = 'name', type = 'string'},
> {name = 'value', type = 'any'}}. The space will be temporary.
> 
> When the user selects a tuple from space, the space will create a
> new tuple on the fly. The space itself will be empty, so do not
> worry about performance degradation. On UPDATE, the space will
> change the session settings.
> 
> After we create the space, we can simply remove the control
> pragmas. To change a setting from SQL we just need to
> update value in the space using UPDATE statement.
> 
> 
> On Fri, Dec 06, 2019 at 02:37:11PM +0300, Kirill Yukhin wrote:
> > Hello Mergen!
> > 
> > On 07 ноя 13:36, imeevma@tarantool.org wrote:
> > > The main goal of this set of patches is to replace control pragmas
> > > with the SET operator. Control pragmas are those that change SQL
> > > settings. Along with this, we will allow to see SQL session-local
> > > settings in unified way.
> > > 
> > > https://github.com/tarantool/tarantool/issues/4511
> > > https://github.com/tarantool/tarantool/tree/imeevma/gh-4511-pragma-replaced-by-set
> > 
> > We have at least two mail threads with discussions of how
> > this will be working (PRAGMA and SET keywords).
> > 
> > We have couple of verbal discussions, could you please
> > post approach we developed?
> > 
> > This is what I can remember: we're introducing new view (say
> > _vsettings), which is specific for each sessions.
> In the current idea, this is not entirely true. The space
> is the same for all sessions. Simply, the tuples it creates
> contain the settings for the current session.
> 
> > This view should contain all settings which user allowed to
> > read and write. Inserts are prohibited to that view. Updates
> > are alowed only if user has enough privilages to the given
> > setting. E.g. user cannot changes a way FK are checked or
> > max nesting depth of a SELECT statement.
> Since the user will change the setting of current session,
> there won't be any interactions between users/sessions.
> > 
> > I guess, we should create this view lazily in order not to harm
> > performance. Please, make sure when you'll be working on the
> > patchset.
> In a sense, space will work lazily - it will create a tuple
> only when asked about it. The only thing we have to do when
> starting Tarantool (not a session!) Is to initialize an
> array of settings. Also, we must release it upon exiting
> Tarantool.
> 
> > 
> > Having such a view will alow us to:
> >   1. get rid of nasty pragma/set statements at all;
> >   2. will simplify connectors programming;
> >   3. improve security by allowing to *bind* values we
> >      wish to update, instead of concatenating big string
> >      like other broken DBMSes.
> > 
> > AFAIR, we decided to set {'string', 'any'} format for that
> > new view.
> Yes.
> 
> > 
> > Could you please summarize overall design and post it here
> > (or in discussions, whatever).
> > 
> > --
> > Regards, Kirill Yukhin

  reply	other threads:[~2019-12-06 14:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <cover.1573121685.git.imeevma@gmail.com>
     [not found] ` <20191206113711.ctzr6x7sqbpr3xkd@tarantool.org>
2019-12-06 13:50   ` Mergen Imeev
2019-12-06 14:06     ` Sergey Ostanevich [this message]
2019-12-17 22:11     ` Alexander Turenko
2019-12-18  2:39       ` Peter Gulutzan
2019-12-18 17:39         ` Peter Gulutzan
2019-12-19  9:59           ` Mergen Imeev
2019-12-19 17:35             ` Peter Gulutzan
2019-12-19 17:51               ` Mergen Imeev
2019-12-19 21:09           ` Vladislav Shpilevoy
2019-12-18 10:20       ` Kirill Yukhin
2019-12-18 10:53         ` Alexander Turenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191206140631.GJ1718@tarantool.org \
    --to=sergos@tarantool.org \
    --cc=georgy@tarantool.org \
    --cc=imeevma@tarantool.org \
    --cc=tarantool-discussions@dev.tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-discussions] [Tarantool-patches] [PATCH v3 0/5] Replace control pragmas by SET' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox