[tarantool-patches] Re: [PATCH 3/6] test: fix sqltester methods to drop all tables/views

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Mon Dec 10 17:16:57 MSK 2018


Thanks for the patch! See 3 comments below.

On 10/12/2018 00:30, Nikita Pettik wrote:
> Since we are going to remove string of SQL "CREATE TABLE ..." statement
> from space's opts, lets rework methods in sqltester to drop all tables
> and views in order to avoid relying on this parameter.
> 
> Part of #2647
> ---
>   test/sql-tap/drop_all.test.lua        |  4 ++--
>   test/sql-tap/identifier_case.test.lua |  6 +++---
>   test/sql-tap/lua/sqltester.lua        | 38 ++++++++++++++---------------------
>   3 files changed, 20 insertions(+), 28 deletions(-)
> 
> diff --git a/test/sql-tap/lua/sqltester.lua b/test/sql-tap/lua/sqltester.lua
> index 8751ef820..672d2e67d 100644
> --- a/test/sql-tap/lua/sqltester.lua
> +++ b/test/sql-tap/lua/sqltester.lua
> @@ -277,7 +277,7 @@ end
>   test.catchsql2 = catchsql2
>   
>   -- Show the VDBE program for an SQL statement but omit the Trace
> --- opcode at the beginning.  This procedure can be used to prove
> +-- opcode at the beginning.  This procedure can be used to PROVE

1. ???

>   -- that different SQL statements generate exactly the same VDBE code.
>   local function explain_no_trace(self, sql)
>       tr = execsql(self, "EXPLAIN "..sql)
> @@ -288,35 +288,27 @@ local function explain_no_trace(self, sql)
>   end
>   test.explain_no_trace = explain_no_trace
>   json = require("json")
> -function test.find_spaces_by_sql_statement(self, statement)
> -    local spaces = box.space._space:select{}
> -    local res = {}
> -    for _, space in ipairs(spaces) do
> -        local name_num = 3-- [3] is space name
> -        local options_num = 6-- [6] is space options
> -        if not space[name_num]:startswith("_") and space[options_num]["sql"] then
> -            if string.find(space[options_num]["sql"], statement) then
> -                table.insert(res, space[name_num])
> -            end
> -        end
> -    end
> -    return res
> -end
>   
>   function test.drop_all_tables(self)
> -    local tables = test:find_spaces_by_sql_statement("CREATE TABLE")
> -    for _, table in ipairs(tables) do
> -        test:execsql(string.format([[DROP TABLE "%s";]], table))
> +    local entry_count = 0
> +    for _, v in box.space._space:pairs() do
> +        if v[1] >= 512 then
> +            test:execsql(string.format([[DROP TABLE "%s";]], v[3]))
> +            entry_count = entry_count + 1

2. Since DD integration is finished, can we do box.space[v3]:drop()
instead of executing SQL? I think it can help us to find more bugs.
And it is faster.

> +        end
>       end
> -    return tables
> +    return entry_count
>   end
>   
>   function test.drop_all_views(self)
> -    local views = test:find_spaces_by_sql_statement("CREATE VIEW")
> -    for _, view in ipairs(views) do
> -        test:execsql(string.format([[DROP VIEW "%s";]], view))
> +    local entry_count = 0
> +    for _, v in box.space._space:pairs() do
> +        if v[1] > 512 and v[6]["view"] == true then

3. IMO .view looks better than ["view"], but I do not insist. Up to
you.

> +            test:execsql(string.format([[DROP VIEW "%s";]], v[3]))
> +            entry_count = entry_count + 1
> +        end
>       end
> -    return views
> +    return entry_count
>   end
>   
>   function test.do_select_tests(self, label, tests)
> 




More information about the Tarantool-patches mailing list