1. 07 Mar, 2007 1 commit
    • unknown's avatar
      A fix for Bug#26750 "valgrind leak in sp_head" (and post-review · b4558c5d
      unknown authored
      fixes).
      
      The legend: on a replication slave, in case a trigger creation
      was filtered out because of application of replicate-do-table/
      replicate-ignore-table rule, the parsed definition of a trigger was not 
      cleaned up properly. LEX::sphead member was left around and leaked 
      memory. Until the actual implementation of support of 
      replicate-ignore-table rules for triggers by the patch for Bug 24478 it 
      was never the case that "case SQLCOM_CREATE_TRIGGER"
      was not executed once a trigger was parsed,
      so the deletion of lex->sphead there worked and the memory did not leak.
      
      The fix: 
      
      The real cause of the bug is that there is no 1 or 2 places where
      we can clean up the main LEX after parse. And the reason we 
      can not have just one or two places where we clean up the LEX is
      asymmetric behaviour of MYSQLparse in case of success or error. 
      
      One of the root causes of this behaviour is the code in Item::Item()
      constructor. There, a newly created item adds itself to THD::free_list
      - a single-linked list of Items used in a statement. Yuck. This code
      is unaware that we may have more than one statement active at a time,
      and always assumes that the free_list of the current statement is
      located in THD::free_list. One day we need to be able to explicitly
      allocate an item in a given Query_arena.
      Thus, when parsing a definition of a stored procedure, like
      CREATE PROCEDURE p1() BEGIN SELECT a FROM t1; SELECT b FROM t1; END;
      we actually need to reset THD::mem_root, THD::free_list and THD::lex
      to parse the nested procedure statement (SELECT *).
      The actual reset and restore is implemented in semantic actions
      attached to sp_proc_stmt grammar rule.
      The problem is that in case of a parsing error inside a nested statement
      Bison generated parser would abort immediately, without executing the
      restore part of the semantic action. This would leave THD in an 
      in-the-middle-of-parsing state.
      This is why we couldn't have had a single place where we clean up the LEX
      after MYSQLparse - in case of an error we needed to do a clean up
      immediately, in case of success a clean up could have been delayed.
      This left the door open for a memory leak.
      
      One of the following possibilities were considered when working on a fix:
      - patch the replication logic to do the clean up. Rejected
      as breaks module borders, replication code should not need to know the
      gory details of clean up procedure after CREATE TRIGGER.
      - wrap MYSQLparse with a function that would do a clean up.
      Rejected as ideally we should fix the problem when it happens, not
      adjust for it outside of the problematic code.
      - make sure MYSQLparse cleans up after itself by invoking the clean up
      functionality in the appropriate places before return. Implemented in 
      this patch.
      - use %destructor rule for sp_proc_stmt to restore THD - cleaner
      than the prevoius approach, but rejected
      because needs a careful analysis of the side effects, and this patch is 
      for 5.0, and long term we need to use the next alternative anyway
      - make sure that sp_proc_stmt doesn't juggle with THD - this is a 
      large work that will affect many modules.
      
      Cleanup: move main_lex and main_mem_root from Statement to its
      only two descendants Prepared_statement and THD. This ensures that
      when a Statement instance was created for purposes of statement backup,
      we do not involve LEX constructor/destructor, which is fairly expensive.
      In order to track that the transformation produces equivalent 
      functionality please check the respective constructors and destructors
      of Statement, Prepared_statement and THD - these members were
      used only there.
      This cleanup is unrelated to the patch.
      
      
      sql/log_event.cc:
        THD::main_lex is private and should not be used.
      sql/mysqld.cc:
        Move MYSQLerror to sql_yacc.yy as it depends on LEX headers now.
      sql/sql_class.cc:
        Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
      sql/sql_class.h:
        Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
      sql/sql_lex.cc:
        Implement st_lex::restore_lex()
      sql/sql_lex.h:
        Declare st_lex::restore_lex().
      sql/sql_parse.cc:
        Consolidate the calls to unit.cleanup() and deletion of lex->sphead
        in mysql_parse (COM_QUERY handler)
      sql/sql_prepare.cc:
        No need to delete lex->sphead to restore memory roots now in case of a 
        parse error - this is done automatically inside MYSQLparse
      sql/sql_trigger.cc:
        This code could lead to double deletion apparently, as in case
        of an error lex.sphead was never reset.
      sql/sql_yacc.yy:
        Trap all returns from the parser to ensure that MySQL-specific cleanup
        is invoked: we need to restore the global state of THD and LEX in 
        case of a parsing error. In case of a parsing success this happens as 
        part of normal grammar reduction process.
      b4558c5d
  2. 24 Feb, 2007 1 commit
    • unknown's avatar
      item.cc: · c9d90c56
      unknown authored
        Post fix for bug#23800.
        The Item_field constructor now increases the select_n_where_fields counter.
      sql_yacc.yy:
        Post fix for bug#23800.
        Take into account fields that might be added by subselects.
      sql_lex.h:
        Post fix for bug#23800.
        Added the select_n_where_fields variable to the st_select_lex class.
      sql_lex.cc:
        Post fix for bug#23800.
        Initialization of the select_n_where_fields variable.
      
      
      sql/sql_lex.cc:
        Post fix for bug#23800.
        Initialization of the select_n_where_fields variable.
      sql/sql_lex.h:
        Post fix for bug#23800.
        Added the select_n_where_fields variable to the st_select_lex class.
      sql/item.cc:
        Post fix for bug#23800.
        The Item_field constructor now increases the select_n_where_fields counter.
      sql/sql_yacc.yy:
        Post fix for bug#23800.
        Take into account fields that might be added by subselects.
      c9d90c56
  3. 21 Feb, 2007 1 commit
    • unknown's avatar
      Bug#23800: Outer fields in correlated subqueries is used in a temporary table · 4410c83f
      unknown authored
      created for sorting.
      
      Any outer reference in a subquery was represented by an Item_field object.
      If the outer select employs a temporary table all such fields should be
      replaced with fields from that temporary table in order to point to the 
      actual data. This replacement wasn't done and that resulted in a wrong
      subquery evaluation and a wrong result of the whole query.
      
      Now any outer field is represented by two objects - Item_field placed in the
      outer select and Item_outer_ref in the subquery. Item_field object is
      processed as a normal field and the reference to it is saved in the
      ref_pointer_array. Thus the Item_outer_ref is always references the correct
      field. The original field is substituted for a reference in the
      Item_field::fix_outer_field() function.
      
      New function called fix_inner_refs() is added to fix fields referenced from
      inner selects and to fix references (Item_ref objects) to these fields.
      
      The new Item_outer_ref class is a descendant of the Item_direct_ref class.
      It additionally stores a reference to the original field and designed to
      behave more like a field.
      
      
      sql/item.cc:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        Now all outer fields are substituted with references to them (Item_outer_ref objects)
        in the Item_field::fix_outer_field() function.
        The original field is saved in the Item_outer_ref object.
      sql/item.h:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        Added the Item_outer_ref class.
      sql/mysql_priv.h:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        Added the fix_inner_refs() function prototype.
      sql/sql_delete.cc:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        Added call to the fix_inner_refs() function.
      sql/sql_select.cc:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        The new function called fix_inner_refs() is added.
      mysql-test/r/subselect.result:
        Added a test case for bug#23800: Correlated sub query returning incorrect results when
        operated upon.
      sql/sql_update.cc:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        Added call to the fix_inner_refs() function.
      mysql-test/r/subselect3.result:
        Corrected test cases result after fix for bug#23800: Correlated sub query returning
        incorrect results when operated upon.
      mysql-test/t/subselect.test:
        Added a test case for bug#23800: Correlated sub query returning incorrect results when
        operated upon.
      sql/sql_lex.cc:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        Added cleanup of the inner_refs_list.
      sql/sql_lex.h:
        Bug#23800: Correlated sub query returning incorrect results when operated upon.
        The inner_refs_list is added to the SELECT_LEX class.
      4410c83f
  4. 09 Feb, 2007 1 commit
    • unknown's avatar
      Bug#12122: The MERGE algorithm isn't applicable if the ORDER BY clause is · 94032c61
      unknown authored
      present.
      
      A view created with CREATE VIEW ... ORDER BY ... cannot be resolved with
      the MERGE algorithm, even when no other part of the CREATE VIEW statement
      would require the view to be resolved using the TEMPTABLE algorithm.
      
      The check for presence of the ORDER BY clause in the underlying select is 
      removed from the st_lex::can_be_merged() function.
      The ORDER BY list of the underlying select is appended to the ORDER BY list 
      
      
      mysql-test/t/view.test:
        Added a test case for bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
      mysql-test/r/view.result:
        Added a test case for bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
      sql/sql_lex.cc:
        Bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
        The st_lex::can_be_merged() function now allows views with the ORDER BY
        clause to be resolved using MERGE algorithm. The ORDER BY list of the view 
        is appended to the ORDER BY list of the embedding select.
      94032c61
  5. 04 Feb, 2007 1 commit
    • unknown's avatar
      BUG#25897: Some queries are no longer possible after a CREATE VIEW · 3f13ed66
      unknown authored
                 fails
      
      The bug was introduced with the push of the fix for bug#20953: after
      the error on view creation we never reset the error state, so some
      valid statements would give the same error after that.
      
      The solution is to properly reset the error state.
      
      
      mysql-test/r/view.result:
        Add result for bug#25897: Some queries are no longer possible after
        a CREATE VIEW fails.
      mysql-test/t/view.test:
        Add test case for bug#25897: Some queries are no longer possible after
        a CREATE VIEW fails.
      sql/sql_lex.cc:
        Add st_parsing_options::reset() method, call it from lex_start().
      sql/sql_lex.h:
        Add st_parsing_options::reset() method, call it from constructor.
      3f13ed66
  6. 19 Jan, 2007 1 commit
    • unknown's avatar
      Fixed bug #25219: crash for a query that contains an EXIST subquery with · da5a6981
      unknown authored
      UNION over correlated and uncorrelated SELECTS.
      In such subqueries each uncorrelated SELECT should be considered as
      uncacheable. Otherwise join_free is called for it and in many cases
      it causes some problems.
      
      
      mysql-test/r/subselect.result:
        Added a test case for bug #25219.
      mysql-test/t/subselect.test:
        Added a test case for bug #25219.
      sql/mysql_priv.h:
        Fixed bug #25219: crash for a query that contains an EXIST subquery with
        UNION over correlated and uncorrelated SELECTS.
        In such subqueries each uncorrelated SELECT should be considered as
        uncacheable. Otherwise join_free is called for it and in many cases
        it causes some problems. 
        Added a new flag UNCACHEABLE_UNITED for such SELECTs.
      sql/sql_lex.cc:
        Fixed bug #25219: crash for a query that contains an EXIST subquery with
        UNION over correlated and uncorrelated SELECTS.
        In such subqueries each uncorrelated SELECT should be considered as
        uncacheable. Otherwise join_free is called for it and in many cases
        it causes some problems.
        Added a new flag UNCACHEABLE_UNITED for such SELECTs.
      da5a6981
  7. 11 Jan, 2007 1 commit
    • unknown's avatar
      Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode. · 2dfff25e
      unknown authored
      Currently in the ONLY_FULL_GROUP_BY mode no hidden fields are allowed in the
      select list. To ensure this each expression in the select list is checked
      to be a constant, an aggregate function or to occur in the GROUP BY list.
      The last two requirements are wrong and doesn't allow valid expressions like
      "MAX(b) - MIN(b)" or "a + 1" in a query with grouping by a.
      
      The correct check implemented by the patch will ensure that:
      any field reference in the [sub]expressions of the select list 
        is under an aggregate function or
        is mentioned as member of the group list or
        is an outer reference or
        is part of the select list element that coincide with a grouping element.
      
      The Item_field objects now can contain the position of the select list
      expression which they belong to. The position is saved during the
      field's Item_field::fix_fields() call.
      
      The non_agg_fields list for non-aggregated fields is added to the SELECT_LEX
      class. The SELECT_LEX::cur_pos_in_select_list now contains the position in the
      select list of the expression being currently fixed.
      
      
      sql/item.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        The Item_field objects now contain the position of the select list
        expression which they belong to. The position is saved at the field's
        Item_field::fix_fields() call.
      sql/item.h:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        The Item_field objects now can store the position in the select list of the
        expression to which they are belongs to.
      sql/mysql_priv.h:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Added the UNDEF_POS constant.
      sql/sql_base.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Now the setup_fields() function maintains the cur_pos_in_select_list variable.
      sql/sql_lex.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Set the cur_pos_in_select_list variable and the non_agg_fields list to their initial state.
      sql/sql_lex.h:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        The non_agg_fields list for non-aggregated fields is added to the SELECT_LEX
        class. The SELECT_LEX::cur_pos_in_select_list now stores the position in the
        select list of the expression being currently fixed.
      sql/sql_select.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Each select now keeps the list of fields that aren't
        used under any aggregate function. If an expression from the select list
        isn't found in the GROUP BY list the setup_group() function additionally
        checks whether non-aggregated fields occur in that expression.
        If there at least one such field and it isn't found in the GROUP BY list
        then an error is thrown.
      sql/sql_union.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Clean up of the non_agg_fields list.
      mysql-test/r/group_by.result:
        Added a test case for the bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
      mysql-test/t/group_by.test:
        Added a test case for the bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
      2dfff25e
  8. 31 Dec, 2006 1 commit
    • unknown's avatar
      my_strtoll10-x86.s: · 19aa05de
      unknown authored
        Corrected spelling in copyright text
      Makefile.am:
        Don't update the files from BitKeeper
      Many files:
        Removed "MySQL Finland AB & TCX DataKonsult AB" from copyright header
        Adjusted year(s) in copyright header 
      Many files:
        Added GPL copyright text
      Removed files:
        Docs/Support/colspec-fix.pl
        Docs/Support/docbook-fixup.pl
        Docs/Support/docbook-prefix.pl
        Docs/Support/docbook-split
        Docs/Support/make-docbook
        Docs/Support/make-makefile
        Docs/Support/test-make-manual
        Docs/Support/test-make-manual-de
        Docs/Support/xwf
      
      
      CMakeLists.txt:
        Added GPL copyright text
      bdb/CMakeLists.txt:
        Added GPL copyright text
      client/CMakeLists.txt:
        Added GPL copyright text
      dbug/CMakeLists.txt:
        Added GPL copyright text
      extra/CMakeLists.txt:
        Added GPL copyright text
      extra/yassl/CMakeLists.txt:
        Added GPL copyright text
      extra/yassl/taocrypt/CMakeLists.txt:
        Added GPL copyright text
      heap/CMakeLists.txt:
        Added GPL copyright text
      innobase/CMakeLists.txt:
        Added GPL copyright text
      libmys...
      19aa05de
  9. 23 Dec, 2006 1 commit
    • unknown's avatar
      Many files: · 2d27fea5
      unknown authored
        Changed header to GPL version 2 only
      
      
      BUILD/Makefile.am:
        Changed header to GPL version 2 only
      Docs/Makefile.am:
        Changed header to GPL version 2 only
      Makefile.am:
        Changed header to GPL version 2 only
      SSL/Makefile.am:
        Changed header to GPL version 2 only
      bdb/Makefile.in:
        Changed header to GPL version 2 only
      client/Makefile.am:
        Changed header to GPL version 2 only
      client/client_priv.h:
        Changed header to GPL version 2 only
      client/completion_hash.cc:
        Changed header to GPL version 2 only
      client/completion_hash.h:
        Changed header to GPL version 2 only
      client/get_password.c:
        Changed header to GPL version 2 only
      client/my_readline.h:
        Changed header to GPL version 2 only
      client/mysql.cc:
        Changed header to GPL version 2 only
      client/mysql_upgrade.c:
        Changed header to GPL version 2 only
      client/mysqladmin.cc:
        Changed header to GPL version 2 only
      client/mysqlbinlog.cc:
        Changed header to GPL version 2 only
      client/mysqlcheck.c:
        Changed header to GPL version 2 only
      client/mysqld...
      2d27fea5
  10. 14 Dec, 2006 2 commits
    • unknown's avatar
      Fixed compiler warnings detected by option -Wshadow and -Wunused: · 193b1cac
      unknown authored
      - Removed not used variables and functions
      - Added #ifdef around code that is not used
      - Renamed variables and functions to avoid conflicts
      - Removed some not used arguments
      
      Fixed some class/struct warnings in ndb
      Added define IS_LONGDATA() to simplify code in libmysql.c
      
      I did run gcov on the changes and added 'purecov' comments on almost all lines that was not just variable name changes
      
      
      BUILD/SETUP.sh:
        Added printing of unused functions and variables.
        Made it easy to test compiling with -Wshadow
      BUILD/compile-pentium-gcov:
        Added warnings
        Mark binary with -gcov
      client/mysql.cc:
        Fixed warnings found with gcc -Wshadow
      client/mysql_upgrade.c:
        Fixed warnings found with gcc -Wshadow
      client/mysqlbinlog.cc:
        Fixed warnings found with gcc -Wshadow
      client/mysqldump.c:
        Fixed warnings found with gcc -Wshadow
      client/mysqltest.c:
        Fixed warnings found with gcc -Wshadow
      client/sql_string.cc:
        Fixed warnings found with gcc -Wshadow
        Merged with sql/sql_string.cc
      client/sql_string.h:
        Fixed warnings found with gcc -Wshadow
        Merged with sql/sql_string.h
      cmd-line-utils/readline/display.c:
        Fixed compiler warning
      cmd-line-utils/readline/histexpand.c:
        Fixed warnings found with gcc -Wshadow
      cmd-line-utils/readline/input.c:
        Fixed warnings found with gcc -Wshadow
      cmd-line-utils/readline/text.c:
        Fixed warnings found with gcc -Wshadow
      cmd-line-utils/readline/vi_mode.c:
        Fixed warnings found with gcc -Wshadow
      dbug/dbug_analyze.c:
        Fixed warnings found with gcc -Wshadow
      extra/my_print_defaults.c:
        Prefixed defaults_extra_file and defaults_group_suffix with 'my' to avoid conflicts with similar named local variables
      extra/yassl/include/buffer.hpp:
        Fixed compiler warnings
      extra/yassl/include/crypto_wrapper.hpp:
        Fixed compiler warnings
      extra/yassl/include/yassl_imp.hpp:
        Fixed compiler warnings
      extra/yassl/include/yassl_int.hpp:
        Fixed compiler warnings
      extra/yassl/src/crypto_wrapper.cpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/benchmark/benchmark.cpp:
        Fixed warnings found with gcc -Wshadow
      extra/yassl/taocrypt/include/algebra.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/include/des.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/include/hash.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/include/hmac.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/include/modarith.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/include/modes.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/include/rsa.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/mySTL/list.hpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/src/aes.cpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/src/algebra.cpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/src/asn.cpp:
        Fixed compiler warnings
      extra/yassl/taocrypt/test/test.cpp:
        Fixed compiler warnings
      extra/yassl/testsuite/testsuite.cpp:
        Fixed compiler warnings
      include/m_ctype.h:
        Fixed warnings found with gcc -Wshadow
      include/my_pthread.h:
        Fixed warnings found with gcc -Wshadow
      include/my_sys.h:
        Fixed warnings found with gcc -Wshadow
      include/my_time.h:
        Fixed warnings found with gcc -Wshadow
      include/mysql.h:
        Fixed warnings found with gcc -Wshadow
        Added define IS_LONGDATA() to simplify code in libmysql.c
      libmysql/libmysql.c:
        Fixed warnings found with gcc -Wshadow
        (Mostly replaced bind -> my_bind and time -> my_time)
      libmysqld/lib_sql.cc:
        Removed not used variables and labels
      myisam/ft_boolean_search.c:
        Fixed warnings found with gcc -Wshadow
      myisam/mi_open.c:
        Fixed warnings found with gcc -Wshadow
      myisam/mi_search.c:
        Fixed warnings found with gcc -Wshadow
      myisam/mi_unique.c:
        Fixed compiler warning
      myisam/myisampack.c:
        Fixed warnings found with gcc -Wshadow
      myisam/rt_index.c:
        Remove not used variables
      myisam/sort.c:
        Fixed warnings found with gcc -Wshadow
      mysql-test/r/mysqlcheck.result:
        Remove databases and tables possible left by previous test
      mysql-test/r/mysqltest.result:
        New test results
      mysql-test/t/mysql.test:
        Coverage tests
      mysql-test/t/mysqlbinlog.test:
        Coverage tests
      mysql-test/t/mysqlcheck.test:
        Remove databases and tables possible left by previous test
      mysql-test/t/mysqltest.test:
        Coverage tests
      mysys/default.c:
        Prefixed defaults_file, defaults_group_suffix and defaults_extra_file with 'my' to avoid conflicts with local variables in some functions
      mysys/mf_iocache2.c:
        Fixed warnings found with gcc -Wshadow
      mysys/mf_keycache.c:
        Fixed warnings found with gcc -Wshadow
      mysys/my_bitmap.c:
        Fixed warnings found with gcc -Wshadow
      mysys/sha1.c:
        Fixed warnings found with gcc -Wshadow
      ndb/include/kernel/signaldata/ArbitSignalData.hpp:
        Fixed compiler warning
      ndb/include/kernel/signaldata/DictTabInfo.hpp:
        Fixed compiler warnings
      ndb/include/ndbapi/NdbReceiver.hpp:
        Fixed warnings found with gcc -Wshadow
      ndb/include/transporter/TransporterDefinitions.hpp:
        Fixed compiler warning
      ndb/include/util/InputStream.hpp:
        Fixed compiler warning
      ndb/include/util/OutputStream.hpp:
        Fixed compiler warning
      ndb/include/util/SimpleProperties.hpp:
        Fixed compiler warning
      ndb/include/util/SocketAuthenticator.hpp:
        Fixed compiler warning
      ndb/include/util/SocketServer.hpp:
        Fixed compiler warning
      ndb/src/common/mgmcommon/ConfigRetriever.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/portlib/NdbTick.c:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/transporter/SHM_Transporter.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/transporter/TCP_Transporter.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/transporter/TCP_Transporter.hpp:
        Fixed compiler warning
      ndb/src/common/transporter/Transporter.cpp:
        Removed not used variable
      ndb/src/common/transporter/TransporterRegistry.cpp:
        Removed not used variable
      ndb/src/common/util/Bitmask.cpp:
        Moved function to avoid warnings of not used function
      ndb/src/common/util/ConfigValues.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/util/File.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/util/Properties.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/util/SocketClient.cpp:
        Fixed wrong return value
      ndb/src/common/util/random.c:
        Fixed warnings found with gcc -Wshadow
      ndb/src/common/util/socket_io.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/cw/cpcd/APIService.cpp:
        Removed not used variable
      ndb/src/cw/cpcd/main.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/dbdict/Dbdict.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/dbtc/Dbtc.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/dbtup/DbtupScan.cpp:
        Removed not used variable
      ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/qmgr/Qmgr.hpp:
        Fixed compiler warnings
      ndb/src/kernel/blocks/qmgr/QmgrMain.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/suma/Suma.cpp:
        Removed not used variables
      ndb/src/kernel/blocks/suma/Suma.hpp:
        Fixed compiler warnings
      ndb/src/kernel/vm/MetaData.hpp:
        Fixed compiler warnings
      ndb/src/mgmapi/LocalConfig.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/mgmapi/mgmapi.cpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/mgmclient/CommandInterpreter.cpp:
        Removed not used variables
      ndb/src/mgmsrv/ConfigInfo.cpp:
        Fixed warnings found with gcc -Wshadow
        Removed not used variables
      ndb/src/mgmsrv/ConfigInfo.hpp:
        Fixed warnings found with gcc -Wshadow
      ndb/src/mgmsrv/InitConfigFileParser.cpp:
        Prefixed defaults_file, defaults_group_suffix and defaults_extra_file with 'my' to avoid conflicts with local variables in some functions
      ndb/src/mgmsrv/MgmtSrvr.cpp:
        Removed not used variables and functions
      ndb/src/mgmsrv/MgmtSrvr.hpp:
        Fixed compiler warnings
      ndb/src/mgmsrv/Services.cpp:
        Removed not used variables and functions
      ndb/src/mgmsrv/main.cpp:
        Removed not used variable
      ndb/src/ndbapi/ClusterMgr.hpp:
        Fixed compiler warnings
      ndb/src/ndbapi/Ndb.cpp:
        Removed not used variables
      ndb/src/ndbapi/NdbBlob.cpp:
        Removed not used variables
      ndb/src/ndbapi/NdbDictionaryImpl.cpp:
        Removed not used variables
      ndb/src/ndbapi/NdbIndexOperation.cpp:
        Removed not used variables
      ndb/src/ndbapi/NdbOperationDefine.cpp:
        Removed not used variables
      ndb/src/ndbapi/NdbOperationExec.cpp:
        Removed not used variables
      ndb/src/ndbapi/NdbOperationSearch.cpp:
        Removed not used variables
      ndb/src/ndbapi/NdbScanFilter.cpp:
        Fixed compiler warning
      ndb/src/ndbapi/NdbScanOperation.cpp:
        Removed not used variables
      ndb/src/ndbapi/SignalSender.cpp:
        Removed not used variables
      ndb/src/ndbapi/ndb_cluster_connection.cpp:
        Removed not used variable
      ndb/tools/delete_all.cpp:
        Removed not used variable
      ndb/tools/desc.cpp:
        Removed not used variable
      ndb/tools/drop_index.cpp:
        Removed not used variable
      ndb/tools/drop_tab.cpp:
        Removed not used variable
      ndb/tools/listTables.cpp:
        Removed not used variable
      ndb/tools/ndb_config.cpp:
        Fixed warnings found with gcc -Wshadow
        Added missing puts(desc)
      ndb/tools/restore/Restore.hpp:
        Changed delimiter to define instead of static variable, as the static variable caused a LOT of compiler warnings
        Fixed compiler warning
      ndb/tools/restore/consumer.hpp:
        Fixed compiler warning
      ndb/tools/restore/restore_main.cpp:
        Fixed compiler warnings
      ndb/tools/select_all.cpp:
        Removed not used variables
      ndb/tools/select_count.cpp:
        Removed not used variable
      server-tools/instance-manager/commands.h:
        Fixed compiler warnings
      server-tools/instance-manager/guardian.cc:
        Fixed compiler warnings
      server-tools/instance-manager/instance_options.cc:
        Removed not used variables
      server-tools/instance-manager/mysql_connection.cc:
        Fixed compiler warnings
      server-tools/instance-manager/options.cc:
        Fixed compiler warnings
      server-tools/instance-manager/options.h:
        Fixed compiler warnings
      server-tools/instance-manager/parse.cc:
        Removed not used variable
      server-tools/instance-manager/user_map.cc:
        Fixed compiler warnings
      server-tools/instance-manager/user_map.h:
        Fixed compiler warnings
      sql/field.cc:
        Fixed compiler warnings
      sql/field.h:
        Fixed compiler warnings
      sql/filesort.cc:
        Fixed compiler warnings
      sql/ha_archive.cc:
        Removed table and share arguments from get_share() / free_share() to get rid of compiler warnings
      sql/ha_archive.h:
        Removed table and share arguments from get_share() / free_share() to get rid of compiler warnings
      sql/ha_federated.cc:
        Fixed compiler warnings
      sql/ha_heap.cc:
        Fixed compiler warnings
      sql/ha_myisam.cc:
        Fixed compiler warnings
      sql/ha_myisammrg.cc:
        Fixed compiler warnings
      sql/ha_ndbcluster.cc:
        Fixed compiler warnings
      sql/handler.cc:
        Fixed compiler warnings
      sql/item.cc:
        Fixed compiler warnings
      sql/item.h:
        Fixed compiler warnings
        new_item() -> clone_item(), to avoid a lot of warnings with variable 'new_item'
        el() -> element_index()
      sql/item_cmpfunc.cc:
        Fixed compiler warnings
      sql/item_cmpfunc.h:
        Fixed compiler warnings
      sql/item_func.cc:
        Fixed compiler warnings
      sql/item_geofunc.cc:
        Fixed compiler warnings
      sql/item_row.h:
        Fixed compiler warnings
      sql/item_strfunc.cc:
        Fixed compiler warnings
      sql/item_subselect.cc:
        Fixed compiler warnings
      sql/item_subselect.h:
        Fixed compiler warnings
      sql/item_sum.cc:
        Fixed compiler warnings
      sql/item_timefunc.cc:
        Fixed compiler warnings
      sql/log.cc:
        Fixed compiler warnings
        More comments
        Added #ifdef HAVE_REPLICATION
      sql/log_event.cc:
        Fixed compiler warnings
      sql/log_event.h:
        Fixed compiler warnings
      sql/mysql_priv.h:
        query_id -> global_query_id, to avoid a lot of clashes with function and class variables
        start_time -> server_start_time
      sql/mysqld.cc:
        Fixed compiler warnings:
        - Removed not used variables
        - Added #ifndef EMBEDDED_LIBRARY
        - Fixed shadow warnings
      sql/net_serv.cc:
        Fixed compiler warnings
      sql/opt_range.cc:
        range -> last_range to avoid shadow warnings
        Removed not used function print_rowid()
      sql/opt_range.h:
        range -> last_range to avoid shadow warnings
      sql/password.c:
        Fixed compiler warnings
      sql/protocol.cc:
        Fixed compiler warnings
      sql/repl_failsafe.cc:
        Fixed compiler warnings
      sql/set_var.cc:
        Fixed compiler warnings
      sql/set_var.h:
        type() -> show_type()
        Fixed compiler warnings
      sql/slave.cc:
        Fixed compiler warnings
      sql/sp_head.cc:
        Fixed compiler warnings
      sql/sp_head.h:
        Fixed compiler warnings
      sql/spatial.cc:
        Fixed compiler warnings
      sql/spatial.h:
        length() -> geom_length() to avoid compiler warnings
        wkb_end -> wkb_last to avoid compiler warnings with local variables named 'wkb_end'
      sql/sql_cache.h:
        Fixed compiler warnings
      sql/sql_class.cc:
        Fixed compiler warnings
      sql/sql_class.h:
        log -> log_xid() to avoid compiler warnings
        Fixed shadow compiler warnings
      sql/sql_derived.cc:
        Removed not used variable
      sql/sql_insert.cc:
        Fixed compiler warnings
      sql/sql_lex.cc:
        Fixed compiler warnings
      sql/sql_lex.h:
        res -> saved_error to make the meaning of the variable clear and avoid shadow warnings
      sql/sql_load.cc:
        Fixed compiler warnings
      sql/sql_parse.cc:
        Fixed compiler warnings
      sql/sql_prepare.cc:
        Fixed compiler warnings
      sql/sql_select.cc:
        Fixed compiler warnings
      sql/sql_show.cc:
        Fixed compiler warnings
      sql/sql_string.cc:
        Fixed compiler warnings
      sql/sql_string.h:
        Fixed compiler warnings
      sql/sql_table.cc:
        Fixed compiler warnings
      sql/sql_trigger.cc:
        Fixed compiler warnings
      sql/sql_trigger.h:
        table -> trigger_table to avoid warnings from local variables
      sql/sql_union.cc:
        Fixed compiler warnings
        (mainly res -> saved_error)
      sql-common/client.c:
        Removed not used variable
      sql-common/my_time.c:
        Removed not used variable
        time -> my_time
      sql/sql_update.cc:
        Removed not used variable
      sql/sql_view.cc:
        Removed not used variable
      sql/sql_yacc.yy:
        Removed not used variable
      sql/table.cc:
        Removed not used variable
      sql/tztime.cc:
        Removed not used variable
      sql/unireg.cc:
        Removed not used variable
      strings/ctype-bin.c:
        mblen -> mb_len to avoid compiler warnings with local variable mblen
      strings/ctype-cp932.c:
        Fixed compiler warnings
      strings/ctype-eucjpms.c:
        Fixed compiler warnings
      strings/ctype-mb.c:
        mblen -> mb_len to avoid compiler warnings with local variable mblen
      strings/ctype-simple.c:
        mblen -> mb_len to avoid compiler warnings with local variable mblen
        exp -> exponent
      strings/ctype-sjis.c:
        Fixed compiler warnings
      strings/ctype-uca.c:
        mblen -> mb_len to avoid compiler warnings with local variable mblen
      strings/ctype-ujis.c:
        Fixed compiler warnings
      strings/ctype-utf8.c:
        Fixed compiler warnings
      strings/decimal.c:
        Fixed compiler warnings
      strings/my_vsnprintf.c:
        Added comment
      strings/strtod.c:
        Fixed compiler warnings
      tests/mysql_client_test.c:
        Fixed compiler warnings
        (Biggest part of patch is to not get a conflict with global function 'bind')
      193b1cac
    • unknown's avatar
      Fixed bug #25027. · 74d1328c
      unknown authored
      Blocked evaluation of constant objects of the classes
      Item_func_is_null and Item_is_not_null_test at the
      prepare phase in the cases when the objects used subqueries. 
      
      
      mysql-test/r/ps.result:
        Extended test case for bug #25027.
      mysql-test/t/ps.test:
        Extended test case for bug #25027.
      sql/sql_lex.cc:
        Returned back the assertion in st_select_lex_unit::set_limit,
        removed by the previous commit for this bug.
      74d1328c
  11. 13 Dec, 2006 1 commit
    • unknown's avatar
      Fixed bug #25027. · c4e2eb0f
      unknown authored
      Removed an assertion that was not valid for the cases where the query
      in a prepared statement contained a single-row non-correlated
      subquery that was used as an argument of the IS NULL predicate.
      
      
      mysql-test/r/ps.result:
        Added a test case for bug #25027.
      mysql-test/t/ps.test:
        Added a test case for bug #25027.
      c4e2eb0f
  12. 11 Dec, 2006 1 commit
    • unknown's avatar
      Post-merge fixes for Bug#4968 "Stored procedure crash if cursor opened · 417915f5
      unknown authored
      on altered table" and Bug#19733 "Repeated alter, or repeated 
      create/drop, fails"
      
      
      mysql-test/r/ps.result:
        Post-merge fixes: update results with new tests.
      mysql-test/r/sp.result:
        Post-merge fixes: update results.
      mysql-test/t/ps.test:
        Add more test cases for Bug#4968 and related.
      mysql-test/t/sp.test:
        A post-merge fix: add more testcases for Bug#4968 and related.
      sql/sql_insert.cc:
        Post-merge fixes: update comments, fix errors of the manual merge.
      sql/sql_lex.cc:
        Fix a manual merge error.
      sql/sql_parse.cc:
        Fix a few errors of the manual merge, style.
      sql/sql_table.cc:
        Post-merge fixes, fix a few errors of the manual merge, fix style.
      sql/sql_yacc.yy:
        A post-merge fix.
      417915f5
  13. 07 Dec, 2006 2 commits
    • unknown's avatar
      A fix and test cases for · cd8c9ef0
      unknown authored
      Bug#4968 "Stored procedure crash if cursor opened on altered table"
      Bug#19733 "Repeated alter, or repeated create/drop, fails"
      Bug#19182 "CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work from 
      stored procedure."
      Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
      Bug#22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
      
      Test cases for bugs 4968, 19733, 6895 will be added in 5.0.
      
      Re-execution of CREATE DATABASE, CREATE TABLE and ALTER TABLE 
      statements in stored routines or as prepared statements caused
      incorrect results (and crashes in versions prior to 5.0.25).
      In 5.1 the problem occured only for CREATE DATABASE, CREATE TABLE
      SELECT and CREATE TABLE with INDEX/DATA DIRECTOY options).
      
      The problem of bugs 4968, 19733, 19282 and 6895 was that functions
      mysql_prepare_table, mysql_create_table and mysql_alter_table were not
      re-execution friendly: during their operation they used to modify contents
      of LEX (members create_info, alter_info, key_list, create_list),
      thus making the LEX unusable for the next execution.
      In particular, these functions removed processed columns and keys from
      create_list, key_list and drop_list. Search the code in sql_table.cc 
      for drop_it.remove() and similar patterns to find evidence.
      
      The fix is to supply to these functions a usable copy of each of the
      above structures at every re-execution of an SQL statement. 
      
      To simplify memory management, LEX::key_list and LEX::create_list
      were added to LEX::alter_info, a fresh copy of which is created for
      every execution.
      
      The problem of crashing bug 22060 stemmed from the fact that the above 
      metnioned functions were not only modifying HA_CREATE_INFO structure in 
      LEX, but also were changing it to point to areas in volatile memory of 
      the execution memory root.
       
      The patch solves this problem by creating and using an on-stack
      copy of HA_CREATE_INFO (note that code in 5.1 already creates and
      uses a copy of this structure in mysql_create_table()/alter_table(),
      but this approach didn't work well for CREATE TABLE SELECT statement).
      
      
      mysql-test/r/ps.result:
        Update test results (Bug#19182, Bug#22060)
      mysql-test/t/ps.test:
        Add a test case for Bug#19182, Bug#22060 (4.1-only parts)
      sql/mysql_priv.h:
        LEX::key_list and LEX::create_list were moved to LEX::alter_info.
        Update declarations to use LEX::alter_info instead of these two
        members.
      sql/sql_class.h:
        Replace pair<columns, keys> with an instance of Alter_info in
        select_create constructor. We create a new copy of Alter_info
        each time we re-execute SELECT .. CREATE prepared statement.
      sql/sql_insert.cc:
        Adjust to a new signature of create_table_from_items.
      sql/sql_lex.cc:
        Implement Alter_info::Alter_info that would make a "deep" copy
        of all definition lists (keys, columns).
      sql/sql_lex.h:
        Move key_list and create_list to class Alter_info. Implement
        Alter_info::Alter_info that can be used with PS and SP.
      sql/sql_list.h:
        Implement a copy constructor of class List that makes a deep copy
        of all list nodes.
      sql/sql_parse.cc:
        Adjust to new signatures of mysql_create_table, mysql_alter_table,
        select_create. Functions mysql_create_index and mysql_drop_index has
        become identical after initialization of alter_info was moved to the 
        parser, and were merged. Flag enable_slow_log was not updated for 
        SQLCOM_DROP_INDEX, which is a bug. Just like CREATE INDEX, DROP INDEX
        is currently done via complete table rebuild and is rightfully a slow
        administrative statement.
      sql/sql_show.cc:
        Adjust mysqld_show_create_db to a new signature.
      sql/sql_table.cc:
        Adjust mysql_alter_table, mysql_recreate_table, mysql_create_table,
        mysql_prepare_table to new signatures.
      sql/sql_yacc.yy:
        LEX::key_list and LEX::create_list moved to class Alter_info
      cd8c9ef0
    • unknown's avatar
      WL#3618 - Remove HAVE_ROW_BASED_REPLICATION from source code. · d71fb7b7
      unknown authored
      Please see worklog for details on files changed.
      
      
      BitKeeper/deleted/.del-have_row_based.require:
        Delete: mysql-test/r/have_row_based.require
      BitKeeper/deleted/.del-not_row_based.require:
        Delete: mysql-test/r/not_row_based.require
      BitKeeper/deleted/.del-have_row_based.inc:
        Delete: mysql-test/include/have_row_based.inc
      BitKeeper/deleted/.del-not_row_based.inc:
        Delete: mysql-test/include/not_row_based.inc
      BitKeeper/deleted/.del-replication.m4:
        Delete: config/ac-macros/replication.m4
      d71fb7b7
  14. 04 Dec, 2006 1 commit
  15. 02 Dec, 2006 2 commits
    • unknown's avatar
      Bug#24736: UDF functions parsed as Stored Functions · c38783d0
      unknown authored
      Before this fix, a call to a User Defined Function (UDF) could,
      under some circumstances, be interpreted as a call to a Stored function
      instead. This occurred if a native function was invoked in the parameters
      for the UDF, as in "select my_udf(abs(x))".
      
      The root cause of this defect is the introduction, by the fix for Bug 21809,
      of st_select_lex::udf_list, and it's usage in the parser in sql_yacc.yy
      in the rule function_call_generic (in 5.1).
      
      While the fix itself for Bug 21809 is correct in 5.0, the code change
      merged into the 5.1 release created the issue, because the calls in 5.1 to :
      - lex->current_select->udf_list.push_front(udf)
      - lex->current_select->udf_list.pop()
      are not balanced in case of native functions, causing the udf_list,
      which is really a stack, to be out of sync with the internal stack
      maintained by the bison parser.
      
      Instead of moving the call to udf_list.pop(), which would have fixed the
      symptom, this patch goes further and removes the need for udf_list.
      
      This is motivated by two reasons:
      
      a) Maintaining a stack in the MySQL code in sync with the stack maintained
      internally in sql_yacc.cc (not .yy) is extremely dependent of the
      implementation of yacc/bison, and extremely difficult to maintain.
      It's also totally dependent of the structure of the grammar, and has a risk
      to break with regression defects each time the grammar itself is changed.
      
      b) The previous code did report construct like "foo(expr AS name)" as
      syntax errors (ER_PARSER_ERROR), which is incorrect, and misleading.
      The syntax is perfectly valid, as this expression is valid when "foo" is
      a UDF. Whether this syntax is legal or not depends of the semantic of "foo".
      
      With this change:
      
      a) There is only one stack (in bison), and no List<udf_func> to maintain.
      
      b) "foo(expr AS name)", when used incorrectly, is reported as semantic error:
      - ER_WRONG_PARAMETERS_TO_NATIVE_FCT (for native functions)
      - ER_WRONG_PARAMETERS_TO_STORED_FCT (for stored functions)
      This is achieved by the changes implemented in item_create.cc
      
      
      mysql-test/r/parser.result:
        New tests
      mysql-test/r/udf.result:
        New tests
      mysql-test/t/parser.test:
        New tests
      mysql-test/t/udf.test:
        New tests
      sql/item_create.cc:
        Semantic checks for named parameters, as in "foo(expr AS name)".
      sql/share/errmsg.txt:
        New error message
      sql/sql_lex.cc:
        Remove usage of udf_list.
      sql/sql_lex.h:
        Remove usage of udf_list.
      sql/sql_yacc.yy:
        Remove usage of udf_list.
      c38783d0
    • unknown's avatar
      WL# 3031 · 5466b0f8
      unknown authored
      Backport of functionality in private 5.2 tree. 
      
      Added new language to parser, new mysql.servers table and associated code
      to be used by the federated storage engine to allow central connection information
      per WL entry.
      
      
      libmysqld/Makefile.am:
        WL# 3031
        
        Added sql_servers.cc to libmysqld Makefile.am
      mysql-test/lib/init_db.sql:
        WL# 3031
        
        Added mysql.servers creation to init_db.sql, which is in turn called by mysql-test-run.pl
      scripts/mysql_create_system_tables.sh:
        WL# 3031
        
        Added mysql.servers table creation to script called by non-perl mysql-test-run
      sql/Makefile.am:
        WL# 3031
        
        Added sql_servers source and headers to Makefile.am to be built
      sql/lex.h:
        WL# 3031
        
        Added tokens needed for SERVERS scheme
      sql/mysql_priv.h:
        WL #3031
        
        Added sql_servers.h to mysql_priv.h so mysqld.cc and other code can link with sql_servers code
      sql/mysqld.cc:
        WL# 3031
        
        Added servers_free and servers_init to mysqld
      sql/sql_lex.cc:
        WL# 3031
        
        Added lex->server_options parameter initialisation
      sql/sql_lex.h:
        WL #3031
        
        Added SQLCOM commands needed for sql_server actions
      sql/sql_parse.cc:
        WL# 3031
        
        Added switch actions for new SQLCOM sql_server actions
      sql/sql_yacc.yy:
        WL #3031
        
        Added tokens needed for sql_servers, CREATE/DROP/ALTER server functionality
      sql/share/errmsg.txt:
        WL# 3031
        
        Added two new errors to errormsg.sys
      storage/federated/ha_federated.cc:
        WL #3031
        
        Modified federated storage engine to use new connection scheme (servers 
        table) if connection string only specifies connection name vs. complete
        URL
      storage/federated/ha_federated.h:
        WL# 3031
        
        Added new share members needed for connection scheme
      sql/sql_servers.cc:
        WL #3031
        
        sql_servers.cc - all methods required for manipulating mysql.servers table
        to work with federated new connection scheme (CREATE/ALTER/DROP SERVER ...)
      sql/sql_servers.h:
        WL #3031
        
        New header file for sql_servers functionality
      mysql-test/r/federated_server.result:
        WL #3031
        
        New test results for testing new connection scheme
      sql/sql_yacc.yy.bak:
        WL #3031
        
        Added tokens and definitions required for new CREATE/ALTER/DROP SERVER
        for sql_servers functionality. See WL for details.
      mysql-test/t/federated_server.test:
        WL #3031
        
        New test for testing CREATE/ALTER/DROP SERVER, as well as testing that
        federated works with both tradition connection scheme as well as new
        connection scheme.
      5466b0f8
  16. 26 Nov, 2006 1 commit
    • unknown's avatar
      Fixed a LOT of compiler warnings · cb4895d2
      unknown authored
      Added missing DBUG_RETURN statements (in mysqldump.c)
      Added missing enums
      Fixed a lot of wrong DBUG_PRINT() statements, some of which could cause crashes
      Removed usage of %lld and %p in printf strings as these are not portable or produces different results on different systems.
      
      
      client/mysqldump.c:
        Fixed some compiler warnings
        Added some missing DBUG_RETURN
        Remove copying of 'cluster' database
      client/mysqlslap.c:
        Fixed compiler warnings
      client/mysqltest.c:
        After merge fix
      extra/yassl/taocrypt/include/algebra.hpp:
        Removed compiler warning
      mysql-test/include/im_check_env.inc:
        Fixed race condition (mysqld1 could report 'starting' or 'online'
      mysql-test/mysql-test-run.pl:
        After merge fixes
        Added missing directory to LD_LIBRARY_PATH
      mysql-test/r/ctype_cp1250_ch.result:
        After merge fix
      mysql-test/r/im_cmd_line.result:
        Fixed race condition
      mysql-test/r/im_daemon_life_cycle.result:
        Fixed race condition
      mysql-test/r/im_instance_conf.result:
        Fixed race condition
      mysql-test/r/im_life_cycle.result:
        Fixed race condition
      mysql-test/r/im_utils.result:
        Fixed race condition
      mysql-test/r/log_tables.result:
        Fixed wrong result
      mysql-test/t/disabled.def:
        Disabled ndb_restore_partion, as ndb_restore_compate caused it to fail, becasue of table 'cluster/def/schema' which is stored in ndb_backup50
      mysys/my_compress.c:
        Removed compiler warnings
      mysys/my_getopt.c:
        Ensure we always have at least one space between option name and value
      plugin/fulltext/plugin_example.c:
        Removed compiler warnings
      server-tools/instance-manager/mysql_connection.cc:
        After merge fix
      sql/event_data_objects.cc:
        Fixed compiler warnings
        Fixed platform compatibility issues (%lld is not portable)
      sql/event_data_objects.h:
        Fixed compiler warnings
      sql/event_db_repository.cc:
        Fixed compiler warnings
      sql/event_queue.cc:
        Fixed compiler warnings
      sql/event_scheduler.cc:
        Fixed compiler warnings
      sql/events.cc:
        Fixed compiler warnings
      sql/field.cc:
        Fixed compiler warnings
      sql/ha_ndbcluster.cc:
        Fixed compiler warnings
      sql/ha_ndbcluster_binlog.cc:
        Fixed compiler warnings
      sql/ha_partition.cc:
        Fixed compiler warnings
      sql/handler.cc:
        Fixed compiler warnings
      sql/item_cmpfunc.cc:
        Fixed DBUG_PRINT style
      sql/item_func.cc:
        Fixed compiler warnings
      sql/log.cc:
        Fixed compiler warnings
      sql/log_event.cc:
        Fixed compiler warnings
      sql/mysqld.cc:
        Fixed compiler warnings
      sql/opt_range.cc:
        Fixed compiler warnings
      sql/repl_failsafe.cc:
        Indentation fixes
      sql/rpl_rli.cc:
        Fixed compiler warnings
      sql/rpl_tblmap.cc:
        Fixed compiler warnings
      sql/set_var.cc:
        Fixed compiler warnings
      sql/slave.cc:
        Fixed compiler warnings
      sql/sp_head.cc:
        Fixed compiler warnings
      sql/sql_base.cc:
        Fixed compiler warnings
        Fixed indentation
      sql/sql_binlog.cc:
        Fixed compiler warnings
      sql/sql_cache.cc:
        Fixed compiler warnings
      sql/sql_class.cc:
        Fixed compiler warnings
      sql/sql_handler.cc:
        Fixed compiler warnings
      sql/sql_lex.cc:
        Fixed compiler warnings
      sql/sql_parse.cc:
        Fixed compiler warnings
      sql/sql_partition.cc:
        Fixed compiler warnings
      sql/sql_prepare.cc:
        Fixed compiler warnings
      sql/sql_table.cc:
        Fixed compiler warnings
      sql/sql_test.cc:
        Fixed DBUG_PRINT style
      sql/sql_trigger.cc:
        Fixed DBUG_PRINT style
      sql/table.cc:
        Fixed compiler warnings
      storage/federated/ha_federated.cc:
        Fixed compiler warnings
      storage/myisam/mi_rsamepos.c:
        Fixed compiler warnings
      storage/ndb/include/ndb_global.h.in:
        After merge fix
      storage/ndb/include/util/NdbOut.hpp:
        Inform gcc that ndbout_c takes a printf() string as argument
      storage/ndb/include/util/SimpleProperties.hpp:
        After merge fixes
      storage/ndb/src/kernel/blocks/backup/Backup.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
        Fixed compiler warnings
        Fixed usage of uninitialized value (Got help from Jonas with patch)
      storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/lgman.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/pgman.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/restore.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/blocks/suma/Suma.cpp:
        Fixed compiler warnings
        Added missing enum's to switch
      storage/ndb/src/kernel/vm/Configuration.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/vm/DLHashTable.hpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/vm/RWPool.hpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/vm/SimulatedBlock.cpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/vm/WOPool.hpp:
        Fixed compiler warnings
      storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp:
        Fixed compiler warnings
      storage/ndb/src/mgmclient/CommandInterpreter.cpp:
        Fixed compiler warnings
      storage/ndb/src/mgmsrv/MgmtSrvr.cpp:
        Fixed compiler warnings
      storage/ndb/src/ndbapi/DictCache.cpp:
        Fixed compiler warnings
      storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp:
        Fixed compiler warnings
      storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp:
        Fixed compiler warnings
      storage/ndb/src/ndbapi/NdbIndexOperation.cpp:
        Fixed compiler warnings
      storage/ndb/src/ndbapi/NdbIndexStat.cpp:
        Initialize possible uninitialized variable
      storage/ndb/src/ndbapi/NdbOperationInt.cpp:
        Fixed compiler warnings
      storage/ndb/src/ndbapi/NdbRecAttr.cpp:
        Added missing enum's (To avoid compiler warnings)
      storage/ndb/src/ndbapi/NdbScanOperation.cpp:
        Fixed compiler warnings
      storage/ndb/src/ndbapi/ObjectMap.hpp:
        Fixed compiler warnings
      storage/ndb/tools/desc.cpp:
        Fixed compiler warnings
      storage/ndb/tools/restore/Restore.cpp:
        Fixed compiler warnings
      storage/ndb/tools/restore/consumer_restore.cpp:
        Fixed compiler warnings
      unittest/mytap/t/basic-t.c:
        Fixed compiler warnings
      unittest/mytap/tap.c:
        Fixed compiler warnings
      cb4895d2
  17. 17 Nov, 2006 1 commit
    • unknown's avatar
      Bug#19194 (Right recursion in parser for CASE causes excessive stack usage, · 6a67e0a4
      unknown authored
        limitation)
      
      Note to the reviewer
      ====================
      
      Warning: reviewing this patch is somewhat involved.
      Due to the nature of several issues all affecting the same area,
      fixing separately each issue is not practical, since each fix can not be
      implemented and tested independently.
      In particular, the issues with
      - rule recursion
      - nested case statements
      - forward jump resolution (backpatch list)
      are tightly coupled (see below).
      
      Definitions
      ===========
      
      The expression
        CASE expr
        WHEN expr THEN expr
        WHEN expr THEN expr
        ...
        END
      is a "Simple Case Expression".
      
      The expression
        CASE
        WHEN expr THEN expr
        WHEN expr THEN expr
        ...
        END
      is a "Searched Case Expression".
      
      The statement
        CASE expr
        WHEN expr THEN stmts
        WHEN expr THEN stmts
        ...
        END CASE
      is a "Simple Case Statement".
      
      The statement
        CASE
        WHEN expr THEN stmts
        WHEN expr THEN stmts
        ...
        END CASE
      is a "Searched Case Statement".
      
      A "Left Recursive" rule is like
        list:
            element
          | list element
          ;
      
      A "Right Recursive" rule is like
        list:
            element
          | element list
          ;
      
      Left and right recursion produces the same language, the difference only
      affects the *order* in which the text is parsed.
      
      In a descendant parser (usually written manually), right recursion works
      very well, and is typically implemented with a while loop.
      In an ascendant parser (yacc/bison) left recursion works very well,
      and is implemented naturally by the parser stack.
      In both cases, using the wrong type or recursion is very bad and should be
      avoided, as it causes technical issues with the parser implementation.
      
      Before this change
      ==================
      
      The "Simple Case Expression" and "Searched Case Expression" were both
      implemented by the "when_list" and "when_list2" rules, which are left
      recursive (ok).
      
      These rules, however, used lex->when_list instead of using the parser stack,
      which is more complex that necessary, and potentially dangerous because
      of other rules using THD::reset_lex.
      
      The "Simple Case Statement" and "Searched Case Statements" were implemented
      by the "sp_case", "sp_whens" and in part by "sp_proc_stmt" rules.
      Both cases were right recursive (bad).
      
      The grammar involved was convoluted, and is assumed to be the results of
      tweaks to get the code generation to work, but is not what someone would
      naturally write.
      
      In addition, using a common rule for both "Simple" and "Searched" case
      statements was implemented with sp_head::m_flags |= IN_SIMPLE_CASE,
      which is a flag and not a stack, and therefore does not take into account
      *nested* case statements. This leads to incorrect generated code, and either
      a server crash or an incorrect result.
      
      With regards to the backpatch mechanism, a *different* backpatch list was
      created for each jump from "WHEN expr THEN stmt" to "END CASE", which
      relied on the grammar to be right recursive.
      This is a mis-use of the backpatch list, since this list can resolve
      multiple references to the same target at once.
      
      The optimizer algorithm used to detect dead code in the "assembly" SQL
      instructions, implemented by sp_head::opt_mark(uint ip), was recursive
      in some cases (a conditional jump pointing forward to another conditional
      jump).
      In case of specially crafted code, like
      - a long list of "IF expr THEN stmt END IF"
      - a long CASE statement
      this would actually cause a server crash with a stack overflow.
      In general, having a stack that grows proportionally with user data (the
      SQL code given by the client in a CREATE PROCEDURE) is to be avoided.
      
      In debug builds only, creating a SP / SF / Trigger which had a significant
      amount of code would spend --literally-- several minutes in sp_head::create,
      because of the debug code involved with DBUG_PRINT("info", ("Code %s ...
      There are several issues with this code:
      - in a CASE with 5 000 WHEN, there are 15 000 instructions generated,
        which create a sting representation of the code which is 500 000 bytes
        long,
      - using a String instead of an io stream causes performances to degrade
        to a total server freeze, as time is spent doing realloc of a buffer
        always too short,
      - Printing a 500 000 long string in the debug log is too verbose,
      - Generating this string even when DBUG_PRINT is off is useless,
      - Having code that potentially can affect the server behavior, used with
        #ifdef / #endif is useful in some cases, but is also a bad practice.
      
      After this change
      =================
      
      "Case Expressions" (both simple and searched) have been simplified to
      not use LEX::when_list, which has been removed.
      
      Considering all the issues affecting case statements, the grammar for these
      has been totally re written.
      
      The existing actions, used to generate "assembly" sp_inst* code, have been
      preserved but moved in the new grammar, with the following changes:
      
      a) Bison rules are no longer shared between "Simple" and "Searched" case
      statements, because a stack instead of a flag is required to handle them.
      Nested statements are handled naturally by the parser stack, which by
      definition uses the correct rule in the correct context.
      Nested statements of the opposite type (simple vs searched) works correctly.
      The flag sp_head::IN_SIMPLE_CASE is no longer used.
      This is a step towards resolution of WL#2999, which correctly identified
      that temporary parsing flags do not belong to sp_head.
      The code in the action is shared by mean of the case_stmt_action_xxx()
      helpers.
      
      b) The backpatch mechanism, used to resolve forward jumps in the generated
      code, has been changed to:
      - create a label for the instruction following 'END CASE',
      - register each jump at the end of a "WHEN expr THEN stmt" in a *unique*
        backpatch list associated with the 'END CASE' label
      - resolve all the forward jumps for this label at once.
      
      In addition, the code involving backpatch has been commented, so that a
      reader can now understand by reading matching "Registering" and "Resolving"
      comments how the forward jumps are resolved and what target they resolve to,
      as this is far from evident when reading the code alone.
      
      The implementation of sp_head::opt_mark() has been revised to avoid
      recursive calls from jump instructions, and instead add the jump location
      to the list of paths to explore during the flow analysis of the instruction
      graph, with a call to sp_head::add_mark_lead().
      In addition, the flow analysis will stop if an instruction has already
      been marked as reachable, which the previous code failed to do in the
      recursive case.
      sp_head::opt_mark() is now private, to prevent new calls to this method from
      being introduced.
      
      The debug code present in sp_head::create() has been removed.
      Considering that SHOW PROCEDURE CODE is also available in debug builds,
      and can be used anytime regardless of the trace level, as opposed to
      "CREATE PROCEDURE" time and only if the trace was on,
      removing the code actually makes debugging easier (usable trace).
      
      Tests have been written to cover the parser overflow (big CASE),
      and to cover nested CASE statements.
      
      
      mysql-test/r/sp-code.result:
        Test cases for nested CASE statements.
      mysql-test/t/sp-code.test:
        Test cases for nested CASE statements.
      sql/sp_head.cc:
        Re factored opt_mark() to avoid recursion, clean up.
      sql/sp_head.h:
        Re factored opt_mark() to avoid recursion, clean up.
      sql/sql_lex.cc:
        Removed when_list.
      sql/sql_lex.h:
        Removed when_list.
      sql/sql_yacc.yy:
        Minor clean up for case expressions,
        Major re write for case statements (Bug#19194).
      mysql-test/r/sp_stress_case.result:
        New test for massive CASE statements.
      mysql-test/t/sp_stress_case.sh:
        New test for massive CASE statements.
      mysql-test/t/sp_stress_case.test:
        New test for massive CASE statements.
      6a67e0a4
  18. 15 Nov, 2006 1 commit
    • unknown's avatar
      Bug#18239 (Possible to overload internal functions with stored functions) · d19bbb67
      unknown authored
      Bug#21025 (misleading error message when creating functions named 'x', or 'y')
      Bug#22619 (Spaces considered harmful)
      
      This change contains a fix to report warnings or errors, and multiple tests
      cases.
      
      Before this fix, name collisions between:
      - Native functions
      - User Defined Functions
      - Stored Functions
      were not systematically reported, leading to confusing behavior.
      
      I) Native / User Defined Function
      
      Before this fix, is was possible to create a UDF named "foo", with the same
      name as a native function "foo", but it was impossible to invoke the UDF,
      since the syntax "foo()" always refer to the native function.
      After this fix, creating a UDF fails with an error if there is a name
      collision with a native function.
      
      II) Native / Stored Function
      
      Before this fix, is was possible to create a SF named "db.foo", with the same
      name as a native function "foo", but this was confusing since the syntax
      "foo()" would refer to the native function. To refer to the Stored Function,
      the user had to use the "db.foo()" syntax.
      After this fix, creating a Stored Function reports a warning if there is a
      name collision with a native function.
      
      III) User Defined Function / Stored Function
      
      Before this fix, creating a User Defined Function "foo" and a Stored Function
      "db.foo" are mutually exclusive operations. Whenever the second function is
      created, an error is reported. However, the test suite did not cover this
      behavior.
      After this fix, the  behavior is unchanged, and is now covered by test cases.
      
      Note that the code change in this patch depends on the fix for Bug 21114.
      
      
      mysql-test/r/sp.result:
        New test cases.
      mysql-test/r/udf.result:
        New test cases.
      mysql-test/t/sp.test:
        New test cases.
      mysql-test/t/udf.test:
        New test cases.
      sql/sql_lex.cc:
        Name collisions with native functions.
      sql/sql_lex.h:
        Name collisions with native functions.
      sql/sql_yacc.yy:
        Name collisions with native functions.
      sql/share/errmsg.txt:
        Name collisions with native functions.
      mysql-test/r/sp_gis.result:
        New test cases.
      mysql-test/t/sp_gis.test:
        New test cases.
      d19bbb67
  19. 02 Nov, 2006 1 commit
    • unknown's avatar
      Better fix for bug#22830 · 63db4999
      unknown authored
      Events: crash with procedure which alters events with function
      
      Post-review CS
      
      This fix also changes the handling of KILL command combined with
      subquery. It changes the error message given back to "not supported",
      from parse error. The error for CREATE|ALTER EVENT has also been changed
      to generate "not supported yet" instead of parse error.
      In case of a SP call, the error is "not supported yet". This change
      cleans the parser from code which should not belong to there. Still
      LEX::expr_allows_subselect is existant because it simplifies the handling
       of SQLCOM_HA_READ which forbids subselects.
      
      
      mysql-test/r/events_bugs.result:
        update resut
      mysql-test/r/events_grant.result:
        update result
      mysql-test/r/kill.result:
        the error message has been changed for KILL
      mysql-test/t/events_bugs.test:
        Update old tests with the new emitted error
        
        Add a test case for
        BUG#22830 Events: crash with procedure which alters events with function
      mysql-test/t/events_grant.test:
        add ORDER BY clause to keep the result deterministic.
      mysql-test/t/kill.test:
        use name of the error, and change the error
        from parse error, to not supported
      sql/sql_lex.cc:
        Add an auxiliary function that checks whether SP and/or
        tables are used in the statement. This function is helpful for
        statements that cannot handle subqueries ans SP calls. Adding out
        of the parser cleans the latter of handling of special cases and
        letting it do its job of parsing.
      sql/sql_lex.h:
        helper function to check whether a table or SP was used
      sql/sql_parse.cc:
        Use LEX::table_or_sp_used() for SQLCOM_CREATE_EVENT, SQLCOM_ALTER_EVENT
        and SQLCOM_KILL. SQLCOM_DROP event does not use `expr` rule and thus a check is
        not needed.
      sql/sql_yacc.yy:
        Remove usage of LEX::expr_allows_subselect for CREATE|ALTER EVENT
        and KILL. There is only one left occurence - SQLCOM_HAREAD, but it 
        adds one table to the list of tables
      63db4999
  20. 01 Nov, 2006 1 commit
    • unknown's avatar
      Small cleanup in code handling stored routines/table prelocking. · 36428fa9
      unknown authored
      Use lazy initialization for Query_tables_list::sroutines hash.
      This step should significantly decrease amount of memory consumed
      by stored routines as we no longer will allocate chunk of memory
      required for this HASH for each statement in routine.
      
      
      include/hash.h:
        Introduced auxillary hash_init_opt() macro which simplifies
        lazy initialization of HASH objects.
      sql/sp.cc:
        Use lazy initialization for Query_tables_list::sroutines hash.
        This step should significantly decrease amount of memory consumed
        by stored routines as we no longer will allocate chunk of memory
        required for this HASH for each statement in routine.
      sql/sql_lex.cc:
        Use lazy initialization for Query_tables_list::sroutines hash.
        This step should significantly decrease amount of memory consumed
        by stored routines as we no longer will allocate chunk of memory
        required for this HASH for each statement in routine.
      sql/sql_lex.h:
        Updated comment describing Query...
      36428fa9
  21. 31 Oct, 2006 1 commit
    • unknown's avatar
      BUG#8804: wrong results for NULL IN (SELECT ...) · 9dfc7e78
      unknown authored
      Evaluate "NULL IN (SELECT ...)" in a special way: Disable pushed-down 
      conditions and their "consequences": 
       = Do full table scans instead of unique_[index_subquery] lookups.
       = Change appropriate "ref_or_null" accesses to full table scans in
         subquery's joins.
      Also cache value of NULL IN (SELECT ...) if the SELECT is not correlated 
      wrt any upper select.
      
      
      mysql-test/r/subselect.result:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
         - Updated test results
      sql/item.h:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
         - Added comments
      sql/item_cmpfunc.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
        Made Item_in_optimizer to:
        - cache the value of "NULL IN (uncorrelated select)"
        - Turn off pushed-down predicates when evaluating "NULL IN (SELECT ...)"
      sql/item_cmpfunc.h:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
        - Made Item_in_optimizer cache the value of "NULL IN (uncorrelated select)"
        - Added comments
      sql/item_subselect.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - When needed, wrap the predicates we push into subquery into an 
          Item_func_trig_cond so we're able to turn them off when evaluating 
          NULL IN (SELECT ...).
        - Added code to evaluate NULL IN (SELECT ...) in a special way:
          = In [unique_]index_subquery, do full table scan to see if there 
            are any rows.
          = For other subqueries, change ref[_or_null] to ALL if the
            ref[_or_null] was created from pushed-down predicate.
      sql/item_subselect.h:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added Item_subselect::is_correlated
        - Added comments
      sql/records.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Make rr_sequential() non-static
      sql/sql_lex.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added st_select_lex::is_correlated and Item_subselect::is_correlated.
      sql/sql_lex.h:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added st_select_lex::is_correlated
      sql/sql_select.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added KEY_FIELD::outer_ref to keep track of which ref accesses are 
          created from predicates that were pushed down into the subquery.
      sql/sql_select.h:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added KEYUSE::outer_ref
      mysql-test/r/subselect3.result:
        New BitKeeper file ``mysql-test/r/subselect3.result''
      mysql-test/t/subselect3.test:
        New BitKeeper file ``mysql-test/t/subselect3.test''
      9dfc7e78
  22. 24 Oct, 2006 1 commit
    • unknown's avatar
      Bug #21809: Error 1356 while selecting from view with grouping though underlying · bf3ff2ea
      unknown authored
                  select OK.
      The SQL parser was using Item::name to transfer user defined function attributes
      to the user defined function (udf). It was not distinguishing between user defined 
      function call arguments and stored procedure call arguments. Setting Item::name 
      was causing Item_ref::print() method to print the argument as quoted identifiers 
      and caused views that reference aggregate functions as udf call arguments (and 
      rely on Item::print() for the text of the view to store) to throw an undefined 
      identifier error.
      Overloaded Item_ref::print to print aggregate functions as such when printing
      the references to aggregate functions taken out of context by split_sum_func2()
      Fixed the parser to properly detect using AS clause in stored procedure arguments
      as an error.
      Fixed printing the arguments of udf call to print properly the udf attribute.
      
      
      mysql-test/r/udf.result:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - test cases
      mysql-test/t/udf.test:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - test cases
      sql/item.cc:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - Don't print the refs to SUM functions as refs.
      sql/item_func.cc:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - print the aliases in the udf calls
      sql/item_func.h:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - print the aliases in the udf calls
      sql/sql_lex.cc:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - disable aliases for arguments in stored routine calls
      sql/sql_lex.h:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - disable aliases for arguments in stored routine calls
      sql/sql_yacc.yy:
        Bug #21809: Error 1356 while selecting from view with grouping though underlying
                    select OK.
         - disable aliases for arguments in stored routine calls
         - fix bison duplicate symbol warnings
      bf3ff2ea
  23. 16 Oct, 2006 2 commits
    • unknown's avatar
      Fixed bug #19579: at range analysis optimizer did not take into · 93a82420
      unknown authored
      account predicates that become sargable after reading const tables.
      In some cases this resulted in choosing non-optimal execution plans.
      Now info of such potentially saragable predicates is saved in
      an array and after reading const tables we check whether this
      predicates has become saragable.
      
      
      
      mysql-test/r/select.result:
        Added a test case for bug #19579.
      mysql-test/t/select.test:
        Added a test case for bug #19579.
      sql/item_cmpfunc.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_base.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_lex.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_lex.h:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_select.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Now info of such potentially saragable predicates is saved in
        an array and after reading const tables we check whether this
        predicates has become saragable.
      93a82420
    • unknown's avatar
      Changed several char* to LEX_STRING*. · 406fa384
      unknown authored
      BUILD/SETUP.sh:
        Added check for CCACHE_DISABLE. If set, do not
        use ccache at all.
      BUILD/compile-pentium-gcov:
        Moved CCACHE_DISABLE up before going into SETUP.sh.
        
        Added debug_extra_flags to extra_flags.
      mysql-test/r/create.result:
        Added tests for incorrect database names.
      mysql-test/r/ctype_create.result:
        Added tests for incorrect alter database names.
      mysql-test/r/events.result:
        Added tests for incorrect database names.
      mysql-test/r/grant.result:
        Output changed to capital letters.
      mysql-test/t/alter_table.test:
        Removed extra empty line
      mysql-test/t/create.test:
        Added tests for incorrect database names.
      mysql-test/t/ctype_create.test:
        Added tests for incorrect name handling
      mysql-test/t/events.test:
        Added tests for incorrect database names.
      sql/item_timefunc.cc:
        Added dummy case to avoid compiler warning.
      sql/mysql_priv.h:
        Changed argument from char pointer to LEX_STRING pointer.
      sql/mysqld.cc:
        Added a missing component from struct.
      sql/sql_class.h:
        Added function LEX_STRING_make that sets the string and length.
      sql/sql_db.cc:
        Changed several char pointers to lex_strings.
      sql/sql_lex.cc:
        name is now LEX_STRING
      sql/sql_lex.h:
        Changed name to LEX_STRING.
      sql/sql_parse.cc:
        Changed several char pointers to lex_strings.
        
        db_length needed a trick, because in old client protocol there
        was an extra char zero added to the string.
        
        check_db_name() now takes LEX_STRING pointer as an argument.
        
        Changed remove_escape() to take LEX_STRING pointer as an argument.
        
        Removed COM_CREATE_DB and COM_DROP_DB. These are obsolete.
      sql/sql_table.cc:
        char* -> LEX_STRING*
      sql/sql_yacc.yy:
        Changed char* -> LEX_STRING*
      sql/table.cc:
        check_db_name() now takes LEX_STRING* as argument instead of char*.
        
        Optimized code a bit.
      tests/mysql_client_test.c:
        Added test for (short) status.
        
        After defining out (ifdef) COM_DROP_DB and COM_CREATE_DB
        in mysqld.cc mysql_client_test needed to be informed that
        failing in recognizing these commands is not fatal error
        anymore.
      406fa384
  24. 12 Oct, 2006 2 commits
    • unknown's avatar
      BUG#20953: create proc with a create view that uses local vars/params · 68a6c937
      unknown authored
                 should fail to create
      
      The problem was that this type of errors was checked during view
      creation, which doesn't happen when CREATE VIEW is a statement of
      a created stored routine.
      
      The solution is to perform the checks at parse time.  The idea of the
      fix is that the parser checks if a construction just parsed is allowed
      in current circumstances by testing certain flags, and this flags are
      reset for VIEWs.
      
      The side effect of this change is that if the user already have
      such bogus routines, it will now get a error when trying to do
      
        SHOW CREATE PROCEDURE proc;
      
      (and some other) and when trying to execute such routine he will get
      
        ERROR 1457 (HY000): Failed to load routine test.p5. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
      
      However there should be very few such users (if any), and they may
      (and should) drop these bogus routines.
      
      
      mysql-test/r/sp-error.result:
        Add result for bug#20953: create proc with a create view that uses
        local vars/params should fail to create.
      mysql-test/r/view.result:
        Update results.
      mysql-test/t/sp-error.test:
        Add test case for bug#20953: create proc with a create view that uses
        local vars/params should fail to create.
      mysql-test/t/view.test:
        Add second test for variable in a view.
        Remove SP variable in a view test, as it tests wrong behaviour.
        Add test for derived table in a view.
      sql/sql_lex.cc:
        Remove LEX::variables_used.
      sql/sql_lex.h:
        Remove LEX::variables_used and add st_parsing_options structure and
        LEX::parsing_options member.
      sql/sql_view.cc:
        Move some error checking to sql/sql_yacc.yy.
      sql/sql_yacc.yy:
        Check for disallowed syntax in a CREATE VIEW at parse time to rise a
        error when it is used inside CREATE PROCEDURE and CREATE FUNCTION, as
        well as by itself.
      68a6c937
    • unknown's avatar
      Revert patch for bug #19764, which did not work with prepared statements. · 3d4f5dad
      unknown authored
      BitKeeper/deleted/.del-show_check-master.opt:
        Delete: mysql-test/t/show_check-master.opt
      3d4f5dad
  25. 04 Oct, 2006 1 commit
    • unknown's avatar
      Bug #19764: SHOW commands end up in the slow log as table scans · 5d9ebb4b
      unknown authored
      Set a flag when a SHOW command is parsed, and check it in log_slow_statement().  SHOW commands are not counted as slow queries, even if they use table scans.
      
      
      mysql-test/t/show_check-master.opt:
        BitKeeper file /usr/home/tim/m/bk/b19764/50/mysql-test/t/show_check-master.opt
      mysql-test/r/show_check.result:
        Add test for bug #19764
      mysql-test/t/show_check.test:
        Add test for bug #19764
      sql/sql_lex.cc:
        Set lex->is_show_command= FALSE in lex_start
      sql/sql_lex.h:
        Add LEX->is_slow_command flag to prevent SHOW commands from being written to the slow queries log
      sql/sql_parse.cc:
        Don't log slow statement if it is a SHOW command
      sql/sql_yacc.yy:
        Set lex->is_show_command for all SHOW commands
      5d9ebb4b
  26. 25 Sep, 2006 1 commit
    • unknown's avatar
      Fixed bug #21646. · fe2edf6d
      unknown authored
      Presence of a subquery in the ON expression of a join 
      should not block merging the view that contains this join.
      Before this patch the such views were converted into 
      into temporary table views.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #21646.
      mysql-test/t/view.test:
        Added a test case for bug #21646.
      sql/mysql_priv.h:
        Fixed bug #21646.
        Added a new parsing state 'IN_ON', true when
        the parser is in an ON expression of a join.
      sql/sql_lex.cc:
        Fixed bug #21646.
        Presence of a subquery in the ON expression of a join 
        should not block merging the view that contains this join.
      sql/sql_yacc.yy:
        Fixed bug #21646.
        Added a new parsing state 'IN_ON', true when
        the parser is in an ON expression of a join.
      fe2edf6d
  27. 16 Sep, 2006 1 commit
    • unknown's avatar
      Fixed bug #21493: crash for the second execution of a function · 48bafe40
      unknown authored
      containing a select statement that uses an aggregating IN subquery.
      Added a parameter to the function fix_prepare_information 
      to restore correctly the having clause for the second execution.
      Saved andor structure of the having conditions at the proper moment
      before any calls of split_sum_func2 that could modify the having structure
      adding new Item_ref objects. (These additions, are produced not with 
      the statement mem_root, but rather with the execution mem_root.)
      
      
      mysql-test/r/sp.result:
        Added a test case for bug #21493.
      mysql-test/t/sp.test:
        Added a test case for bug #21493.
      sql/sql_delete.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_insert.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_lex.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_lex.h:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_update.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      48bafe40
  28. 01 Sep, 2006 1 commit
    • unknown's avatar
      BUG#21477 "memory overruns for certain kinds of subqueries": · bdc8550b
      unknown authored
      make st_select_lex::setup_ref_array() take into account that 
      Item_sum-descendant objects located within descendant SELECTs
      may be added into ref_pointer_array.
      
      
      sql/item_sum.cc:
        BUG#21477 "memory overruns for certain kinds of subqueries":
        Make SELECT_LEX::n_sum_items contain # of Item_sum-derived objects
        that exist within this SELECT.
      sql/sql_lex.h:
        BUG#21477 "memory overruns for certain kinds of subqueries":
        Add SELECT_LEX::n_sum_items and SELECT_LEXT::n_child_sum_items.
      sql/sql_yacc.yy:
        BUG#21477 "memory overruns for certain kinds of subqueries":
        Make SELECT_LEX::n_sum_items contain # of Item_sum-derived objects
        that exist within this SELECT.
      bdc8550b
  29. 23 Aug, 2006 2 commits
    • unknown's avatar
      Bug #20908: Crash if select @@"" · d126dd21
      unknown authored
      Zero-length variables caused failures when using the length to look
      up the name in a hash.  Instead, signal that no zero-length name can
      ever be found and that to encounter one is a syntax error.
      
      
      mysql-test/r/variables.result:
        Results for test.
      mysql-test/t/variables.test:
        Insert tests to prove that zero-length variable names do not cause
        faults.
      sql/gen_lex_hash.cc:
        If the length is zero, then there is nothing to look-up in the 
        hash.
      sql/sql_lex.cc:
        Names of variables must not be empty.  Signal an error of that 
        happens.
      d126dd21
    • unknown's avatar
      Cleanup patch for handling of subselects in commands which cannot · 52add79c
      unknown authored
      handle them.
      
      Problem:
      CREATE|ALTER EVENT, HANDLER READ, KILL, Partitioning uses `expr` from the
      parser. This rule comes with all the rings and bells including subqueries.
      However, these commands are not subquery safe. For this reason there are two
      fuse checks in the parser. They were checking by command id. CREATE EVENT
      should forbid subquery is the fix for
      bug#16394 Events: Crash if schedule contains SELECT
      The fix has been incorporated as part of the patch for WL#3337 (Event scheduler
      new architecture).
      
      Solution:
      A new flag was added to LEX command_forbids_subselect. The fuse checks were
      changed. The commands are responsible to set the value to true whenever
      they can't handle subselects.
      
      
      sql/sql_lex.cc:
        initialize the variable
      sql/sql_lex.h:
        Add a new flag whether the parser should allow a subselect when
        parsing. This is temporarily turned off by commands like CREATE|ALTER EVENT,
        HA_READ, KILL. Could be used by other parts which reuse `expr` rule of the
        grammar and should not allow subqueries as part of it.
      sql/sql_yacc.yy:
        Forbid subselects in some commands in a better way.
        CREATE|ALTER EVENT, HANDLER READ, KILL, are not subselect
        safe for parameters and therefore they should be forbidden already in
        the parser.
        This patch makes it easier for the developer to add new commands in that
        sense similar to the mentioned above.
      52add79c
  30. 15 Aug, 2006 2 commits
    • unknown's avatar
      Bug #20908: Crash if select @@"" · 0ad9cf96
      unknown authored
      Zero-length variables caused failures when using the length to look
      up the name in a hash.  Instead, signal that no zero-length name can
      ever be found and that to encounter one is a syntax error.
      
      
      mysql-test/r/variables.result:
        Results for test.
      mysql-test/t/variables.test:
        Insert tests to prove that zero-length variable names do not cause
        faults.
      sql/gen_lex_hash.cc:
        If the length is zero, then there is nothing to look-up in the 
        hash.
      sql/sql_lex.cc:
        Names of variables must not be empty.  Signal an error of that 
        happens.
      0ad9cf96
    • unknown's avatar
      Fix for bug #20695: Charset introducer overrides charset definition for column. · 7d07fa9f
      unknown authored
        - if there are two character set definitions in the column declaration,
          we replace the first one with the second one as we store both in the LEX->charset
          slot. Add a separate slot to the LEX structure to store underscore charset.
        - convert default values to the column charset of STRING, VARSTRING fields 
          if necessary as well.
      
      
      mysql-test/r/ctype_recoding.result:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - test result.
      mysql-test/t/ctype_recoding.test:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - test case.
      sql/sql_lex.cc:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - LEX->underscore_charset introduced to store UNDERSCORE_CHARSET
      sql/sql_lex.h:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - LEX->underscore_charset introduced to store UNDERSCORE_CHARSET
      sql/sql_table.cc:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - convert default values to the column charset of VARSTRING, STRING, ENUM, 
            SET fields if necessary.
      sql/sql_yacc.yy:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - LEX->underscore_charset introduced to store UNDERSCORE_CHARSET
      7d07fa9f
  31. 14 Aug, 2006 1 commit
    • unknown's avatar
      Manual merge 5.0->5.1. Post-merge fixes. · 17c49048
      unknown authored
      client/mysqldump.c:
        A post-merge fix - 'sock' was renamed to 'mysql'
      mysql-test/r/events_bugs.result:
        A post merge fix: now we strip rear comments from the query before
        it gets into the log.
      mysql-test/r/func_group.result:
        A post merge fix: default clause is now printed uppercase.
      mysql-test/r/im_life_cycle.result:
        Fix my mistake in manual resolve.
      mysql-test/r/mysqlcheck.result:
        use test; - after we drop client_test_db there is no current database.
        This cleanup is present in 5.1 only, but the test that was added in 
        5.0 assumes there is a current database, test.
      mysql-test/r/mysqldump.result:
        Ignore results of execution of mysqldump: we can't rely on 
        MASTER_LOG_POS in test results, it's different for statement
        and row level logging.
      mysql-test/r/mysqlshow.result:
        A post-merge fix: information schema contains a few more tables
        in 5.1
      mysql-test/r/mysqltest.result:
        A post merge fix: add 5.1 test end separator.
      mysql-test/r/ndb_basic.result:
        A post-merge fix: add test end separators.
      mysql-test/r/rpl_switch_stm_row_mixed.result:
        A post merge fix: length of varbinary column is now 3 times less.
        Assuming a side effect of some other change. Length of any
        field is not relevant in this test.
      mysql-test/r/rpl_view.result:
        Add an end of test marker.
      mysql-test/r/show_check.result:
        Remove duplicate results. Add results from a merged test case.
      mysql-test/r/sp-error.result:
        Add test end separators.
      mysql-test/r/sp-security.result:
        Post-merge fix: use test after the current database is dropped.
      mysql-test/r/sp.result:
        Remove a duplicate result (bad merge that left a copy of
        the test case for Bug#19862 in the test suite).
      mysql-test/r/strict.result:
        An after-merge fix for a new test case: in 5.1 we issue a more accurate
        error message: "Incorrect value" instead of "Truncated value". I reason
        it so that in case of an error nothing is truncated, really.
        Also found similar changes in other test cases.
      mysql-test/r/type_datetime.result:
        Fix the text of an error.
      mysql-test/r/union.result:
        A post-merge fix: CHARACTER SET is now uppercase.
      mysql-test/t/mysqlcheck.test:
        A post-merge fix: use test, after current database is dropped, there
        is no current database.
      mysql-test/t/mysqldump.test:
        Disable result log: it's dependent on binlog position.
      mysql-test/t/sp-security.test:
        use test
      sql/item_sum.cc:
        Adjust the call to the constructor after the merge.
      sql/sp_head.cc:
        Add a missing DBUG_VOID_RETURN, move security checks out of
        execute_trigger to Table_triggers_list: in 5.1 we check for
        TRIGGER privilege, not SUPER privilege to execute triggers, so these
        checks lack table context inside execute_trigger and have to be
        performed when we have table object on hand.
      sql/sql_db.cc:
        A post-merge fix: adjust load_db_opt_by_name and check_db_dir_existence
        (new functions added in 5.0) to be tablename-to-filename encoding 
        friendly.
      sql/sql_lex.cc:
        A post-merge fix: make skip_rear_comments operate on const uchar *s.
      sql/sql_lex.h:
        A post-merge fix.
      sql/sql_show.cc:
        A post-merge fix: fix a bad merge, rename orig_sql_command -> sql_command.
      sql/sql_trigger.cc:
        A post-merge fix: move security checks to process_triggers
        from execute_trigger.
      sql/sql_view.cc:
        Adjust to the new signature of skip_rear_comments.
      sql/sql_yacc.yy:
        Adjust to the new signature of init_strings.
      17c49048
  32. 31 Jul, 2006 1 commit
    • unknown's avatar
      N'xxx' and _utf8'xxx' are not equivalent · 708e741b
      unknown authored
      Problem: Unescaping of '\' characters didn't work when processing N'xxx'.
      Fix: using get_text() instead of get_token() when scanning nationa strings.
      
      
      mysql-test/r/ctype_utf8.result:
        Adding test case
      mysql-test/t/ctype_utf8.test:
        Adding test case
      sql/sql_lex.cc:
        Fixing to process national strings using get_tex(),
        i.e. the same way with usual strings, to make
        unescaping work.
      708e741b
  33. 27 Jul, 2006 1 commit
    • unknown's avatar
      Fix for BUG#20438: CREATE statements for views, stored routines and triggers · a6387500
      unknown authored
      can be not replicable.
      
      Now CREATE statements for writing in the binlog are created as follows:
        - the beginning of the statement is re-created;
        - the rest of the statement is copied from the original query.
      
      The problem appears when there is a version-specific comment (produced by
      mysqldump), started in the re-created part of the statement and closed in the
      copied part -- there is closing comment-parenthesis, but there is no opening
      one.
      
      The proper fix could be to re-create original statement, but we can not
      implement it in 5.0. So, for 5.0 the fix is just to cut closing
      comment-parenthesis. This technique is also used for SHOW CREATE PROCEDURE
      statement (so we are able to reuse existing code).
      
      
      mysql-test/r/rpl_sp.result:
        Updated result file.
      mysql-test/r/rpl_trigger.result:
        Updated result file.
      mysql-test/r/rpl_view.result:
        Updated result file.
      mysql-test/t/rpl_sp.test:
        Added test case for BUG#20438.
      mysql-test/t/rpl_trigger.test:
        Added test case for BUG#20438.
      mysql-test/t/rpl_view.test:
        Added test case for BUG#20438.
      sql/sp.cc:
        Trim comments at the end.
      sql/sp_head.cc:
        Moved this code to the separate function to be re-used.
      sql/sql_lex.cc:
        Added a new function.
      sql/sql_lex.h:
        Added a new function.
      sql/sql_trigger.cc:
        Trim comments at the end.
      sql/sql_view.cc:
        Trim comments at the end.
      a6387500