summaryrefslogtreecommitdiff
path: root/mysql-test/t/parser.test
Commit message (Collapse)AuthorAgeFilesLines
* Create 'main' test directory and move 't' and 'r' thereMichael Widenius2018-03-291-1381/+0
|
* MDEV-15664 : sql_mode=ORACLE: Make TRIM return NULL instead of empty stringhalfspawn2018-03-291-0/+7
|
* MDEV-15620 Crash when using "SET @@NEW.a=expr" inside a triggerAlexander Barkov2018-03-271-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem resided in this branch of the "option_value_no_option_type" rule: | '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default Summary: 1. internal_variable_name initialized tmp.var to trg_new_row_fake_var (0x01). 2. The condition "if (tmp.var == NULL)" did not check the special case with trg_new_row_fake_var, so Lex->set_system_variable(&tmp, $3, $6) was called with tmp.var pointing to trg_new_row_fake_var, which created a sys_var instance pointing to 0x01 instead of a real system variable. 3. Later, at the trigger invocation time, this method was called: sys_var::do_deprecated_warning (this=0x1, thd=0x7ffe6c000a98) Notice, "this" is equal to trg_new_row_fake_var (0x01) Solution: The old implementation with separate rules internal_variable_name (in sql_yacc.yy and sql_yacc_ora.yy) and internal_variable_name_directly_assignable (in sql_yacc_ora.yy only) was too complex and hard to follow. Rewriting the code in a more straightforward way. 1. Changing LEX::set_system_variable() from: bool set_system_variable(struct sys_var_with_base *, enum_var_type, Item *); to: bool set_system_variable(enum_var_type, sys_var *, const LEX_CSTRING *, Item *); 2. Adding new methods in LEX, which operate with variable names: bool set_trigger_field(const LEX_CSTRING *, const LEX_CSTRING *, Item *); bool set_system_variable(enum_var_type var_type, const LEX_CSTRING *name, Item *val); bool set_system_variable(THD *thd, enum_var_type var_type, const LEX_CSTRING *name1, const LEX_CSTRING *name2, Item *val); bool set_default_system_variable(enum_var_type var_type, const LEX_CSTRING *name, Item *val); bool set_variable(const LEX_CSTRING *name, Item *item); 3. Changing the grammar to call the new methods directly in option_value_no_option_type, Removing rules internal_variable_name and internal_variable_name_directly_assignable. 4. Removing "struct sys_var_with_base" and trg_new_row_fake_var. Good side effect: - The code in /sql reduced from 314 to 183 lines. - MDEV-15615 Unexpected syntax error instead of "Unknown system variable" ... was also fixed automatically
* SQL: regression fix: make NOW a valid identifier again [#363]Sergei Golubchik2017-12-081-0/+2
| | | | | | | * again, as in 10.2, NOW is a keyword only if followed by parentheses * use AS OF CURRENT_TIMESTAMP or AS OF NOW() * AS OF CURRENT_TIMESTAMP and AS OF NOW() mean AS OF NOW(6), not AS OF NOW(0), (same behavior as in a DEFAULT clause)
* SQL: (0.5) Versioned partitions [closes #77]Aleksey Midenkov2017-05-051-2/+0
| | | | | | | | | | * one `AS OF NOW`, multiple `VERSIONING` partitions; * rotation of `VERSIONING` partitions by record count, time period; * rotation is multi-threaded; * conventional subpartitions as bottom level for versioned partitions; * `DEFAULT` keyword selects first `VERSIONING` partition; * ALTER TABLE ADD/DROP partition; * REBUILD PARTITION basic operation.
* MDEV-10343 Providing compatibility for basic SQL data typesAlexander Barkov2017-04-051-0/+12
| | | | Based on the patch by Dmitry Tolpeko.
* MDEV-10122: MariaDB does not support group functions in some contexts where ↵Vicențiu Ciorbaru2017-02-141-4/+0
| | | | | | | | | | | | | | | | | | MySQL does The problematic queries involve unions. For unions we have an optimization where we skip the ORDER BY clause in a query from one side of the union if it will be performed later due to UNION. EX: (SELECT a from t1 ORDER BY a) ORDER BY b; The first ordering by a is not necessary and it gets removed. The problem is that we still need to resolve the Items before removing the ORDER BY list from the SELECT_LEX structure. During this final resolve step however, we forgot to allow SET functions within the ORDER BY clause. This caused us to return an "Invalid use of group function" error during the checking performed by fix_fields in Item_sum::init_sum_func_check.
* MDEV-11582 InnoDB: Failing assertion: !((field)->vcol_info && ↵Sergei Golubchik2017-02-131-0/+20
| | | | | | | | !(field)->stored_in_db()) change the parser not to allow SERIAL as a normal data type. make a special rule for it, where it could be used for define fields, but not generated fields, not return type of a stored function, etc.
* Merge branch '10.1' into 10.2Sergei Golubchik2016-12-291-0/+10
|\
| * Merge branch '10.0' into 10.1Sergei Golubchik2016-12-111-0/+10
| |\
| | * Merge branch '5.5' into 10.0Sergei Golubchik2016-12-091-0/+10
| | |\
| | | * MDEV-11171 Assertion `m_cpp_buf <= ptr && ptr <= m_cpp_buf + m_buf_length' ↵Alexander Barkov2016-11-281-0/+10
| | | | | | | | | | | | | | | | failed in Lex_input_stream::body_utf8_append(const char*, const char*)
* | | | MDEV-10779 Failing assertion lex->proc_list.elements == 0 or syntax error on ↵Alexander Barkov2016-09-131-0/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PROCEDURE ANALYSE in UNION Reverting a part of the patch for "MDEV-8909union parser cleanup", as a parenthesized SELECT with PROCEDURE followed by UNION is not disallowed by the grammar (only a non-parenthesized SELECT with PROCEDURE followed by a UNION is disallowed grammatically).
* | | | Merge branch '10.1' into 10.2Sergei Golubchik2016-06-301-0/+16
|\ \ \ \ | |/ / /
| * | | Merge branch '10.0' into 10.1Sergei Golubchik2016-06-281-0/+16
| |\ \ \ | | |/ /
| | * | Merge branch '5.5' into bb-10.0Sergei Golubchik2016-06-211-0/+12
| | |\ \ | | | |/
| | | * MDEV-8328 Evaluation of two "!" operators depends on space in beetweenSergei Golubchik2016-06-141-0/+12
| | | | | | | | | | | | | | | | | | | | fix the lexer to backtrack when parsing "<=", "<>", "!=", ">=", "<<", ">>", "<=>".
* | | | MDEV-10101 Wrong error message of SELECT 1 UNION (SELECT 1 FROM t1 GROUP BY ↵Alexander Barkov2016-06-011-5/+27
| | | | | | | | | | | | | | | | 1 WITH ROLLUP)
* | | | Adding various tests for combinations ofAlexander Barkov2016-05-251-0/+182
| | | | | | | | | | | | | | | | UNION, ROLLUP, GROUP_CONCAT, for better coverage.
* | | | MDEV-10109 Disallow syntactically INSERT .. SELECT .. {ORDER BY ..| LIMIT ↵Alexander Barkov2016-05-241-0/+13
| | | | | | | | | | | | | | | | ..} .. UNION ..
* | | | MDEV-10103 Disallow syntactically UNION SELECT .. PROCEDURE ANALYSE()Alexander Barkov2016-05-241-2/+2
| | | |
* | | | MDEV-10051 Fix subselect to return a syntax error instead of "Incorrect ↵Alexander Barkov2016-05-231-7/+7
| | | | | | | | | | | | | | | | usage of UNION and LIMIT"
* | | | MDEV-10095 Fix derived tables to return a syntax error instead of "Illegal ↵Alexander Barkov2016-05-211-7/+7
| | | | | | | | | | | | | | | | usage of UNION and LIMIT"
* | | | MDEV-10080 Derived tables allow double LIMIT clauseAlexander Barkov2016-05-201-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. Moving the "| get_select_lex_derived select_derived_init" part of select_derived into a separate new rule derived_query_specification. 2. Using derived_query_specification directly in select_derived_union rather than in select_derived. 3. Moving the sequence "opt_order_clause opt_limit_clause opt_select_lock_type" from select_derived2 to select_derived_union, after derived_query_specification. Effectively, the parser now does not go through the sequence "opt_order_clause opt_limit_clause ... opt_union_order_or_limit" any more. This fixes the problem with double LIMIT clause and removes 2 shift/reduce conflicts.
* | | | MDEV-10036 sql_yacc.yy: Split select_part2 to disallow syntactically bad ↵Alexander Barkov2016-05-101-14/+14
| | | | | | | | | | | | | | | | | | | | | | | | constructs with INTO, PROCEDURE, UNION MDEV-10037 UNION with LIMIT ROWS EXAMINED does not require parentheses
* | | | MDEV-10030 sql_yacc.yy: Split table_expression and remove PROCEDURE from ↵Alexander Barkov2016-05-061-2/+2
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | create_select, select_paren_derived, select_derived2, query_specification This change refactors the "table_expression" rule in sql_yacc.yy. Queries with subselects and derived tables, as well as "CREATE TABLE ... SELECT" now return syntax error instead of "Incorrect usage of PROCEDURE and ...".
* | | MDEV-8380: Subquery parse errorOleksandr Byelkin2015-10-061-0/+256
| | | | | | | | | | | | | | | | | | backport mysql parser fixes 0034963fbf199696792491bcb79d5f0731c98804 5948561812bc691bd0c13cf518a3fe77d9daf920
* | | MDEV-7792 - SQL Parsing Error - UNION AND ORDER BY WITH JOINSergey Vojtovich2015-06-291-0/+7
|/ / | | | | | | | | | | | | | | | | | | | | ORDER BY against union may confuse name resolution context, causing valid SQL statements to fail. The purpose of context change was presumably intended for the duration of gathering field list for ORDER BY. However it isn't actually required (name resolution context is never accessed by the latter). See also alternative solution (in MySQL 5.7): 92145b95.
* | 5.5 mergeSergei Golubchik2014-05-091-0/+25
|\ \ | |/
| * Bug#17075846 - UNQUOTED FILE NAMES FOR VARIABLE VALUES ARENeeraj Bisht2014-02-121-0/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ACCEPTED BUT PARSED INCORRECTLY When we are setting the value in a system variable, We can set it like set sys_var="Iden1.Iden2"; //1 set sys_var='Iden1.Iden2'; //2 set sys_var=Iden1.Iden2; //3 set sys_var=.ident1.ident2; //4 set sys_var=`Iden1.Iden2`; //5 While parsing, for case 1(when ANSI_QUOTES is enable) and 2, we will take as string literal(we will make item of type Item_string). for case 3 & 4, taken as Item_field, where Iden1 is a table name and iden2 is a field name. for case 5, again Item_field type, where iden1.iden2 is taken as field name. Now in case 1, when we are assigning some value to system variable (which can take string or enumerate type data), we are setting only field part. This means only iden2 value will be set for system variable. This result in wrong result. Solution: (for string type) We need to Document that we are not allowed to set system variable which takes string as identifier, otherwise result in unexpected behaviour. (for enumerate type) if we pass iden1.iden2, we will give an error ER_WRONG_TYPE_FOR_VAR (Incorrect argument type to variable). mysql-test/suite/sys_vars/t/general_log_file_basic.test: Earlier we used to give ER_WRONG_VALUE_FOR_VAR error, but in the patch of (Bug32748-Inconsistent handling of assignments to general_log_file/slow_query_log_file) they quoted this line.But i am not able to find any relation of this with the changes of patch. So i think We should give error in this case. mysql-test/suite/sys_vars/t/slow_query_log_file_basic.test: Earlier we used to give ER_WRONG_VALUE_FOR_VAR error, but in the patch of (Bug32748-Inconsistent handling of assignments to general_log_file/slow_query_log_file) they quoted this line.But i am not able to find any relation of this with the changes of patch. So i think We should give error in this case.
* | Implementation of Multi-source replication (MDEV:253)Michael Widenius2012-09-281-1/+1
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Documentation of the feature can be found at: http://kb.askmonty.org/en/multi-source-replication/ This code is based on code from Taobao, developed by Plinux BUILD/SETUP.sh: Added -Wno-invalid-offsetof to get rid of warning of offsetof() on C++ class (safe in the contex we use it) client/mysqltest.cc: Added support for error names starting with 'W' Added connection_name support to --sync_with_master cmake/maintainer.cmake: Added -Wno-invalid-offsetof to get rid of warning of offsetof() on C++ class (safe in the contex we use it) mysql-test/r/mysqltest.result: Updated results mysql-test/r/parser.result: Updated results mysql-test/suite/multi_source/my.cnf: Setup of multi-master tests mysql-test/suite/multi_source/simple.result: Simple basic test of multi-source functionality mysql-test/suite/multi_source/simple.test: Simple basic test of multi-source functionality mysql-test/suite/multi_source/syntax.result: Test of multi-source syntax mysql-test/suite/multi_source/syntax.test: Test of multi-source syntax mysql-test/suite/rpl/r/rpl_rotate_logs.result: Updated results because of new error messages mysql-test/t/parser.test: Updated test as master_pos_wait() now takes more arguments than before sql/event_scheduler.cc: No reason to initialize slave_thread (it's guaranteed to be zero here) sql/item_create.cc: Added connection_name argument to master_pos_wait() Simplified code sql/item_func.cc: Added connection_name argument to master_pos_wait() sql/item_func.h: Added connection_name argument to master_pos_wait() sql/log.cc: Added tag "Master 'connection_name'" to slave errors that has a connection name. sql/mysqld.cc: Added variable mysqld_server_initialized so that other functions can test if server is fully initialized. Free all slave data in one place (fewer ifdef's) Removed not needed call to close_active_mi() Initialize slaves() later in startup to ensure that everthing is really initialized when slaves start. Made status variable slave_running multi-source safe sql/mysqld.h: Added mysqld_server_initialized sql/rpl_mi.cc: Store connection name and cmp_connection_name (only used for show full slave status) in Master_info Added code for Master_info_index, which handles storage of multi-master information Don't write the empty "" connection_name to multi-master.info file. This is handled by the original code. sql/rpl_mi.h: Added connection_name and Master_info_index sql/rpl_rli.cc: Added connection_name to relay log files. sql/rpl_rli.h: Fixed type of slave_skip_counter as we now access it directly in sys_vars.cc, so it must be uint sql/share/errmsg-utf8.txt: Added new error messages needed for multi-source Added multi-source name to error ER_MASTER_INFO and WARN_NO_MASTER_INFO sql/slave.cc: Moved things a bit around to make it easier to handle error conditions. Create a global master_info_index and add the "" connection to it Ensure that new Master_info doesn't fail. Don't call terminate_slave_threads(active_mi..) on end_slave() as this is now done automaticly when deleting master_info_index. Delete not needed function close_active_mi(). One can achive same thing by calling end_slave(). Added support for SHOW FULL SLAVE STATUS (show status for all master connections with connection_name as first column) sql/slave.h: Added new prototypes sql/sql_base.cc: More DBUG_PRINT sql/sql_class.cc: Reset thd->connection_name and thd-->default_master_connection sql/sql_class.h: Added thd->connection_name and thd-->default_master_connection Added slave_skip_count to variables to make changing the @@sql_slave_skip_count variable thread safe sql/sql_const.h: Added MAX_CONNECTION_NAME sql/sql_lex.cc: Reset 'lex->verbose' (to simplify some sql_yacc.yy code) sql/sql_lex.h: Added connection_name sql/sql_parse.cc: Added support for connection_name to all SLAVE commands. - Instead of using active_mi, we now get the current Master_info from master_info_index. - Create new replication threads with CHANGE MASTER - Added support for show_all_master_info() sql/sql_reload.cc: Made reset/full slave use master_info_index->get_master_info() instead of active_mi. If one uses 'RESET SLAVE "connection_name" all' the connection is removed from master_info_index. sql/sql_repl.cc: sql_slave_skip_counter is moved to thd->variables to make it thread safe and fix some bugs with it Add connection name to relay log files. Added connection name to errors. Added some logging for multi-master if log_warnings > 1 stop_slave(): - Don't check if thd is set. It's guaranteed to always be set. change_master(): - Check for duplicate connection names in change_master() - Check for wrong arguments first in file (to simplify error handling) - Register new connections in master_info_index sql/sql_yacc.yy: Added optional connection_name to a all relevant master/slave commands sql/strfunc.cc: my_global.h shoud always be included first. sql/sys_vars.cc: Added variable default_master_connection Made variable sql_slave_skip_counter multi-source safe sql/sys_vars.h: Added Sys_var_session_lexstring (needed for default_master_connection) Added Sys_var_multi_source_uint (needed for sql_slave_skip_counter).
* Post-commit fixes after the push for Bug#20837 et. al.Magne Mahre2010-06-091-75/+0
| | | | | | | | | | | | | | | | | mysql-test/suite/innodb/r/innodb_information_schema.result: The transaction is in REPEATABLE READ, since the iso level was changed to SERIALIZABLE only for the previous trx. mysql-test/suite/innodb/t/innodb-semi-consistent.test: 'commit' was missing from the original patch mysql-test/t/parser.test: Moved the test for Bug#46527 to parser_not_embedded, since "disconnect default" isn't allowed with the embedded server. mysql-test/t/parser_not_embedded.test: Moved the test for Bug#46527 to parser_not_embedded, since "disconnect default" isn't allowed with the embedded server.
* Draft patch that fixes and a sketches test cases for:Konstantin Osipov2010-05-071-0/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug#20837 Apparent change of isolation level during transaction, Bug#46527 COMMIT AND CHAIN RELEASE does not make sense, Bug#53343 completion_type=1, COMMIT/ROLLBACK AND CHAIN don't preserve the isolation level Bug#53346 completion_type has strange effect in a stored procedure/prepared statement Make thd->tx_isolation mean strictly "current transaction isolation level" Make thd->variables.tx_isolation mean "current session isolation level". The current transaction isolation level is now established at transaction start. If there was a SET TRANSACTION ISOLATION LEVEL statement, the value is taken from it. Otherwise, the session value is used. A change in a session value, made while a transaction is active, whereas still allowed, no longer has any effect on the current transaction isolation level. This is an incompatible change. A change in a session isolation level, made while there is no active transaction, overrides SET TRANSACTION statement, if there was any. Changed the impelmentation to not look at @@session.completion_type in the parser, and thus fixed Bug#53346. Changed the parser to not allow AND NO CHAIN RELEASE, and thus fixed Bug#46527. Changed the transaction API to take the current transaction isolation level into account: - BEGIN/COMMIT now do preserve the current transaction isolation level if chaining is on. - implicit commit, XA COMMIT or XA ROLLBACK or autocommit don't.
* Backport of WL #2934: Make/find library for doing float/double Alexey Kopytov2009-12-221-0/+4
| | | | | | | | | | | | | | | | | | | | | | to string conversions and vice versa" Initial import of the dtoa.c code and custom wrappers around it to allow its usage from the server code. Conversion of FLOAT/DOUBLE values to DECIMAL ones or strings and vice versa has been significantly reworked. As the new algoritms are more precise than the older ones, results of such conversions may not always match those obtained from older server versions. This in turn may break compatibility for some applications. This patch also fixes the following bugs: - bug #12860 "Difference in zero padding of exponent between Unix and Windows" - bug #21497 "DOUBLE truncated to unusable value" - bug #26788 "mysqld (debug) aborts when inserting specific numbers into char fields" - bug #24541 "Data truncated..." on decimal type columns without any good reason"
* Move test for bug 39559, which uses command-line mysql clientChad MILLER2009-04-171-24/+0
| | | | | | | | | to separate test file that doesn't permit mysqld embedded in mysqltest. Also, fix different comment handling in a incorrect new-to-5.1 test.
* Bug#39559: dump of stored procedures / functions with C-style \Chad MILLER2009-04-091-0/+28
| | | | | | | | | | | | | | | | | | | | | comment can't be read back A change to the lexer in 5.1 caused slash-asterisk-bang-version sections to be terminated early if there exists a slash-asterisk- style comment inside it. Nesting comments is usually illegal, but we rely on versioned comment blocks in mysqldump, and the contents of those sections must be allowed to have comments. The problem was that when encountering open-comment tokens and consuming -or- passing through the contents, the "in_comment" state at the end was clobbered with the not-in-a-comment value, regardless of whether we were in a comment before this or not. So, """/*!VER one /* two */ three */""" would lose its in-comment state between "two" and "three". Save the echo and in-comment state, and restore it at the end of the comment if we consume a comment.
* Cleanup merge issues in mysql-test/t/parser.testMarc Alff2008-07-081-1/+668
|
* Bug#26030 (Parsing fails for stored routine w/multi-statement executionMarc Alff2008-07-071-0/+59
enabled) Before this fix, the lexer and parser would treat the ';' character as a different token (either ';' or END_OF_INPUT), based on convoluted logic, which failed in simple cases where a stored procedure is implemented as a single statement, and used in a multi query. With this fix: - the character ';' is always parsed as a ';' token in the lexer, - parsing multi queries is implemented in the parser, in the 'query:' rules, - the value of thd->client_capabilities, which is the capabilities negotiated between the client and the server during bootstrap, is immutable and not arbitrarily modified during parsing (which was the root cause of the bug)