List:Commits« Previous MessageNext Message »
From:Hakan Kuecuekyilmaz Date:December 16 2008 10:29pm
Subject:bzr push into mysql-6.0-falcon branch (hky:2936 to 2941)
View as plain text  
 2941 Hakan Kuecuekyilmaz	2008-12-16
      Merged:
          mysql-6.0-falcon-team --> mysql-6.0-falcon.
modified:
  .bzr-mysql/default.conf

 2940 Hakan Kuecuekyilmaz	2008-12-16 [merge]
      Automerge.
modified:
  storage/falcon/Table.cpp
  storage/falcon/Transaction.cpp
  storage/falcon/TransactionManager.cpp
  storage/falcon/ha_falcon.cpp

 2939 Hakan Kuecuekyilmaz	2008-12-16
      Fix for
      Bug #39314 falcon_bug_26433 fails with an offset of 1 in row numbers in expected warnings
modified:
  mysql-test/suite/falcon/t/falcon_bug_26433.test

 2938 Hakan Kuecuekyilmaz	2008-12-16
      Project secret code name:
              "Make Wlad Happy"[tm]
      
      Cleanup of falcon_team test suite. Only
      three tests are left in falcon_team.
removed:
  mysql-test/suite/falcon_team/r/falcon_bug_29246.result
  mysql-test/suite/falcon_team/t/falcon_bug_29246.test
added:
  mysql-test/suite/falcon/r/falcon_bug_26433-big.result
  mysql-test/suite/falcon/t/falcon_bug_26433-big.test
renamed:
  mysql-test/suite/falcon_team/r/falcon_bug_26433.result => mysql-test/suite/falcon/r/falcon_bug_26433.result
  mysql-test/suite/falcon_team/r/falcon_bug_28048.result => mysql-test/suite/falcon/r/falcon_bug_28048.result
  mysql-test/suite/falcon_team/r/falcon_bug_31296.result => mysql-test/suite/falcon/r/falcon_bug_31296.result
  mysql-test/suite/falcon_team/r/falcon_bug_34351_B.result => mysql-test/suite/falcon/r/falcon_bug_34351_B.result
  mysql-test/suite/falcon_team/r/falcon_bug_36294.result => mysql-test/suite/falcon_team/r/falcon_bug_36294-big.result
  mysql-test/suite/falcon_team/t/falcon_bug_26433.test => mysql-test/suite/falcon/t/falcon_bug_26433.test
  mysql-test/suite/falcon_team/t/falcon_bug_28048.test => mysql-test/suite/falcon/t/falcon_bug_28048.test
  mysql-test/suite/falcon_team/t/falcon_bug_31296.test => mysql-test/suite/falcon/t/falcon_bug_31296.test
  mysql-test/suite/falcon_team/t/falcon_bug_34351_B.test => mysql-test/suite/falcon/t/falcon_bug_34351_B.test
  mysql-test/suite/falcon_team/t/falcon_bug_36294.test => mysql-test/suite/falcon_team/t/falcon_bug_36294-big.test
modified:
  mysql-test/suite/falcon/r/falcon_bug_29246.result
  mysql-test/suite/falcon/t/falcon_bug_29246.test
  mysql-test/suite/falcon_team/t/falcon_bug_34174.test
  mysql-test/suite/falcon_team/t/test2bug.def
  mysql-test/suite/falcon/t/falcon_bug_34351_B.test
  mysql-test/suite/falcon_team/t/falcon_bug_36294-big.test

 2937 Hakan Kuecuekyilmaz	2008-12-16
      Lowered loop count and adjusted warnings.
modified:
  mysql-test/suite/falcon_team/r/falcon_bug_26433.result
  mysql-test/suite/falcon_team/t/falcon_bug_26433.test

 2936 Hakan Kuecuekyilmaz	2008-12-16 [merge]
      Merged:
          mysql-6.0 --> mysql-6.0-falcon --> mysql-6.0-falcon-team.
removed:
  mysql-test/include/wait_until_disconnected.inc
  mysql-test/r/innodb_bug34053.result
  mysql-test/r/rpl_slave_exec_mode_basic.result
  mysql-test/suite/rpl_ndb_big/r/rpl_ndb_log.result
  mysql-test/suite/rpl_ndb_big/t/rpl_ndb_log-master.opt
  mysql-test/suite/rpl_ndb_big/t/rpl_ndb_log.test
  mysql-test/t/innodb_bug34053.test
  mysql-test/t/rpl_slave_exec_mode_basic.test
added:
  mysql-test/extra/rpl_tests/rpl_row_basic_no_pk.test
  mysql-test/include/mysqladmin_shutdown.inc
  mysql-test/include/show_qc_status.inc
  mysql-test/include/wait_until_disconnected.inc
  mysql-test/include/world.inc
  mysql-test/include/world_schema.inc
  mysql-test/include/world_schema1.inc
  mysql-test/r/join_cache.result
  mysql-test/r/join_nested_jcl6.result
  mysql-test/r/join_outer_jcl6.result
  mysql-test/r/maria_mrr.result
  mysql-test/r/rpl_slave_allow_batching_basic.result
  mysql-test/r/rpl_slave_compressed_protocol_basic.result
  mysql-test/r/rpl_slave_exec_mode_basic.result
  mysql-test/r/rpl_slave_net_timeout_basic.result
  mysql-test/r/select_jcl6.result
  mysql-test/r/subselect3_jcl6.result
  mysql-test/r/subselect_sj2_jcl6.result
  mysql-test/r/subselect_sj_jcl6.result
  mysql-test/std_data/ndb_apply_status.frm
  mysql-test/suite/backup_engines/r/backup_partition.result
  mysql-test/suite/backup_engines/t/backup_partition.test
  mysql-test/suite/maria/r/maria-recovery3.result
  mysql-test/suite/maria/r/maria_showlog_error.result
  mysql-test/suite/maria/t/maria-recovery3-master.opt
  mysql-test/suite/maria/t/maria-recovery3.test
  mysql-test/suite/maria/t/maria_showlog_error.test
  mysql-test/suite/ndb/r/bug36547.result
  mysql-test/suite/ndb/r/ndb_cache_trans.result
  mysql-test/suite/ndb/r/ndb_dbug_lock.result
  mysql-test/suite/ndb/r/ndb_discover_db.result
  mysql-test/suite/ndb/r/ndb_discover_db2.result
  mysql-test/suite/ndb/t/bug36547.test
  mysql-test/suite/ndb/t/ndb_cache_trans.test
  mysql-test/suite/ndb/t/ndb_dbug_lock.test
  mysql-test/suite/ndb/t/ndb_discover_db.test
  mysql-test/suite/ndb/t/ndb_discover_db2-master.opt
  mysql-test/suite/ndb/t/ndb_discover_db2.test
  mysql-test/suite/ndb_binlog/
  mysql-test/suite/ndb_binlog/r/
  mysql-test/suite/ndb_binlog/r/ndb_binlog_restore.result
  mysql-test/suite/ndb_binlog/t/
  mysql-test/suite/ndb_binlog/t/ndb_binlog_restore-master.opt
  mysql-test/suite/ndb_binlog/t/ndb_binlog_restore.test
  mysql-test/suite/parts/r/partition_alter2_1_maria.result
  mysql-test/suite/parts/r/partition_alter2_2_maria.result
  mysql-test/suite/parts/r/partition_auto_increment_maria.result
  mysql-test/suite/parts/t/partition_alter2_1_maria.test
  mysql-test/suite/parts/t/partition_alter2_2_maria.test
  mysql-test/suite/parts/t/partition_auto_increment_maria.test
  mysql-test/suite/rpl_ndb/r/rpl_ndb_bug22045.result
  mysql-test/suite/rpl_ndb/t/rpl_ndb_bug22045.test
  mysql-test/t/join_cache.test
  mysql-test/t/join_nested_jcl6.test
  mysql-test/t/join_outer_jcl6.test
  mysql-test/t/maria_mrr.test
  mysql-test/t/rpl_slave_allow_batching_basic.test
  mysql-test/t/rpl_slave_compressed_protocol_basic.test
  mysql-test/t/rpl_slave_exec_mode_basic.test
  mysql-test/t/rpl_slave_net_timeout_basic.test
  mysql-test/t/select_jcl6.test
  mysql-test/t/subselect3_jcl6.test
  mysql-test/t/subselect_sj2_jcl6.test
  mysql-test/t/subselect_sj_jcl6.test
  mysys/tests/
  mysys/tests/Makefile.am
  mysys/tests/test_thr_mutex.c
  sql/backup/debug.h
  sql/ha_ndbcluster_lock_ext.h
  sql/sql_join_cache.cc
  storage/ndb/include/util/NdbTap.hpp
  storage/ndb/ndbapi-examples/ndbapi_recattr_vs_record/
  storage/ndb/ndbapi-examples/ndbapi_recattr_vs_record/Makefile
  storage/ndb/ndbapi-examples/ndbapi_recattr_vs_record/main.cpp
  storage/ndb/src/common/util/ndb_show_compat.cpp
  storage/ndb/swig/
  storage/ndb/swig/Makefile.am
  storage/ndb/swig/globals.i
  storage/ndb/swig/mgmapi/
  storage/ndb/swig/mgmapi/ClusterState.i
  storage/ndb/swig/mgmapi/NdbLogEvent.i
  storage/ndb/swig/mgmapi/NdbLogEventManager.i
  storage/ndb/swig/mgmapi/NdbMgm.i
  storage/ndb/swig/mgmapi/NdbMgmFactory.i
  storage/ndb/swig/mgmapi/NdbMgmReply.i
  storage/ndb/swig/mgmapi/NodeState.i
  storage/ndb/swig/mgmapi/events.i
  storage/ndb/swig/mgmapi/listeners.i
  storage/ndb/swig/mgmapi/mgmglobals.i
  storage/ndb/swig/ndbapi/
  storage/ndb/swig/ndbapi/Ndb.i
  storage/ndb/swig/ndbapi/NdbBlob.i
  storage/ndb/swig/ndbapi/NdbClusterConnection.i
  storage/ndb/swig/ndbapi/NdbDictionary.i
  storage/ndb/swig/ndbapi/NdbError.i
  storage/ndb/swig/ndbapi/NdbEventOperation.i
  storage/ndb/swig/ndbapi/NdbFactory.i
  storage/ndb/swig/ndbapi/NdbIndexOperation.i
  storage/ndb/swig/ndbapi/NdbIndexScanOperation.i
  storage/ndb/swig/ndbapi/NdbOperation.i
  storage/ndb/swig/ndbapi/NdbRecAttr.i
  storage/ndb/swig/ndbapi/NdbScanFilter.i
  storage/ndb/swig/ndbapi/NdbScanOperation.i
  storage/ndb/swig/ndbapi/NdbTransaction.i
  storage/ndb/swig/ndbapi/ndbglobals.i
  storage/ndb/test/include/SqlClient.hpp
  storage/ndb/test/ndbapi/testUpgrade.cpp
  storage/ndb/test/run-test/atrt-backtrace.sh
  storage/ndb/test/run-test/command.cpp
  storage/ndb/test/run-test/db.cpp
  storage/ndb/test/run-test/db.sql
  storage/ndb/test/src/SqlClient.cpp
renamed:
  mysql-test/r/rpl_slave_allow_batching_basic.result => mysql-test/r/slave_allow_batching_basic.result
  mysql-test/r/rpl_slave_compressed_protocol_basic.result => mysql-test/r/slave_compressed_protocol_basic.result
  mysql-test/r/rpl_slave_net_timeout_basic.result => mysql-test/r/slave_net_timeout_basic.result
  mysql-test/suite/funcs_1/r/is_collation_charset_applic.result => mysql-test/suite/funcs_1/r/is_collation_character_set_applicability.result
  mysql-test/suite/funcs_1/t/is_collation_charset_applic.test => mysql-test/suite/funcs_1/t/is_collation_character_set_applicability.test
  mysql-test/suite/ndb/r/ndb_binlog_basic.result => mysql-test/suite/ndb_binlog/r/ndb_binlog_basic.result
  mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result => mysql-test/suite/ndb_binlog/r/ndb_binlog_ddl_multi.result
  mysql-test/suite/ndb/r/ndb_binlog_discover.result => mysql-test/suite/ndb_binlog/r/ndb_binlog_discover.result
  mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result => mysql-test/suite/ndb_binlog/r/ndb_binlog_ignore_db.result
  mysql-test/suite/ndb/r/ndb_binlog_log_bin.result => mysql-test/suite/ndb_binlog/r/ndb_binlog_log_bin.result
  mysql-test/suite/ndb/r/ndb_binlog_multi.result => mysql-test/suite/ndb_binlog/r/ndb_binlog_multi.result
  mysql-test/suite/ndb/t/ndb_binlog_basic.test => mysql-test/suite/ndb_binlog/t/ndb_binlog_basic.test
  mysql-test/suite/ndb/t/ndb_binlog_ddl_multi.test => mysql-test/suite/ndb_binlog/t/ndb_binlog_ddl_multi.test
  mysql-test/suite/ndb/t/ndb_binlog_discover.test => mysql-test/suite/ndb_binlog/t/ndb_binlog_discover.test
  mysql-test/suite/ndb/t/ndb_binlog_ignore_db-master.opt => mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db-master.opt
  mysql-test/suite/ndb/t/ndb_binlog_ignore_db.test => mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db.test
  mysql-test/suite/ndb/t/ndb_binlog_log_bin.test => mysql-test/suite/ndb_binlog/t/ndb_binlog_log_bin.test
  mysql-test/suite/ndb/t/ndb_binlog_multi.test => mysql-test/suite/ndb_binlog/t/ndb_binlog_multi.test
  mysql-test/suite/ndb_team/r/ndb_binlog_format.result => mysql-test/suite/ndb_binlog/r/ndb_binlog_format.result
  mysql-test/suite/ndb_team/r/ndb_dd_restore_compat.result => mysql-test/suite/ndb/r/ndb_dd_restore_compat.result
  mysql-test/suite/ndb_team/t/ndb_binlog_format.test => mysql-test/suite/ndb_binlog/t/ndb_binlog_format.test
  mysql-test/suite/ndb_team/t/ndb_dd_restore_compat.test => mysql-test/suite/ndb/t/ndb_dd_restore_compat.test
  mysql-test/suite/rpl_ndb_big/r/rpl_ndb_add_column.result => mysql-test/suite/rpl_ndb/r/rpl_ndb_add_column.result
  mysql-test/suite/rpl_ndb_big/t/rpl_ndb_add_column.test => mysql-test/suite/rpl_ndb/t/rpl_ndb_add_column.test
  mysql-test/t/rpl_slave_allow_batching_basic.test => mysql-test/t/slave_allow_batching_basic.test
  mysql-test/t/rpl_slave_compressed_protocol_basic.test => mysql-test/t/slave_compressed_protocol_basic.test
  mysql-test/t/rpl_slave_net_timeout_basic.test => mysql-test/t/slave_net_timeout_basic.test
  mysys/test_charset.c => mysys/tests/test_charset.c
  mysys/test_dir.c => mysys/tests/test_dir.c
  mysys/testhash.c => mysys/tests/testhash.c
  storage/ndb/src/common/util/ndb_init.c => storage/ndb/src/common/util/ndb_init.cpp
modified:
  .bzrignore
  BUILD/SETUP.sh
  BUILD/autorun.sh
  CMakeLists.txt
  Makefile.am
  client/CMakeLists.txt
  client/Makefile.am
  client/mysql.cc
  client/mysqladmin.cc
  client/mysqldump.c
  client/mysqlimport.c
  client/mysqlshow.c
  client/mysqlslap.c
  client/mysqltest.c
  cluster_change_hist.txt
  config/ac-macros/ha_ndbcluster.m4
  config/ac-macros/zlib.m4
  configure.in
  dbug/CMakeLists.txt
  dbug/Makefile.am
  dbug/dbug.c
  extra/CMakeLists.txt
  extra/Makefile.am
  include/config-win.h
  include/hash.h
  include/my_base.h
  include/my_pthread.h
  include/mysql.h.pp
  include/mysql_com.h
  include/thr_lock.h
  include/waiting_threads.h
  libmysql/CMakeLists.txt
  libmysql/Makefile.am
  libmysql/Makefile.shared
  libmysqld/CMakeLists.txt
  libmysqld/Makefile.am
  libmysqld/examples/CMakeLists.txt
  libmysqld/examples/Makefile.am
  mysql-test/Makefile.am
  mysql-test/extra/rpl_tests/rpl_row_basic.test
  mysql-test/include/have_blackhole.inc
  mysql-test/include/maria_empty_logs.inc
  mysql-test/include/wait_until_connected_again.inc
  mysql-test/lib/mtr_cases.pl
  mysql-test/lib/mtr_report.pl
  mysql-test/mysql-test-run.pl
  mysql-test/r/compress.result
  mysql-test/r/fulltext.result
  mysql-test/r/index_merge_myisam.result
  mysql-test/r/join_nested.result
  mysql-test/r/join_outer.result
  mysql-test/r/myisam_mrr.result
  mysql-test/r/named_pipe.result
  mysql-test/r/order_by.result
  mysql-test/r/pool_of_threads.result
  mysql-test/r/select.result
  mysql-test/r/shm.result
  mysql-test/r/sp-error.result
  mysql-test/r/ssl.result
  mysql-test/r/ssl_compress.result
  mysql-test/r/subselect3.result
  mysql-test/r/subselect_sj.result
  mysql-test/r/subselect_sj2.result
  mysql-test/r/view.result
  mysql-test/suite/backup/r/backup.result
  mysql-test/suite/backup/r/backup_backupdir.result
  mysql-test/suite/backup/r/backup_default.result
  mysql-test/suite/backup/r/backup_errors.result
  mysql-test/suite/backup/r/backup_views.result
  mysql-test/suite/backup/t/backup.test
  mysql-test/suite/backup/t/backup_backupdir.test
  mysql-test/suite/backup/t/backup_default.test
  mysql-test/suite/backup/t/backup_errors.test
  mysql-test/suite/backup/t/backup_myisam1.test
  mysql-test/suite/backup/t/backup_views.test
  mysql-test/suite/backup/t/disabled.def
  mysql-test/suite/binlog/r/binlog_multi_engine.result
  mysql-test/suite/falcon/r/falcon_online_index.result
  mysql-test/suite/falcon/r/falcon_select.result
  mysql-test/suite/falcon/r/index_merge_falcon.result
  mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result
  mysql-test/suite/funcs_1/r/processlist_val_ps.result
  mysql-test/suite/funcs_1/t/disabled.def
  mysql-test/suite/maria/r/maria-big.result
  mysql-test/suite/maria/r/maria-preload.result
  mysql-test/suite/maria/r/maria-recovery-big.result
  mysql-test/suite/maria/r/maria.result
  mysql-test/suite/maria/r/maria3.result
  mysql-test/suite/maria/r/maria_notembedded.result
  mysql-test/suite/maria/t/maria-big.test
  mysql-test/suite/maria/t/maria-recovery-big-master.opt
  mysql-test/suite/maria/t/maria-recovery-big.test
  mysql-test/suite/maria/t/maria.test
  mysql-test/suite/maria/t/maria3.test
  mysql-test/suite/maria/t/maria_notembedded.test
  mysql-test/suite/ndb/r/ndb_alter_table.result
  mysql-test/suite/ndb/r/ndb_alter_table3.result
  mysql-test/suite/ndb/r/ndb_alter_table_backup.result
  mysql-test/suite/ndb/r/ndb_alter_table_online.result
  mysql-test/suite/ndb/r/ndb_alter_table_online2.result
  mysql-test/suite/ndb/r/ndb_basic.result
  mysql-test/suite/ndb/r/ndb_blob.result
  mysql-test/suite/ndb/r/ndb_cache.result
  mysql-test/suite/ndb/r/ndb_condition_pushdown.result
  mysql-test/suite/ndb/r/ndb_dd_ddl.result
  mysql-test/suite/ndb/r/ndb_insert.result
  mysql-test/suite/ndb/r/ndb_multi_row.result
  mysql-test/suite/ndb/r/ndb_partition_range.result
  mysql-test/suite/ndb/r/ndb_read_multi_range.result
  mysql-test/suite/ndb/r/ndb_replace.result
  mysql-test/suite/ndb/r/ndb_restore.result
  mysql-test/suite/ndb/r/ndb_restore_compat.result
  mysql-test/suite/ndb/r/ndb_restore_different_endian_data.result
  mysql-test/suite/ndb/r/ndb_single_user.result
  mysql-test/suite/ndb/r/ndb_trigger.result
  mysql-test/suite/ndb/t/disabled.def
  mysql-test/suite/ndb/t/ndb_alter_table.test
  mysql-test/suite/ndb/t/ndb_alter_table3.test
  mysql-test/suite/ndb/t/ndb_alter_table_backup.test
  mysql-test/suite/ndb/t/ndb_alter_table_online.test
  mysql-test/suite/ndb/t/ndb_alter_table_online2.test
  mysql-test/suite/ndb/t/ndb_basic.test
  mysql-test/suite/ndb/t/ndb_blob.test
  mysql-test/suite/ndb/t/ndb_cache.test
  mysql-test/suite/ndb/t/ndb_cache2.test
  mysql-test/suite/ndb/t/ndb_condition_pushdown.test
  mysql-test/suite/ndb/t/ndb_dd_ddl.test
  mysql-test/suite/ndb/t/ndb_dd_dump.test
  mysql-test/suite/ndb/t/ndb_insert.test
  mysql-test/suite/ndb/t/ndb_partition_range.test
  mysql-test/suite/ndb/t/ndb_read_multi_range.test
  mysql-test/suite/ndb/t/ndb_replace.test
  mysql-test/suite/ndb/t/ndb_restore.test
  mysql-test/suite/ndb/t/ndb_restore_compat.test
  mysql-test/suite/ndb/t/ndb_restore_different_endian_data.test
  mysql-test/suite/ndb/t/ndb_single_user.test
  mysql-test/suite/ndb/t/ndb_trigger.test
  mysql-test/suite/ndb_team/r/ndb_autodiscover3.result
  mysql-test/suite/ndb_team/t/ndb_autodiscover3.test
  mysql-test/suite/ndb_team/t/rpl_ndb_dd_advance.test
  mysql-test/suite/parts/r/partition_engine_ndb.result
  mysql-test/suite/rpl/r/rpl_heartbeat.result
  mysql-test/suite/rpl/r/rpl_locktrans_innodb.result
  mysql-test/suite/rpl/t/rpl_row_basic_2myisam.test
  mysql-test/suite/rpl/t/rpl_row_basic_3innodb.test
  mysql-test/suite/rpl_ndb/r/rpl_ndb_basic.result
  mysql-test/suite/rpl_ndb/t/disabled.def
  mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test
  mysql-test/suite/rpl_ndb_big/r/rpl_ndb_apply_status.result
  mysql-test/suite/rpl_ndb_big/r/rpl_row_basic_7ndb.result
  mysql-test/suite/rpl_ndb_big/t/disabled.def
  mysql-test/suite/rpl_ndb_big/t/rpl_ndb_apply_status.test
  mysql-test/suite/rpl_ndb_big/t/rpl_row_basic_7ndb.test
  mysql-test/t/events_logs_tests-master.opt
  mysql-test/t/fulltext.test
  mysql-test/t/log_tables-big-master.opt
  mysql-test/t/log_tables-master.opt
  mysql-test/t/multi_statement-master.opt
  mysql-test/t/partition_not_windows.test
  mysql-test/t/ps-master.opt
  mysql-test/t/show_check-master.opt
  mysql-test/t/slow_query_log_file_basic-master.opt
  mysql-test/t/slow_query_log_file_func-master.opt
  mysql-test/t/sp-error.test
  mysql-test/t/status.test
  mysql-test/t/subselect3.test
  mysql-test/t/union-master.opt
  mysys/CMakeLists.txt
  mysys/Makefile.am
  mysys/hash.c
  mysys/lf_hash.c
  mysys/my_bitmap.c
  mysys/my_getopt.c
  mysys/my_init.c
  mysys/my_pthread.c
  mysys/my_sleep.c
  mysys/my_thr_init.c
  mysys/my_wincond.c
  mysys/my_winthread.c
  mysys/mysys_priv.h
  mysys/queues.c
  mysys/thr_mutex.c
  mysys/waiting_threads.c
  netware/Makefile.am
  regex/CMakeLists.txt
  regex/Makefile.am
  scripts/CMakeLists.txt
  scripts/Makefile.am
  scripts/make_win_bin_dist
  sql/CMakeLists.txt
  sql/Makefile.am
  sql/backup/CMakeLists.txt
  sql/backup/backup_info.cc
  sql/backup/backup_info.h
  sql/backup/backup_kernel.h
  sql/backup/be_thread.cc
  sql/backup/data_backup.cc
  sql/backup/image_info.cc
  sql/backup/image_info.h
  sql/backup/kernel.cc
  sql/backup/logger.cc
  sql/backup/logger.h
  sql/backup/restore_info.h
  sql/backup/stream.cc
  sql/backup/stream.h
  sql/event_db_repository.cc
  sql/event_parse_data.cc
  sql/event_parse_data.h
  sql/event_queue.cc
  sql/event_scheduler.cc
  sql/events.cc
  sql/field.cc
  sql/field.h
  sql/gen_lex_hash.cc
  sql/ha_ndbcluster.cc
  sql/ha_ndbcluster.h
  sql/ha_ndbcluster_binlog.cc
  sql/ha_ndbcluster_binlog.h
  sql/ha_ndbcluster_cond.cc
  sql/ha_ndbcluster_cond.h
  sql/ha_ndbcluster_connection.cc
  sql/ha_ndbcluster_connection.h
  sql/ha_partition.cc
  sql/ha_partition.h
  sql/handler.cc
  sql/handler.h
  sql/item.cc
  sql/item.h
  sql/item_create.cc
  sql/item_func.cc
  sql/item_func.h
  sql/lock.cc
  sql/log.cc
  sql/log_event.cc
  sql/mysql_priv.h
  sql/mysqld.cc
  sql/opt_range.cc
  sql/partition_info.h
  sql/protocol.cc
  sql/rpl_injector.cc
  sql/rpl_injector.h
  sql/rpl_mi.cc
  sql/set_var.cc
  sql/share/errmsg.txt
  sql/si_logs.h
  sql/sp_cache.cc
  sql/sp_cache.h
  sql/sp_head.cc
  sql/sql_audit.cc
  sql/sql_base.cc
  sql/sql_cache.cc
  sql/sql_class.cc
  sql/sql_class.h
  sql/sql_connect.cc
  sql/sql_db.cc
  sql/sql_delete.cc
  sql/sql_insert.cc
  sql/sql_lex.cc
  sql/sql_lex.h
  sql/sql_parse.cc
  sql/sql_partition.cc
  sql/sql_rename.cc
  sql/sql_repl.cc
  sql/sql_select.cc
  sql/sql_select.h
  sql/sql_show.cc
  sql/sql_show.h
  sql/sql_table.cc
  sql/sql_union.cc
  sql/sql_update.cc
  sql/sql_yacc.yy
  sql/table.cc
  sql/table.h
  sql/udf_example.c
  storage/archive/Makefile.am
  storage/archive/archive_reader.c
  storage/blackhole/CMakeLists.txt
  storage/blackhole/ha_blackhole.cc
  storage/blackhole/ha_blackhole.h
  storage/csv/CMakeLists.txt
  storage/example/CMakeLists.txt
  storage/falcon/Index.cpp
  storage/falcon/StorageVersion.h
  storage/falcon/ha_falcon.cpp
  storage/falcon/ha_falcon.h
  storage/heap/CMakeLists.txt
  storage/heap/Makefile.am
  storage/innobase/CMakeLists.txt
  storage/innobase/handler/ha_innodb.cc
  storage/innobase/handler/ha_innodb.h
  storage/maria/CMakeLists.txt
  storage/maria/KNOWN_BUGS.txt
  storage/maria/Makefile.am
  storage/maria/ha_maria.cc
  storage/maria/ha_maria.h
  storage/maria/ma_bitmap.c
  storage/maria/ma_blockrec.c
  storage/maria/ma_blockrec.h
  storage/maria/ma_checkpoint.c
  storage/maria/ma_close.c
  storage/maria/ma_commit.c
  storage/maria/ma_control_file.c
  storage/maria/ma_delete.c
  storage/maria/ma_extra.c
  storage/maria/ma_key.c
  storage/maria/ma_loghandler.c
  storage/maria/ma_open.c
  storage/maria/ma_pagecache.c
  storage/maria/ma_recovery.c
  storage/maria/ma_rkey.c
  storage/maria/ma_rnext.c
  storage/maria/ma_rnext_same.c
  storage/maria/ma_state.c
  storage/maria/ma_state.h
  storage/maria/ma_test1.c
  storage/maria/ma_test2.c
  storage/maria/ma_update.c
  storage/maria/ma_write.c
  storage/maria/maria_def.h
  storage/maria/trnman.c
  storage/maria/trnman_public.h
  storage/maria/unittest/CMakeLists.txt
  storage/maria/unittest/Makefile.am
  storage/myisam/CMakeLists.txt
  storage/myisam/Makefile.am
  storage/myisam/ha_myisam.cc
  storage/myisam/ha_myisam.h
  storage/myisam/mi_open.c
  storage/myisam/myisampack.c
  storage/myisammrg/CMakeLists.txt
  storage/myisammrg/ha_myisammrg.cc
  storage/ndb/Makefile.am
  storage/ndb/config/common.mk.am
  storage/ndb/config/type_ndbapitest.mk.am
  storage/ndb/config/type_ndbapitools.mk.am
  storage/ndb/docs/doxygen/postdoxy.pl
  storage/ndb/include/debugger/SignalLoggerManager.hpp
  storage/ndb/include/kernel/Interpreter.hpp
  storage/ndb/include/kernel/NodeState.hpp
  storage/ndb/include/kernel/signaldata/AttrInfo.hpp
  storage/ndb/include/kernel/signaldata/DictLock.hpp
  storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp
  storage/ndb/include/kernel/signaldata/KeyInfo.hpp
  storage/ndb/include/kernel/signaldata/ListTables.hpp
  storage/ndb/include/kernel/signaldata/SumaImpl.hpp
  storage/ndb/include/logger/LogHandler.hpp
  storage/ndb/include/logger/Logger.hpp
  storage/ndb/include/mgmapi/mgmapi.h
  storage/ndb/include/mgmapi/mgmapi_config_parameters.h
  storage/ndb/include/mgmapi/mgmapi_debug.h
  storage/ndb/include/mgmapi/mgmapi_error.h
  storage/ndb/include/mgmapi/ndb_logevent.h
  storage/ndb/include/ndb_constants.h
  storage/ndb/include/ndb_version.h.in
  storage/ndb/include/ndbapi/Ndb.hpp
  storage/ndb/include/ndbapi/NdbApi.hpp
  storage/ndb/include/ndbapi/NdbBlob.hpp
  storage/ndb/include/ndbapi/NdbDictionary.hpp
  storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp
  storage/ndb/include/ndbapi/NdbIndexStat.hpp
  storage/ndb/include/ndbapi/NdbInterpretedCode.hpp
  storage/ndb/include/ndbapi/NdbOperation.hpp
  storage/ndb/include/ndbapi/NdbRecAttr.hpp
  storage/ndb/include/ndbapi/NdbReceiver.hpp
  storage/ndb/include/ndbapi/NdbScanFilter.hpp
  storage/ndb/include/ndbapi/NdbScanOperation.hpp
  storage/ndb/include/ndbapi/NdbTransaction.hpp
  storage/ndb/include/util/BaseString.hpp
  storage/ndb/include/util/InputStream.hpp
  storage/ndb/include/util/NdbOut.hpp
  storage/ndb/include/util/OutputStream.hpp
  storage/ndb/include/util/SimpleProperties.hpp
  storage/ndb/include/util/SocketServer.hpp
  storage/ndb/include/util/basestring_vsnprintf.h
  storage/ndb/include/util/ndb_opts.h
  storage/ndb/include/util/socket_io.h
  storage/ndb/ndbapi-examples/Makefile
  storage/ndb/ndbapi-examples/mgmapi_logevent/Makefile
  storage/ndb/ndbapi-examples/mgmapi_logevent2/Makefile
  storage/ndb/ndbapi-examples/ndbapi_async/Makefile
  storage/ndb/ndbapi-examples/ndbapi_async1/Makefile
  storage/ndb/ndbapi-examples/ndbapi_blob/Makefile
  storage/ndb/ndbapi-examples/ndbapi_blob_ndbrecord/Makefile
  storage/ndb/ndbapi-examples/ndbapi_blob_ndbrecord/main.cpp
  storage/ndb/ndbapi-examples/ndbapi_event/Makefile
  storage/ndb/ndbapi-examples/ndbapi_retries/Makefile
  storage/ndb/ndbapi-examples/ndbapi_s_i_ndbrecord/Makefile
  storage/ndb/ndbapi-examples/ndbapi_s_i_ndbrecord/main.cpp
  storage/ndb/ndbapi-examples/ndbapi_scan/Makefile
  storage/ndb/ndbapi-examples/ndbapi_simple/Makefile
  storage/ndb/ndbapi-examples/ndbapi_simple_dual/Makefile
  storage/ndb/ndbapi-examples/ndbapi_simple_index/Makefile
  storage/ndb/src/Makefile.am
  storage/ndb/src/common/debugger/EventLogger.cpp
  storage/ndb/src/common/debugger/signaldata/SignalNames.cpp
  storage/ndb/src/common/logger/LogHandler.cpp
  storage/ndb/src/common/logger/Logger.cpp
  storage/ndb/src/common/portlib/NdbCondition.c
  storage/ndb/src/common/portlib/NdbTick.c
  storage/ndb/src/common/transporter/TCP_Transporter.cpp
  storage/ndb/src/common/transporter/Transporter.cpp
  storage/ndb/src/common/transporter/TransporterRegistry.cpp
  storage/ndb/src/common/util/BaseString.cpp
  storage/ndb/src/common/util/Makefile.am
  storage/ndb/src/common/util/OutputStream.cpp
  storage/ndb/src/common/util/SocketServer.cpp
  storage/ndb/src/common/util/socket_io.cpp
  storage/ndb/src/common/util/version.c
  storage/ndb/src/cw/cpcd/APIService.cpp
  storage/ndb/src/cw/cpcd/Makefile.am
  storage/ndb/src/cw/cpcd/Process.cpp
  storage/ndb/src/cw/cpcd/main.cpp
  storage/ndb/src/kernel/Makefile.am
  storage/ndb/src/kernel/blocks/ERROR_codes.txt
  storage/ndb/src/kernel/blocks/Makefile.am
  storage/ndb/src/kernel/blocks/backup/Backup.cpp
  storage/ndb/src/kernel/blocks/backup/Makefile.am
  storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
  storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp
  storage/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp
  storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
  storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
  storage/ndb/src/kernel/blocks/dbdict/Makefile.am
  storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
  storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
  storage/ndb/src/kernel/blocks/dbdih/Makefile.am
  storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
  storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
  storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
  storage/ndb/src/kernel/blocks/dblqh/Makefile.am
  storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
  storage/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp
  storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
  storage/ndb/src/kernel/blocks/dbtup/Makefile.am
  storage/ndb/src/kernel/blocks/dbtup/Undo_buffer.cpp
  storage/ndb/src/kernel/blocks/dbtup/Undo_buffer.hpp
  storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp
  storage/ndb/src/kernel/blocks/dbtux/DbtuxCmp.cpp
  storage/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp
  storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
  storage/ndb/src/kernel/blocks/lgman.cpp
  storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp
  storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
  storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
  storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp
  storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
  storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp
  storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
  storage/ndb/src/kernel/blocks/restore.cpp
  storage/ndb/src/kernel/blocks/suma/Suma.cpp
  storage/ndb/src/kernel/blocks/suma/Suma.hpp
  storage/ndb/src/kernel/blocks/suma/SumaInit.cpp
  storage/ndb/src/kernel/blocks/trix/Trix.cpp
  storage/ndb/src/kernel/blocks/trix/Trix.hpp
  storage/ndb/src/kernel/blocks/tsman.cpp
  storage/ndb/src/kernel/error/ErrorReporter.cpp
  storage/ndb/src/kernel/main.cpp
  storage/ndb/src/kernel/vm/Configuration.cpp
  storage/ndb/src/kernel/vm/Emulator.cpp
  storage/ndb/src/kernel/vm/LongSignal.hpp
  storage/ndb/src/kernel/vm/Makefile.am
  storage/ndb/src/kernel/vm/RequestTracker.hpp
  storage/ndb/src/kernel/vm/SafeCounter.cpp
  storage/ndb/src/kernel/vm/SafeCounter.hpp
  storage/ndb/src/kernel/vm/SimplePropertiesSection.cpp
  storage/ndb/src/kernel/vm/SimulatedBlock.cpp
  storage/ndb/src/kernel/vm/SimulatedBlock.hpp
  storage/ndb/src/kernel/vm/TransporterCallback.cpp
  storage/ndb/src/kernel/vm/WatchDog.cpp
  storage/ndb/src/kernel/vm/bench_pool.cpp
  storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
  storage/ndb/src/kernel/vm/pc.hpp
  storage/ndb/src/mgmapi/LocalConfig.cpp
  storage/ndb/src/mgmapi/mgmapi.cpp
  storage/ndb/src/mgmclient/CommandInterpreter.cpp
  storage/ndb/src/mgmclient/Makefile.am
  storage/ndb/src/mgmsrv/ConfigInfo.cpp
  storage/ndb/src/mgmsrv/InitConfigFileParser.cpp
  storage/ndb/src/mgmsrv/Makefile.am
  storage/ndb/src/mgmsrv/MgmtSrvr.cpp
  storage/ndb/src/mgmsrv/MgmtSrvr.hpp
  storage/ndb/src/mgmsrv/Services.cpp
  storage/ndb/src/mgmsrv/main.cpp
  storage/ndb/src/ndbapi/ClusterMgr.cpp
  storage/ndb/src/ndbapi/DictCache.cpp
  storage/ndb/src/ndbapi/DictCache.hpp
  storage/ndb/src/ndbapi/Makefile.am
  storage/ndb/src/ndbapi/Ndb.cpp
  storage/ndb/src/ndbapi/NdbApiSignal.hpp
  storage/ndb/src/ndbapi/NdbBlob.cpp
  storage/ndb/src/ndbapi/NdbDictionary.cpp
  storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
  storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp
  storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
  storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp
  storage/ndb/src/ndbapi/NdbIndexStat.cpp
  storage/ndb/src/ndbapi/NdbInterpretedCode.cpp
  storage/ndb/src/ndbapi/NdbOperation.cpp
  storage/ndb/src/ndbapi/NdbOperationDefine.cpp
  storage/ndb/src/ndbapi/NdbOperationExec.cpp
  storage/ndb/src/ndbapi/NdbOperationInt.cpp
  storage/ndb/src/ndbapi/NdbOperationSearch.cpp
  storage/ndb/src/ndbapi/NdbRecAttr.cpp
  storage/ndb/src/ndbapi/NdbReceiver.cpp
  storage/ndb/src/ndbapi/NdbRecord.hpp
  storage/ndb/src/ndbapi/NdbScanFilter.cpp
  storage/ndb/src/ndbapi/NdbScanOperation.cpp
  storage/ndb/src/ndbapi/NdbTransaction.cpp
  storage/ndb/src/ndbapi/Ndbif.cpp
  storage/ndb/src/ndbapi/Ndbinit.cpp
  storage/ndb/src/ndbapi/ObjectMap.cpp
  storage/ndb/src/ndbapi/ObjectMap.hpp
  storage/ndb/src/ndbapi/TransporterFacade.cpp
  storage/ndb/src/ndbapi/TransporterFacade.hpp
  storage/ndb/src/ndbapi/ndb_cluster_connection.cpp
  storage/ndb/src/ndbapi/ndberror.c
  storage/ndb/test/include/AtrtClient.hpp
  storage/ndb/test/include/DbUtil.hpp
  storage/ndb/test/include/HugoAsynchTransactions.hpp
  storage/ndb/test/include/HugoOperations.hpp
  storage/ndb/test/include/HugoTransactions.hpp
  storage/ndb/test/include/NDBT_Test.hpp
  storage/ndb/test/include/NdbRestarter.hpp
  storage/ndb/test/ndbapi/Makefile.am
  storage/ndb/test/ndbapi/ScanFilter.hpp
  storage/ndb/test/ndbapi/ScanFunctions.hpp
  storage/ndb/test/ndbapi/ScanInterpretTest.hpp
  storage/ndb/test/ndbapi/acrt/NdbRepStress.cpp
  storage/ndb/test/ndbapi/bank/Bank.cpp
  storage/ndb/test/ndbapi/bank/BankLoad.cpp
  storage/ndb/test/ndbapi/bench/mainAsyncGenerator.cpp
  storage/ndb/test/ndbapi/bench/ndb_async2.cpp
  storage/ndb/test/ndbapi/bench/testData.h
  storage/ndb/test/ndbapi/flexAsynch.cpp
  storage/ndb/test/ndbapi/flexBench.cpp
  storage/ndb/test/ndbapi/flexScan.cpp
  storage/ndb/test/ndbapi/msa.cpp
  storage/ndb/test/ndbapi/testBlobs.cpp
  storage/ndb/test/ndbapi/testDataBuffers.cpp
  storage/ndb/test/ndbapi/testDict.cpp
  storage/ndb/test/ndbapi/testIndex.cpp
  storage/ndb/test/ndbapi/testIndexStat.cpp
  storage/ndb/test/ndbapi/testInterpreter.cpp
  storage/ndb/test/ndbapi/testNDBT.cpp
  storage/ndb/test/ndbapi/testNdbApi.cpp
  storage/ndb/test/ndbapi/testNodeRestart.cpp
  storage/ndb/test/ndbapi/testOIBasic.cpp
  storage/ndb/test/ndbapi/testOperations.cpp
  storage/ndb/test/ndbapi/testPartitioning.cpp
  storage/ndb/test/ndbapi/testSRBank.cpp
  storage/ndb/test/ndbapi/testScan.cpp
  storage/ndb/test/ndbapi/testScanFilter.cpp
  storage/ndb/test/ndbapi/testScanPerf.cpp
  storage/ndb/test/ndbapi/testSystemRestart.cpp
  storage/ndb/test/ndbapi/testTransactions.cpp
  storage/ndb/test/ndbapi/test_event.cpp
  storage/ndb/test/run-test/Makefile.am
  storage/ndb/test/run-test/atrt-analyze-result.sh
  storage/ndb/test/run-test/atrt.hpp
  storage/ndb/test/run-test/autotest-boot.sh
  storage/ndb/test/run-test/autotest-run.sh
  storage/ndb/test/run-test/daily-basic-tests.txt
  storage/ndb/test/run-test/daily-devel-tests.txt
  storage/ndb/test/run-test/files.cpp
  storage/ndb/test/run-test/main.cpp
  storage/ndb/test/run-test/setup.cpp
  storage/ndb/test/run-test/test-tests.txt
  storage/ndb/test/src/AtrtClient.cpp
  storage/ndb/test/src/CpcClient.cpp
  storage/ndb/test/src/DbUtil.cpp
  storage/ndb/test/src/HugoAsynchTransactions.cpp
  storage/ndb/test/src/HugoOperations.cpp
  storage/ndb/test/src/HugoTransactions.cpp
  storage/ndb/test/src/NDBT_Tables.cpp
  storage/ndb/test/src/NDBT_Test.cpp
  storage/ndb/test/src/NdbBackup.cpp
  storage/ndb/test/src/NdbRestarter.cpp
  storage/ndb/test/src/UtilTransactions.cpp
  storage/ndb/test/tools/connect.cpp
  storage/ndb/test/tools/hugoPkRead.cpp
  storage/ndb/test/tools/rep_latency.cpp
  storage/ndb/tools/desc.cpp
  storage/ndb/tools/ndb_size.pl
  storage/ndb/tools/restore/Restore.cpp
  storage/ndb/tools/restore/consumer_restore.cpp
  storage/ndb/tools/restore/restore_main.cpp
  storage/ndb/tools/select_all.cpp
  storage/ndb/tools/select_count.cpp
  storage/ndb/tools/waiter.cpp
  strings/CMakeLists.txt
  strings/Makefile.am
  strings/conf_to_src.c
  support-files/build-tags
  support-files/compiler_warnings.supp
  support-files/mysql.spec.sh
  tests/CMakeLists.txt
  unittest/examples/CMakeLists.txt
  unittest/mysys/CMakeLists.txt
  unittest/mysys/Makefile.am
  unittest/mytap/CMakeLists.txt
  vio/CMakeLists.txt
  zlib/CMakeLists.txt
  mysql-test/r/slave_allow_batching_basic.result
  mysql-test/suite/ndb_binlog/r/ndb_binlog_basic.result
  mysql-test/suite/ndb_binlog/r/ndb_binlog_ddl_multi.result
  mysql-test/suite/ndb_binlog/r/ndb_binlog_log_bin.result
  mysql-test/suite/ndb_binlog/t/ndb_binlog_basic.test
  mysql-test/suite/ndb_binlog/r/ndb_binlog_format.result
  mysql-test/t/slave_allow_batching_basic.test
  storage/ndb/src/common/util/ndb_init.cpp

=== modified file '.bzr-mysql/default.conf'
--- a/.bzr-mysql/default.conf	2008-12-15 12:17:03 +0000
+++ b/.bzr-mysql/default.conf	2008-12-16 22:00:46 +0000
@@ -1,5 +1,5 @@
 [MYSQL]
-tree_location = bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-6.0
+tree_location = bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-6.0-falcon
 post_commit_to = commits@stripped
 post_push_to = commits@stripped
-tree_name = mysql-6.0
+tree_name = mysql-6.0-falcon

=== removed file 'include/lf.h.moved'
--- a/include/lf.h.moved	2008-08-18 05:43:50 +0000
+++ b/include/lf.h.moved	1970-01-01 00:00:00 +0000
@@ -1,260 +0,0 @@
-/* Copyright (C) 2007 MySQL AB
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
-
-#ifndef _lf_h
-#define _lf_h
-
-#include <my_atomic.h>
-
-/*
-  Helpers to define both func() and _func(), where
-  func() is a _func() protected by my_atomic_rwlock_wrlock()
-*/
-
-#define lock_wrap(f, t, proto_args, args, lock) \
-t _ ## f proto_args;                            \
-static inline t f  proto_args                   \
-{                                               \
-  t ret;                                        \
-  my_atomic_rwlock_wrlock(lock);                \
-  ret= _ ## f args;                             \
-  my_atomic_rwlock_wrunlock(lock);              \
-  return ret;                                   \
-}
-
-#define lock_wrap_void(f, proto_args, args, lock) \
-void _ ## f proto_args;                         \
-static inline void f proto_args                 \
-{                                               \
-  my_atomic_rwlock_wrlock(lock);                \
-  _ ## f args;                                  \
-  my_atomic_rwlock_wrunlock(lock);              \
-}
-
-#define nolock_wrap(f, t, proto_args, args)     \
-t _ ## f proto_args;                            \
-static inline t f  proto_args                   \
-{                                               \
-  return _ ## f args;                           \
-}
-
-#define nolock_wrap_void(f, proto_args, args)   \
-void _ ## f proto_args;                         \
-static inline void f proto_args                 \
-{                                               \
-  _ ## f args;                                  \
-}
-
-/*
-  wait-free dynamic array, see lf_dynarray.c
-
-  4 levels of 256 elements each mean 4311810304 elements in an array - it
-  should be enough for a while
-*/
-#define LF_DYNARRAY_LEVEL_LENGTH 256
-#define LF_DYNARRAY_LEVELS       4
-
-typedef struct {
-  void * volatile level[LF_DYNARRAY_LEVELS];
-  uint size_of_element;
-  my_atomic_rwlock_t lock;
-} LF_DYNARRAY;
-
-typedef int (*lf_dynarray_func)(void *, void *);
-
-void lf_dynarray_init(LF_DYNARRAY *array, uint element_size);
-void lf_dynarray_destroy(LF_DYNARRAY *array);
-
-nolock_wrap(lf_dynarray_value, void *,
-            (LF_DYNARRAY *array, uint idx),
-            (array, idx))
-lock_wrap(lf_dynarray_lvalue, void *,
-          (LF_DYNARRAY *array, uint idx),
-          (array, idx),
-          &array->lock)
-nolock_wrap(lf_dynarray_iterate, int,
-            (LF_DYNARRAY *array, lf_dynarray_func func, void *arg),
-            (array, func, arg))
-
-/*
-  pin manager for memory allocator, lf_alloc-pin.c
-*/
-
-#define LF_PINBOX_PINS 4
-#define LF_PURGATORY_SIZE 10
-
-typedef void lf_pinbox_free_func(void *, void *, void*);
-
-typedef struct {
-  LF_DYNARRAY pinarray;
-  lf_pinbox_free_func *free_func;
-  void *free_func_arg;
-  uint free_ptr_offset;
-  uint32 volatile pinstack_top_ver;         /* this is a versioned pointer */
-  uint32 volatile pins_in_array;            /* number of elements in array */
-} LF_PINBOX;
-
-typedef struct {
-  void * volatile pin[LF_PINBOX_PINS];
-  LF_PINBOX *pinbox;
-  void  *stack_ends_here;
-  void  *purgatory;
-  uint32 purgatory_count;
-  uint32 volatile link;
-/* we want sizeof(LF_PINS) to be 128 to avoid false sharing */
-  char pad[128-sizeof(uint32)*2
-              -sizeof(LF_PINBOX *)
-              -sizeof(void*)
-              -sizeof(void *)*(LF_PINBOX_PINS+1)];
-} LF_PINS;
-
-/*
-  shortcut macros to do an atomic_wrlock on a structure that uses pins
-  (e.g. lf_hash).
-*/
-#define lf_rwlock_by_pins(PINS)   \
-  my_atomic_rwlock_wrlock(&(PINS)->pinbox->pinarray.lock)
-#define lf_rwunlock_by_pins(PINS) \
-  my_atomic_rwlock_wrunlock(&(PINS)->pinbox->pinarray.lock)
-
-/*
-  compile-time assert, to require "no less than N" pins
-  it's enough if it'll fail on at least one compiler, so
-  we'll enable it on GCC only, which supports zero-length arrays.
-*/
-#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG)
-#define LF_REQUIRE_PINS(N)                                      \
-  static const char require_pins[LF_PINBOX_PINS-N]              \
-                             __attribute__ ((unused));          \
-  static const int LF_NUM_PINS_IN_THIS_FILE= N;
-#define _lf_pin(PINS, PIN, ADDR)                                \
-  (                                                             \
-    assert(PIN < LF_NUM_PINS_IN_THIS_FILE),                     \
-    my_atomic_storeptr(&(PINS)->pin[PIN], (ADDR))               \
-  )
-#else
-#define LF_REQUIRE_PINS(N)
-#define _lf_pin(PINS, PIN, ADDR)  my_atomic_storeptr(&(PINS)->pin[PIN], (ADDR))
-#endif
-
-#define _lf_unpin(PINS, PIN)      _lf_pin(PINS, PIN, NULL)
-#define lf_pin(PINS, PIN, ADDR)   \
-  do {                            \
-    lf_rwlock_by_pins(PINS);      \
-    _lf_pin(PINS, PIN, ADDR);     \
-    lf_rwunlock_by_pins(PINS);    \
-  } while (0)
-#define lf_unpin(PINS, PIN)  lf_pin(PINS, PIN, NULL)
-#define _lf_assert_pin(PINS, PIN) assert((PINS)->pin[PIN] != 0)
-#define _lf_assert_unpin(PINS, PIN) assert((PINS)->pin[PIN] == 0)
-
-void lf_pinbox_init(LF_PINBOX *pinbox, uint free_ptr_offset,
-                    lf_pinbox_free_func *free_func, void * free_func_arg);
-void lf_pinbox_destroy(LF_PINBOX *pinbox);
-
-lock_wrap(lf_pinbox_get_pins, LF_PINS *,
-          (LF_PINBOX *pinbox, void *stack_end),
-          (pinbox, stack_end),
-          &pinbox->pinarray.lock)
-lock_wrap_void(lf_pinbox_put_pins,
-               (LF_PINS *pins),
-               (pins),
-               &pins->pinbox->pinarray.lock)
-lock_wrap_void(lf_pinbox_free,
-               (LF_PINS *pins, void *addr),
-               (pins, addr),
-               &pins->pinbox->pinarray.lock)
-
-/*
-  memory allocator, lf_alloc-pin.c
-*/
-
-struct st_lf_alloc_node {
-  struct st_lf_alloc_node *next;
-};
-
-typedef struct st_lf_allocator {
-  LF_PINBOX pinbox;
-  struct st_lf_alloc_node * volatile top;
-  uint element_size;
-  uint32 volatile mallocs;
-} LF_ALLOCATOR;
-
-void lf_alloc_init(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset);
-void lf_alloc_destroy(LF_ALLOCATOR *allocator);
-uint lf_alloc_pool_count(LF_ALLOCATOR *allocator);
-/*
-  shortcut macros to access underlying pinbox functions from an LF_ALLOCATOR
-  see _lf_pinbox_get_pins() and _lf_pinbox_put_pins()
-*/
-#define _lf_alloc_free(PINS, PTR)     _lf_pinbox_free((PINS), (PTR))
-#define lf_alloc_free(PINS, PTR)       lf_pinbox_free((PINS), (PTR))
-#define _lf_alloc_get_pins(A, ST)     _lf_pinbox_get_pins(&(A)->pinbox, (ST))
-#define lf_alloc_get_pins(A, ST)       lf_pinbox_get_pins(&(A)->pinbox, (ST))
-#define _lf_alloc_put_pins(PINS)      _lf_pinbox_put_pins(PINS)
-#define lf_alloc_put_pins(PINS)        lf_pinbox_put_pins(PINS)
-#define lf_alloc_direct_free(ALLOC, ADDR) my_free((uchar*)(ADDR), MYF(0))
-
-lock_wrap(lf_alloc_new, void *,
-          (LF_PINS *pins),
-          (pins),
-          &pins->pinbox->pinarray.lock)
-
-/*
-  extendible hash, lf_hash.c
-*/
-#include <hash.h>
-
-#define LF_HASH_UNIQUE 1
-
-typedef struct {
-  LF_DYNARRAY array;                    /* hash itself */
-  LF_ALLOCATOR alloc;                   /* allocator for elements */
-  hash_get_key get_key;                 /* see HASH */
-  CHARSET_INFO *charset;                /* see HASH */
-  uint key_offset, key_length;          /* see HASH */
-  uint element_size, flags;             /* LF_HASH_UNIQUE, etc */
-  int32 volatile size;                  /* size of array */
-  int32 volatile count;                 /* number of elements in the hash */
-} LF_HASH;
-
-void lf_hash_init(LF_HASH *hash, uint element_size, uint flags,
-                  uint key_offset, uint key_length, hash_get_key get_key,
-                  CHARSET_INFO *charset);
-void lf_hash_destroy(LF_HASH *hash);
-int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data);
-void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen);
-int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen);
-/*
-  shortcut macros to access underlying pinbox functions from an LF_HASH
-  see _lf_pinbox_get_pins() and _lf_pinbox_put_pins()
-*/
-#define _lf_hash_get_pins(HASH, ST) _lf_alloc_get_pins(&(HASH)->alloc, (ST))
-#define lf_hash_get_pins(HASH, ST)   lf_alloc_get_pins(&(HASH)->alloc, (ST))
-#define _lf_hash_put_pins(PINS)     _lf_pinbox_put_pins(PINS)
-#define lf_hash_put_pins(PINS)       lf_pinbox_put_pins(PINS)
-#define lf_hash_search_unpin(PINS)   lf_unpin((PINS), 2)
-/*
-  cleanup
-*/
-
-#undef lock_wrap_void
-#undef lock_wrap
-#undef nolock_wrap_void
-#undef nolock_wrap
-
-#endif
-

=== removed file 'include/my_bit.h.moved'
--- a/include/my_bit.h.moved	2008-08-18 05:43:50 +0000
+++ b/include/my_bit.h.moved	1970-01-01 00:00:00 +0000
@@ -1,109 +0,0 @@
-/*
-  Some useful bit functions
-*/
-
-C_MODE_START
-#ifdef HAVE_INLINE
-
-extern const char _my_bits_nbits[256];
-extern const uchar _my_bits_reverse_table[256];
-
-/*
-  Find smallest X in 2^X >= value
-  This can be used to divide a number with value by doing a shift instead
-*/
-
-STATIC_INLINE uint my_bit_log2(ulong value)
-{
-  uint bit;
-  for (bit=0 ; value > 1 ; value>>=1, bit++) ;
-  return bit;
-}
-
-STATIC_INLINE uint my_count_bits(ulonglong v)
-{
-#if SIZEOF_LONG_LONG > 4
-  /* The following code is a bit faster on 16 bit machines than if we would
-     only shift v */
-  ulong v2=(ulong) (v >> 32);
-  return (uint) (uchar) (_my_bits_nbits[(uchar)  v] +
-                         _my_bits_nbits[(uchar) (v >> 8)] +
-                         _my_bits_nbits[(uchar) (v >> 16)] +
-                         _my_bits_nbits[(uchar) (v >> 24)] +
-                         _my_bits_nbits[(uchar) (v2)] +
-                         _my_bits_nbits[(uchar) (v2 >> 8)] +
-                         _my_bits_nbits[(uchar) (v2 >> 16)] +
-                         _my_bits_nbits[(uchar) (v2 >> 24)]);
-#else
-  return (uint) (uchar) (_my_bits_nbits[(uchar)  v] +
-                         _my_bits_nbits[(uchar) (v >> 8)] +
-                         _my_bits_nbits[(uchar) (v >> 16)] +
-                         _my_bits_nbits[(uchar) (v >> 24)]);
-#endif
-}
-
-STATIC_INLINE uint my_count_bits_ushort(ushort v)
-{
-  return _my_bits_nbits[v];
-}
-
-
-/*
-  Next highest power of two
-
-  SYNOPSIS
-    my_round_up_to_next_power()
-    v		Value to check
-
-  RETURN
-    Next or equal power of 2
-    Note: 0 will return 0
-
-  NOTES
-    Algorithm by Sean Anderson, according to:
-    http://graphics.stanford.edu/~seander/bithacks.html
-    (Orignal code public domain)
-
-    Comments shows how this works with 01100000000000000000000000001011
-*/
-
-STATIC_INLINE uint32 my_round_up_to_next_power(uint32 v)
-{
-  v--;			/* 01100000000000000000000000001010 */
-  v|= v >> 1;		/* 01110000000000000000000000001111 */
-  v|= v >> 2;		/* 01111100000000000000000000001111 */
-  v|= v >> 4;		/* 01111111110000000000000000001111 */
-  v|= v >> 8;		/* 01111111111111111100000000001111 */
-  v|= v >> 16;		/* 01111111111111111111111111111111 */
-  return v+1;		/* 10000000000000000000000000000000 */
-}
-
-STATIC_INLINE uint32 my_clear_highest_bit(uint32 v)
-{
-  uint32 w=v >> 1;
-  w|= w >> 1;
-  w|= w >> 2;
-  w|= w >> 4;
-  w|= w >> 8;
-  w|= w >> 16;
-  return v & w;
-}
-
-STATIC_INLINE uint32 my_reverse_bits(uint32 key)
-{
-  return
-    (_my_bits_reverse_table[ key      & 255] << 24) |
-    (_my_bits_reverse_table[(key>> 8) & 255] << 16) |
-    (_my_bits_reverse_table[(key>>16) & 255] <<  8) |
-     _my_bits_reverse_table[(key>>24)      ];
-}
-
-#else  /* HAVE_INLINE */
-extern uint my_bit_log2(ulong value);
-extern uint32 my_round_up_to_next_power(uint32 v);
-uint32 my_clear_highest_bit(uint32 v);
-uint32 my_reverse_bits(uint32 key);
-extern uint my_count_bits(ulonglong v);
-extern uint my_count_bits_ushort(ushort v);
-#endif /* HAVE_INLINE */
-C_MODE_END

=== added file 'mysql-test/suite/falcon/r/falcon_bug_26433-big.result'
--- a/mysql-test/suite/falcon/r/falcon_bug_26433-big.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_26433-big.result	2008-12-16 21:11:25 +0000
@@ -0,0 +1,145 @@
+*** Bug #26433 ***
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+DROP PROCEDURE IF EXISTS p1;
+SET @a = 909;
+CREATE PROCEDURE p1 ()
+BEGIN
+DECLARE v int default 0;
+DECLARE v500 int;
+DECLARE v499 int;
+DECLARE v255 int;
+DECLARE v99  int;
+DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
+BEGIN
+DECLARE vx int;
+SELECT 'error, probably 1025';
+DROP TABLE t1;
+SELECT '1';
+CREATE TABLE t1 (
+a int,
+b varchar(500) character set latin1,
+c varchar(500) character set latin2
+);
+SET vx = 0;
+WHILE vx < 20 do
+INSERT INTO t1 VALUES (vx, null, null);
+SET vx = vx + 1;
+END WHILE;
+SELECT '2';
+CREATE INDEX i1 ON t1 (b, a);
+CREATE INDEX i2 ON t1 (c, a);
+SELECT '3';
+END;
+SELECT 'a';
+CREATE TABLE t1 (
+a int,
+b varchar(500) character set latin1,
+c varchar(500) character set latin2
+);
+SELECT 'b';
+SET v = 0;
+WHILE v < 20 do
+INSERT INTO t1 VALUES (v, null, null);
+SET v = v + 1;
+END WHILE;
+SELECT 'c';
+CREATE INDEX i1 ON t1 (b, a);
+CREATE INDEX i2 ON t1 (c, a);
+SELECT 'd';
+SET v = 0;
+WHILE v < 2000 DO
+SET v500 = rand(@a) * 500;
+SET v499 = rand(@a) * 499;
+SET v255 = rand(@a) * 255;
+SET v99  = rand(@a) *  99;
+SET @x = concat('update t1 set b = repeat(0x', hex(v500),',',v499,'), a =', v,', c = repeat(0x', hex(v255), ',',v99,')');
+/* SELECT v, @x; */
+PREPARE stmt1 FROM @x;
+EXECUTE stmt1;
+IF v mod 2 = 0 THEN
+ALTER TABLE t1 MODIFY COLUMN b varchar(500) character set latin2;
+ALTER TABLE t1 MODIFY COLUMN c varchar(500) character set latin1;
+ELSE
+ALTER TABLE t1 MODIFY COLUMN b varchar(500) character set latin1;
+ALTER TABLE t1 MODIFY COLUMN c varchar(500) character set latin2;
+END IF;
+SET v = v + 1;
+END WHILE;
+END//
+CALL p1()//
+a
+a
+b
+b
+c
+c
+d
+d
+Warnings:
+Warning	1265	Data truncated for column 'b' at row 21
+Warning	1265	Data truncated for column 'b' at row 22
+Warning	1265	Data truncated for column 'b' at row 23
+Warning	1265	Data truncated for column 'b' at row 24
+Warning	1265	Data truncated for column 'b' at row 25
+Warning	1265	Data truncated for column 'b' at row 26
+Warning	1265	Data truncated for column 'b' at row 27
+Warning	1265	Data truncated for column 'b' at row 28
+Warning	1265	Data truncated for column 'b' at row 29
+Warning	1265	Data truncated for column 'b' at row 30
+Warning	1265	Data truncated for column 'b' at row 31
+Warning	1265	Data truncated for column 'b' at row 32
+Warning	1265	Data truncated for column 'b' at row 33
+Warning	1265	Data truncated for column 'b' at row 34
+Warning	1265	Data truncated for column 'b' at row 35
+Warning	1265	Data truncated for column 'b' at row 36
+Warning	1265	Data truncated for column 'b' at row 37
+Warning	1265	Data truncated for column 'b' at row 38
+Warning	1265	Data truncated for column 'b' at row 39
+Warning	1265	Data truncated for column 'b' at row 40
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 1
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 2
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 3
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 4
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 5
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 6
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 7
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 8
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 9
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 10
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 11
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 12
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 13
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 14
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 15
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 16
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 17
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 18
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 19
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 20
+Warning	1265	Data truncated for column 'b' at row 21
+Warning	1265	Data truncated for column 'b' at row 22
+Warning	1265	Data truncated for column 'b' at row 23
+Warning	1265	Data truncated for column 'b' at row 24
+Warning	1265	Data truncated for column 'b' at row 25
+Warning	1265	Data truncated for column 'b' at row 26
+Warning	1265	Data truncated for column 'b' at row 27
+Warning	1265	Data truncated for column 'b' at row 28
+Warning	1265	Data truncated for column 'b' at row 29
+Warning	1265	Data truncated for column 'b' at row 30
+Warning	1265	Data truncated for column 'b' at row 31
+Warning	1265	Data truncated for column 'b' at row 32
+Warning	1265	Data truncated for column 'b' at row 33
+Warning	1265	Data truncated for column 'b' at row 34
+Warning	1265	Data truncated for column 'b' at row 35
+Warning	1265	Data truncated for column 'b' at row 36
+Warning	1265	Data truncated for column 'b' at row 37
+Warning	1265	Data truncated for column 'b' at row 38
+Warning	1265	Data truncated for column 'b' at row 39
+Warning	1265	Data truncated for column 'b' at row 40
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 1
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 2
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 3
+Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 4
+DROP TABLE t1;
+DROP PROCEDURE p1;

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_26433.result' => 'mysql-test/suite/falcon/r/falcon_bug_26433.result'
--- a/mysql-test/suite/falcon_team/r/falcon_bug_26433.result	2008-04-24 04:09:39 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_26433.result	2008-12-16 21:11:25 +0000
@@ -1,5 +1,5 @@
-SET @@storage_engine = Falcon;
 *** Bug #26433 ***
+SET @@storage_engine = 'Falcon';
 DROP TABLE IF EXISTS t1;
 DROP PROCEDURE IF EXISTS p1;
 SET @a = 909;
@@ -7,9 +7,9 @@ CREATE PROCEDURE p1 ()
 BEGIN
 DECLARE v int default 0;
 DECLARE v500 int;
-DECLARE v499  int;
-DECLARE v255  int;
-DECLARE v99   int;
+DECLARE v499 int;
+DECLARE v255 int;
+DECLARE v99  int;
 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
 BEGIN
 DECLARE vx int;
@@ -46,13 +46,13 @@ END WHILE;
 SELECT 'c';
 CREATE INDEX i1 ON t1 (b, a);
 CREATE INDEX i2 ON t1 (c, a);
-select 'd';
+SELECT 'd';
 SET v = 0;
-while v < 500 do
+WHILE v < 250 DO
 SET v500 = rand(@a) * 500;
-SET v499  = rand(@a) * 499;
-SET v255  = rand(@a) * 255;
-SET v99   = rand(@a) * 99;
+SET v499 = rand(@a) * 499;
+SET v255 = rand(@a) * 255;
+SET v99  = rand(@a) *  99;
 SET @x = concat('update t1 set b = repeat(0x', hex(v500),',',v499,'), a =', v,', c = repeat(0x', hex(v255), ',',v99,')');
 /* SELECT v, @x; */
 PREPARE stmt1 FROM @x;
@@ -77,7 +77,6 @@ c
 d
 d
 Warnings:
-Warning	1265	Data truncated for column 'b' at row 20
 Warning	1265	Data truncated for column 'b' at row 21
 Warning	1265	Data truncated for column 'b' at row 22
 Warning	1265	Data truncated for column 'b' at row 23
@@ -97,6 +96,7 @@ Warning	1265	Data truncated for column '
 Warning	1265	Data truncated for column 'b' at row 37
 Warning	1265	Data truncated for column 'b' at row 38
 Warning	1265	Data truncated for column 'b' at row 39
+Warning	1265	Data truncated for column 'b' at row 40
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 1
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 2
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 3
@@ -117,7 +117,6 @@ Warning	1366	Incorrect string value: '\x
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 18
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 19
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 20
-Warning	1265	Data truncated for column 'b' at row 20
 Warning	1265	Data truncated for column 'b' at row 21
 Warning	1265	Data truncated for column 'b' at row 22
 Warning	1265	Data truncated for column 'b' at row 23
@@ -137,6 +136,7 @@ Warning	1265	Data truncated for column '
 Warning	1265	Data truncated for column 'b' at row 37
 Warning	1265	Data truncated for column 'b' at row 38
 Warning	1265	Data truncated for column 'b' at row 39
+Warning	1265	Data truncated for column 'b' at row 40
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 1
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 2
 Warning	1366	Incorrect string value: '\x92\x92\x92\x92\x92\x92...' for column 'c' at row 3

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_28048.result' => 'mysql-test/suite/falcon/r/falcon_bug_28048.result'
=== modified file 'mysql-test/suite/falcon/r/falcon_bug_29246.result'
--- a/mysql-test/suite/falcon/r/falcon_bug_29246.result	2008-12-04 11:00:12 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_29246.result	2008-12-16 21:11:25 +0000
@@ -1,7 +1,7 @@
 *** Bug #29246 ***
 SET @@storage_engine = 'Falcon';
 DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (s1 VARCHAR(2) CHARACTER SET latin1 COLLATE latin1_german2_ci, KEY (s1(1))) ENGINE=falcon;
+CREATE TABLE t1 (s1 VARCHAR(2) CHARACTER SET latin1 COLLATE latin1_german2_ci, KEY (s1(1)));
 INSERT INTO t1 VALUES(0xdc),('ue');
 SELECT COUNT(*) FROM t1 WHERE s1 = 0xdc;
 COUNT(*)
@@ -9,6 +9,9 @@ COUNT(*)
 SELECT COUNT(*) FROM t1 WHERE s1 = 'ue';
 COUNT(*)
 2
+SELECT COUNT(*) FROM t1 WHERE s1 = 'UE';
+COUNT(*)
+2
 SELECT count(*) FROM t1;
 count(*)
 2

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_31296.result' => 'mysql-test/suite/falcon/r/falcon_bug_31296.result'
=== modified file 'mysql-test/suite/falcon/r/falcon_bug_32398.result'
--- a/mysql-test/suite/falcon/r/falcon_bug_32398.result	2008-12-15 08:36:44 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_32398.result	2008-12-16 10:30:25 +0000
@@ -10,10 +10,10 @@ SELECT TABLESPACE_NAME, FILE_NAME FROM I
 TABLESPACE_NAME	FILE_NAME
 FALCON_USER	falcon_user.fts
 FALCON_TEMPORARY	falcon_temporary.fts
-ts1	ts1.fts
-ts2	ts2.MYD.fts
-ts3	ts3.fts
-ts4	ts4test.fts
+TS1	ts1.fts
+TS2	ts2.MYD.fts
+TS3	ts3.fts
+TS4	ts4test.fts
 DROP TABLESPACE ts1 ENGINE=Falcon;
 DROP TABLESPACE ts2 ENGINE=Falcon;
 DROP TABLESPACE ts3 ENGINE=Falcon;

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_34351_B.result' => 'mysql-test/suite/falcon/r/falcon_bug_34351_B.result'
=== added file 'mysql-test/suite/falcon/r/falcon_bug_35257.result'
--- a/mysql-test/suite/falcon/r/falcon_bug_35257.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_35257.result	2008-12-10 13:25:17 +0000
@@ -0,0 +1,6 @@
+*** Bug #35257 ***
+SET @@storage_engine = 'Falcon';
+CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.fts' ENGINE=Falcon;
+CREATE TABLESPACE TS1 ADD DATAFILE 'ts2.fts' ENGINE=Falcon;
+ERROR HY000: Tablespace 'TS1' already exists
+DROP TABLESPACE ts1 ENGINE=Falcon;

=== added file 'mysql-test/suite/falcon/t/falcon_bug_26433-big.test'
--- a/mysql-test/suite/falcon/t/falcon_bug_26433-big.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_26433-big.test	2008-12-16 21:11:25 +0000
@@ -0,0 +1,108 @@
+--source include/have_falcon.inc
+--source include/big_test.inc
+
+#
+# Bug #26433: Falcon: crash in procedure after error 1025
+#
+#   Note: Big version with loop count of 2000.
+#
+--echo *** Bug #26433 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP PROCEDURE IF EXISTS p1;
+--enable_warnings
+
+# Seed for rand() to get more predictable code path.
+# Seed of 707 passes now.
+SET @a = 909;
+
+DELIMITER //;
+CREATE PROCEDURE p1 ()
+BEGIN
+  DECLARE v int default 0;
+  DECLARE v500 int;
+  DECLARE v499 int;
+  DECLARE v255 int;
+  DECLARE v99  int;
+  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
+  BEGIN
+    DECLARE vx int;
+    SELECT 'error, probably 1025';
+    DROP TABLE t1;
+    SELECT '1';
+    CREATE TABLE t1 (
+      a int,
+      b varchar(500) character set latin1,
+      c varchar(500) character set latin2
+    );
+    SET vx = 0;
+    WHILE vx < 20 do
+      INSERT INTO t1 VALUES (vx, null, null);
+      SET vx = vx + 1;
+    END WHILE;
+    SELECT '2';
+    CREATE INDEX i1 ON t1 (b, a);
+    CREATE INDEX i2 ON t1 (c, a);
+    SELECT '3';
+  END;
+  SELECT 'a';
+  CREATE TABLE t1 (
+    a int,
+    b varchar(500) character set latin1,
+    c varchar(500) character set latin2
+  );
+  SELECT 'b';
+  SET v = 0;
+  WHILE v < 20 do
+    INSERT INTO t1 VALUES (v, null, null);
+    SET v = v + 1;
+  END WHILE;
+  SELECT 'c';
+  CREATE INDEX i1 ON t1 (b, a);
+  CREATE INDEX i2 ON t1 (c, a);
+  SELECT 'd';
+  SET v = 0;
+  WHILE v < 2000 DO
+    SET v500 = rand(@a) * 500;
+    SET v499 = rand(@a) * 499;
+    SET v255 = rand(@a) * 255;
+    SET v99  = rand(@a) *  99;
+    SET @x = concat('update t1 set b = repeat(0x', hex(v500),',',v499,'), a =', v,', c = repeat(0x', hex(v255), ',',v99,')');
+    /* SELECT v, @x; */
+    PREPARE stmt1 FROM @x;
+    EXECUTE stmt1;
+    IF v mod 2 = 0 THEN
+      ALTER TABLE t1 MODIFY COLUMN b varchar(500) character set latin2;
+      ALTER TABLE t1 MODIFY COLUMN c varchar(500) character set latin1;
+    ELSE
+      ALTER TABLE t1 MODIFY COLUMN b varchar(500) character set latin1;
+      ALTER TABLE t1 MODIFY COLUMN c varchar(500) character set latin2;
+    END IF;
+    SET v = v + 1;
+  END WHILE;
+END//
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+CALL p1()//
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+# Final sanity check not applicable here.
+#SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+DELIMITER ;//
+DROP TABLE t1;
+DROP PROCEDURE p1;

=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_26433.test' => 'mysql-test/suite/falcon/t/falcon_bug_26433.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_26433.test	2008-04-24 04:09:39 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_26433.test	2008-12-16 21:20:48 +0000
@@ -1,9 +1,19 @@
 --source include/have_falcon.inc
-SET @@storage_engine = Falcon;
+
 #
 # Bug #26433: Falcon: crash in procedure after error 1025
 #
+#   Note: Lowered loop count to 250 due to too long run time.
+#         See corresponding -big test for long running version.
+#
 --echo *** Bug #26433 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
 --disable_warnings
 DROP TABLE IF EXISTS t1;
 DROP PROCEDURE IF EXISTS p1;
@@ -18,9 +28,9 @@ CREATE PROCEDURE p1 ()
 BEGIN
   DECLARE v int default 0;
   DECLARE v500 int;
-  DECLARE v499  int;
-  DECLARE v255  int;
-  DECLARE v99   int;
+  DECLARE v499 int;
+  DECLARE v255 int;
+  DECLARE v99  int;
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
   BEGIN
     DECLARE vx int;
@@ -57,13 +67,13 @@ BEGIN
   SELECT 'c';
   CREATE INDEX i1 ON t1 (b, a);
   CREATE INDEX i2 ON t1 (c, a);
-  select 'd';
+  SELECT 'd';
   SET v = 0;
-  while v < 500 do
+  WHILE v < 250 DO
     SET v500 = rand(@a) * 500;
-    SET v499  = rand(@a) * 499;
-    SET v255  = rand(@a) * 255;
-    SET v99   = rand(@a) * 99;
+    SET v499 = rand(@a) * 499;
+    SET v255 = rand(@a) * 255;
+    SET v99  = rand(@a) *  99;
     SET @x = concat('update t1 set b = repeat(0x', hex(v500),',',v499,'), a =', v,', c = repeat(0x', hex(v255), ',',v99,')');
     /* SELECT v, @x; */
     PREPARE stmt1 FROM @x;
@@ -79,9 +89,20 @@ BEGIN
   END WHILE;
 END//
 
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
 CALL p1()//
-
-# Final cleanup.
 DELIMITER ;//
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+# Final sanity check not applicable here.
+#SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
 DROP TABLE t1;
 DROP PROCEDURE p1;

=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_28048.test' => 'mysql-test/suite/falcon/t/falcon_bug_28048.test'
=== modified file 'mysql-test/suite/falcon/t/falcon_bug_29246.test'
--- a/mysql-test/suite/falcon/t/falcon_bug_29246.test	2008-12-04 11:00:12 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_29246.test	2008-12-16 21:11:25 +0000
@@ -1,8 +1,8 @@
 --source include/have_falcon.inc
 
 #
-# Bug #29246: Falcon: searches fail if prefix index on latin1_german2_ci
-#             column
+# Bug #29246: Falcon: searches fail if prefix index on
+#             latin1_german2_ci column
 #
 --echo *** Bug #29246 ***
 
@@ -19,10 +19,11 @@ DROP TABLE IF EXISTS t1;
 # ----------------------------------------------------- #
 # --- Test                                          --- #
 # ----------------------------------------------------- #
-CREATE TABLE t1 (s1 VARCHAR(2) CHARACTER SET latin1 COLLATE latin1_german2_ci, KEY (s1(1))) ENGINE=falcon;
+CREATE TABLE t1 (s1 VARCHAR(2) CHARACTER SET latin1 COLLATE latin1_german2_ci, KEY (s1(1)));
 INSERT INTO t1 VALUES(0xdc),('ue');
 SELECT COUNT(*) FROM t1 WHERE s1 = 0xdc;
 SELECT COUNT(*) FROM t1 WHERE s1 = 'ue';
+SELECT COUNT(*) FROM t1 WHERE s1 = 'UE';
 
 # ----------------------------------------------------- #
 # --- Check                                         --- #

=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_31296.test' => 'mysql-test/suite/falcon/t/falcon_bug_31296.test'
=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_34351_B.test' => 'mysql-test/suite/falcon/t/falcon_bug_34351_B.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_34351_B.test	2008-04-22 09:27:14 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_34351_B.test	2008-12-16 21:11:25 +0000
@@ -1,5 +1,5 @@
 --source include/have_falcon.inc
-#--disable_abort_on_error
+
 #
 # Bug #34351_B: Update Conflict on non-overlapping transactions
 #
@@ -46,6 +46,7 @@ SET @conn1_uuid = UUID();
 SELECT t1_autoinc FROM t1 ORDER BY t1_autoinc;
 INSERT INTO t1 (t1_uuid) VALUES (@conn1_uuid);
 SELECT t1_autoinc FROM t1 ORDER BY t1_autoinc;
+--real_sleep 1
 --send DELETE FROM t1 WHERE t1_uuid = (@conn1_uuid)
 
 --echo # Switch to connection default

=== added file 'mysql-test/suite/falcon/t/falcon_bug_35257.test'
--- a/mysql-test/suite/falcon/t/falcon_bug_35257.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_35257.test	2008-12-10 13:25:17 +0000
@@ -0,0 +1,28 @@
+--source include/have_falcon.inc
+
+#
+# Bug #35257: Falcon: tablespace names are case sensitive
+#
+--echo *** Bug #35257 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.fts' ENGINE=Falcon;
+--error ER_TABLESPACE_EXIST
+CREATE TABLESPACE TS1 ADD DATAFILE 'ts2.fts' ENGINE=Falcon;
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+DROP TABLESPACE ts1 ENGINE=Falcon;

=== removed file 'mysql-test/suite/falcon_team/r/falcon_bug_29246.result'
--- a/mysql-test/suite/falcon_team/r/falcon_bug_29246.result	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon_team/r/falcon_bug_29246.result	1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-*** Bug #29246 ***
-SET @@storage_engine = 'Falcon';
-DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (a varchar(2) CHARACTER SET latin1 COLLATE latin1_german2_ci);
-INSERT INTO t1 VALUES (0xdc);
-CREATE INDEX i1 ON t1 (a(1));
-SELECT count(*) FROM t1 WHERE a = 'ue';
-count(*)
-1
-SELECT count(*) FROM t1;
-count(*)
-1
-DROP TABLE t1;

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_36294.result' => 'mysql-test/suite/falcon_team/r/falcon_bug_36294-big.result'
=== removed file 'mysql-test/suite/falcon_team/t/falcon_bug_29246.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_29246.test	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon_team/t/falcon_bug_29246.test	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
---source include/have_falcon.inc
-#
-# Bug #29246: Falcon: searches fail if prefix index on latin1_german2_ci column
-#
---echo *** Bug #29246 ***
-
-# ----------------------------------------------------- #
-# --- Initialisation                                --- #
-# ----------------------------------------------------- #
-let $engine = 'Falcon';
-eval SET @@storage_engine = $engine;
-
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
-
-CREATE TABLE t1 (a varchar(2) CHARACTER SET latin1 COLLATE latin1_german2_ci);
-INSERT INTO t1 VALUES (0xdc);
-CREATE INDEX i1 ON t1 (a(1));
-
-# ----------------------------------------------------- #
-# --- Test                                          --- #
-# ----------------------------------------------------- #
-SELECT count(*) FROM t1 WHERE a = 'ue';
-
-# ----------------------------------------------------- #
-# --- Check                                         --- #
-# ----------------------------------------------------- #
-SELECT count(*) FROM t1;
-
-# ----------------------------------------------------- #
-# --- Final cleanup                                 --- #
-# ----------------------------------------------------- #
-DROP TABLE t1;

=== modified file 'mysql-test/suite/falcon_team/t/falcon_bug_34174.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_34174.test	2008-04-20 08:30:43 +0000
+++ b/mysql-test/suite/falcon_team/t/falcon_bug_34174.test	2008-12-16 21:11:25 +0000
@@ -1,4 +1,5 @@
 --source include/have_falcon.inc
+
 #
 # Bug #34174 - Infinite loop checking rolled back record in select for update
 #
@@ -34,8 +35,6 @@ START TRANSACTION;
 SELECT * FROM t1;
 INSERT INTO t1 VALUES (1,1);
 --send INSERT INTO t1 VALUES (0,3)
-#UPDATE t1 SET f1 = 0, f2 = 5;
-#INSERT INTO t1 VALUES (0,6);
 
 --echo # switching to default connection
 connection default;
@@ -62,4 +61,3 @@ SELECT * FROM t1;
 connection default;
 disconnect conn1;
 DROP TABLE t1;
-

=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_36294.test' => 'mysql-test/suite/falcon_team/t/falcon_bug_36294-big.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_36294.test	2008-09-27 22:01:35 +0000
+++ b/mysql-test/suite/falcon_team/t/falcon_bug_36294-big.test	2008-12-16 21:11:25 +0000
@@ -1,4 +1,5 @@
 --source include/have_falcon.inc
+--source include/big_test.inc
 
 #
 # Bug#36294: Assertion in Cache::writePage

=== modified file 'mysql-test/suite/falcon_team/t/test2bug.def'
--- a/mysql-test/suite/falcon_team/t/test2bug.def	2008-10-02 10:37:27 +0000
+++ b/mysql-test/suite/falcon_team/t/test2bug.def	2008-12-16 21:11:25 +0000
@@ -17,7 +17,6 @@
 # Keep the list sorted by test name.
 #
 
-falcon_bug_23945: Bug#34892 - Transaction handling in select_create::abort let's Falcon fail
-falcon_bug_26433: Bug#39314 - falcon_bug_26433 fails with an offset of 1 in row numbers in expected warnings
-falcon_bug_28048: Bug#36700 - Running falcon_bug_28048 shows increasing memory usage and run time
+falcon_bug_34174 : Bug#34174 - Infinite loop checking rolled back record in select for update
+falcon_bug_36294-big: Bug#36631	- Assertion in SerialLogControl::nextRecord, sometimes.
 falcon_deadlock:  Bug#34182 - SELECT ... FOR UPDATE does not lock when in subquery

=== modified file 'mysql-test/suite/funcs_1/t/disabled.def'
--- a/mysql-test/suite/funcs_1/t/disabled.def	2008-12-09 18:59:54 +0000
+++ b/mysql-test/suite/funcs_1/t/disabled.def	2008-12-15 08:35:48 +0000
@@ -10,5 +10,4 @@
 #
 ##############################################################################
 
-ndb_storedproc:		Something's not right in the test... also this test does not exist in 5.1
 ndb_views:		Bug #40860 funcs_1.ndb_views fail

=== removed file 'mysys/lf_alloc-pin.c.moved'
--- a/mysys/lf_alloc-pin.c.moved	2008-08-18 05:43:50 +0000
+++ b/mysys/lf_alloc-pin.c.moved	1970-01-01 00:00:00 +0000
@@ -1,531 +0,0 @@
-/* QQ: TODO multi-pinbox */
-/* Copyright (C) 2006 MySQL AB
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
-
-/*
-  wait-free concurrent allocator based on pinning addresses
-
-  It works as follows: every thread (strictly speaking - every CPU, but
-  it's too difficult to do) has a small array of pointers. They're called
-  "pins".  Before using an object its address must be stored in this array
-  (pinned).  When an object is no longer necessary its address must be
-  removed from this array (unpinned). When a thread wants to free() an
-  object it scans all pins of all threads to see if somebody has this
-  object pinned.  If yes - the object is not freed (but stored in a
-  "purgatory").  To reduce the cost of a single free() pins are not scanned
-  on every free() but only added to (thread-local) purgatory. On every
-  LF_PURGATORY_SIZE free() purgatory is scanned and all unpinned objects
-  are freed.
-
-  Pins are used to solve ABA problem. To use pins one must obey
-  a pinning protocol:
-
-   1. Let's assume that PTR is a shared pointer to an object. Shared means
-      that any thread may modify it anytime to point to a different object
-      and free the old object. Later the freed object may be potentially
-      allocated by another thread. If we're unlucky that other thread may
-      set PTR to point to this object again. This is ABA problem.
-   2. Create a local pointer LOCAL_PTR.
-   3. Pin the PTR in a loop:
-      do
-      {
-        LOCAL_PTR= PTR;
-        pin(PTR, PIN_NUMBER);
-      } while (LOCAL_PTR != PTR)
-   4. It is guaranteed that after the loop has ended, LOCAL_PTR
-      points to an object (or NULL, if PTR may be NULL), that
-      will never be freed. It is not guaranteed though
-      that LOCAL_PTR == PTR (as PTR can change any time)
-   5. When done working with the object, remove the pin:
-      unpin(PIN_NUMBER)
-   6. When copying pins (as in the list traversing loop:
-        pin(CUR, 1);
-        while ()
-        {
-          do                            // standard
-          {                             //  pinning
-            NEXT=CUR->next;             //   loop
-            pin(NEXT, 0);               //    see #3
-          } while (NEXT != CUR->next);  //     above
-          ...
-          ...
-          CUR=NEXT;
-          pin(CUR, 1);                  // copy pin[0] to pin[1]
-        }
-      which keeps CUR address constantly pinned), note than pins may be
-      copied only upwards (!!!), that is pin[N] to pin[M], M > N.
-   7. Don't keep the object pinned longer than necessary - the number of
-      pins you have is limited (and small), keeping an object pinned
-      prevents its reuse and cause unnecessary mallocs.
-
-  Explanations:
-
-   3. The loop is important. The following can occur:
-        thread1> LOCAL_PTR= PTR
-        thread2> free(PTR); PTR=0;
-        thread1> pin(PTR, PIN_NUMBER);
-      now thread1 cannot access LOCAL_PTR, even if it's pinned,
-      because it points to a freed memory. That is, it *must*
-      verify that it has indeed pinned PTR, the shared pointer.
-
-   6. When a thread wants to free some LOCAL_PTR, and it scans
-      all lists of pins to see whether it's pinned, it does it
-      upwards, from low pin numbers to high. Thus another thread
-      must copy an address from one pin to another in the same
-      direction - upwards, otherwise the scanning thread may
-      miss it.
-
-  Implementation details:
-
-  Pins are given away from a "pinbox". Pinbox is stack-based allocator.
-  It used dynarray for storing pins, new elements are allocated by dynarray
-  as necessary, old are pushed in the stack for reuse. ABA is solved by
-  versioning a pointer - because we use an array, a pointer to pins is 16 bit,
-  upper 16 bits are used for a version.
-
-  It is assumed that pins belong to a thread and are not transferable
-  between threads (LF_PINS::stack_ends_here being a primary reason
-  for this limitation).
-*/
-
-#include <my_global.h>
-#include <my_sys.h>
-#include <lf.h>
-
-#define LF_PINBOX_MAX_PINS 65536
-
-static void _lf_pinbox_real_free(LF_PINS *pins);
-
-/*
-  Initialize a pinbox. Normally called from lf_alloc_init.
-  See the latter for details.
-*/
-void lf_pinbox_init(LF_PINBOX *pinbox, uint free_ptr_offset,
-                    lf_pinbox_free_func *free_func, void *free_func_arg)
-{
-  DBUG_ASSERT(free_ptr_offset % sizeof(void *) == 0);
-  compile_time_assert(sizeof(LF_PINS) == 128);
-  lf_dynarray_init(&pinbox->pinarray, sizeof(LF_PINS));
-  pinbox->pinstack_top_ver= 0;
-  pinbox->pins_in_array= 0;
-  pinbox->free_ptr_offset= free_ptr_offset;
-  pinbox->free_func= free_func;
-  pinbox->free_func_arg= free_func_arg;
-}
-
-void lf_pinbox_destroy(LF_PINBOX *pinbox)
-{
-  lf_dynarray_destroy(&pinbox->pinarray);
-}
-
-/*
-  Get pins from a pinbox. Usually called via lf_alloc_get_pins() or
-  lf_hash_get_pins().
-
-  SYNOPSYS
-    pinbox      -
-    stack_end   - a pointer to the end (top/bottom, depending on the
-                  STACK_DIRECTION) of stack. Used for safe alloca. There's
-                  no safety margin deducted, a caller should take care of it,
-                  if necessary.
-
-  DESCRIPTION
-    get a new LF_PINS structure from a stack of unused pins,
-    or allocate a new one out of dynarray.
-
-  NOTE
-    It is assumed that pins belong to a thread and are not transferable
-    between threads.
-*/
-LF_PINS *_lf_pinbox_get_pins(LF_PINBOX *pinbox, void *stack_end)
-{
-  uint32 pins, next, top_ver;
-  LF_PINS *el;
-  /*
-    We have an array of max. 64k elements.
-    The highest index currently allocated is pinbox->pins_in_array.
-    Freed elements are in a lifo stack, pinstack_top_ver.
-    pinstack_top_ver is 32 bits; 16 low bits are the index in the
-    array, to the first element of the list. 16 high bits are a version
-    (every time the 16 low bits are updated, the 16 high bits are
-    incremented). Versioniong prevents the ABA problem.
-  */
-  top_ver= pinbox->pinstack_top_ver;
-  do
-  {
-    if (!(pins= top_ver % LF_PINBOX_MAX_PINS))
-    {
-      /* the stack of free elements is empty */
-      pins= my_atomic_add32((int32 volatile*) &pinbox->pins_in_array, 1)+1;
-      if (unlikely(pins >= LF_PINBOX_MAX_PINS))
-        return 0;
-      /*
-        note that the first allocated element has index 1 (pins==1).
-        index 0 is reserved to mean "NULL pointer"
-      */
-      el= (LF_PINS *)_lf_dynarray_lvalue(&pinbox->pinarray, pins);
-      if (unlikely(!el))
-        return 0;
-      break;
-    }
-    el= (LF_PINS *)_lf_dynarray_value(&pinbox->pinarray, pins);
-    next= el->link;
-  } while (!my_atomic_cas32((int32 volatile*) &pinbox->pinstack_top_ver,
-                            (int32*) &top_ver,
-                            top_ver-pins+next+LF_PINBOX_MAX_PINS));
-  /*
-    set el->link to the index of el in the dynarray (el->link has two usages:
-    - if element is allocated, it's its own index
-    - if element is free, it's its next element in the free stack
-  */
-  el->link= pins;
-  el->purgatory_count= 0;
-  el->pinbox= pinbox;
-  el->stack_ends_here= stack_end;
-  return el;
-}
-
-/*
-  Put pins back to a pinbox. Usually called via lf_alloc_put_pins() or
-  lf_hash_put_pins().
-
-  DESCRIPTION
-    empty the purgatory (XXX deadlock warning below!),
-    push LF_PINS structure to a stack
-*/
-void _lf_pinbox_put_pins(LF_PINS *pins)
-{
-  LF_PINBOX *pinbox= pins->pinbox;
-  uint32 top_ver, nr;
-  nr= pins->link;
-#ifdef MY_LF_EXTRA_DEBUG
-  {
-    int i;
-    for (i= 0; i < LF_PINBOX_PINS; i++)
-      DBUG_ASSERT(pins->pin[i] == 0);
-  }
-#endif
-  /*
-    XXX this will deadlock if other threads will wait for
-    the caller to do something after _lf_pinbox_put_pins(),
-    and they would have pinned addresses that the caller wants to free.
-    Thus: only free pins when all work is done and nobody can wait for you!!!
-  */
-  while (pins->purgatory_count)
-  {
-    _lf_pinbox_real_free(pins);
-    if (pins->purgatory_count)
-    {
-      my_atomic_rwlock_wrunlock(&pins->pinbox->pinarray.lock);
-      pthread_yield();
-      my_atomic_rwlock_wrlock(&pins->pinbox->pinarray.lock);
-    }
-  }
-  top_ver= pinbox->pinstack_top_ver;
-  do
-  {
-    pins->link= top_ver % LF_PINBOX_MAX_PINS;
-  } while (!my_atomic_cas32((int32 volatile*) &pinbox->pinstack_top_ver,
-                            (int32*) &top_ver,
-                            top_ver-pins->link+nr+LF_PINBOX_MAX_PINS));
-  return;
-}
-
-static int ptr_cmp(void **a, void **b)
-{
-  return *a < *b ? -1 : *a == *b ? 0 : 1;
-}
-
-#define add_to_purgatory(PINS, ADDR)                                    \
-  do                                                                    \
-  {                                                                     \
-    *(void **)((char *)(ADDR)+(PINS)->pinbox->free_ptr_offset)=         \
-      (PINS)->purgatory;                                                \
-    (PINS)->purgatory= (ADDR);                                          \
-    (PINS)->purgatory_count++;                                          \
-  } while (0)
-
-/*
-  Free an object allocated via pinbox allocator
-
-  DESCRIPTION
-    add an object to purgatory. if necessary, call _lf_pinbox_real_free()
-    to actually free something.
-*/
-void _lf_pinbox_free(LF_PINS *pins, void *addr)
-{
-  add_to_purgatory(pins, addr);
-  if (pins->purgatory_count % LF_PURGATORY_SIZE)
-    _lf_pinbox_real_free(pins);
-}
-
-struct st_harvester {
-  void **granary;
-  int npins;
-};
-
-/*
-  callback for _lf_dynarray_iterate:
-  scan all pins of all threads and accumulate all pins
-*/
-static int harvest_pins(LF_PINS *el, struct st_harvester *hv)
-{
-  int i;
-  LF_PINS *el_end= el+min(hv->npins, LF_DYNARRAY_LEVEL_LENGTH);
-  for (; el < el_end; el++)
-  {
-    for (i= 0; i < LF_PINBOX_PINS; i++)
-    {
-      void *p= el->pin[i];
-      if (p)
-        *hv->granary++= p;
-    }
-  }
-  /*
-    hv->npins may become negative below, but it means that
-    we're on the last dynarray page and harvest_pins() won't be
-    called again. We don't bother to make hv->npins() correct
-    (that is 0) in this case.
-  */
-  hv->npins-= LF_DYNARRAY_LEVEL_LENGTH;
-  return 0;
-}
-
-/*
-  callback for _lf_dynarray_iterate:
-  scan all pins of all threads and see if addr is present there
-*/
-static int match_pins(LF_PINS *el, void *addr)
-{
-  int i;
-  LF_PINS *el_end= el+LF_DYNARRAY_LEVEL_LENGTH;
-  for (; el < el_end; el++)
-    for (i= 0; i < LF_PINBOX_PINS; i++)
-      if (el->pin[i] == addr)
-        return 1;
-  return 0;
-}
-
-#if STACK_DIRECTION < 0
-#define available_stack_size(CUR,END) (long) ((char*)(CUR) - (char*)(END))
-#else
-#define available_stack_size(CUR,END) (long) ((char*)(END) - (char*)(CUR))
-#endif
-
-/*
-  Scan the purgatory and free everything that can be freed
-*/
-static void _lf_pinbox_real_free(LF_PINS *pins)
-{
-  int npins, alloca_size;
-  void *list, **addr;
-  struct st_lf_alloc_node *first, *last= NULL;
-  LF_PINBOX *pinbox= pins->pinbox;
-
-  LINT_INIT(first);
-  npins= pinbox->pins_in_array+1;
-
-#ifdef HAVE_ALLOCA
-  alloca_size= sizeof(void *)*LF_PINBOX_PINS*npins;
-  /* create a sorted list of pinned addresses, to speed up searches */
-  if (available_stack_size(&pinbox, pins->stack_ends_here) > alloca_size)
-  {
-    struct st_harvester hv;
-    addr= (void **) alloca(alloca_size);
-    hv.granary= addr;
-    hv.npins= npins;
-    /* scan the dynarray and accumulate all pinned addresses */
-    _lf_dynarray_iterate(&pinbox->pinarray,
-                         (lf_dynarray_func)harvest_pins, &hv);
-
-    npins= hv.granary-addr;
-    /* and sort them */
-    if (npins)
-      qsort(addr, npins, sizeof(void *), (qsort_cmp)ptr_cmp);
-  }
-  else
-#endif
-    addr= 0;
-
-  list= pins->purgatory;
-  pins->purgatory= 0;
-  pins->purgatory_count= 0;
-  while (list)
-  {
-    void *cur= list;
-    list= *(void **)((char *)cur+pinbox->free_ptr_offset);
-    if (npins)
-    {
-      if (addr) /* use binary search */
-      {
-        void **a, **b, **c;
-        for (a= addr, b= addr+npins-1, c= a+(b-a)/2; (b-a) > 1; c= a+(b-a)/2)
-          if (cur == *c)
-            a= b= c;
-          else if (cur > *c)
-            a= c;
-          else
-            b= c;
-        if (cur == *a || cur == *b)
-          goto found;
-      }
-      else /* no alloca - no cookie. linear search here */
-      {
-        if (_lf_dynarray_iterate(&pinbox->pinarray,
-                                 (lf_dynarray_func)match_pins, cur))
-          goto found;
-      }
-    }
-    /* not pinned - freeing */
-    if (last)
-      last= last->next= (struct st_lf_alloc_node *)cur;
-    else
-      first= last= (struct st_lf_alloc_node *)cur;
-    continue;
-found:
-    /* pinned - keeping */
-    add_to_purgatory(pins, cur);
-  }
-  if (last)
-    pinbox->free_func(first, last, pinbox->free_func_arg);
-}
-
-/* lock-free memory allocator for fixed-size objects */
-
-LF_REQUIRE_PINS(1)
-
-/*
-  callback for _lf_pinbox_real_free to free a list of unpinned objects -
-  add it back to the allocator stack
-
-  DESCRIPTION
-    'first' and 'last' are the ends of the linked list of st_lf_alloc_node's:
-    first->el->el->....->el->last. Use first==last to free only one element.
-*/
-static void alloc_free(struct st_lf_alloc_node *first,
-                       struct st_lf_alloc_node volatile *last,
-                       LF_ALLOCATOR *allocator)
-{
-  /*
-    we need a union here to access type-punned pointer reliably.
-    otherwise gcc -fstrict-aliasing will not see 'tmp' changed in the loop
-  */
-  union { struct st_lf_alloc_node * node; void *ptr; } tmp;
-  tmp.node= allocator->top;
-  do
-  {
-    last->next= tmp.node;
-  } while (!my_atomic_casptr((void **)(char *)&allocator->top,
-                             (void **)&tmp.ptr, first) && LF_BACKOFF);
-}
-
-/*
-  initialize lock-free allocator
-
-  SYNOPSYS
-    allocator           -
-    size                a size of an object to allocate
-    free_ptr_offset     an offset inside the object to a sizeof(void *)
-                        memory that is guaranteed to be unused after
-                        the object is put in the purgatory. Unused by ANY
-                        thread, not only the purgatory owner.
-                        This memory will be used to link waiting-to-be-freed
-                        objects in a purgatory list.
-*/
-void lf_alloc_init(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset)
-{
-  lf_pinbox_init(&allocator->pinbox, free_ptr_offset,
-                 (lf_pinbox_free_func *)alloc_free, allocator);
-  allocator->top= 0;
-  allocator->mallocs= 0;
-  allocator->element_size= size;
-  DBUG_ASSERT(size >= sizeof(void*) + free_ptr_offset);
-}
-
-/*
-  destroy the allocator, free everything that's in it
-
-  NOTE
-    As every other init/destroy function here and elsewhere it
-    is not thread safe. No, this function is no different, ensure
-    that no thread needs the allocator before destroying it.
-    We are not responsible for any damage that may be caused by
-    accessing the allocator when it is being or has been destroyed.
-    Oh yes, and don't put your cat in a microwave.
-*/
-void lf_alloc_destroy(LF_ALLOCATOR *allocator)
-{
-  struct st_lf_alloc_node *node= allocator->top;
-  while (node)
-  {
-    struct st_lf_alloc_node *tmp= node->next;
-    my_free((void *)node, MYF(0));
-    node= tmp;
-  }
-  lf_pinbox_destroy(&allocator->pinbox);
-  allocator->top= 0;
-}
-
-/*
-  Allocate and return an new object.
-
-  DESCRIPTION
-    Pop an unused object from the stack or malloc it is the stack is empty.
-    pin[0] is used, it's removed on return.
-*/
-void *_lf_alloc_new(LF_PINS *pins)
-{
-  LF_ALLOCATOR *allocator= (LF_ALLOCATOR *)(pins->pinbox->free_func_arg);
-  struct st_lf_alloc_node *node;
-  for (;;)
-  {
-    do
-    {
-      node= allocator->top;
-      _lf_pin(pins, 0, node);
-    } while (node != allocator->top && LF_BACKOFF);
-    if (!node)
-    {
-      node= (void *)my_malloc(allocator->element_size, MYF(MY_WME));
-#ifdef MY_LF_EXTRA_DEBUG
-      if (likely(node != 0))
-        my_atomic_add32(&allocator->mallocs, 1);
-#endif
-      break;
-    }
-    if (my_atomic_casptr((void **)(char *)&allocator->top,
-                         (void *)&node, node->next))
-      break;
-  }
-  _lf_unpin(pins, 0);
-  return node;
-}
-
-/*
-  count the number of objects in a pool.
-
-  NOTE
-    This is NOT thread-safe !!!
-*/
-uint lf_alloc_pool_count(LF_ALLOCATOR *allocator)
-{
-  uint i;
-  struct st_lf_alloc_node *node;
-  for (node= allocator->top, i= 0; node; node= node->next, i++)
-    /* no op */;
-  return i;
-}
-

=== removed file 'mysys/lf_dynarray.c.moved'
--- a/mysys/lf_dynarray.c.moved	2008-08-18 05:43:50 +0000
+++ b/mysys/lf_dynarray.c.moved	1970-01-01 00:00:00 +0000
@@ -1,208 +0,0 @@
-/* Copyright (C) 2006 MySQL AB
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
-
-/*
-  Analog of DYNAMIC_ARRAY that never reallocs
-  (so no pointer into the array may ever become invalid).
-
-  Memory is allocated in non-contiguous chunks.
-  This data structure is not space efficient for sparse arrays.
-
-  Every element is aligned to sizeof(element) boundary
-  (to avoid false sharing if element is big enough).
-
-  LF_DYNARRAY is a recursive structure. On the zero level
-  LF_DYNARRAY::level[0] it's an array of LF_DYNARRAY_LEVEL_LENGTH elements,
-  on the first level it's an array of LF_DYNARRAY_LEVEL_LENGTH pointers
-  to arrays of elements, on the second level it's an array of pointers
-  to arrays of pointers to arrays of elements. And so on.
-
-  With four levels the number of elements is limited to 4311810304
-  (but as in all functions index is uint, the real limit is 2^32-1)
-
-  Actually, it's wait-free, not lock-free ;-)
-*/
-
-#include <my_global.h>
-#include <m_string.h>
-#include <my_sys.h>
-#include <lf.h>
-
-void lf_dynarray_init(LF_DYNARRAY *array, uint element_size)
-{
-  bzero(array, sizeof(*array));
-  array->size_of_element= element_size;
-  my_atomic_rwlock_init(&array->lock);
-}
-
-static void recursive_free(void **alloc, int level)
-{
-  if (!alloc)
-    return;
-
-  if (level)
-  {
-    int i;
-    for (i= 0; i < LF_DYNARRAY_LEVEL_LENGTH; i++)
-      recursive_free(alloc[i], level-1);
-    my_free((void *)alloc, MYF(0));
-  }
-  else
-    my_free(alloc[-1], MYF(0));
-}
-
-void lf_dynarray_destroy(LF_DYNARRAY *array)
-{
-  int i;
-  for (i= 0; i < LF_DYNARRAY_LEVELS; i++)
-    recursive_free(array->level[i], i);
-  my_atomic_rwlock_destroy(&array->lock);
-}
-
-static const ulong dynarray_idxes_in_prev_levels[LF_DYNARRAY_LEVELS]=
-{
-  0, /* +1 here to to avoid -1's below */
-  LF_DYNARRAY_LEVEL_LENGTH,
-  LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH +
-    LF_DYNARRAY_LEVEL_LENGTH,
-  LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH *
-    LF_DYNARRAY_LEVEL_LENGTH + LF_DYNARRAY_LEVEL_LENGTH *
-    LF_DYNARRAY_LEVEL_LENGTH + LF_DYNARRAY_LEVEL_LENGTH
-};
-
-static const ulong dynarray_idxes_in_prev_level[LF_DYNARRAY_LEVELS]=
-{
-  0, /* +1 here to to avoid -1's below */
-  LF_DYNARRAY_LEVEL_LENGTH,
-  LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH,
-  LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH *
-    LF_DYNARRAY_LEVEL_LENGTH,
-};
-
-/*
-  Returns a valid lvalue pointer to the element number 'idx'.
-  Allocates memory if necessary.
-*/
-void *_lf_dynarray_lvalue(LF_DYNARRAY *array, uint idx)
-{
-  void * ptr, * volatile * ptr_ptr= 0;
-  int i;
-
-  for (i= LF_DYNARRAY_LEVELS-1; idx < dynarray_idxes_in_prev_levels[i]; i--)
-    /* no-op */;
-  ptr_ptr= &array->level[i];
-  idx-= dynarray_idxes_in_prev_levels[i];
-  for (; i > 0; i--)
-  {
-    if (!(ptr= *ptr_ptr))
-    {
-      void *alloc= my_malloc(LF_DYNARRAY_LEVEL_LENGTH * sizeof(void *),
-                             MYF(MY_WME|MY_ZEROFILL));
-      if (unlikely(!alloc))
-        return(NULL);
-      if (my_atomic_casptr(ptr_ptr, &ptr, alloc))
-        ptr= alloc;
-      else
-        my_free(alloc, MYF(0));
-    }
-    ptr_ptr= ((void **)ptr) + idx / dynarray_idxes_in_prev_level[i];
-    idx%= dynarray_idxes_in_prev_level[i];
-  }
-  if (!(ptr= *ptr_ptr))
-  {
-    uchar *alloc, *data;
-    alloc= my_malloc(LF_DYNARRAY_LEVEL_LENGTH * array->size_of_element +
-                    max(array->size_of_element, sizeof(void *)),
-                    MYF(MY_WME|MY_ZEROFILL));
-    if (unlikely(!alloc))
-      return(NULL);
-    /* reserve the space for free() address */
-    data= alloc + sizeof(void *);
-    { /* alignment */
-      intptr mod= ((intptr)data) % array->size_of_element;
-      if (mod)
-        data+= array->size_of_element - mod;
-    }
-    ((void **)data)[-1]= alloc; /* free() will need the original pointer */
-    if (my_atomic_casptr(ptr_ptr, &ptr, data))
-      ptr= data;
-    else
-      my_free(alloc, MYF(0));
-  }
-  return ((uchar*)ptr) + array->size_of_element * idx;
-}
-
-/*
-  Returns a pointer to the element number 'idx'
-  or NULL if an element does not exists
-*/
-void *_lf_dynarray_value(LF_DYNARRAY *array, uint idx)
-{
-  void * ptr, * volatile * ptr_ptr= 0;
-  int i;
-
-  for (i= LF_DYNARRAY_LEVELS-1; idx < dynarray_idxes_in_prev_levels[i]; i--)
-    /* no-op */;
-  ptr_ptr= &array->level[i];
-  idx-= dynarray_idxes_in_prev_levels[i];
-  for (; i > 0; i--)
-  {
-    if (!(ptr= *ptr_ptr))
-      return(NULL);
-    ptr_ptr= ((void **)ptr) + idx / dynarray_idxes_in_prev_level[i];
-    idx %= dynarray_idxes_in_prev_level[i];
-  }
-  if (!(ptr= *ptr_ptr))
-    return(NULL);
-  return ((uchar*)ptr) + array->size_of_element * idx;
-}
-
-static int recursive_iterate(LF_DYNARRAY *array, void *ptr, int level,
-                             lf_dynarray_func func, void *arg)
-{
-  int res, i;
-  if (!ptr)
-    return 0;
-  if (!level)
-    return func(ptr, arg);
-  for (i= 0; i < LF_DYNARRAY_LEVEL_LENGTH; i++)
-    if ((res= recursive_iterate(array, ((void **)ptr)[i], level-1, func, arg)))
-      return res;
-  return 0;
-}
-
-/*
-  Calls func(array, arg) on every array of LF_DYNARRAY_LEVEL_LENGTH elements
-  in lf_dynarray.
-
-  DESCRIPTION
-    lf_dynarray consists of a set of arrays, LF_DYNARRAY_LEVEL_LENGTH elements
-    each. _lf_dynarray_iterate() calls user-supplied function on every array
-    from the set. It is the fastest way to scan the array, faster than
-      for (i=0; i < N; i++) { func(_lf_dynarray_value(dynarray, i)); }
-
-  NOTE
-    if func() returns non-zero, the scan is aborted
-*/
-int _lf_dynarray_iterate(LF_DYNARRAY *array, lf_dynarray_func func, void *arg)
-{
-  int i, res;
-  for (i= 0; i < LF_DYNARRAY_LEVELS; i++)
-    if ((res= recursive_iterate(array, array->level[i], i, func, arg)))
-      return res;
-  return 0;
-}
-

=== removed file 'mysys/lf_hash.c.moved'
--- a/mysys/lf_hash.c.moved	2008-08-18 05:43:50 +0000
+++ b/mysys/lf_hash.c.moved	1970-01-01 00:00:00 +0000
@@ -1,493 +0,0 @@
-/* Copyright (C) 2006 MySQL AB
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
-
-/*
-  extensible hash
-
-  TODO
-     try to get rid of dummy nodes ?
-     for non-unique hash, count only _distinct_ values
-     (but how to do it in lf_hash_delete ?)
-*/
-#include <my_global.h>
-#include <m_string.h>
-#include <my_sys.h>
-#include <my_bit.h>
-#include <lf.h>
-
-LF_REQUIRE_PINS(3)
-
-/* An element of the list */
-typedef struct {
-  intptr volatile link; /* a pointer to the next element in a listand a flag */
-  uint32 hashnr;        /* reversed hash number, for sorting                 */
-  const uchar *key;
-  size_t keylen;
-  /*
-    data is stored here, directly after the keylen.
-    thus the pointer to data is (void*)(slist_element_ptr+1)
-  */
-} LF_SLIST;
-
-/*
-  a structure to pass the context (pointers two the three successive elements
-  in a list) from lfind to linsert/ldelete
-*/
-typedef struct {
-  intptr volatile *prev;
-  LF_SLIST *curr, *next;
-} CURSOR;
-
-/*
-  the last bit in LF_SLIST::link is a "deleted" flag.
-  the helper macros below convert it to a pure pointer or a pure flag
-*/
-#define PTR(V)      (LF_SLIST *)((V) & (~(intptr)1))
-#define DELETED(V)  ((V) & 1)
-
-/*
-  DESCRIPTION
-    Search for hashnr/key/keylen in the list starting from 'head' and
-    position the cursor. The list is ORDER BY hashnr, key
-
-  RETURN
-    0 - not found
-    1 - found
-
-  NOTE
-    cursor is positioned in either case
-    pins[0..2] are used, they are NOT removed on return
-*/
-static int lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
-                 const uchar *key, uint keylen, CURSOR *cursor, LF_PINS *pins)
-{
-  uint32       cur_hashnr;
-  const uchar  *cur_key;
-  uint         cur_keylen;
-  intptr       link;
-
-retry:
-  cursor->prev= (intptr *)head;
-  do { /* PTR() isn't necessary below, head is a dummy node */
-    cursor->curr= (LF_SLIST *)(*cursor->prev);
-    _lf_pin(pins, 1, cursor->curr);
-  } while (*cursor->prev != (intptr)cursor->curr && LF_BACKOFF);
-  for (;;)
-  {
-    if (unlikely(!cursor->curr))
-      return 0; /* end of the list */
-    do {
-      /* QQ: XXX or goto retry ? */
-      link= cursor->curr->link;
-      cursor->next= PTR(link);
-      _lf_pin(pins, 0, cursor->next);
-    } while (link != cursor->curr->link && LF_BACKOFF);
-    cur_hashnr= cursor->curr->hashnr;
-    cur_key= cursor->curr->key;
-    cur_keylen= cursor->curr->keylen;
-    if (*cursor->prev != (intptr)cursor->curr)
-    {
-      (void)LF_BACKOFF;
-      goto retry;
-    }
-    if (!DELETED(link))
-    {
-      if (cur_hashnr >= hashnr)
-      {
-        int r= 1;
-        if (cur_hashnr > hashnr ||
-            (r= my_strnncoll(cs, (uchar*) cur_key, cur_keylen, (uchar*) key,
-                             keylen)) >= 0)
-          return !r;
-      }
-      cursor->prev= &(cursor->curr->link);
-      _lf_pin(pins, 2, cursor->curr);
-    }
-    else
-    {
-      /*
-        we found a deleted node - be nice, help the other thread
-        and remove this deleted node
-      */
-      if (my_atomic_casptr((void **)cursor->prev,
-                           (void **)&cursor->curr, cursor->next))
-        _lf_alloc_free(pins, cursor->curr);
-      else
-      {
-        (void)LF_BACKOFF;
-        goto retry;
-      }
-    }
-    cursor->curr= cursor->next;
-    _lf_pin(pins, 1, cursor->curr);
-  }
-}
-
-/*
-  DESCRIPTION
-    insert a 'node' in the list that starts from 'head' in the correct
-    position (as found by lfind)
-
-  RETURN
-    0     - inserted
-    not 0 - a pointer to a duplicate (not pinned and thus unusable)
-
-  NOTE
-    it uses pins[0..2], on return all pins are removed.
-    if there're nodes with the same key value, a new node is added before them.
-*/
-static LF_SLIST *linsert(LF_SLIST * volatile *head, CHARSET_INFO *cs,
-                         LF_SLIST *node, LF_PINS *pins, uint flags)
-{
-  CURSOR         cursor;
-  int            res;
-
-  for (;;)
-  {
-    if (lfind(head, cs, node->hashnr, node->key, node->keylen,
-              &cursor, pins) &&
-        (flags & LF_HASH_UNIQUE))
-    {
-      res= 0; /* duplicate found */
-      break;
-    }
-    else
-    {
-      node->link= (intptr)cursor.curr;
-      DBUG_ASSERT(node->link != (intptr)node); /* no circular references */
-      DBUG_ASSERT(cursor.prev != &node->link); /* no circular references */
-      if (my_atomic_casptr((void **)cursor.prev, (void **)&cursor.curr, node))
-      {
-        res= 1; /* inserted ok */
-        break;
-      }
-    }
-  }
-  _lf_unpin(pins, 0);
-  _lf_unpin(pins, 1);
-  _lf_unpin(pins, 2);
-  /*
-    Note that cursor.curr is not pinned here and the pointer is unreliable,
-    the object may dissapear anytime. But if it points to a dummy node, the
-    pointer is safe, because dummy nodes are never freed - initialize_bucket()
-    uses this fact.
-  */
-  return res ? 0 : cursor.curr;
-}
-
-/*
-  DESCRIPTION
-    deletes a node as identified by hashnr/keey/keylen from the list
-    that starts from 'head'
-
-  RETURN
-    0 - ok
-    1 - not found
-
-  NOTE
-    it uses pins[0..2], on return all pins are removed.
-*/
-static int ldelete(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
-                   const uchar *key, uint keylen, LF_PINS *pins)
-{
-  CURSOR cursor;
-  int res;
-
-  for (;;)
-  {
-    if (!lfind(head, cs, hashnr, key, keylen, &cursor, pins))
-    {
-      res= 1; /* not found */
-      break;
-    }
-    else
-    {
-      /* mark the node deleted */
-      if (my_atomic_casptr((void **)&(cursor.curr->link),
-                           (void **)&cursor.next,
-                           (void *)(((intptr)cursor.next) | 1)))
-      {
-        /* and remove it from the list */
-        if (my_atomic_casptr((void **)cursor.prev,
-                             (void **)&cursor.curr, cursor.next))
-          _lf_alloc_free(pins, cursor.curr);
-        else
-        {
-          /*
-            somebody already "helped" us and removed the node ?
-            Let's check if we need to help that someone too!
-            (to ensure the number of "set DELETED flag" actions
-            is equal to the number of "remove from the list" actions)
-          */
-          lfind(head, cs, hashnr, key, keylen, &cursor, pins);
-        }
-        res= 0;
-        break;
-      }
-    }
-  }
-  _lf_unpin(pins, 0);
-  _lf_unpin(pins, 1);
-  _lf_unpin(pins, 2);
-  return res;
-}
-
-/*
-  DESCRIPTION
-    searches for a node as identified by hashnr/keey/keylen in the list
-    that starts from 'head'
-
-  RETURN
-    0 - not found
-    node - found
-
-  NOTE
-    it uses pins[0..2], on return the pin[2] keeps the node found
-    all other pins are removed.
-*/
-static LF_SLIST *lsearch(LF_SLIST * volatile *head, CHARSET_INFO *cs,
-                         uint32 hashnr, const uchar *key, uint keylen,
-                         LF_PINS *pins)
-{
-  CURSOR cursor;
-  int res= lfind(head, cs, hashnr, key, keylen, &cursor, pins);
-  if (res)
-    _lf_pin(pins, 2, cursor.curr);
-  _lf_unpin(pins, 0);
-  _lf_unpin(pins, 1);
-  return res ? cursor.curr : 0;
-}
-
-static inline const uchar* hash_key(const LF_HASH *hash,
-                                    const uchar *record, size_t *length)
-{
-  if (hash->get_key)
-    return (*hash->get_key)(record, length, 0);
-  *length= hash->key_length;
-  return record + hash->key_offset;
-}
-
-/*
-  compute the hash key value from the raw key.
-  note, that the hash value is limited to 2^31, because we need one
-  bit to distinguish between normal and dummy nodes.
-*/
-static inline uint calc_hash(LF_HASH *hash, const uchar *key, uint keylen)
-{
-  ulong nr1= 1, nr2= 4;
-  hash->charset->coll->hash_sort(hash->charset, (uchar*) key, keylen,
-                                 &nr1, &nr2);
-  return nr1 & INT_MAX32;
-}
-
-#define MAX_LOAD 1.0    /* average number of elements in a bucket */
-
-static int initialize_bucket(LF_HASH *, LF_SLIST * volatile*, uint, LF_PINS *);
-
-/*
-  Initializes lf_hash, the arguments are compatible with hash_init
-*/
-void lf_hash_init(LF_HASH *hash, uint element_size, uint flags,
-                  uint key_offset, uint key_length, hash_get_key get_key,
-                  CHARSET_INFO *charset)
-{
-  lf_alloc_init(&hash->alloc, sizeof(LF_SLIST)+element_size,
-                offsetof(LF_SLIST, key));
-  lf_dynarray_init(&hash->array, sizeof(LF_SLIST *));
-  hash->size= 1;
-  hash->count= 0;
-  hash->element_size= element_size;
-  hash->flags= flags;
-  hash->charset= charset ? charset : &my_charset_bin;
-  hash->key_offset= key_offset;
-  hash->key_length= key_length;
-  hash->get_key= get_key;
-  DBUG_ASSERT(get_key ? !key_offset && !key_length : key_length);
-}
-
-void lf_hash_destroy(LF_HASH *hash)
-{
-  LF_SLIST *el, **head= (LF_SLIST **)_lf_dynarray_value(&hash->array, 0);
-
-  if (unlikely(!head))
-    return;
-  el= *head;
-
-  while (el)
-  {
-    intptr next= el->link;
-    if (el->hashnr & 1)
-      lf_alloc_direct_free(&hash->alloc, el); /* normal node */
-    else
-      my_free((void *)el, MYF(0)); /* dummy node */
-    el= (LF_SLIST *)next;
-  }
-  lf_alloc_destroy(&hash->alloc);
-  lf_dynarray_destroy(&hash->array);
-}
-
-/*
-  DESCRIPTION
-    inserts a new element to a hash. it will have a _copy_ of
-    data, not a pointer to it.
-
-  RETURN
-    0 - inserted
-    1 - didn't (unique key conflict)
-   -1 - out of memory
-
-  NOTE
-    see linsert() for pin usage notes
-*/
-int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data)
-{
-  int csize, bucket, hashnr;
-  LF_SLIST *node, * volatile *el;
-
-  lf_rwlock_by_pins(pins);
-  node= (LF_SLIST *)_lf_alloc_new(pins);
-  if (unlikely(!node))
-    return -1;
-  memcpy(node+1, data, hash->element_size);
-  node->key= hash_key(hash, (uchar *)(node+1), &node->keylen);
-  hashnr= calc_hash(hash, node->key, node->keylen);
-  bucket= hashnr % hash->size;
-  el= _lf_dynarray_lvalue(&hash->array, bucket);
-  if (unlikely(!el))
-    return -1;
-  if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins)))
-    return -1;
-  node->hashnr= my_reverse_bits(hashnr) | 1; /* normal node */
-  if (linsert(el, hash->charset, node, pins, hash->flags))
-  {
-    _lf_alloc_free(pins, node);
-    lf_rwunlock_by_pins(pins);
-    return 1;
-  }
-  csize= hash->size;
-  if ((my_atomic_add32(&hash->count, 1)+1.0) / csize > MAX_LOAD)
-    my_atomic_cas32(&hash->size, &csize, csize*2);
-  lf_rwunlock_by_pins(pins);
-  return 0;
-}
-
-/*
-  DESCRIPTION
-    deletes an element with the given key from the hash (if a hash is
-    not unique and there're many elements with this key - the "first"
-    matching element is deleted)
-  RETURN
-    0 - deleted
-    1 - didn't (not found)
-   -1 - out of memory
-  NOTE
-    see ldelete() for pin usage notes
-*/
-int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
-{
-  LF_SLIST * volatile *el;
-  uint bucket, hashnr= calc_hash(hash, (uchar *)key, keylen);
-
-  bucket= hashnr % hash->size;
-  lf_rwlock_by_pins(pins);
-  el= _lf_dynarray_lvalue(&hash->array, bucket);
-  if (unlikely(!el))
-    return -1;
-  /*
-    note that we still need to initialize_bucket here,
-    we cannot return "node not found", because an old bucket of that
-    node may've been split and the node was assigned to a new bucket
-    that was never accessed before and thus is not initialized.
-  */
-  if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins)))
-    return -1;
-  if (ldelete(el, hash->charset, my_reverse_bits(hashnr) | 1,
-              (uchar *)key, keylen, pins))
-  {
-    lf_rwunlock_by_pins(pins);
-    return 1;
-  }
-  my_atomic_add32(&hash->count, -1);
-  lf_rwunlock_by_pins(pins);
-  return 0;
-}
-
-/*
-  RETURN
-    a pointer to an element with the given key (if a hash is not unique and
-    there're many elements with this key - the "first" matching element)
-    NULL         if nothing is found
-    MY_ERRPTR    if OOM
-
-  NOTE
-    see lsearch() for pin usage notes
-*/
-void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
-{
-  LF_SLIST * volatile *el, *found;
-  uint bucket, hashnr= calc_hash(hash, (uchar *)key, keylen);
-
-  bucket= hashnr % hash->size;
-  lf_rwlock_by_pins(pins);
-  el= _lf_dynarray_lvalue(&hash->array, bucket);
-  if (unlikely(!el))
-    return MY_ERRPTR;
-  if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins)))
-    return MY_ERRPTR;
-  found= lsearch(el, hash->charset, my_reverse_bits(hashnr) | 1,
-                 (uchar *)key, keylen, pins);
-  lf_rwunlock_by_pins(pins);
-  return found ? found+1 : 0;
-}
-
-static const uchar *dummy_key= "";
-
-/*
-  RETURN
-    0 - ok
-   -1 - out of memory
-*/
-static int initialize_bucket(LF_HASH *hash, LF_SLIST * volatile *node,
-                              uint bucket, LF_PINS *pins)
-{
-  uint parent= my_clear_highest_bit(bucket);
-  LF_SLIST *dummy= (LF_SLIST *)my_malloc(sizeof(LF_SLIST), MYF(MY_WME));
-  LF_SLIST **tmp= 0, *cur;
-  LF_SLIST * volatile *el= _lf_dynarray_lvalue(&hash->array, parent);
-  if (unlikely(!el || !dummy))
-    return -1;
-  if (*el == NULL && bucket &&
-      unlikely(initialize_bucket(hash, el, parent, pins)))
-    return -1;
-  dummy->hashnr= my_reverse_bits(bucket) | 0; /* dummy node */
-  dummy->key= (char*) dummy_key;
-  dummy->keylen= 0;
-  if ((cur= linsert(el, hash->charset, dummy, pins, LF_HASH_UNIQUE)))
-  {
-    my_free((void *)dummy, MYF(0));
-    dummy= cur;
-  }
-  my_atomic_casptr((void **)node, (void **)&tmp, dummy);
-  /*
-    note that if the CAS above failed (after linsert() succeeded),
-    it would mean that some other thread has executed linsert() for
-    the same dummy node, its linsert() failed, it picked up our
-    dummy node (in "dummy= cur") and executed the same CAS as above.
-    Which means that even if CAS above failed we don't need to retry,
-    and we should not free(dummy) - there's no memory leak here
-  */
-  return 0;
-}

=== modified file 'sql/opt_range.cc'
--- a/sql/opt_range.cc	2008-12-14 11:36:15 +0000
+++ b/sql/opt_range.cc	2008-12-16 11:29:22 +0000
@@ -4827,7 +4827,7 @@ static TRP_RANGE *get_key_scans_params(P
         tree->n_ror_scans++;
         tree->ror_scans_map.set_bit(idx);
       }
-      if (read_time > found_read_time && found_records != HA_POS_ERROR)
+      if (found_records != HA_POS_ERROR && read_time > found_read_time)
       {
         read_time=    found_read_time;
         best_records= found_records;

=== modified file 'sql/protocol.cc'
--- a/sql/protocol.cc	2008-12-10 14:30:52 +0000
+++ b/sql/protocol.cc	2008-12-16 11:29:22 +0000
@@ -930,7 +930,7 @@ bool Protocol_text::store(const char *fr
 {
   CHARSET_INFO *tocs= this->thd->variables.character_set_results;
 #ifndef DBUG_OFF
-  DBUG_PRINT("info", ("Protocol_text::store field %u (%u): %*s", field_pos,
+  DBUG_PRINT("info", ("Protocol_text::store field %u (%u): %.*s", field_pos,
                       field_count, (int) length, from));
   DBUG_ASSERT(field_pos < field_count);
   DBUG_ASSERT(field_types == 0 ||

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2008-12-14 11:36:15 +0000
+++ b/sql/sql_select.cc	2008-12-16 11:29:22 +0000
@@ -4901,6 +4901,7 @@ add_key_part(DYNAMIC_ARRAY *keyuse_array
           keyuse.null_rejecting= key_field->null_rejecting;
           keyuse.cond_guard= key_field->cond_guard;
           keyuse.sj_pred_no= key_field->sj_pred_no;
+          keyuse.ref_table_rows= 0;
 	  (void) insert_dynamic(keyuse_array,(uchar*) &keyuse);
 	}
       }

=== modified file 'storage/falcon/StorageHandler.cpp'
--- a/storage/falcon/StorageHandler.cpp	2008-11-13 13:27:13 +0000
+++ b/storage/falcon/StorageHandler.cpp	2008-12-10 13:25:17 +0000
@@ -506,7 +506,8 @@ int StorageHandler::createTablespace(con
 
 	try
 		{
-		JString cmd = genCreateTableSpace(tableSpaceName, filename, comment);
+		JString tableSpace= JString::upcase(tableSpaceName);
+		JString cmd = genCreateTableSpace(tableSpace, filename, comment);
 		Sync sync(&dictionarySyncObject, "StorageHandler::createTablespace");
 		sync.lock(Exclusive);
 		Statement *statement = dictionaryConnection->createStatement();
@@ -547,8 +548,9 @@ int StorageHandler::deleteTablespace(con
 
 	try
 		{
+		JString tableSpace= JString::upcase(tableSpaceName);
 		CmdGen gen;
-		gen.gen("drop tablespace \"%s\"", tableSpaceName);
+		gen.gen("drop tablespace \"%s\"", (const char*) tableSpace);
 		Sync sync(&dictionarySyncObject, "StorageHandler::deleteTablespace");
 		sync.lock(Exclusive);
 		Statement *statement = dictionaryConnection->createStatement();

=== modified file 'storage/falcon/StorageTable.cpp'
--- a/storage/falcon/StorageTable.cpp	2008-12-04 11:00:12 +0000
+++ b/storage/falcon/StorageTable.cpp	2008-12-10 13:25:17 +0000
@@ -375,6 +375,11 @@ const char* StorageTable::getSchemaName(
 	return share->schemaName;
 }
 
+const char* StorageTable::getTableSpaceName(void)
+{
+	return share->tableSpace;
+}
+
 void StorageTable::setConnection(StorageConnection* newStorageConn)
 {
 	if (bitmap)

=== modified file 'storage/falcon/StorageTable.h'
--- a/storage/falcon/StorageTable.h	2008-10-22 20:44:09 +0000
+++ b/storage/falcon/StorageTable.h	2008-12-10 13:25:17 +0000
@@ -99,6 +99,7 @@ public:
 	virtual const unsigned char* getEncoding(int fieldIndex);
 	virtual const char*			 getName(void);
 	virtual const char*			 getSchemaName(void);
+	virtual const char*			 getTableSpaceName(void);
 	virtual int		compareKey(const unsigned char* key, int keyLength);
 	virtual int		translateError(SQLException *exception, int defaultStorageError);
 	virtual int		isKeyNull(const unsigned char* key, int keyLength);

=== modified file 'storage/falcon/StorageVersion.h'
--- a/storage/falcon/StorageVersion.h	2008-12-09 19:27:06 +0000
+++ b/storage/falcon/StorageVersion.h	2008-12-16 14:12:29 +0000
@@ -14,5 +14,5 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 
-#define FALCON_VERSION	"T1.3-8"
-#define FALCON_DATE		"09 December, 2008"
+#define FALCON_VERSION	"T1.3-9"
+#define FALCON_DATE		"16 December, 2008"

=== modified file 'storage/falcon/Table.cpp'
--- a/storage/falcon/Table.cpp	2008-11-20 17:05:50 +0000
+++ b/storage/falcon/Table.cpp	2008-12-16 20:40:38 +0000
@@ -534,8 +534,10 @@ Record* Table::fetchNext(int32 start)
 					
 					return record;
 					}
-			
+
+#ifdef CHECK_RECORD_ACTIVITY
 				record->active = false;
+#endif
 				record->release();
 				sync.lock(Shared);
 				
@@ -610,7 +612,9 @@ Record* Table::fetchNext(int32 start)
 				}
 			else
 				{
+#ifdef CHECK_RECORD_ACTIVITY
 				record->active = false;
+#endif
 				record->release();
 				}
 			
@@ -915,7 +919,9 @@ Record* Table::fetch(int32 recordNumber)
 				if (insert(record, NULL, recordNumber))
 					return record;
 				
+#ifdef CHECK_RECORD_ACTIVITY
 				record->active = false;
+#endif
 				record->release();
 				
 				continue;
@@ -932,7 +938,9 @@ Record* Table::fetch(int32 recordNumber)
 		if (insert(record, NULL, recordNumber))
 			return record;
 		
+#ifdef CHECK_RECORD_ACTIVITY
 		record->active = false;
+#endif
 		record->release();
 		sync.lock(Shared);
 		}
@@ -1971,7 +1979,9 @@ bool Table::insert(Record * record, Reco
 		{
 		if (prior)
 			{
+#ifdef CHECK_RECORD_ACTIVITY
 			prior->active = false;
+#endif
 			prior->release();
 			}
 		
@@ -3356,7 +3366,9 @@ void Table::validateAndInsert(Transactio
 		if (n >= 7)
 			Log::debug("Table::validateAndInsert: things going badly (%d)\n", n);
 			
+#ifdef CHECK_RECORD_ACTIVITY
 		record->active = false;
+#endif
 		}
 		
 	throw SQLError(UPDATE_CONFLICT, "unexpected update conflict in table %s.%s record %d", schemaName, name, record->recordNumber);
@@ -3570,7 +3582,9 @@ Record* Table::fetchForUpdate(Transactio
 					return record;
 					}
 		
+#ifdef CHECK_RECORD_ACTIVITY
 				recordVersion->active = false;
+#endif
 				recordVersion->release();
 				}
 				break;
@@ -3808,7 +3822,8 @@ void Table::deleteRecordBacklog(int32 re
 
 SyncObject* Table::getSyncPrior(Record* record)
 {
-	int lockNumber = record->recordNumber % SYNC_VERSIONS_SIZE;
+	int recNumber = (record->recordNumber == -1) ? 0 : record->recordNumber;
+	int lockNumber = recNumber % SYNC_VERSIONS_SIZE;
 	return syncPriorVersions + lockNumber;
 }
 

=== modified file 'storage/falcon/Transaction.cpp'
--- a/storage/falcon/Transaction.cpp	2008-12-09 23:11:13 +0000
+++ b/storage/falcon/Transaction.cpp	2008-12-16 20:40:38 +0000
@@ -276,7 +276,7 @@ void Transaction::commit()
 
 	// Set the commit transition id for this transaction
 
-    commitId = INTERLOCKED_INCREMENT(transactionManager->transactionSequence);
+	commitId = INTERLOCKED_INCREMENT(transactionManager->transactionSequence);
 
 	transactionManager->activeTransactions.remove(this);
 	transactionManager->committedTransactions.append(this);

=== modified file 'storage/falcon/TransactionManager.cpp'
--- a/storage/falcon/TransactionManager.cpp	2008-12-10 15:53:21 +0000
+++ b/storage/falcon/TransactionManager.cpp	2008-12-16 20:40:38 +0000
@@ -329,7 +329,6 @@ void TransactionManager::getTransactionI
 		transaction->getInfo(infoTable);
 }
 
-
 void TransactionManager::purgeTransactions()
 {
 	// This method is called by the scavenger to clean up old committed
@@ -346,7 +345,6 @@ void TransactionManager::purgeTransactio
 	syncCommitted.lock(Exclusive);
 
 	purgeTransactionsWithLocks();
-
 }
 
 

=== modified file 'storage/falcon/ha_falcon.cpp'
--- a/storage/falcon/ha_falcon.cpp	2008-12-15 12:17:03 +0000
+++ b/storage/falcon/ha_falcon.cpp	2008-12-16 21:29:54 +0000
@@ -859,7 +859,7 @@ int StorageInterface::create(const char 
 		tableSpace = TEMPORARY_TABLESPACE;
 		}
 	else if (info->tablespace)
-		tableSpace = info->tablespace;
+		tableSpace = storageTable->getTableSpaceName();
 	else
 		tableSpace = DEFAULT_TABLESPACE;
 
@@ -2358,33 +2358,33 @@ int StorageInterface::check_if_supported
 			}
 		}
 		
-	if (alter_flags->is_set(HA_ADD_INDEX) || alter_flags->is_set(HA_ADD_UNIQUE_INDEX)
-		|| alter_flags->is_set(HA_DROP_INDEX) || alter_flags->is_set(HA_DROP_UNIQUE_INDEX))
-		{
-		for (unsigned int n = 0; n < altered_table->s->keys; n++)
-			{
-			KEY *key = altered_table->key_info + n;
-			KEY *tableEnd = table->key_info + table->s->keys;
-			KEY *tableKey;
-			
-			// Determine if this is a new index
-
-			for (tableKey = table->key_info; tableKey < tableEnd; tableKey++)
-				if (!strcmp(tableKey->name, key->name))
-					break;
-
-			// Unique, non-null keys are interpreted as primary keys.
-			// Online add/drop primary keys not yet supported.
-			
-			if (tableKey >= tableEnd)
-				if (n == altered_table->s->primary_key)
-					{
-					DBUG_PRINT("info",("Online add/drop primary key not supported"));
-					DBUG_RETURN(HA_ALTER_NOT_SUPPORTED);
-					}
-			}
-		}
-		
+	if (alter_flags->is_set(HA_ADD_INDEX) || alter_flags->is_set(HA_ADD_UNIQUE_INDEX)
+		|| alter_flags->is_set(HA_DROP_INDEX) || alter_flags->is_set(HA_DROP_UNIQUE_INDEX))
+		{
+		for (unsigned int n = 0; n < altered_table->s->keys; n++)
+			{
+			KEY *key = altered_table->key_info + n;
+			KEY *tableEnd = table->key_info + table->s->keys;
+			KEY *tableKey;
+
+			// Determine if this is a new index
+
+			for (tableKey = table->key_info; tableKey < tableEnd; tableKey++)
+				if (!strcmp(tableKey->name, key->name))
+					break;
+
+			// Unique, non-null keys are interpreted as primary keys.
+			// Online add/drop primary keys not yet supported.
+		
+			if (tableKey >= tableEnd)
+				if (n == altered_table->s->primary_key)
+					{
+					DBUG_PRINT("info",("Online add/drop primary key not supported"));
+					DBUG_RETURN(HA_ALTER_NOT_SUPPORTED);
+					}
+			}
+		}
+
 	DBUG_RETURN(HA_ALTER_SUPPORTED_NO_LOCK);
 }
 

Thread
bzr push into mysql-6.0-falcon branch (hky:2936 to 2941) Hakan Kuecuekyilmaz16 Dec