An error occurred fetching the project authors.
  1. 17 Nov, 2004 1 commit
    • unknown's avatar
      Fixes for compilation errors in Windows (casts from uint32* to uint*) in repl and charset code. · ab51882b
      unknown authored
      Moving the part of user_var.test using UCS2 to ctype_ucs.test
      
      
      mysql-test/r/ctype_ucs.result:
        result update
      mysql-test/r/user_var.result:
        result update
      mysql-test/t/ctype_ucs.test:
        importing test piece from user_var.test
      mysql-test/t/user_var.test:
        using UCS2 in this test fails on non-USC2-capable binaries, so let's move this piece to ctype_ucs.test.
      sql/slave.cc:
        changing arg type to uint32* (as what is used in this arg is &thd->db_length which is uint32*)
      sql/slave.h:
        changing arg type to uint32*
      sql/sql_parse.cc:
        changing arg types to uint32, as what is used in these args is a create_field::length which is uint32.
      ab51882b
  2. 14 Nov, 2004 1 commit
  3. 10 Nov, 2004 2 commits
    • unknown's avatar
      WL#1596 "make mysqldump --master-data --single-transaction able to do online... · 313ce62f
      unknown authored
      WL#1596 "make mysqldump --master-data --single-transaction able to do online dump of InnoDB AND report reliable
      binlog coordinates corresponding to the dump".
      The good news is that now mysqldump can be used to get an online backup of InnoDB *which works for
      point-in-time recovery and replication slave creation*. Formerly, mysqldump --master-data --single-transaction
      used to call in fact mysqldump --master-data, so the dump was not an online dump (took big lock all time of dump).
      The only lock which is now taken in this patch is at the beginning of the dump: mysqldump does:
      FLUSH TABLES WITH READ LOCK; START TRANSACTION WITH CONSISTENT SNAPSHOT; SHOW MASTER STATUS; UNLOCK TABLES;
      so the lock time is in fact the time FLUSH TABLES WITH READ LOCK takes to return (can be 0 or very long, if
      a table is undergoing a huge update).
      I have done some more minor changes listed in the paragraph of mysqldump.c.
      WL#2237 "WITH CONSISTENT SNAPSHOT clause for START TRANSACTION":
      it's a START TRANSACTION which additionally starts a consistent read on all
      capable storage engine (i.e. InnoDB). So, can serve as a replacement for
      BEGIN; SELECT * FROM some_innodb_table LIMIT 1; which starts a consistent read too. 
      
      
      client/mysqldump.c:
        Main change: mysqldump --single-transaction --master-data is now able to, at the same time,
        take an online dump of InnoDB (using consistent read) AND get the binlog position corresponding to this dump
        (before, using the two options used to silently cancel --single-transaction).
        This uses the new START TRANSACTION WITH CONSISTENT SNAPSHOT syntax.
        Additional changes: 
        a) cleanup:
         - DBerror calls exit() so some code was unneeded
         - no need to call COMMIT at end, leave disconnection do the job
         - mysql_query_with_error_report()
        b) requirements I had heard from colleagues:
         - --master-data now requires an argument, to comment out ("--") the CHANGE MASTER or not
           (commenting had been asked for point-in-time recovery when replication is not necessary).
         - --first-slave is renamed to --lock-all-tables
        c) more sensible behaviours (has been discussed internally):
         - if used with --master-data, --flush-logs is probably intended to get a flush synchronous
           with the dump, not one random flush per dumped db.
         - disabled automatic reconnection as, at least, SQL_MODE would be lost (and also, depending
           on options, LOCK TABLES, BEGIN, FLUSH TABLES WITH READ LOCK).
      include/mysqld_error.h:
        an error if START TRANSACTION WITH CONSISTENT SNAPSHOT is called and there is no consistent-read capable storage engine
        (idea ((C) PeterG) is that it's a bit like CREATE TABLE ENGINE=InnoDB when there is no support for InnoDB).
      sql/handler.cc:
        new ha_start_consistent_snapshot(), which, inside an existing transaction, starts a consistent read
        (offers an alternative to SELECTing any InnoDB table). Does something only for InnoDB.
        Warning if no suitable engine supported.
      sql/handler.h:
        declarations
      sql/lex.h:
        symbols for lex
      sql/share/czech/errmsg.txt:
        new message
      sql/share/danish/errmsg.txt:
        new message
      sql/share/dutch/errmsg.txt:
        new message
      sql/share/english/errmsg.txt:
        new message
      sql/share/estonian/errmsg.txt:
        new message
      sql/share/french/errmsg.txt:
        new message
      sql/share/german/errmsg.txt:
        new message
      sql/share/greek/errmsg.txt:
        new message
      sql/share/hungarian/errmsg.txt:
        new message
      sql/share/italian/errmsg.txt:
        new message
      sql/share/japanese/errmsg.txt:
        new message
      sql/share/korean/errmsg.txt:
        new message
      sql/share/norwegian-ny/errmsg.txt:
        new message
      sql/share/norwegian/errmsg.txt:
        new message
      sql/share/polish/errmsg.txt:
        new message
      sql/share/portuguese/errmsg.txt:
        new message
      sql/share/romanian/errmsg.txt:
        new message
      sql/share/russian/errmsg.txt:
        new message
      sql/share/serbian/errmsg.txt:
        new message
      sql/share/slovak/errmsg.txt:
        new message
      sql/share/spanish/errmsg.txt:
        new message
      sql/share/swedish/errmsg.txt:
        new message
      sql/share/ukrainian/errmsg.txt:
        new message
      sql/sql_lex.h:
        new option in lex (transaction options)
      sql/sql_parse.cc:
        warning comment (never make UNLOCK TABLES commit a transaction, please);
        support for starting consistent snapshot.
      sql/sql_yacc.yy:
        new clause WITH CONSISTENT SNAPSHOT (syntax ok'd by PeterG) for START TRANSACTION.
      313ce62f
    • unknown's avatar
      More debugging · 69bce9c6
      unknown authored
      Print position in normal log for Binlog dump
      
      
      dbug/dbug.c:
        Added DBUG_OUTPUT() to temporary start/stop trace-file output
        Optimized alignment of CODE_STATE structure
      include/my_dbug.h:
        Added DBUG_OUTPUT() to temporary start/stop trace-file output
      sql/field.cc:
        Safety fix when used with future 5.0 .frm tables
      sql/log.cc:
        More debugging
      sql/mysqld.cc:
        Fixed type
      sql/slave.cc:
        Fixed wrong cast (not a bug)
      sql/sql_class.h:
        More DBUG output
      sql/sql_parse.cc:
        Print position in normal log for Binlog dump
      69bce9c6
  4. 07 Nov, 2004 1 commit
    • unknown's avatar
      Simpler arena swapping code · 435b20aa
      unknown authored
      Now thd->mem_root is a pointer to thd->main_mem_root and THR_MALLOC is a pointer to thd->mem_root.
      This gives us the following benefits:
      - Allow us to easily detect if arena has already been swapped before (this fixes a bug in setup_conds() where arena was swaped twice in some cases)
      - Faster swaps of arenas (as we don't have to copy the whole MEM_ROOT)
      - We don't anymore have to call my_pthread_setspecific_ptr(THR_MALLOC,...) to change where memory is alloced. Now it's enough to set thd->mem_root
      
      
      
      client/mysqltest.c:
        Remove some not needed defines
        (Things like this should be done in config-win.h)
      include/config-win.h:
        Added popen() and pclose() compatibility macros
      mysql-test/t/rpl_failed_optimize-master.opt:
        Portability fix
      sql/ha_berkeley.cc:
        New thd->memroot handling
      sql/item_cmpfunc.cc:
        Simpler arena swapping code
      sql/item_func.cc:
        Simpler arena swapping code
      sql/item_subselect.cc:
        Simpler arena swapping code
        New thd->mem_root handling
      sql/item_sum.cc:
        New thd->mem_root handling
      sql/item_timefunc.cc:
        Fixed not-initalized usage errors found by valgrind
      sql/log_event.cc:
        New thd->mem_root handling
      sql/mysql_priv.h:
        New thd->mem_root handling
      sql/mysqld.cc:
        New thd->mem_root handling
      sql/opt_range.cc:
        New thd->mem_root handling
      sql/repl_failsafe.cc:
        New thd->mem_root handling
      sql/set_var.cc:
        New thd->mem_root handling
      sql/sql_acl.cc:
        New thd->mem_root handling
      sql/sql_base.cc:
        Simpler arena swapping code
        New thd->mem_root handling
      sql/sql_class.cc:
        New thd->mem_root handling
      sql/sql_class.h:
        Simpler arena swapping code
        New thd->mem_root handling
      sql/sql_db.cc:
        New thd->mem_root handling
      sql/sql_error.cc:
        New thd->mem_root handling
      sql/sql_help.cc:
        New thd->mem_root handling
      sql/sql_insert.cc:
        New thd->mem_root handling
      sql/sql_parse.cc:
        New thd->mem_root handling
        Added some extra checking of return value of new
      sql/sql_prepare.cc:
        New thd->mem_root handling
      sql/sql_select.cc:
        New thd->mem_root handling
      sql/sql_select.h:
        New thd->mem_root handling
      sql/sql_union.cc:
        Simpler arena swapping code
      sql/sql_yacc.yy:
        New thd->mem_root handling
      sql/table.cc:
        New thd->mem_root handling
      sql/thr_malloc.cc:
        New thd->mem_root handling
      tests/client_test.c:
        Added drop table to some tests
        Changed some table names to 't1'
      435b20aa
  5. 03 Nov, 2004 1 commit
    • unknown's avatar
      Fix for bug#5551 (Version 4). · 539e2130
      unknown authored
      The idea of the fix is that the administrative statements 
      OPTIMIZE TABLE, REPAIR TABLE and ANALYZE TABLE should not 
      generate binlog errors if there is no errors on the master.
      
      
      sql/sql_parse.cc:
        No binlog error generated
      sql/sql_table.cc:
        Documentation
      BitKeeper/etc/logging_ok:
        Logging to logging@openlogging.org accepted
      539e2130
  6. 29 Oct, 2004 1 commit
  7. 26 Oct, 2004 3 commits
    • unknown's avatar
      A lot of fixes for prepared statements (PS): · 853c2c78
      unknown authored
      New mysqltest that can run mysqltest with PS
      Added support for ZEROFILL in PS
      Fixed crash when one called mysql_stmt_store_result() without a preceding mysql_stmt_bind_result()
      Updated test cases to support --ps-protocol
      (Some tests are still run using old protocol)
      Fixed crash in PS when using SELECT * FROM t1 NATURAL JOIN t2...
      Fixed crash in PS when using sub queries
      Create table didn't signal when table was created. This could cause a "DROP TABLE created_table" in another thread to wait "forever"
      Fixed wrong permissions check in PS and multi-table updates (one could get permission denied for legal quries)
      Fix for PS and SELECT ... PROCEDURE
      Reset all warnings when executing a new PS query
      group_concat(...ORDER BY) didn't work with PS
      Fixed problem with test suite when not using innodb
      
      
      BitKeeper/deleted/.del-innodb-lock-master.opt~f76a4a1999728f87:
        Delete: mysql-test/t/innodb-lock-master.opt
      client/Makefile.am:
        mysqltest now uses regex
      client/mysqltest.c:
        Added support for testing of prepared statements (with --ps-protocol)
        Main code was done by Kent, I did mainly some cleanups and minor bug fixes
        New test commands:
        --disable_ps_protocol
        --enable_ps_protocol
        NOTE: new code still has some things that needs to be cleaned up.
        For example run_query_stmt_handle_error() should be made more general so that same code can be used also by 'normal' queries
      configure.in:
        mysqltest now uses regex
      libmysql/libmysql.c:
        Reset warning_count after prepare (safety). In the future we should also provide warnings on prepare
        integer -> string conversion now handles ZEROFILL
        double -> string conversion is now closer to the one in the server
        Fixed crash when one called mysql_stmt_store_result() without preceding mysql_stmt_bind_result()
      libmysqld/examples/Makefile.am:
        mysqltest now uses regex
      mysql-test/include/have_query_cache.inc:
        Fixes for --ps-protocol
      mysql-test/include/ps_conv.inc:
        Fixes for --ps-protocol
      mysql-test/mysql-test-run.sh:
        Added options --ps-protocol
      mysql-test/r/ctype_utf8.result:
        Fixed test case
      mysql-test/r/fulltext_cache.result:
        Changed output of MATCH to use round() to get same numbers with --ps-protocol
      mysql-test/r/fulltext_left_join.result:
        Changed output of MATCH to use round() to get same numbers with --ps-protocol
      mysql-test/r/fulltext_multi.result:
        Changed output of MATCH to use round() to get same numbers with --ps-protocol
      mysql-test/r/innodb-lock.result:
        Fixed test to work even if Innodb is not compiled in.
      mysql-test/t/create.test:
        Fixes for --ps-protocol
      mysql-test/t/ctype_utf8.test:
        Remove warnings
      mysql-test/t/date_formats.test:
        Fixes for --ps-protocol
      mysql-test/t/fulltext_cache.test:
        Changed output of MATCH to use round() to get same numbers with --ps-protocol
      mysql-test/t/fulltext_left_join.test:
        Changed output of MATCH to use round() to get same numbers with --ps-protocol
      mysql-test/t/fulltext_multi.test:
        Changed output of MATCH to use round() to get same numbers with --ps-protocol
      mysql-test/t/func_group.test:
        Fixes for --ps-protocol
      mysql-test/t/func_sapdb.test:
        Fixes for --ps-protocol
      mysql-test/t/innodb-lock.test:
        Fixed test to work even if Innodb is not compiled in.
      mysql-test/t/insert.test:
        Fixes for --ps-protocol
      mysql-test/t/insert_select.test:
        Fixes for --ps-protocol
      mysql-test/t/insert_update.test:
        Fixes for --ps-protocol
      mysql-test/t/metadata.test:
        Fixes for --ps-protocol
      mysql-test/t/multi_statement.test:
        Fixes for --ps-protocol
      mysql-test/t/ps_1general.test:
        Fixes for --ps-protocol
      mysql-test/t/rollback.test:
        Fixes for --ps-protocol
      mysql-test/t/rpl_redirect.test:
        Fixes for --ps-protocol
      mysql-test/t/rpl_user_variables.test:
        Fixes for --ps-protocol
      mysql-test/t/select.test:
        Fixes for --ps-protocol
      mysql-test/t/status.test:
        Fixes for --ps-protocol
      mysql-test/t/type_blob.test:
        Fixes for --ps-protocol
      mysql-test/t/type_float.test:
        Fixes for --ps-protocol
      mysql-test/t/union.test:
        Fixes for --ps-protocol
      mysql-test/t/warnings.test:
        Fixes for --ps-protocol
      mysys/my_alloc.c:
        More debugging information
      sql-common/client.c:
        More debugging information
      sql-common/my_time.c:
        TIME didn't support full range with PS
      sql/field.cc:
        TIME didn't support full range with PS
      sql/item_cmpfunc.cc:
        IN(constants,...) didn't work with PS
      sql/item_subselect.cc:
        Some subqueries didn't work with PS
      sql/item_sum.cc:
        group_concat(...ORDER BY) didn't work with PS
        Removed variable warning_available as 'warning' can be used for this.
      sql/item_sum.h:
        Removed not needed variable
      sql/protocol.cc:
        TIME didn't support full range with PS
      sql/set_var.cc:
        Style fix
      sql/sql_base.cc:
        setup_wild() didn't properly restore old arena, which caused core dump in PS when using
        SELECT * FROM t1 NATURAL JOIN t2...
      sql/sql_class.cc:
        Style fix
      sql/sql_error.cc:
        Style fix
      sql/sql_insert.cc:
        Create table didn't signal when table was created. This could cause a "DROP TABLE created_table" in another thread to wait "forever"
      sql/sql_lex.h:
        Fix for PS and procedures
      sql/sql_parse.cc:
        More debugging information
        Make a copy of 'db' in PS as this may change
        Fixed wrong permissions check in PS and multi-table updates
      sql/sql_prepare.cc:
        Fix for PS and SELECT ... PROCEDURE
        Reset all warnings when executing a new query
      sql/sql_union.cc:
        Fixes for PS and SELECT ... PROCEDURE
        Reset 'with_wild' as 'wild' is resolved on prepare
      853c2c78
    • unknown's avatar
      Bug 6206: ENUMs are not case sensitive even if declared BINARY · e948154c
      unknown authored
      The same problem with SET columns:
      
      find_set() now executes find_type2() to do charset aware search,
      instead of always using system_charset_info comparison.
      
      
      e948154c
    • unknown's avatar
      Reuse more code: two equal pieces for ENUM and SET where moved · 52da7eb8
      unknown authored
      into a function.
      
      
      52da7eb8
  8. 25 Oct, 2004 1 commit
  9. 24 Oct, 2004 1 commit
  10. 22 Oct, 2004 5 commits
    • unknown's avatar
      be6e299a
    • unknown's avatar
      After merge fixes · af84ae00
      unknown authored
      af84ae00
    • unknown's avatar
      Fix compiler warnings (detected by Intel's C++ compiler) · bc6652db
      unknown authored
      Fixed checking of privilege handling in CREATE ... SELECT (Bug #6094)
      
      
      client/mysql.cc:
        Fix compiler warnings
      client/mysqltest.c:
        Fix wrong counting of lines
        Remove compiler warnings
      heap/hp_hash.c:
        Fix compiler warnings
      innobase/dict/dict0load.c:
        Fix compiler warnings
      innobase/include/mem0mem.h:
        Fix compiler warnings
      libmysql/client_settings.h:
        Fix compiler warnings
      myisam/ft_nlq_search.c:
        Add comments about compiler warnings
      myisam/rt_index.c:
        Add comments about compiler warnings
      myisam/rt_mbr.c:
        Add comments about compiler warnings
      mysql-test/r/ps.result:
        Test case for bug#6094
      mysql-test/t/ps.test:
        Test case for bug#6094
      mysys/hash.c:
        Fix compiler warnings
      mysys/my_handler.c:
        Add comments about compiler warnings
      mysys/my_thr_init.c:
        Add comments about compiler warnings
      ndb/include/mgmapi/mgmapi.h:
        Fix compiler warnings
      regex/main.c:
        Fix compiler warnings
      sql/item.h:
        Fix compiler warnings
      sql/item_func.h:
        Add comments about compiler warnings
      sql/spatial.h:
        Add comments about compiler warnings
      sql/sql_lex.h:
        Fix compiler warning
      sql/sql_list.h:
        Fix compiler warning
      sql/sql_parse.cc:
        Move testing of access rights of tables in CREATE ... SELECT to create_table_precheck() to fix privilege checking in CREATE ... SELECT
        (Bug #6094)
      sql/sql_prepare.cc:
        Remove not needed empty line
      sql/sql_string.h:
        Fix compiler warnings
      strings/ctype-mb.c:
        Fix compiler warnings
      bc6652db
    • unknown's avatar
      Part of fix for bug #6081 "Call to deprecated mysql_create_db() function · dd126ba1
      unknown authored
      crashes server"
      
      (in 4.0 we fix only connection stalling in case of error, crash itself is
      fixed in 4.1, the test case for this code is also there).
      
      
      sql/sql_parse.cc:
        Handling of COM_CREATE_DB, COM_DROP_DB:
        We should call send_error() if mysql_create_db or mysql_drop_db
        return error (like we do it for SQL versions of these commands).
      dd126ba1
    • unknown's avatar
      sql_parse.cc: · d71efcfd
      unknown authored
        Bug#6167 One element missing in 'uc_update_queries[]'
      
      
      sql/sql_parse.cc:
        Bug#6167 One element missing in 'uc_update_queries[]'
      d71efcfd
  11. 21 Oct, 2004 1 commit
    • unknown's avatar
      Fix for bug #6116 "SET time_zone := ... requires access to · 8537cf2f
      unknown authored
      mysql.time_zone* tables".
      
      We are excluding implicitly used time zone tables from privilege
      checking.
      
      
      mysql-test/r/timezone2.result:
        Added test for bug #6116 "SET time_zone := ... requires access to 
        mysql.time_zone tables"
      mysql-test/t/timezone2.test:
        Added test for bug #6116 "SET time_zone := ... requires access to 
        mysql.time_zone tables"
      sql/sql_parse.cc:
        check_table_access(): we should avoid privilege checking for implicitly
        used time zone tables.
      sql/tztime.cc:
        Indicated dependancy between my_tz_get_table_list() function and
        my_tz_check_n_skip_implicit_tables() function.
      sql/tztime.h:
        Added my_tz_check_n_skip_implicit_tables() function which allows easily
        determine whenever we have found beggining of the list of implicitly used
        time zone tables and fast-forward to its end.
      8537cf2f
  12. 20 Oct, 2004 1 commit
    • unknown's avatar
      Fix for bug #6173 "One can circumvent missing UPDATE privilege if · b88150c9
      unknown authored
      he has SELECT and INSERT privileges for table with primary key"
      
      Now we set lex->duplicates= DUP_UPDATE right in parser if INSERT has
      ON DUPLICATE KEY UPDATE clause, this simplifies insert_precheck()
      function (this also fixes a bug) and some other code.
      
      
      mysql-test/r/grant2.result:
        Added test for bug #6173 "One can circumvent missing UPDATE privilege if
        he has SELECT and INSERT privileges for table with primary key"
      mysql-test/t/grant2.test:
        Added test for bug #6173 "One can circumvent missing UPDATE privilege if
        he has SELECT and INSERT privileges for table with primary key"
      sql/mysql_priv.h:
        insert_precheck() don't need "update" parameter any longer since
        now we set lex->duplicates to DUP_UPDATE if INSERT has ON DUPLICATE
        KEY UPDATE clause.
      sql/sql_parse.cc:
        insert_precheck() don't need "update" parameter any longer since
        now we set lex->duplicates to DUP_UPDATE if INSERT has ON DUPLICATE
        KEY UPDATE clause, so it can determine whenever it is needed to
        require UPDATE_ACL by itself. Also calling of mysql_insert() is
        simplified.
      sql/sql_prepare.cc:
        insert_precheck() don't need "update" parameter any longer since
        now we set lex->duplicates to DUP_UPDATE if INSERT has ON DUPLICATE
        KEY UPDATE clause, so it can determine whenever it is needed to
        require UPDATE_ACL by itself. Also calling of mysql_insert() is
        simplified.
      sql/sql_yacc.yy:
        It is better to set Lex->duplicates= DUP_UPDATE right in parser if we
        have INSERT with ON DUPLICATE KEY UPDATE clause, rather doing this later.
      b88150c9
  13. 19 Oct, 2004 1 commit
  14. 17 Oct, 2004 1 commit
    • unknown's avatar
      Fix for bug #6081 "Call to deprecated mysql_create_db() function crashes · 07c7aadf
      unknown authored
      server".
      
      Altough mysql_create_db()/mysql_drop_db() API calls are deprecated
      since 4.0, they should not crash server and should not stall connection
      in case of errors. 
      
      
      sql/sql_parse.cc:
        Handling of COM_CREATE_DB, COM_DROP_DB:
          mysql_create_db() requires from its second parameter to be non-zero.
          We also should call send_error() if mysql_create_db or mysql_drop_db
          return error (like we do it for SQL versions of these commands).
      tests/client_test.c:
        Added test for bug #6081 "Execution of deprecated mysql_create_db()
        crashes server".
      07c7aadf
  15. 14 Oct, 2004 2 commits
    • unknown's avatar
      true,false -> TRUE, FALSE · 33073189
      unknown authored
      Simple fixes/optimization of things discovered during review of new pushed code
      
      
      include/my_sys.h:
        Ensure that clear_alloc_root() interacts correctly with alloc_root_inited()
      mysys/hash.c:
        More comments
        Simple optimization (merge identical code)
      mysys/my_bitmap.c:
        Change inline -> static inline
      sql/examples/ha_archive.cc:
        Fixed compiler warning
      sql/ha_ndbcluster.cc:
        true,false -> TRUE, FALSE
        Change if (false) -> #ifdef NOT_USED
      sql/ha_ndbcluster.h:
        true,false -> TRUE, FALSE
      sql/handler.cc:
        More comments
        Remove not needed initializations.
        #ifdef not used code
      sql/item_cmpfunc.h:
        true,false -> TRUE, FALSE
      sql/item_strfunc.cc:
        Move local variables to function beginning
        Remove wrong comments
      sql/log_event.h:
        true,false -> TRUE, FALSE
      sql/sql_base.cc:
        true,false -> TRUE, FALSE
        More comments
      sql/sql_help.cc:
        true,false -> TRUE, FALSE
      sql/sql_lex.cc:
        Simple optimization of new code
      sql/sql_parse.cc:
        true,false -> TRUE, FALSE
      sql/sql_prepare.cc:
        true,false -> TRUE, FALSE
      sql/sql_table.cc:
        true,false -> TRUE, FALSE
      sql/sql_yacc.yy:
        true,false -> TRUE, FALSE
      33073189
    • unknown's avatar
      we can't rely on current variables implementation, so have to use String... · 8141b058
      unknown authored
      we can't rely on current variables implementation, so have to use String pointer returned by val_str
      fixed handling errors in case of out of memory in SQL interfase of prepared statements
      
      
      
      8141b058
  16. 13 Oct, 2004 2 commits
    • unknown's avatar
      761ae02c
    • unknown's avatar
      A fix and test case for Bug#5985 ""prepare stmt from "select rand(?)" · 54b00f54
      unknown authored
      crashes server." The fix makes Item_func_rand prepared-statements
      aware plus it fixes the case when RAND is used in prepared
      statements and replication is on (as well as several similar issues).
      Until now we did not reset THD before every execution of a prepared
      statement, so if some execution had set thd->time_zone_used
      or thd->rand_used they would not be reset until next mysql_parse.
      Some of post-review fixes done.
      
      
      mysql-test/r/ps.result:
        A test case for Bug#5985: test results fixed.
      mysql-test/t/ps.test:
        A test case for Bug#5985 "prepare stmt from "select rand(?)" crashes
        server."
      sql/item_func.cc:
        Actual fix for Bug#5985: Item_func_rand rewritten to be 
        prepared statements aware.
      sql/item_func.h:
        Actual fix for Bug#5985: Item_func_rand rewritten to be 
        prepared statements aware.
      sql/mysql_priv.h:
        We need a separate call to reset THD state before every execute of
        a prepared statement. Otherwise things like THD->user_var_events
        are never cleaned up and bloat binary log (as the list of events
        grows from execution to execution).
      sql/sql_class.cc:
        Statement::end_statement -> THD::end_statement()
        (a leftover from some design change which is not to pushed now, but the
        leftover is to be pushed).
      sql/sql_class.h:
        Statement::end_statement -> THD::end_statement()
        (a leftover from some design change which is not to pushed now, but the
        leftover is to be pushed).
      sql/sql_lex.cc:
        Move the part responsible for initializing LEX from mysql_init_query
        to lex_start.
      sql/sql_lex.h:
        All lex-related initialization is now in lex_start.
        Move thd->select_number to lex->select_number to be able to use it
        easily in lex_start.
      sql/sql_parse.cc:
        Split mysql_init_query into two functions: mysql_reset_thd_for_next_query,
        which is used in PS and conventional execution, and lex_start, used only
        when we want to parse something.
        Fix init_connect to use initialized THD.
      sql/sql_prepare.cc:
        Deploy mysql_reset_thd_for_next_query to reset THD state before
        execution of a prepared statement.
        Normally this should have been added to just one place, but
        we have to reset thd before assigning placeholders from variables,
        thus we can't do that in execute_stmt (yuck).
      54b00f54
  17. 07 Oct, 2004 1 commit
    • unknown's avatar
      A fix for Bug#5748 "Prepared statement with BETWEEN and bigint values · 8fa6f37a
      unknown authored
      crashes mysqld": implementation for a generic item tree modifications
      registry. Every item tree modification which should be rolled back for
      subsequent execution of a prepared statement or stored procedure should
      be saved in the registry. All such modifications are rolled back at once
      during cleanup stage of PS.
      Actual fix for the bug just adds a call to register modifications to
      convert_constant_item.
      Post review fixes implemented.
      
      
      mysql-test/r/ps.result:
        A fix for bug#5748, test results fixed.
      mysql-test/t/ps.test:
        A test case for Bug#5748 "Prepared statement with BETWEEN and bigint 
        values crashes mysqld"
      sql/item.cc:
        Fix for Bug#5748 "Prepared statement with BETWEEN and bigint values
        crashes mysqld":
        First step in removing up item-specific cleanups: now all such
        tree modifications should be done using the genericm mechanism implemented
        in this changeset.
      sql/item.h:
        Fix for Bug#5748 "Prepared statement with BETWEEN and bigint values
        crashes mysqld": no need for an item-specific change record any more.
      sql/item_cmpfunc.cc:
        A fix for Bug#5748 "Prepared statement with BETWEEN and bigint 
        values crashes mysqld": register item tree transformation performed by
        convert_constant_item.
      sql/sql_class.cc:
        Implementation for item tree transformations registry.
      sql/sql_class.h:
        Declarations, necessary for the tree transformations registry.
      sql/sql_parse.cc:
        Assert that the item tree transformations registry is not used for 
        conventional execution.
      sql/sql_prepare.cc:
        Use of the item tree modifications registry in prepared statements:
        rollback all modifications in the end of statement prepare and execute.
        Also we now always set thd->current_arena to be able to determine that
        this is an execution of prepared statement inside the registry code.
      tests/client_test.c:
        A typo fixed.
      8fa6f37a
  18. 04 Oct, 2004 1 commit
    • unknown's avatar
      Made TIMESTAMP NULL columns without explicit DEFAULT value to be always · 76c9e10e
      unknown authored
      treated as DEFAULT NULL columns (independently from their position in
      table).
      
      (still to be discussed with Monty, Brian, Trudy et al. before push)
      
      
      mysql-test/r/type_timestamp.result:
        Update test after making TIMESTAMP NULL columns without explicit 
        DEFAULT value to be always treated as DEFAULT NULL columns 
        (independently from their position in table).
      mysql-test/t/type_timestamp.test:
        Update test after making TIMESTAMP NULL columns without explicit 
        DEFAULT value to be always treated as DEFAULT NULL columns 
        (independently from their position in table).
      sql/sql_parse.cc:
        add_field_to_list(): made TIMESTAMP NULL columns without explicit 
        DEFAULT value to be always treated as DEFAULT NULL columns (independently
        from their position in table). This also simplifies code a bit.
      76c9e10e
  19. 02 Oct, 2004 1 commit
    • unknown's avatar
      Bug#4118: multi-table UPDATE takes WRITE lock on read table · a49f5cae
      unknown authored
        Ensures that WRITE lock is not obtained on all tables referenced.
      
      
      mysql-test/r/lock_multi.result:
        Bug#4118
          New test for multi-update locking
      mysql-test/r/multi_update.result:
        Bug#4118
          Fix test
      mysql-test/t/lock_multi.test:
        Bug#4118
          New test for multi-update locking
      mysql-test/t/multi_update.test:
        Bug#4118
          Fix test
      sql/sql_parse.cc:
        Bug#4118
          Split multi-update to its own case statement in sql_parse.cc
      sql/sql_update.cc:
        Bug#4118
          Overview of locking checking:    
            1. Open and acquire READ lock
            2. Check to see which tables need WRITE lock
            3. Unlock tables and relock
      sql/sql_yacc.yy:
        Bug#4118
          Split multi-update to its own case statement in sql_parse.cc
      a49f5cae
  20. 01 Oct, 2004 1 commit
    • unknown's avatar
      Support for TIMESTAMP columns holding NULL values. Unlike all other · 7b511544
      unknown authored
      column types TIMESTAMP is NOT NULL by default, so in order to have 
      TIMESTAMP column holding NULL valaues you have to specify NULL as
      one of its attributes (this needed for backward compatibility).
      
      Main changes:
      Replaced TABLE::timestamp_default_now/on_update_now members with
      TABLE::timestamp_auto_set_type flag which is used everywhere
      for determining if we should auto-set value of TIMESTAMP field 
      during this operation or not. We are also use Field_timestamp::set_time()
      instead of handler::update_timestamp() in handlers.
      
      
      mysql-test/r/type_timestamp.result:
        Added test for TIMESTAMP columns which are able to store NULL values.
      mysql-test/t/type_timestamp.test:
        Added test for TIMESTAMP columns which are able to store NULL values.
      sql/field.cc:
        Added support for TIMESTAMP fields holding NULL values.
        We don't need Field_timestamp::set_timestamp_offsets() anymore.
        Instead we need Field_timestamp::get_auto_set_type() function
        which will convert TIMESTAMP auto-set type stored in Field in 
        unireg_check to value from timestamp_auto_set_type_enum.
        (We can't replace this function with additional Field_timestamp member
        and some code in constructor because then we will have troubles
        with Field::new_field() method).
        We should also set field to not null in Field_timestamp::set_time() now.
      sql/field.h:
        Added support for TIMESTAMP fields holding NULL values.
        We don't need Field_timestamp::set_timestamp_offsets() anymore.
        Instead we need Field_timestamp::get_auto_set_type() function,
        which will convert TIMESTAMP auto-set type stored in Field in 
        unireg_check to value from timestamp_auto_set_type_enum.
        We also have to support NULL values in Field_timestamp::get_timestamp()
        function.
      sql/field_conv.cc:
        Added comment clarifying behavior in case of TIMESTAMP fields which are
        able to store NULL values.
      sql/ha_berkeley.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/ha_heap.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/ha_innodb.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/ha_isam.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/ha_isammrg.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/ha_myisam.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/ha_myisammrg.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/ha_ndbcluster.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now for determining 
        if we should auto-set value of TIMESTAMP field during this operation.
        We are also use Field_timestamp::set_time() instead of 
        handler::update_timestamp().
      sql/handler.cc:
        handler::update_timestamp() is no longer needed since now we use
        Field_timestamp::set_time() instead.
        (we can't use handler::update_timestamp() anyway since field position
        only is not enough for TIMESTAMP fields which are able to store NULLs)
      sql/handler.h:
        handler::update_timestamp() is no longer needed since now we use
        Field_timestamp::set_time() instead.
      sql/item_timefunc.cc:
        Since now TIMESTAMP fields can hold NULL values we should take this into
        account.
      sql/sql_base.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now. 
        (Here we use Field_timestamp::get_auto_set_type() to setup its value
         before further statement execution).
      sql/sql_insert.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now.
      sql/sql_load.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now.
      sql/sql_parse.cc:
        Added support for TIMESTAMP fields holding NULL values.
        We should distinguish NULL default values and non-specified default
        values for such fields (because latter could mean DEFAULT NOW()
        ON UPDATE NOW() in some cases).
      sql/sql_show.cc:
        Added support for TIMESTAMP fields holding NULL values.
        Unlike all other fields these are NOT NULL by default
        so we have to specify NULL attribute explicitly for them.
      sql/sql_table.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now.
      sql/sql_update.cc:
        Now we use TABLE::timestamp_field_type instead of 
        TABLE::timestamp_default_now/on_update_now.
      sql/sql_yacc.yy:
        Added support for TIMESTAMP fields holding NULL values.
        Unlike all other fields these are NOT NULL by default
        (so we have to set NOT_NULL_FLAG properly for them).
      sql/table.h:
        Added timestamp_auto_set_type enum which values are used for indicating
        during which operations we should automatically set TIMESTAPM field
        value to current timestamp.
        TABLE: Replaced timestamp_default_now/on_update_now members with
        timestamp_auto_set_type flag (Now when TIMESTAMP field are able to 
        store NULL values, single position of field in record is not enough 
        for updating this field anyway).
      7b511544
  21. 26 Sep, 2004 1 commit
    • unknown's avatar
      Fix for bug #4131 "TIMESTAMP columns missing minutes and seconds when · e6f924ef
      unknown authored
      using GROUP BY"
      Now we are setting Field_timestamp::field_length to 19 in open_table()
      if we are in new mode (and we are restoring it back when we are coming
      back to normal mode). This also should solve potential problems with
      some of LOAD DATA INFILE and SELECT * INTO in this mode.
      
      
      mysql-test/r/type_timestamp.result:
        Added test for bug #4131 'TIMESTAMP columns missing minutes and seconds
        when using GROUP BY' and other --new mode related behavior.
      mysql-test/t/type_timestamp.test:
        Added test for bug #4131 'TIMESTAMP columns missing minutes and seconds
        when using GROUP BY' and other --new mode related behavior.
      sql/field.cc:
        Added Field_timestamp::orig_field_length member for saving original
        field_length value, because this member can be modified if new_mode is
        in effect.
        Lot of Field_timestamp code simplified and Field_timestamp::make_field()
        is no longer needed because we are setting field_length to 19 if we are
        in --new mode now.
      sql/field.h:
        Added Field_timestamp::orig_field_length member for saving original
        field_length value, because this member can be modified if new_mode
        is in effect. 
        Field_timestamp::make_field() is no longer needed because we are setting
        field_length to 19 if we are in --new mode now.
      sql/sql_base.cc:
        If --new mode is in effect all TIMESTAMP fields should pretend that they
        have length of 19. We are achieving this by setting 
        Field_timestamp::field_length to 19 (or original value) in open_table().
        We are using TABLE::timestamp_mode variable for avoiding of unnecessary
        looping over all fields of the table and setting field_length if table
        was used with same new_mode value before.
        
        Note: We do not introduce general framework for setting up Field objects
        for usage with current THD here because this fix is only needed in 4.0
        and Monty said that we will also remove looping over all fields when
        updating table_name member at some point. This more general framework
        will also complicate nice optimization with avoiding of unneeded looping.
      sql/sql_parse.cc:
        Now when we are creating TIMESTAMP(19) fields by default in --new mode,
        otherwise we will have unaligned behavior between ALTER and CREATE.
      sql/table.h:
        Added TABLE::timestamp_mode field for saving information whenever we set 
        field_length members of table's TIMESTAMP fields to 19 (to honor 
        new_mode) or they have original values.
      e6f924ef
  22. 16 Sep, 2004 1 commit
  23. 13 Sep, 2004 1 commit
  24. 10 Sep, 2004 1 commit
    • unknown's avatar
      BUG#4788 - show create table provides incorrect statement. · 7c80446c
      unknown authored
      Added code to adjust the field_length of user variables 
      in dependence on the field type.
      Aded new constants for numeric field widths.
      
      
      include/mysql_com.h:
        BUG#4788 - show create table provides incorrect statement.
        Introduced definitions for default field width of numeric types.
        So common values can be used at different places in the code.
      mysql-test/r/variables.result:
        BUG#4788 - show create table provides incorrect statement.
        New test results.
      mysql-test/t/variables.test:
        BUG#4788 - show create table provides incorrect statement.
        Added a test for the bug.
      sql/item_func.cc:
        BUG#4788 - show create table provides incorrect statement.
        Added code to adjust the field_length of user variables 
        in dependence on the field type.
      sql/sql_parse.cc:
        BUG#4788 - show create table provides incorrect statement.
        Changed numeric literals to the new constants.
      7c80446c
  25. 08 Sep, 2004 1 commit
    • unknown's avatar
      check that table used in multi-update is unique added (BUG#5455) · 6c233040
      unknown authored
      mysql-test/r/multi_update.result:
        multi* unique updating table check
      mysql-test/t/multi_update.test:
        multi* unique updating table check
      sql/sql_lex.cc:
        new method to check table only in subqueries
      sql/sql_lex.h:
        new method to check table only in subqueries
      sql/sql_parse.cc:
        used new method to check table only in subqueries
      sql/sql_update.cc:
        check that table is unique added
      6c233040
  26. 04 Sep, 2004 1 commit
  27. 31 Aug, 2004 1 commit
    • unknown's avatar
      after review patch · 1dc52f07
      unknown authored
      mysql-test/r/negation_elimination.result:
        new tests of negation elimination
      mysql-test/t/negation_elimination.test:
        new tests of negation elimination
      sql/item.h:
        test of boolean functions added
      sql/item_cmpfunc.cc:
        NOT subtree is already checked, so wee need to return just argument
      sql/item_cmpfunc.h:
        test of boolean functions added
      sql/mysql_priv.h:
        'place' to detect WHERE clause
      sql/sql_parse.cc:
        function for creation negated expression
      sql/sql_select.cc:
        removed unused function
      sql/sql_select.h:
        removed unused function
      sql/sql_yacc.yy:
        'place' to detect WHERE clause
      1dc52f07
  28. 27 Aug, 2004 1 commit
  29. 25 Aug, 2004 1 commit
    • unknown's avatar
      Remove default argument to mysql_truncate() · 8ed5952a
      unknown authored
      Update to new valgrind
      
      
      mysql-test/mysql-test-run.sh:
        Update for new valgrind
      sql/mysql_priv.h:
        Remove default argument to mysql_truncate()
      sql/sql_parse.cc:
        Remove default argument to mysql_truncate()
      8ed5952a
  30. 24 Aug, 2004 1 commit
    • unknown's avatar
      Fix for Bug#5034 "prepared "select 1 into @arg15", second · 49bd559e
      unknown authored
      execute crashes server": we were deleting lex->result
      after each execute, but prepared statements assumed that
      it's left intact.
      The fix adds cleanup() method to select_result hierarchy,
      so that result objects can be reused.
      Plus we now need to delete result objects more wisely.
      
      
      mysql-test/r/ps.result:
        Test results fixed: test case for bug#5034
      mysql-test/t/ps.test:
        A test case for bug#5034, few followups
      sql/sql_class.cc:
        - fix warning in THD::THD
        - implementation of cleanup() for select_result hierarchy
        - select_export::send_eof was identical to 
          select_dump::send_eof: moved to the base class select_to_file.
        - Statement::end_statement() to end lex, free items, and
          delete possible select_result
      sql/sql_class.h:
        - select_result::cleanup() declaration
        -
      sql/sql_insert.cc:
        - implementation of select_insert::cleanup(): currently
          we always create a new instance of select_insert/
          select_create on each execute.
      sql/sql_lex.cc:
        - with more complicated logic of freeing lex->result it's 
          easier to have it non-zero only if it points to a valid
          result.
      sql/sql_lex.h:
        Now st_lex::st_lex is not empty.
      sql/sql_parse.cc:
        mysql_execute_command():
        - delete select_result *result only if it was created in
          this function.
        - use end_statement() to cleanup lex and thd in the end of
          each statement.
        - no need to save THD::lock if this is explain. This save
          apparently left from times when derived tables were 
          materialized here, not in open_and_lock_tables.
      sql/sql_prepare.cc:
        - call result->cleanup() in reset_stmt_for_execute
        - now Statement is responsible for freeing its lex->result.
      sql/sql_select.cc:
        handle_select():
        - don't delete result, it might be needed
          for next executions
        - result is never null
      49bd559e
  31. 20 Aug, 2004 1 commit
    • unknown's avatar
      Fix for bug#4912 "mysqld crashs in case a statement is executed · 095b686c
      unknown authored
       a second time". The bug was caused by incompatibility of
      negations elimination algorithm and PS: during first statement 
      execute a subtree with negation was replaced with equivalent 
      subtree without NOTs.
      The problem was that although this transformation was permanent, 
      items of the new subtree were created in execute-local memory.
      The patch adds means to check if it is the first execute of a
      prepared statement, and if this is the case, to allocate items
      in memory of the prepared statement.
      The implementation:
      - backports Item_arena from 5.0
      - adds Item_arena::is_stmt_prepare(), 
        Item_arena::is_first_stmt_execute().
      - deletes THD::allocate_temporary_pool_for_ps_preparing(),
        THD::free_temporary_pool_for_ps_preparing(); they
        were redundant.
      and adds a few invariants:
      - thd->free_list never contains junk (= freed items)
      - thd->current_arena is never null. If there is no
        prepared statement, it points at the thd. 
      The rest of the patch contains mainly mechanical changes and
      cleanups.
      
      
      mysql-test/r/ps.result:
        Test results updated (test case for Bug#4912)
      mysql-test/t/ps.test:
        A test case for Bug#4912 "mysqld crashs in case a statement is 
        executed a second time"
      sql/item_cmpfunc.cc:
        current_statement -> current_arena
      sql/item_subselect.cc:
        Statement -> Item_arena, current_statement -> current_arena
      sql/item_subselect.h:
        Item_subselect does not need to save thd->current_statement.
      sql/item_sum.cc:
        Statement -> Item_arena
      sql/item_sum.h:
        Statement -> Item_arena
      sql/mysql_priv.h:
        Statement -> Item_arena
      sql/sql_base.cc:
        current_statement -> current_arena
      sql/sql_class.cc:
        - Item_arena
        - convenient set_n_backup_statement, restore_backup_statement
        (nice idea, Sanja)
      sql/sql_class.h:
        - Item_arena: backport from 5.0
        - allocate_temporary_pool_for_ps_preparing,
          free_temporary_pool_for_ps_preparing removed.
      sql/sql_derived.cc:
        current_statement -> current_arena
      sql/sql_lex.cc:
        current_statement -> current_arena
      sql/sql_parse.cc:
        Deploy invariant that thd->free_list never contains junk items
        (backport from 5.0).
      sql/sql_prepare.cc:
        - backporting Item_arena
        - no need to allocate_temporary_pool_for_ps_preparing().
      sql/sql_select.cc:
        Fix for bug#4912 "mysqld crashs in case a statement is 
        executed a second time": if this is the first execute of
        a prepared statement, negation elimination is
        done in memory of the prepared statement.
      sql/sql_union.cc:
        Backporting Item_arena from 5.0.
      095b686c