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
next prev parent 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