From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rhino.ch-server.com (rhino.ch-server.com [209.59.190.103]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 1EF304696C3 for ; Wed, 8 Apr 2020 17:36:08 +0300 (MSK) References: <8dc7be67-fc78-dd42-0634-83692259f0a5@ocelot.ca> <1433D33E-327F-4365-BB52-8BB9C6B539D5@tarantool.org> From: Peter Gulutzan Message-ID: <1bdafb31-b8bf-db2f-023a-41ed4207d5d5@ocelot.ca> Date: Wed, 8 Apr 2020 08:36:03 -0600 MIME-Version: 1.0 In-Reply-To: <1433D33E-327F-4365-BB52-8BB9C6B539D5@tarantool.org> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit Content-Language: en-US Subject: Re: [Tarantool-patches] [PATCH 0/4] session settings fixes List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Chris Sosnin Cc: tarantool-patches@dev.tarantool.org Hi, On 2020-04-07 10:32 a.m., Chris Sosnin wrote: > Hi! > >> On 3 Apr 2020, at 20:09, Peter Gulutzan wrote: >> >> Hi, >> >> Re: >> SETTING SET "sql_default_engine" = 'memtx'; >> >> Adding a new reserved word SETTING, without advance notice, >> should be against policy. It causes a slight risk >> of breaking an existing application. >> >> I had hoped for >> UPDATE _SETTINGS_DEFAULT_ENGINE SET VALUE = 'memtx'; > > Implementing this syntax would either require creating a table for each setting > or adding new keywords, since this is the same as updating tables. > It would definitely require creating a (viewed) table for each setting. That is why I said "And similarly for sql_defer_foreign_keys etc." > Moreover, SET VALUE construction also is not supported, so we still need > to reserve a new word. > As I pointed out in my earlier email, I can say UPDATE _settings_default_engine SET value = 'memtx'; now, in a current Tarantool version, without a parser error. If _settings_default_engine is not a view, it works fine. So I didn't see why there is a need to reserve VALUE. (Digression: That does not mean I like using VALUE for a column name. I objected about it in an earlier email. But I did not propose a better name, and now it is too late.) > We can borrow another MySQL syntax — SET SESSION name = value > What do you think about this option? In MySQL, SESSION is not a reserved word. Let us go back to my original complaint. CREATE TABLE setting (setting INTEGER PRIMARY KEY); That statement is legal in Tarantool-2.4. That statement is illegal in branch ksosnin/gh-4712-session-settings-v2. If you say SET SESSION instead of SETTING SET, is there still a need to add a new reserved word without notice? (Digression: Currently, every word that can be the start of a statement is reserved. Also, a few words that might in future be the start of a statement are reserved -- ANALYZE, BEGIN, CALL, DECLARE, END, FETCH, FOR, GRANT, IF, ITERATE, LEAVE, LOOP, RENAME, REPEAT, RESIGNAL, REVOKE, SET, SIGNAL. I believe that is a good thing. I do not believe that SETTING should be unreserved if it is the start of a statement.) Peter Gulutzan