From: Cyrill Gorcunov <gorcunov@gmail.com>
To: tml <tarantool-patches@freelists.org>
Cc: Alexander Turenko <alexander.turenko@tarantool.org>,
Konstantin Osipov <kostja@tarantool.org>,
Kirill Yukhin <kyukhin@tarantool.org>,
Cyrill Gorcunov <gorcunov@gmail.com>
Subject: [tarantool-patches] [PATCH 3/5] box/console: Refactor command handling
Date: Sat, 31 Aug 2019 00:48:06 +0300 [thread overview]
Message-ID: <20190830214808.17422-4-gorcunov@gmail.com> (raw)
In-Reply-To: <20190830214808.17422-1-gorcunov@gmail.com>
We will need to parse and verify "\set" commands
in remote console text-wire protocol thus to not
duplicate the code lets factor helper out for
reuse sake.
Part-of #3834
---
src/box/lua/console.lua | 37 +++++++++++++++++++++++++++++++------
1 file changed, 31 insertions(+), 6 deletions(-)
diff --git a/src/box/lua/console.lua b/src/box/lua/console.lua
index 5ca5cad1f..006748d93 100644
--- a/src/box/lua/console.lua
+++ b/src/box/lua/console.lua
@@ -150,11 +150,16 @@ local function output_save(fmt, opts)
}
end
-local function format(status, ...)
+local function current_output()
local d = box.session.storage.console_output_format
if d == nil then
- d = default_output_format
+ return default_output_format
end
+ return d
+end
+
+local function format(status, ...)
+ local d = current_output()
return output_handlers[d["fmt"]](status, d["opts"], ...)
end
@@ -245,21 +250,40 @@ local operators = {
q = quit
}
-local function preprocess(storage, line)
+local function parse_operators(line)
local items = {}
for item in string.gmatch(line, '([^%s]+)') do
items[#items + 1] = item
end
if #items == 0 then
- return help_wrapper()
+ return 0, nil
end
if operators[items[1]] == nil then
+ return #items, nil
+ end
+ return #items, items
+end
+
+local function preprocess(storage, line)
+ local nr_items, items = parse_operators(line)
+ if nr_items == 0 then
+ return help_wrapper()
+ end
+ if items == nil then
local msg = "Invalid command \\%s. Type \\help for help."
return format(false, msg:format(items[1]))
end
return operators[items[1]](storage, unpack(items))
end
+local function get_command(line)
+ -- All commands start with the escape symbol
+ if line:sub(1, 1) == '\\' then
+ return line:sub(2)
+ end
+ return nil
+end
+
--
-- Evaluate command on local instance
--
@@ -267,8 +291,9 @@ local function local_eval(storage, line)
if not line then
return nil
end
- if line:sub(1, 1) == '\\' then
- return preprocess(storage, line:sub(2))
+ local command = get_command(line)
+ if command then
+ return preprocess(storage, command)
end
if storage.language == 'sql' then
return format(pcall(box.execute, line))
--
2.20.1
next prev parent reply other threads:[~2019-08-30 21:48 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-30 21:48 [tarantool-patches] [PATCH v2 0/5] box/console: Improve lua mode for remote console Cyrill Gorcunov
2019-08-30 21:48 ` [tarantool-patches] [PATCH 1/5] box/console: Add mapping for direct symbols Cyrill Gorcunov
[not found] ` <20190903082351.GB9438@atlas>
2019-09-03 8:26 ` [tarantool-patches] " Cyrill Gorcunov
[not found] ` <20190903082446.GC9438@atlas>
2019-09-03 8:28 ` Cyrill Gorcunov
2019-08-30 21:48 ` [tarantool-patches] [PATCH 2/5] box/console: Add explicit output EOS mapping Cyrill Gorcunov
[not found] ` <20190903082725.GD9438@atlas>
2019-09-03 8:32 ` [tarantool-patches] " Cyrill Gorcunov
2019-08-30 21:48 ` Cyrill Gorcunov [this message]
2019-08-30 21:48 ` [tarantool-patches] [PATCH 4/5] box/console: Fix hang in remote console lua mode Cyrill Gorcunov
[not found] ` <20190903190002.GC15611@atlas>
2019-09-03 19:18 ` [tarantool-patches] " Cyrill Gorcunov
[not found] ` <20190904064657.GD30636@atlas>
2019-09-04 7:12 ` Cyrill Gorcunov
2019-08-30 21:48 ` [tarantool-patches] [PATCH 5/5] box/console: Provide console.eos() api Cyrill Gorcunov
[not found] ` <20190903190057.GD15611@atlas>
2019-09-03 19:19 ` [tarantool-patches] " Cyrill Gorcunov
[not found] ` <20190904064725.GE30636@atlas>
2019-09-04 7:12 ` Cyrill Gorcunov
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=20190830214808.17422-4-gorcunov@gmail.com \
--to=gorcunov@gmail.com \
--cc=alexander.turenko@tarantool.org \
--cc=kostja@tarantool.org \
--cc=kyukhin@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='Re: [tarantool-patches] [PATCH 3/5] box/console: Refactor command handling' \
/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