From: Imeev Mergen <imeevma@tarantool.org> To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>, tarantool-patches@freelists.org Subject: [tarantool-patches] Re: [PATCH v1 1/1] Tarantoolctl "enter" with set language Date: Thu, 26 Jul 2018 14:41:53 +0300 [thread overview] Message-ID: <5bbe9065-a279-1c15-9ae2-aa58850513b8@tarantool.org> (raw) In-Reply-To: <d476883e-1a57-d60c-8194-dd8bb0541a4f@tarantool.org> [-- Attachment #1: Type: text/plain, Size: 8667 bytes --] On 07/26/2018 12:56 AM, Vladislav Shpilevoy wrote: > > > On 25/07/2018 10:51, imeevma@tarantool.org wrote: >> This patch allow to use option "--language" with >> "tarantoolctl enter" command. Also default value >> for language were added in default configuration >> file. Language is either SQL or Lua. >> >> Closes #2385. >> --- >> Branch: >> https://github.com/tarantool/tarantool/tree/imeevma/gh-2385-select-input-language-tarantoolctl >> >> Issue: https://github.com/tarantool/tarantool/issues/2385 >> >> diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in >> index 2dd5d74..55711b8 100755 >> --- a/extra/dist/tarantoolctl.in >> +++ b/extra/dist/tarantoolctl.in >> @@ -155,6 +155,11 @@ local function load_default_file(default_file) >> d.vinyl_dir = fio.pathjoin(d.vinyl_dir, instance_name) >> d.log = fio.pathjoin(d.log, instance_name .. '.log') >> + d.language = (d.language or "lua"):lower() >> + if d.language ~= "lua" and d.language ~= "sql" then >> + d.language = "lua" > > 1. Please, do not ignore unknown language. Log this error like others > in the same function already do. Done. > > 2. Why do you need language in default_cfg? It is box.cfg as I > understand and box.cfg has no language option. It is not? If you > need to parse a language from the file, then you can store it in > another table or even in a separate variable like others on lines > 30-49. Done. > >> + end >> + >> default_cfg = d >> if not usermode the> @@ -629,6 +635,17 @@ local function >> logrotate() >> end >> local function enter() >> + local options = keyword_arguments >> + local language = options.language >> + if language ~= nil then >> + language = language:lower() >> + if language ~= "lua" and language ~= "sql" then >> + log.warn("Language \"%s\" is not recognized. Default >> language" .. >> + " \"%s\" is set.", language, default_cfg.language) >> + language = nil > > 3. For enter() function it is ok to fail on unknown language. > You should not ignore the error because a caller could use > something like this: > > cat my_script.sql | tarantoolctl enter --language sqlll > > And if you ignore invalid language, this command will feed the > entire script on SQL into Lua console. It will produce huge > number of syntax errors if no worse. Done. > >> + end >> + end >> + language = language or default_cfg.language >> local console_sock_path = uri.parse(console_sock).service >> if fio.stat(console_sock_path) == nil then >> log.error("Can't connect to %s (%s)", console_sock_path, >> errno.strerror()) >> @@ -644,7 +661,9 @@ local function enter() >> console_sock, TIMEOUT_INFINITY >> ) >> - console.on_start(function(self) self:eval(cmd) end) >> + local cmd_language = string.format("\\set language %s", language) > > 4. Why not to merge cmd_language into cmd? It is created a line above. Discussed, partly changed. > >> + >> + console.on_start(function(self) self:eval(cmd) >> self:eval(cmd_language) end) >> console.on_client_disconnect(function(self) self.running = >> false end) >> console.start() >> return 0 >> @@ -1284,6 +1303,7 @@ do >> { 'chdir', 'string' }, >> { 'only-server', 'string' }, >> { 'server', 'string' }, >> + { 'language', 'string' }, >> }) >> local cmd_name >> > > 5. Lets add the same option to 'eval', 'connect' to make the commands > symmetric. Discussed, decided to reject the idea. > > 6. Please, update the comments. For example, on line 1028 I > still see the comment about 'enter': "Enter an instance's interactive > Lua console", > but actually it is not complete now - you can choose SQL. > Done. commit 7088606bba3810ffc6db313cf31d7aa101d7175d Author: Mergen Imeev <imeevma@gmail.com> Date: Fri Jul 13 19:25:32 2018 +0300 Tarantoolctl "enter" with set language This patch allow to use option "--language" with "tarantoolctl enter" command. Also default value for language were added in default configuration file. Language is either SQL or Lua. Closes #2385. diff --git a/extra/dist/CMakeLists.txt b/extra/dist/CMakeLists.txt index 862689e..3045b5a 100644 --- a/extra/dist/CMakeLists.txt +++ b/extra/dist/CMakeLists.txt @@ -34,6 +34,7 @@ message (STATUS "tarantoolctl logdir: ${TARANTOOL_LOGDIR}") set(TARANTOOL_RUNDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run/tarantool") message (STATUS "tarantoolctl rundir: ${TARANTOOL_RUNDIR}") set(TARANTOOL_USER "tarantool") +set(TARANTOOL_LANGUAGE "lua") set(SYSCONFIG_AVAILABLEDIR "tarantool/instances.available") set(SYSCONFIG_ENABLEDDIR "tarantool/instances.enabled") set(TARANTOOL_AVAILABLEDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${SYSCONFIG_AVAILABLEDIR}") diff --git a/extra/dist/default/tarantool.in b/extra/dist/default/tarantool.in index 9a8dad3..01e7144 100644 --- a/extra/dist/default/tarantool.in +++ b/extra/dist/default/tarantool.in @@ -20,6 +20,7 @@ default_cfg = { vinyl_dir = "@TARANTOOL_DATADIR@", -- @TARANTOOL_DATADIR@/${INSTANCE} log = "@TARANTOOL_LOGDIR@", -- @TARANTOOL_LOGDIR@/${INSTANCE}.log username = "@TARANTOOL_USER@", + language = "@TARANTOOL_LANGUAGE@", } -- instances.available - all available instances diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in index 2dd5d74..ef9da2f 100755 --- a/extra/dist/tarantoolctl.in +++ b/extra/dist/tarantoolctl.in @@ -47,6 +47,7 @@ local default_cfg local positional_arguments local keyword_arguments local lua_arguments = arg +local language -- function for printing usage reference local usage @@ -155,6 +156,14 @@ local function load_default_file(default_file) d.vinyl_dir = fio.pathjoin(d.vinyl_dir, instance_name) d.log = fio.pathjoin(d.log, instance_name .. '.log') + language = (d.language or "lua"):lower() + d.language = nil + + if language ~= "lua" and language ~= "sql" then + log.error('Unknown language: %s', language) + os.exit(1) + end + default_cfg = d if not usermode then @@ -629,6 +638,12 @@ local function logrotate() end local function enter() + local options = keyword_arguments + language = (options.language or language):lower() + if language ~= "lua" and language ~= "sql" then + log.error('Unknown language: %s', options.language) + return 1 + end local console_sock_path = uri.parse(console_sock).service if fio.stat(console_sock_path) == nil then log.error("Can't connect to %s (%s)", console_sock_path, errno.strerror()) @@ -644,7 +659,9 @@ local function enter() console_sock, TIMEOUT_INFINITY ) - console.on_start(function(self) self:eval(cmd) end) + local cmd_connect = string.format("\\set language %s", language) + + console.on_start(function(self) self:eval(cmd) self:eval(cmd_connect) end) console.on_client_disconnect(function(self) self.running = false end) console.start() return 0 @@ -1008,11 +1025,15 @@ local commands = setmetatable({ } }, enter = { func = exit_wrapper(enter), process = process_local, help = { - header = "%s enter INSTANCE", + header = "%s enter INSTANCE [--language=language]", linkmode = "%s enter", description = [=[ - Enter an instance's interactive Lua console. + Enter an instance's interactive Lua or SQL console. + + Supported options: + * --language=language to set interactive console language. + May be either Lua or SQL. ]=], weight = 65, deprecated = false, @@ -1284,6 +1305,7 @@ do { 'chdir', 'string' }, { 'only-server', 'string' }, { 'server', 'string' }, + { 'language', 'string' }, }) local cmd_name [-- Attachment #2: Type: text/html, Size: 14072 bytes --]
next prev parent reply other threads:[~2018-07-26 11:41 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-07-25 7:51 [tarantool-patches] " imeevma 2018-07-25 21:56 ` [tarantool-patches] " Vladislav Shpilevoy 2018-07-26 11:41 ` Imeev Mergen [this message] 2018-07-27 13:08 ` Vladislav Shpilevoy
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=5bbe9065-a279-1c15-9ae2-aa58850513b8@tarantool.org \ --to=imeevma@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='[tarantool-patches] Re: [PATCH v1 1/1] Tarantoolctl "enter" with set language' \ /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