Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Mergen Imeev <imeevma@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH v3 3/5] sql: introduce SET statement
Date: Mon, 11 Nov 2019 22:56:46 +0100	[thread overview]
Message-ID: <93979a0b-1708-1125-1142-74f22734b088@tarantool.org> (raw)
In-Reply-To: <20191107141209.GA10466@tarantool.org>

Hi! Thanks for the fixes!

See 3 comments below.

>>> SET sql_compound_select_limit = 10;
>>> SET sql_default_engine = 'memtx';
>>
>> 2. It would be cool to sum up here what is a purpose of
>> PRAGMA and SET. How are they different. From the code I
>> see, that looks like PRAGMA never changes anything. It
>> only returns something. While SET only sets and never
>> returns, right?
>>
> How pragma works:
> PRAGMA vdbe_trace = true; -- Sets vdbe_trace, returns nothing.
> PRAGMA vdbe_trace; -- Returns current value of vdbe_trace flag.

1. These PRAGMAs don't exist anymore. I wanted to understand
how rest of the pragmas (not removed) coexist with SET. When a
user should try to look at PRAGMA list, and when at SET list?

> 
> How SET works:
> SET sql_vdbe_trace = true; -- Sets vdbe_trace, returns nothing.
> 
>> In the next patch I see diff like this:
>>
>>> -        return test:execsql "PRAGMA full_column_names"
>>> -    end, {
>>> +        return box.space._vsession_settings:get("sql_full_column_names").value
>>> +    end,
>>
>> Is there any plan how to make it simpler? Seems like it is
>> impossible for a user to get session settings other than via
>> direct select from a system space. It was simpler with PRAGMA.
>>
> As far as I know, there is no such plans. It definitely was
> simpler with PRAGMA, but it was decided to remove PRAGMA.
> I do not know exact reaso why.
> 

2. Ok, but now it looks really unusable when a user want's to
learn an option value. I will create a ticket, if this patchset
will be pushed and nobody will care about usability beforehand.

>>> @@ -3382,3 +3408,82 @@ sql_session_opt_tuple(struct tuple_format *format, int option_id,
>>>  	*result = tuple;
>>>  	return 0;
>>>  }
>>> +
>>> +static void
>>> +sql_set_session_option(struct Parse *parse_context, int id, struct Expr *value)
>>> +{
>>> +	struct session *session = current_session();
>>> +	struct sql_option_metadata *option = &sql_session_opts[id];
>>> +	if (value->type != option->field_type) {
>>> +		diag_set(ClientError, ER_INCONSISTENT_TYPES,
>>> +			 field_type_strs[option->field_type],
>>> +			 field_type_strs[value->type]);
>>> +		parse_context->is_aborted = true;
>>> +		return;
>>> +	}
>>> +	if (value->type == FIELD_TYPE_BOOLEAN) {
>>> +		bool is_set = value->op == TK_TRUE;
>>> +		if (is_set)
>>> +			session->sql_flags |= option->mask;
>>> +		else
>>> +			session->sql_flags &= ~option->mask;
>>> +#ifndef NDEBUG
>>> +		if (id == SQL_SESSION_OPTION_PARSER_TRACE) {
>>> +			if (is_set)
>>> +				sqlParserTrace(stdout, "parser: ");
>>> +			else
>>> +				sqlParserTrace(NULL, NULL);
>>> +		}
>>> +#endif
>>> +	} else {
>>> +		assert(id == SQL_SESSION_OPTION_DEFAULT_ENGINE);
>>> +		enum sql_storage_engine engine =
>>> +			STR2ENUM(sql_storage_engine, value->u.zToken);
>>> +		if (engine == sql_storage_engine_MAX) {
>>> +			parse_context->is_aborted = true;
>>> +			diag_set(ClientError, ER_NO_SUCH_ENGINE,
>>> +				 value->u.zToken);
>>> +			return;
>>> +		}
>>> +		current_session()->sql_default_engine = engine;
>>> +	}
>>> +}
>>
>> 5. Wait. So the settings are set during parsing? Isn't it wrong?
>> 'Parser only parses' and everything? PRAGMA works in runtime.
> No, PRAGMA also set during parsing. I once suggested to
> change it, so parser would only parse, but my suggestion
> was declined.

3. This is bad and should be fixed.
https://github.com/tarantool/tarantool/issues/4621

  reply	other threads:[~2019-11-11 21:50 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-07 10:36 [Tarantool-patches] [PATCH v3 0/5] Replace control pragmas by SET imeevma
2019-11-07 10:36 ` [Tarantool-patches] [PATCH v3 1/5] sysview: make get() and create_iterator() methods virtual imeevma
2019-11-07 10:36 ` [Tarantool-patches] [PATCH v3 2/5] box: introdice _vsession_settings sysview imeevma
2019-11-07 10:36 ` [Tarantool-patches] [PATCH v3 3/5] sql: introduce SET statement imeevma
2019-11-07 12:40   ` Vladislav Shpilevoy
2019-11-07 14:12     ` Mergen Imeev
2019-11-11 21:56       ` Vladislav Shpilevoy [this message]
2019-11-15 14:06         ` Mergen Imeev
2019-11-17 17:26           ` Vladislav Shpilevoy
2019-11-17 20:32             ` Vladislav Shpilevoy
2019-11-27 10:33               ` Mergen Imeev
2019-11-27 23:03                 ` Vladislav Shpilevoy
2019-11-27 23:07                   ` Vladislav Shpilevoy
2019-11-27 23:09                     ` Vladislav Shpilevoy
2019-11-28  8:59                     ` Mergen Imeev
2019-11-28  8:56                   ` Mergen Imeev
2019-11-07 10:36 ` [Tarantool-patches] [PATCH v3 4/5] temporary: disable boolean.test.sql imeevma
2019-11-07 10:37 ` [Tarantool-patches] [PATCH v3 5/5] sql: replace control pragmas imeevma
2019-12-06 11:37 ` [Tarantool-patches] [PATCH v3 0/5] Replace control pragmas by SET Kirill Yukhin
2019-12-06 13:50   ` Mergen Imeev
2019-12-06 14:06     ` Sergey Ostanevich
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=93979a0b-1708-1125-1142-74f22734b088@tarantool.org \
    --to=v.shpilevoy@tarantool.org \
    --cc=imeevma@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v3 3/5] sql: introduce SET statement' \
    /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