Commit graph

54730 commits

Author SHA1 Message Date
Evgeny Potemkin
70e2f814a7 Merge 2008-09-10 12:44:38 +04:00
Ramil Kalimullin
58a5d735a4 Merge 2008-09-09 21:24:33 +05:00
Ramil Kalimullin
eb2794d422 Merge 2008-09-09 20:52:38 +05:00
Martin Hansson
cfd4c976f6 Bug#35600: Auto merged. 2008-09-09 17:30:36 +02:00
Ramil Kalimullin
776793a97c Fix for bug#37526: asymertic operator <=> in trigger
Problem: <=> operator may return wrong results 
comparing NULL and a DATE/DATETIME/TIME value.

Fix: properly check NULLs.


mysql-test/r/type_datetime.result:
  Fix for bug#37526: asymertic operator <=> in trigger
    - test result.
mysql-test/t/type_datetime.test:
  Fix for bug#37526: asymertic operator <=> in trigger
    - test case.
sql/item_cmpfunc.cc:
  Fix for bug#37526: asymertic operator <=> in trigger
    - if is_nulls_eq is TRUE Arg_comparator::compare_datetime() 
  should return 1 only if both arguments are NULL.
2008-09-09 20:05:27 +05:00
Mats Kindahl
ac1bcc20d1 Merging with 5.1-5.1.29-rc 2008-09-09 14:46:18 +02:00
Martin Hansson
c0cfce21d6 Bug#35600: Security breach via view, I_S table and prepared
statement/stored procedure

View privileges are properly checked after the fix for bug no 
36086, so the method TABLE_LIST::get_db_name() must be used 
instead of field TABLE_LIST::db, as this only works for tables.
Bug appears when accessing views in prepared statements.

mysql-test/r/view_grant.result:
  Bug#35600: Extended existing test case.
mysql-test/t/view_grant.test:
  Bug#35600: Extended existing test result.
sql/sql_parse.cc:
  Bug#35600: Using method to retrieve database name instead of
  field.
2008-09-09 12:49:08 +02:00
Mats Kindahl
589355f0f5 Bug #39106:
SUPER is not required to change binlog format for session

A user without SUPER privileges can change the value of the
session variable BINLOG_FORMAT, causing problems for a DBA.

This changeset requires a user to have SUPER privileges to
change the value of the session variable BINLOG_FORMAT, and
not only the global variable BINLOG_FORMAT.


mysql-test/suite/binlog/t/binlog_grant.test:
  Adding test to test grants needed for SQL_LOG_BIN and BINLOG_FORMAT.
sql/set_var.cc:
  Adding code to check that user has SUPER permission
  needed to change the value of BINLOG_FORMAT.
sql/set_var.h:
  Adding function sys_var_thd_binlog_format::check()
2008-09-09 12:19:31 +02:00
Georgi Kodinov
dba247127f merge 5.1-5.1.29-rc to B38701 working tree 2008-09-08 14:51:09 +03:00
Ramil Kalimullin
8fb46a3d13 Merge 2008-09-08 15:57:06 +05:00
Martin Hansson
ee9528b0b9 Bug#36086: Auto merge. 2008-09-08 12:04:42 +02:00
Ramil Kalimullin
0a3af5f78e Merge 2008-09-08 14:55:38 +05:00
Georgi Kodinov
cc26bc9466 Bug #38701: Crash in String::append when inserting duplicate empty strings an uft8
SET col
                  
When reporting a duplicate key error the server was making incorrect assumptions 
on what the state of the value string to include in the error is.

Fixed by accessing the data in this string in a "safe" way (without relying on it
having a terminating 0).
      
Detected by code analysis and fixed a similar problem in reporting the foreign key
duplicate errors.

mysql-test/r/type_set.result:
  Bug #38701: test case
mysql-test/t/type_set.test:
  Bug #38701: test case
sql/handler.cc:
  Bug #38701: don't rely on the presence of a terminating 0 in the string
2008-09-05 18:21:59 +03:00
Narayanan V
860f74a8c1 updating server version number
configure.in:
  change server version number to 5.1.29
2008-09-05 20:20:26 +05:30
Narayanan V
16291bfd55 WL#4380: abi_check rule (using gcc -E) for storage engine API
Added a rule that uses gcc to generate preprocessor
output (gcc -E) that can be compared to an already
generated output using the diff utility.

icheck has been removed and replaced by gcc -E
because icheck does not support C++.

Makefile.am:
  Added a rule for checking that the abi/api
  has not changed.
  
  The following rules are followed in the rule in makefile.am
  
  1) Generate preprocessor output for the
     files that need to be tested for abi/ 
     api changes. use -nostdinc to prevent
     generation of preprocessor output for
     system headers. This results in
     messages in stderr saying that these
     headers were not found. Redirect the
     stderr output to /dev/null to prevent
     seeing these messages.
  2) sed the output to 
     2.1) remove blank lines and lines that
          begin with "# "
     2.2) When gcc -E is run on the Mac OS 
          and solaris sparc platforms it
          introduces a line of output that
          shows up as a difference between
          the .pp and .out files. Remove
          these OS specific preprocessor
          text inserted by the preprocessor.
  3) diff the generated file and the canons
     (.pp files already in the repository).
  4) delete the .out file that is generated.
     If the diff fails, the generated file 
     is not removed. This will be useful
     for analysis of ABI differences (e.g.
     using a visual diff tool).
  
  A ABI change that causes a build to fail will always be accompanied by new canons (.out files). The .out files that are not removed will be replaced as the new .pp files.
  
  e.g. If include/mysql/plugin.h has an ABI
       change then this rule would leave a
       <build directory>/abi_check.out file.
  
  A developer with a justified API change will then do a 
  
  mv <build directory>/abi_check.out include/mysql/plugin.pp 
  
  to replace the old canons with the new ones.
configure.in:
  1) Removed the part of the file that was
     icheck related
  2) Added an entry for the configure
     variable DIFF
  3) Ensured that the abi_check rule is run
     only if gcc is available
include/Makefile.am:
  1) Removed the icheck related entries
include/mysql.h.pp:
  The pre-processor output cannon file for
  include/mysql.h
include/mysql/plugin.h.pp:
  The pre-processor output cannon file
  for include/mysql/plugin.h
include/mysql_h.ic:
  Removed the cannon file related to icheck.
sql/mysql_priv.h.pp:
  The pre-processor output cannon file for
  sql/mysql_priv.h
2008-09-05 20:14:30 +05:30
Evgeny Potemkin
1588c116ba Bug#37908: Skipped access right check caused server crash.
The check_table_access function initializes per-table grant info and performs
access rights check. It wasn't called for SHOW STATUS statement thus left
grants info uninitialized. In some cases this led to server crash. In other
cases it allowed a user to check for presence/absence of arbitrary values in
any tables.
      
Now the check_table_access function is called prior to the statement
processing.


mysql-test/r/status.result:
  Added a test case for the bug#37908.
mysql-test/t/status.test:
  Added a test case for the bug#37908.
sql/sql_parse.cc:
  Bug#37908: Skipped access right check caused server crash.
  Now the check_table_access function is called when the SHOW STATUS statement
  uses any table except information.STATUS.
sql/sql_yacc.yy:
  Bug#37908: Skipped access right check caused server crash.
  For the SHOW PROCEDURE/FUNCTION STATUS the 'mysql.proc' table isn't added
  to the table list anymore as there is no need.
2008-09-05 14:44:16 +04:00
Ramil Kalimullin
bf2f368087 After-merge fix. 2008-09-05 14:06:24 +05:00
Ramil Kalimullin
bef0ee999d Merge 2008-09-05 13:36:02 +05:00
Ramil Kalimullin
788be2aebd Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
Problem: SELECT ... REGEXP BINARY NULL may lead to server crash/hang.

Fix: properly handle NULL regular expressions.


mysql-test/r/func_regexp.result:
  Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
    - test result.
mysql-test/t/func_regexp.test:
  Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
    - test case.
sql/item_cmpfunc.cc:
  Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
    - checking regular expressions' null_value
  we tested it without a val_xxx() call before, which is wrong.
  Now Item_func_regex::regcomp() returns -1 in the case
  and allows to handle NULL expessions properly.
sql/item_cmpfunc.h:
  Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
    - checking regular expressions' null_value
  we tested it without a val_xxx() call before, which is wrong.
  Now Item_func_regex::regcomp() returns -1 in the case
  and allows to handle NULL expessions properly.
2008-09-05 13:30:01 +05:00
Ramil Kalimullin
bcbff0b93b Merge 2008-09-05 12:48:56 +05:00
Narayanan V
06ec4b2d2e merging mysql-5.1->mysql-5.1-sea 2008-09-04 17:23:16 +05:30
Mats Kindahl
dbbb48c3c7 BUG#32709: Assertion failed: trx_data->empty(), file log.cc
Incremental fixes: updating a comment and fixing a result file.

sql/sql_class.h:
  Changing comment.
2008-09-03 22:52:54 +02:00
Mats Kindahl
02a4354044 Bug #32709: Assertion failed: trx_data->empty(), file log.cc
The assertion indicates that some data was left in the transaction
cache when the server was shut down, which means that a previous
statement did not commit or rollback correctly.

What happened was that a bug in the rollback of a transactional
table caused the transaction cache to be emptied, but not reset.
The error can be triggered by having a failing UPDATE or INSERT,
on a transactional table, causing an implicit rollback.

Fixed by always flushing the pending event to reset the state
properly.


mysql-test/extra/rpl_tests/rpl_row_basic.test:
  Testing that a failed update (that writes some rows to the
  transaction cache) does not cause the transaction cache to
  hold on to the data or forget to reset the transaction cache.
sql/log.cc:
  Added call to remove pending event when the transaction cache
  is emptied instead of written to binary log. The call will also
  clear the outstanding table map count so that the cache is not
  left it in a state of "empty but not reset".
  
  Added function MYSQL_BIN_LOG::remove_pending_rows_event().
sql/log.h:
  Added function MYSQL_BIN_LOG::remove_pending_rows_event().
sql/sql_class.cc:
  Adding function THD::binlog_remove_pending_rows_event().
sql/sql_class.h:
  Adding function THD::binlog_remove_pending_rows_event().
2008-09-03 22:04:07 +02:00
Martin Hansson
3bad2119f9 Bug#36086: SELECT * from views don't check column grants
This patch also fixes bugs 36963 and 35600.
                      
- In many places a view was confused with an anonymous derived
  table, i.e. access checking was skipped. Fixed by introducing a
  predicate to tell the difference between named and anonymous
  derived tables.
                      
- When inserting fields for "SELECT * ", there was no 
  distinction between base tables and views, where one should be
  made. View privileges are checked elsewhere.

mysql-test/include/grant_cache.inc:
  Bug#36086: Changed test case.
mysql-test/r/grant2.result:
  Bug#36086: Changed test result.
mysql-test/r/grant_cache_no_prot.result:
  Bug#36086: Changed test result.
mysql-test/r/grant_cache_ps_prot.result:
  Bug#36086: Changed test result.
mysql-test/r/view_grant.result:
  Bug#36086: Test result.
mysql-test/t/grant2.test:
  Bug#36086: Changed test case.
mysql-test/t/view_grant.test:
  Bug#36086: Test case.
sql/item.cc:
  Bug#36086: Replaced conditional with new methods.
sql/sql_acl.cc:
  Bug no 35600: 
  In mysql_table_grant:
    Replaced conditional with the new accessor method.
  
  In check_grant:
   - Changed the requirement table->derived != null to 
     checking all anonymous derived tables.
   - Use of the accessor methods for getting object and database 
     names.
      
  Bug#36086: In check_grant_all_columns:
    - Updated comment. This function is now called for views
      as well.
    - The error message should not disclose any column names 
      unless the user has privilege to see all column names.
    - Changed names of Field_iterator_table_ref methods.
sql/sql_base.cc:
  Bug no 36963: In insert_fields()
    - Commented.
    - We should call check_grant_all_columns() for views in  
      this case.        
    - Changed names of Field_iterator_table_ref methods.
    - We should not disclose column names in the error message
      when the user has no approprate privilege.
sql/sql_cache.cc:
  Bug#36086: Replaced test with new predicate method.
sql/sql_derived.cc:
  Bug#36086: commenting only. Updated and doxygenated
  comment for mysql_derived_prepare().
sql/sql_parse.cc:
  Bug no 35600: 
  - In check_single_table_access:
    Due to the bug, check_grant would raise an error for a
    SHOW CREATE TABLE command for a TEMPTABLE view. It should in
    fact not be be invoked in this case. This table privilege
    is checked already.
    There is a test case for this in information_schema_db.test.
      
  - In check_access: replaced table->derived
sql/table.cc:
  Bug#36086: 
  
  - In TABLE_LIST::set_underlying_merge(): 
    Commenting only. Doxygenated, corrected spelling,
    added.
  
  - Renamed table_name() and db_name() methods of 
    Field_iterator_table_ref in order to be consistent
    with new methods in TABLE_LIST.
sql/table.h:
  Bug#36086: 
    - Commented GRANT_INFO.
    - Added a predicate is_anonymous_derived_table() to    
      TABLE_LIST.
    - Added get_table_name() and get_db_name() to   
      TABLE_LIST in order to hide the disparate   
      representation of these properties.
2008-09-03 16:45:40 +02:00
Andrei Elkin
d62f27a90a merging with 5.1.29. 2008-09-03 14:43:26 +03:00
Ramil Kalimullin
f0a50bd969 Fix for bug#38821: Assert table->auto_increment_field_not_null failed
in open_table()

Problem: repeating "CREATE... ( AUTOINCREMENT) ... SELECT" may lead to
an assertion failure.

Fix: reset table->auto_increment_field_not_null after each record 
writing.


mysql-test/r/create.result:
  Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
  in open_table()
    - test result.
mysql-test/t/create.test:
  Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
  in open_table()
    - test case.
sql/sql_insert.cc:
  Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
  in open_table()
    - reset table->auto_increment_field_not_null after writing a record
  for "{CREATE, INSERT}..SELECT".
2008-09-03 15:17:19 +05:00
Andrei Elkin
2f8c0a1675 Bug#36099 replicate-do-db affects replaying RBR events with mysqlbinlog
The replication filtering rules were inappropiately applied when
executing BINLOG pseudo-query.  The rules are supposed to be active
only at times when the slave's sql thread executes an event.
            
Fixed with correcting a condition to call replication rules only if
the slave sql thread executes the event.

mysql-test/suite/rpl/r/rpl_binlog_query_filter_rules.result:
  new result file
mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules-master.opt:
  a filtering option that would refuse to replicate a row event of the main test on
  slave
mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test:
  a regression test for the bug
sql/log_event.cc:
  avoiding to call the filtering rules if the execution thread is not a slave.
2008-09-03 13:01:18 +03:00
Gleb Shchepa
5cee5b9b96 merge 5.0 --> 5.1 2008-09-03 13:06:03 +05:00
Gleb Shchepa
dd1d9adbb0 merge with local tree 2008-09-03 12:59:48 +05:00
Gleb Shchepa
59b9d50c8a Bug #39002: The server crashes on the query:
INSERT .. SELECT .. ON DUPLICATE KEY UPDATE col=DEFAULT

In order to get correct values from update fields that
belongs to the SELECT part in the INSERT .. SELECT .. ON
DUPLICATE KEY UPDATE statement, the server adds referenced
fields to the select list. Part of the code that does this
transformation is shared between implementations of
the DEFAULT(col) function and the DEFAULT keyword (in
the col=DEFAULT expression), and an implementation of
the DEFAULT keyword is incomplete.


mysql-test/r/default.result:
  Added test case for bug #39002.
mysql-test/t/default.test:
  Added test case for bug #39002.
sql/item.cc:
  The Item_default_value::transform() function has been
  modified to take into account the fact that the DEFAULT
  keyword has no arguments unlike the DEFAULT(col) function
  that always has an argument.
2008-09-03 12:32:43 +05:00
unknown
d70d171cee Raise version number after cloning 5.1.28-rc 2008-08-28 16:51:00 +02:00
Georgi Kodinov
8b0e99fe26 merge 5.0-bugteam -> 5.1-bugteam 2008-08-28 12:54:50 +03:00
Georgi Kodinov
31d76e8d52 merge 5.0-main -> 5.0-bugteam 2008-08-28 12:18:35 +03:00
Georgi Kodinov
aea2ff7064 merged 5.1-rpl-merge -> 5.1-bugteam 2008-08-28 11:26:06 +03:00
Gleb Shchepa
54a59681d6 Bug #37799: SELECT with a BIT column in WHERE clause
returns unexpected result

If:
  1. a table has a not nullable BIT column c1 with a length
     shorter than 8 bits and some additional not nullable
     columns c2 etc, and
  2. the WHERE clause is like: (c1 = constant) AND c2 ...,
the SELECT query returns unexpected result set.


The server stores BIT columns in a tricky way to save disk
space: if column's bit length is not divisible by 8, the
server places reminder bits among the null bits at the start
of a record. The rest bytes are stored in the record itself,
and Field::ptr points to these rest bytes.

However if a bit length of the whole column is less than 8,
there are no remaining bytes, and there is nothing to store in
the record at its regular place. In this case Field::ptr points
to bytes actually occupied by the next column in a record.
If both columns (BIT and the next column) are NOT NULL,
the Field::eq function incorrectly deduces that this is the
same column, so query transformation/equal item elimination
code (see build_equal_items_for_cond) may mix these columns
and damage conditions containing references to them.


mysql-test/r/type_bit.result:
  Added test case for bug #37799.
mysql-test/t/type_bit.test:
  Added test case for bug #37799.
sql/field.h:
  1. The Field::eq function has been modified to take types of
  comparing columns into account to distinguish between BIT and
  not BIT columns referencing the same bytes in a record.
  
  2. Unnecessary type comparison has been removed from the
  Field_bit::eq function (moved to Field::eq).
2008-08-28 02:10:37 +05:00
Mats Kindahl
84b81e6c95 Merging 5.1 into 5.1-rpl-merge 2008-08-27 20:52:44 +02:00
Georgi Kodinov
0b24a95498 merged 5.1-bugteam into B37548 tree 2008-08-27 18:39:09 +03:00
Georgi Kodinov
cab267ecc7 Bug#37548: result value erronously reported being NULL in certain subqueries
When switching to indexed ORDER BY we must be sure to reset the index read
flag if we are switching from a covering index to non-covering.

mysql-test/r/subselect.result:
  Bug#37548: test case
mysql-test/t/subselect.test:
  Bug#37548: test case
sql/sql_select.cc:
  Bug#37548: update the index read flag if the index for indexed ORDER BY is not
      covering.
2008-08-27 18:19:22 +03:00
Mats Kindahl
fc31480fac Automerge 2008-08-27 16:21:10 +02:00
Mats Kindahl
554203f60b Result file change. 2008-08-27 16:17:55 +02:00
Evgeny Potemkin
06bf25e4d4 Bug#38195: Incorrect handling of aggregate functions when loose index scan is
used causes server crash.
      
When the loose index scan access method is used values of aggregated functions
are precomputed by it. Aggregation of such functions shouldn't be performed
in this case and functions should be treated as normal ones.
The create_tmp_table function wasn't taking this into account and this led to
a crash if a query has MIN/MAX aggregate functions and employs temporary table
and loose index scan.
Now the JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate
functions as normal ones when the loose index scan is used.


mysql-test/r/group_min_max.result:
  Added a test case for the bug#38195.
mysql-test/t/group_min_max.test:
  Added a test case for the bug#38195.
sql/sql_select.cc:
  Bug#38195: Incorrect handling of aggregate functions when loose index scan is
  used causes server crash.
  The JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate
  functions as normal ones when the loose index scan is used.
2008-08-27 17:03:17 +04:00
Mats Kindahl
f295ea2f02 Automerge 2008-08-27 11:05:04 +02:00
Mats Kindahl
2d62bacf28 Merge b38773-5.1-rpl-merge into 5.1-rpl-merge 2008-08-27 11:02:37 +02:00
Mats Kindahl
0203409175 Bug #38773: DROP DATABASE cause switch to stmt-mode when there are temporary
tables open

When executing a DROP DATABASE statement in ROW mode and having temporary
tables open at the same time, the existance of temporary tables prevent
the server from switching back to row mode after temporarily switching to
statement mode to handle the logging of the statement.

Fixed the problem by removing the code to switch to statement mode and added
code to temporarily disable the binary log while dropping the objects in the
database.


mysql-test/extra/binlog_tests/database.test:
  Added test to ensure that DROP DATABASE does not affect the replication mode.
sql/sql_db.cc:
  Removed code that clears the current_stmt_binlog_row_based flag.
  Added code to disable the binary log while dropping the objects
  in a database.
2008-08-27 10:40:11 +02:00
Davi Arnaut
33338db84d Merge of mysql-5.1 branch. 2008-08-26 21:43:13 -03:00
Davi Arnaut
0ddea7b340 Merge of mysql-5.1-bugteam branch. 2008-08-26 15:38:17 -03:00
Davi Arnaut
bfdd0591c7 Merge of mysql-5.0-bugteam branch. 2008-08-26 15:27:04 -03:00
Mattias Jonsson
511a89d791 merge (updated to latest mysql-5.1-bugteam before push) 2008-08-26 17:10:21 +02:00
Mattias Jonsson
84dc95cfcd Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY
post push fix

Updated partition_symlink since different error behavior
if embedded (or not partitioned)

mysql-test/r/partition_symlink.result:
  Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY
  
  updated result file
mysql-test/t/partition_symlink.test:
  Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY
  
  Fix for embedded
2008-08-26 16:31:30 +02:00
Ramil Kalimullin
d2541eac97 Merge 2008-08-26 18:53:22 +05:00