- Jul 20, 2018
-
-
N.Tatunov authored
Previously "BEGIN" / "BEGIN TRANSACTION", "COMMIT TRANSACTION" / "END" / "END TRANSACTION", "ROLLBACK TRANSACTION" could be used to handle transactions. By changing these commands syntax in parser we're aiming on getting closer to ANSI SQL. Also found initialization in ifdef that caused some problems with error messages in occasions when the wrong syntax was used. With the patch applied only following commands can be used: - "START TRANSACTION" to begin transaction. - "COMMIT" to end transaction. - "ROLLBACK" to rollback transaction without savepoints. - "ROLLBACK TO .." to rollback transaction to savepoint. Closes #2164
-
N.Tatunov authored
To optimize the select-subquery tarantool uses subquery flattening optimization which is only used with respect to some restrictions. When any of subselects but the last one has an ORDER BY clause we should raise an error. So subquery components containing it are not accepted to be optimized. Checking part was only checking if the last subselect contains the clause which led to an assertion fail. With the patch applied flattening is not used in case any of subselects has an ORDER BY. Closes #3353
-
- Jul 19, 2018
-
-
Kirill Yukhin authored
-
Kirill Yukhin authored
-
Kirill Shcherbatov authored
_say function was called with invalid arguments. Thank @sorc1 for patch. Closes #3433.
-
Olga Arkhangelskaia authored
Strdup may silently fail without any message from tarantool. Patch adds this checks.
-
Olga Arkhangelskaia authored
Mode logging to syslog was broken due to assertion in case ov vaild configuration: box.cfg{log = 'syslog:identity=tarantool'} Closes #3502
-
Kirill Yukhin authored
-
Kirill Shcherbatov authored
Strings containing "true" and "false" were converted to a boolean type when serializing. Fixed. Example: type(yaml.decode(yaml.encode('false'))) == string type(yaml.decode(yaml.encode('true'))) == string Closes #3476.
-
Kirill Yukhin authored
-
Kirill Shcherbatov authored
Function tonumber64 has worked incorrectly with values less than INT64_MAX. Now it works in the interval [INT64_MAX, UINT64_MAX] returning nil otherwise. Closes #3466.
-
Kirill Shcherbatov authored
Net.box didn't pass options containing iterator to server side. There were also invalid results for two :count tests in net.box.result file. Thanks @ademenev for contributing problem and help with problem locating. Closes #3262.
-
Kirill Shcherbatov authored
Parser didn't raise error when DELETE FROM can't find a table specified on statement. As no error was raised, partially-prepared VDBE code seemed to be generated fine, that was not true. Closes #3535, #3511.
-
Kirill Yukhin authored
Before the patch, big integer constants were silently converted to floating point values. Fix that by issuing error message if value doesn't fit in int64_t range. Also, refactor surrounding code as per Tarantool's code style. Closes #2347
-
Vladimir Davydov authored
Currently, this function takes a single boolean argument, but I'm planning to add another one. Since two bool arguments look rather confusing, let's turn this arguments into flags. Needed for #461
-
Konstantin Osipov authored
A small cleanup to avoid a potentially inefficient use of gc_consumer_vclock(). Follow up on a patch for gh-461.
-
Vladimir Davydov authored
In order to check if a replica needs to be rebootstrapped, we need to know the vclock of the oldest WAL stored on the master, but the garbage collector works with signatures and hence can't report the vclock it was last called for. Actually, all gc users have a vclock and can pass it instead of signature so it's pretty easy to switch garbage collection infrastructure to vclock. Needed for #461
-
- Jul 18, 2018
-
-
Vladimir Davydov authored
We will need it in other places.
-
Vladimir Davydov authored
- Remove extra scan of the WAL directory from local_recovery() - we scan the directory in recovery_end_vclock() hence we can skip scan in recover_remaining_wals() by passing scan_dir = false. - Rename recovery_end_vclock() to recovery_scan() to emphasize the fact that this function scans the WAL directory. Write a comment to this function. - Add comments to wal.c explaining why we scan the WAL directory there. Follow-up 0695fbbb ("box: retrieve end vclock before starting local recovery").
-
Vladimir Davydov authored
To bring crash_expected option of "start server" command.
-
Serge Petrenko authored
There were no checks for granting and revoking a non-existent privilege or a privilege to a non-existent entity. Added the checks, and a test case. Closes #3417
-
- Jul 17, 2018
-
-
Kirill Shcherbatov authored
Net.box didn't pass options containing iterator to server side. There were also invalid results for two :count tests in net.box.result file. Thanks @ademenev for contributing problem and help with problem locating. Closes #3262.
-
Ivan Koptelov authored
Now every sqlite struct Index is created with tnt struct index_def inside. This allows us to use tnt index_def in work with sqlite indexes in the same manner as with tnt index and is a step to remove sqlite Index with tnt index. Fields coll_array, coll_id_array, aiColumn, sort_order, aiRowLogEst and zName are removed from Index. All usages of this fields changed to usage of corresponding index_def or index_def->opts fields. index_is_unique(), sql_index_collation() and index_column_count() are removed with calls of index_def corresponding fields. Also there is small change in behavior: before the patch a statement like CREATE TABLE t1(a,b, PRIMARY KEY(a,b), UNIQUE(a,b)) created only one constraint index (for primary key) and no index for UNIQUE constraint (since it is upon the same columns), neither it is named or non-named constraint. After the patch index will be always created for named constraints. It is a temporary solution. In future it's preferable not to create an index, but to make some record in _constraints space that this named unique constraint implemented with the same index as primary key constraint. Closes: #3369, #3498
-
Kirill Yukhin authored
-
Kirill Shcherbatov authored
Binary search in whereKeyStats function that uses routine sqlite3VdbeRecordCompareMsgpack returned invalid result, because it made wrong assumption about the number of coinciding index columns based on _sql_stat4. But all collected index statistics were wrong. The analyzeOneTable routine used to call sqlite3GetTempRange and sqlite3ReleaseTempRange functions inside of cycle intensively changes Parser->nMem value. Thanks this pattern routine sqlite3ReleaseTempRange could push nMem variable onto aTempReg queue. As Parser->nMem could be bigger next time, this variable may be used twice: [74, 'Column', 4, 1, 11, '', '00', 'r[11]='] [75, 'Column', 4, 2, 12, '', '00', 'r[12]='] |-> [76, 'Column', 4, 3, 13, '', '00', 'r[13]='] [77, 'Column', 4, 4, 14, '', '00', 'r[14]='] !rewrite [78, 'Column', 4, 0, 13, '', '00', 'r[13]=ID'] [79, 'MakeRecord', 13, 1, 6, '', '00', 'r[6]=mkrec(r[13])'] Thus all assumptions about data below should be invalid and some artifacts could exhibit. Example: \set language sql CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a, b, c, f, d, e); CREATE INDEX i1 ON t1(a, b, c, f, d); \set language lua for i = 0, 100 do box.sql.execute(string.format("INSERT INTO t1 VALUES(null, 'x', 'y', 'z', 'a', %s, %s);", i, math.floor(i / 2))) end \set language sql SELECT * FROM "_sql_stat4"; --- ['T1', 'I1', '101 101 1 1 1', '0 0 44 44 44', '0 0 44 44 44', ['x', 'y', 'z', 'a', 44]] --- Expected: --- ['T1', 'I1', '101 101 101 101 1', '0 0 0 0 44', '0 0 0 0 44', ['x', 'y', 'z', 'a', 44]] --- Resolves #2847.
-
Vladimir Davydov authored
If is_first_insert flag is set and vy_stmt_type(rv->tuple) equals IPROTO_DELETE, we free rv->tuple, but then we dereference it via an on-stack variable to check if we need to turn a REPLACE into an INSERT or vice versa. Fix this.
-
Vladimir Davydov authored
This is not necessary, as we can use fiber()->gc, as we usually do.
-
Vladimir Davydov authored
Move key_def creation to compare_write_iterator_results as it is the same for all test cases. Performance is not an issue here, obviously, so we can close our eyes to the fact that now we create a new key def for each test cases.
-
Vladimir Davydov authored
The new function inserts a new item into the list at the specified postion.
-
- Jul 16, 2018
-
-
Kirill Yukhin authored
-
Kirill Yukhin authored
-
Georgy Kirichenko authored
If a fiber pool reuses already canceled fiber then the fiber reports an error for any next request. Now canceled fiber returns and fiber pool creates a new one. Fixes #3527
-
Kirill Shcherbatov authored
Disallowed division by zero in SQL to follow ANSI standard. This also affects some unobvious scenarios when divider indirectly casts to zero like SELECT 'word1' / 'word2'; Closes #2135.
-
- Jul 13, 2018
-
-
Kirill Yukhin authored
-
Kirill Yukhin authored
-
Kirill Yukhin authored
New commit in third_party/libyaml downgrades required cmake version.
-
Ivan Kosenko authored
-
Kirill Shcherbatov authored
If specified PK column modifier refers nonexistent column, lookup by name keeps NULL column pointer unchanged that should be accounted in assert. Close #3522.
-
Kirill Shcherbatov authored
Closes #2946. @TarantoolBot document Title: fixed module reload There was a bug in tarantool documentation: https://tarantool.io/en/doc/1.7/book/box/ box_schema/#lua-function.box.schema.func.reload Now it is allowed to reload all functions in loadable module via one method. Legacy method including finction name is forbidden. box.schema.func.reload("utils") -- ok since now box.schema.func.reload("utils.func1") -- forbidden since now Global reload is still unsupported because it seems to be useless. box.schema.func.reload() -- invalid!
-
- Jul 12, 2018
-
-
Kirill Yukhin authored
-