[Tarantool-patches] [PATCH v2 test-run 1/1] sql: add another way to change SQL default engine

Alexander Turenko alexander.turenko at tarantool.org
Mon Dec 30 20:14:36 MSK 2019


Applied changes after voice discussion with Mergen (see below). Pushed
to test-run's master. I'll update test-run in tarantool's branches
(master, 2.2 and 1.10) soon.

WBR, Alexander Turenko.

>  "engine" value has a special meaning for *.test.sql files: if it is "memtx" or
> -"vinyl", then the corresponding engine will be set using "pragma
> -sql_default_engine='memtx|vinyl'" command before executing commands from a test
> -file.
> +"vinyl", then the corresponding engine will be set using either "pragma
> +sql_default_engine='memtx|vinyl'" or "UPDATE \\"_session_settings\\" SET
> +\\"value\\" = 'memtx|vinyl' WHERE \\"name\\" = 'sql_default_engine';" command
> +before executing commands from a test file.

I placed "UPDATE ..." first, "pragma ..." second and extracted commands
from the text itself.

> diff --git a/lib/tarantool_server.py b/lib/tarantool_server.py
> index 6f71b5b..07cbf0d 100644
> --- a/lib/tarantool_server.py
> +++ b/lib/tarantool_server.py
> @@ -145,6 +145,14 @@ class LuaTest(Test):
>              return True
>  
>          engine = self.run_params['engine']
> +        command = ("UPDATE \"_session_settings\" SET \"value\" = '{}' " +
> +                   "WHERE \"name\" = 'sql_default_engine';").format(engine)
> +        result = self.send_command(command, ts, 'sql')
> +        result = result.replace('\r\n', '\n')
> +        if result != '---\n- row_count: 1\n...\n' and result != "---\n- " +\
> +           "null\n- Space '_session_settings' does not exist\n...\n":
> +            sys.stdout.write(result)
> +            return False
>          command = "pragma sql_default_engine='{}'".format(engine)
>          result = self.send_command(command, ts, 'sql')
>          result = result.replace('\r\n', '\n')

We discussed in with Mergen voicely. I proposed to eliminate hardcoding
of "Space '_session_settings' does not exist" error just in case: if it
was changed somehow (say, an engine or other info will be added), we'll
need to update test-run again. I would try to avoid it.

Mergen's concern was against ignoring of the first error message: this
may hid useful information in case of some failure.

I think we can just show both results in case of fail and eliminate the
check against 'Space <...> does not exist' error: proceed with 2nd
command after any fail of 1nd.

Resulting patch is below. I verified it with both master
(e13a74e4383744a7ff5ddec83c74e13c82e417dc) and
imeevma/gh-4511-pragma-replaced-by-set branch
(dbe63f9c561bbac3748fcfa22bf09c5b0532d7fd) and it seems everything is
okay.

----

commit dc2cdb554f37efc2d8845e4e0350f53c451f32a7 (HEAD -> master)
Author: Mergen Imeev <imeevma at gmail.com>
Date:   Sun Dec 29 16:48:29 2019 +0300

    sql: add another way to change SQL default engine
    
    Currently, the pragma sql_default_engine is used in the *.test.sql
    tests to change the default SQL engine. But in the issue
    tarantool/tarantool#4511, this pragma will be removed. To avoid
    failures in these tests because of this, in addition to the
    current one, another way to change this parameter was implemented.

diff --git a/README.md b/README.md
index aefeeff..48803bf 100644
--- a/README.md
+++ b/README.md
@@ -69,9 +69,15 @@ engine = test_run:get_cfg('engine')
 ```
 
 "engine" value has a special meaning for *.test.sql files: if it is "memtx" or
-"vinyl", then the corresponding engine will be set using "pragma
-sql_default_engine='memtx|vinyl'" command before executing commands from a test
-file.
+"vinyl", then the corresponding default engine will be set before executing
+commands from a test file. An engine is set with the following commands:
+
+```sql
+UPDATE "_session_settings" SET "value" = 'memtx|vinyl' WHERE "name" = 'sql_default_engine'
+pragma sql_default_engine='memtx|vinyl'
+```
+
+If the first fails, then the second will be executed. When both fails, fail the test.
 
 #### Python
 
diff --git a/lib/tarantool_server.py b/lib/tarantool_server.py
index 6f71b5b..fd102b9 100644
--- a/lib/tarantool_server.py
+++ b/lib/tarantool_server.py
@@ -145,14 +145,27 @@ class LuaTest(Test):
             return True
 
         engine = self.run_params['engine']
-        command = "pragma sql_default_engine='{}'".format(engine)
-        result = self.send_command(command, ts, 'sql')
-        result = result.replace('\r\n', '\n')
-        if result != '---\n- row_count: 0\n...\n':
-            sys.stdout.write(result)
-            return False
 
-        return True
+        # Probe the new way. Pass through on any error.
+        command_new = ("UPDATE \"_session_settings\" SET \"value\" = '{}' " +
+                       "WHERE \"name\" = 'sql_default_engine'").format(engine)
+        result_new = self.send_command(command_new, ts, 'sql')
+        result_new = result_new.replace('\r\n', '\n')
+        if result_new == '---\n- row_count: 1\n...\n':
+            return True
+
+        # Probe the old way. Fail the test on an error.
+        command_old = "pragma sql_default_engine='{}'".format(engine)
+        result_old = self.send_command(command_old, ts, 'sql')
+        result_old = result_old.replace('\r\n', '\n')
+        if result_old == '---\n- row_count: 0\n...\n':
+            return True
+
+        sys.stdout.write(command_new)
+        sys.stdout.write(result_new)
+        sys.stdout.write(command_old)
+        sys.stdout.write(result_old)
+        return False
 
     def set_language(self, ts, language):
         for conn in ts.curcon:


More information about the Tarantool-patches mailing list