From 20fad78eea246f154be8734f5a38ca20953f5b9f Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko <pmwkaa@gmail.com> Date: Tue, 27 Aug 2013 15:23:11 +0400 Subject: [PATCH] lua-plus-dict: convert any tuple to table for proper yaml output, fix end-of-document marker for multi documents return. --- src/admin.cc | 10 ---------- src/lua/init.cc | 18 ++++++++++++++++-- third_party/lua-yaml/lyaml.c | 6 +----- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/admin.cc b/src/admin.cc index e452cd4460..a0a74501ef 100644 --- a/src/admin.cc +++ b/src/admin.cc @@ -68,17 +68,7 @@ admin_dispatch(struct ev_io *coio, struct iobuf *iobuf, lua_State *L) return -1; } eol[0] = '\0'; - tarantool_lua(L, out, in->pos); - - /* put end-of-document if the output doesn't has one */ - int eof = - ((out->size >= 4 && !memcmp(out->data + out->size - 4, "...\n", 4)) || - (out->size >= 5 && !memcmp(out->data + out->size - 5, "...\n\n", 5))); - - if (! eof) - tbuf_printf(out, "...\n"); - in->pos = (eol + 1); coio_write(coio, out->data, out->size); return 0; diff --git a/src/lua/init.cc b/src/lua/init.cc index aef9371b39..9045960ba5 100644 --- a/src/lua/init.cc +++ b/src/lua/init.cc @@ -656,13 +656,27 @@ tarantool_lua(struct lua_State *L, lua_replace(L, 1); assert(lua_gettop(L) == 1); } - /* Convert Lua stack to YAML and append to the given tbuf. */ + /* Convert Lua stack to YAML and append to the given tbuf */ int top = lua_gettop(L); if (top == 0) { - tbuf_printf(out, "---\n"); + tbuf_printf(out, "---\n...\n"); lua_settop(L, 0); return; } + /* convert all tuples to tables */ + for (int i = 1; i <= top; i++) { + if (lua_getmetatable(L, i) == 0) + continue; + luaL_getmetatable(L, "box.tuple"); + int is_tuple = 0; + if (lua_equal(L, -1, -2)) + is_tuple = 1; + lua_pop(L, 2); + if (is_tuple) { + luaL_callmeta(L, i, "totable"); + lua_replace(L, i); + } + } yamlL_encode(L); lua_replace(L, 1); lua_pop(L, 1); diff --git a/third_party/lua-yaml/lyaml.c b/third_party/lua-yaml/lyaml.c index 23b0f869f8..9c2a67dc59 100644 --- a/third_party/lua-yaml/lyaml.c +++ b/third_party/lua-yaml/lyaml.c @@ -549,10 +549,6 @@ static int figure_table_type(lua_State *L) { static int dump_null(struct lua_yaml_dumper *dumper) { yaml_event_t ev; - /* - yaml_scalar_event_initialize(&ev, NULL, NULL, - (unsigned char *)"~", 1, 1, 1, YAML_PLAIN_SCALAR_STYLE); - */ yaml_scalar_event_initialize(&ev, NULL, NULL, (unsigned char *)"null", 4, 1, 1, YAML_PLAIN_SCALAR_STYLE); return yaml_emitter_emit(&dumper->emitter, &ev); @@ -606,7 +602,7 @@ static void dump_document(struct lua_yaml_dumper *dumper) { if (!dump_node(dumper) || dumper->error) return; - yaml_document_end_event_initialize(&ev, 1); + yaml_document_end_event_initialize(&ev, 0); yaml_emitter_emit(&dumper->emitter, &ev); } -- GitLab