MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Kevin Lewis Date:September 10 2008 9:42pm
Subject:bzr push into mysql-6.0-falcon branch (klewis:2813 to 2824) Bug#38947
View as plain text  
 2824 Kevin Lewis	2008-09-10
      Bug# Add an exclusive lock on Database::syncScavenge in 
      Database::truncateTable before the lock of Table::syncObject
      just in case the truncateTable process has to call 
      Database::forceRecordScavenge.  syncScavenge must be locked 
      before Table::syncObject because the scavenger does it that way.
      
      According to the Deadlock Detector, syncScavenge must also be 
      locked before Database::syncTables.
modified:
  storage/falcon/Database.cpp

 2823 Kevin Lewis	2008-09-10
      Improvements to the Deadlock Detector in SyncHandler.
      Keep track of whether a location locks a SyncObject in 
      exclusive of Shared mode.
      Show that in the putput.
      Eliminate possible deadlocks where the second SyncObject 
      occurs both before and after the first, but only within 
      the same call stack.  This is OK as long as the lock does 
      not start with Shared and rises up to Exclusive.
modified:
  storage/falcon/SyncHandler.cpp
  storage/falcon/SyncHandler.h
  storage/falcon/SyncObject.cpp

 2822 Kevin Lewis	2008-09-10
      Various cleanup changes
modified:
  storage/falcon/Cache.cpp
  storage/falcon/Cache.h
  storage/falcon/Index.cpp
  storage/falcon/SerialLogFile.cpp
  storage/falcon/Transaction.cpp

 2821 Christopher Powers	2008-09-10
      Bug #39350 Falcon: Releasing deferred indexes causes crash
          
      Restored DeferredIndex addRef/releaseRef to Transaction.
modified:
  storage/falcon/DeferredIndex.cpp
  storage/falcon/DeferredIndexWalker.cpp
  storage/falcon/Transaction.cpp

 2820 Christopher Powers	2008-09-10
      Bug #39350 Falcon: Releasing deferred indexes causes crash
        
      Fixed regression to last commit that prevented deferred indexes from being released.
modified:
  storage/falcon/Transaction.cpp

 2819 John H. Embretsen	2008-09-10 [merge]
      Merging http://lists.mysql.com/commits/53704 into updated falcon-team branch.
      "Fix test segment for ALTER ONLINE ADD UNIQUE INDEX in falcon_online_index.test."
modified:
  mysql-test/suite/falcon/r/falcon_online_index.result
  mysql-test/suite/falcon/t/falcon_online_index.test

 2818 Hakan Kuecuekyilmaz	2008-09-10 [merge]
      Merge.
modified:
  storage/falcon/ha_falcon.cpp

 2817 Hakan Kuecuekyilmaz	2008-09-10 [merge]
      Merge.
removed:
  mysql-test/suite/falcon/r/falcon_select_excerpt.result
  mysql-test/suite/falcon/t/falcon_select_excerpt.test
added:
  mysql-test/suite/falcon/r/falcon_index_datatypes.result
  mysql-test/suite/falcon/r/falcon_online_index.result
  mysql-test/suite/falcon/t/falcon_index_datatypes.test
  mysql-test/suite/falcon/t/falcon_online_index.test
modified:
  storage/falcon/Cache.cpp
  storage/falcon/Configuration.cpp
  storage/falcon/DeferredIndex.cpp
  storage/falcon/StorageTable.cpp
  storage/falcon/StorageTableShare.cpp
  storage/falcon/StorageTableShare.h
  storage/falcon/Transaction.cpp
  storage/falcon/Transaction.h
  storage/falcon/ha_falcon.cpp
  storage/falcon/ha_falcon.h

 2816 Hakan Kuecuekyilmaz	2008-09-09
      Added comment about stupid and misleading
      server level error message.
modified:
  mysql-test/suite/falcon/r/falcon_bug_24024.result
  mysql-test/suite/falcon/t/falcon_bug_24024.test

 2815 Hakan Kuecuekyilmaz	2008-09-09
      Rescued 3 tests from falcon_team test suite.
      
      Cleaned up test cases and added one -big.test version of
      falcon_bug_22207.test.
added:
  mysql-test/suite/falcon/r/falcon_bug_22207-big.result
  mysql-test/suite/falcon/t/falcon_bug_22207-big.test
renamed:
  mysql-test/suite/falcon_team/r/falcon_bug_22189.result => mysql-test/suite/falcon/r/falcon_bug_22189.result
  mysql-test/suite/falcon_team/r/falcon_bug_22207.result => mysql-test/suite/falcon/r/falcon_bug_22207.result
  mysql-test/suite/falcon_team/r/falcon_bug_24024.result => mysql-test/suite/falcon/r/falcon_bug_24024.result
  mysql-test/suite/falcon_team/t/falcon_bug_22189.test => mysql-test/suite/falcon/t/falcon_bug_22189.test
  mysql-test/suite/falcon_team/t/falcon_bug_22207.test => mysql-test/suite/falcon/t/falcon_bug_22207.test
  mysql-test/suite/falcon_team/t/falcon_bug_24024.test => mysql-test/suite/falcon/t/falcon_bug_24024.test
modified:
  mysql-test/suite/falcon/r/falcon_bug_22972.result
  mysql-test/suite/falcon/t/disabled.def
  mysql-test/suite/falcon/t/falcon_bug_22972.test
  mysql-test/suite/falcon_team/r/falcon_bug_23945.result
  mysql-test/suite/falcon_team/t/falcon_bug_23945.test
  mysql-test/suite/falcon/r/falcon_bug_22189.result
  mysql-test/suite/falcon/r/falcon_bug_22207.result
  mysql-test/suite/falcon/r/falcon_bug_24024.result
  mysql-test/suite/falcon/t/falcon_bug_22189.test
  mysql-test/suite/falcon/t/falcon_bug_22207.test
  mysql-test/suite/falcon/t/falcon_bug_24024.test

 2814 Vladislav Vaintroub	2008-09-08
      Bug#38947 -don't signal waiting thread until the very end of rollback(), to avoid races.
modified:
  storage/falcon/Transaction.cpp

 2813 Vladislav Vaintroub	2008-09-08
      Add missing dependency to perror  to avoid  compile error in multiprocessor builds
modified:
  extra/CMakeLists.txt

=== modified file 'Makefile.am'
--- a/Makefile.am	2008-07-24 11:55:49 +0000
+++ b/Makefile.am	2008-09-04 09:22:16 +0000
@@ -63,7 +63,8 @@ dist-hook:
 		--datadir=$(distdir)/win/data \
 		--srcdir=$(top_srcdir)
 
-all-local:		abi_check
+# TODO: uncomment abi_check (next line) if you get a merge conflict here.
+#all-local:		abi_check
 
 tags:
 	support-files/build-tags

=== modified file 'client/mysqldump.c'
--- a/client/mysqldump.c	2008-05-29 15:44:11 +0000
+++ b/client/mysqldump.c	2008-09-04 09:22:16 +0000
@@ -3684,6 +3684,7 @@ static int dump_tablespaces(char* ts_whe
                       " EXTRA"
                       " FROM INFORMATION_SCHEMA.FILES"
                       " WHERE FILE_TYPE = 'UNDO LOG'"
+                      " AND ENGINE != 'Falcon'"
                       " AND FILE_NAME IS NOT NULL",
                       256, 1024);
   if(ts_where)
@@ -3780,7 +3781,8 @@ static int dump_tablespaces(char* ts_whe
                       " INITIAL_SIZE,"
                       " ENGINE"
                       " FROM INFORMATION_SCHEMA.FILES"
-                      " WHERE FILE_TYPE = 'DATAFILE'",
+                      " WHERE FILE_TYPE = 'DATAFILE'"
+                      " AND ENGINE != 'Falcon'",
                       256, 1024);
 
   if(ts_where)

=== modified file 'extra/CMakeLists.txt'
--- a/extra/CMakeLists.txt	2008-04-02 17:52:11 +0000
+++ b/extra/CMakeLists.txt	2008-09-08 12:07:15 +0000
@@ -42,6 +42,7 @@ ADD_EXECUTABLE(my_print_defaults my_prin
 TARGET_LINK_LIBRARIES(my_print_defaults strings mysys debug dbug taocrypt ws2_32)
 
 ADD_EXECUTABLE(perror perror.c)
+ADD_DEPENDENCIES(perror GenError)
 TARGET_LINK_LIBRARIES(perror strings mysys debug dbug ws2_32)
 
 ADD_EXECUTABLE(resolveip resolveip.c)

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_22189.result' => 'mysql-test/suite/falcon/r/falcon_bug_22189.result'
--- a/mysql-test/suite/falcon_team/r/falcon_bug_22189.result	2008-04-28 11:21:52 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_22189.result	2008-09-09 08:30:18 +0000
@@ -33,11 +33,12 @@ x1	x2
 1	1
 # Switch to connection conn1
 UPDATE x1 SET x1 = 0, x2 = 5;
+ERROR 23000: Duplicate entry '0' for key 'PRIMARY'
 INSERT INTO x1 VALUES (0,6);
+ERROR 23000: Duplicate entry '0' for key 'PRIMARY'
 # Switch to connection default
 ROLLBACK;
 # Switch to connection conn1
-ERROR 23000: Duplicate entry '0' for key 'PRIMARY'
 INSERT INTO x1 VALUES (0,6);
 ERROR 23000: Duplicate entry '0' for key 'PRIMARY'
 INSERT INTO x1 VALUES (0,6);

=== added file 'mysql-test/suite/falcon/r/falcon_bug_22207-big.result'
--- a/mysql-test/suite/falcon/r/falcon_bug_22207-big.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_22207-big.result	2008-09-09 08:30:18 +0000
@@ -0,0 +1,150 @@
+*** Bug #22207 ***
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (c1 varchar(50), c2 int, c3 char(1));
+INSERT INTO t1 VALUES (repeat('A', 50), 0, 'A');
+INSERT INTO t1 VALUES (repeat('B', 50), 0, 'B');
+INSERT INTO t1 VALUES (repeat('C', 50), 0, 'C');
+INSERT INTO t1 VALUES (repeat('D', 50), 0, 'D');
+INSERT INTO t1 VALUES (repeat('E', 50), 0, 'E');
+INSERT INTO t1 VALUES (repeat('F', 50), 0, 'F');
+INSERT INTO t1 VALUES (repeat('G', 50), 0, 'G');
+INSERT INTO t1 VALUES (repeat('H', 50), 0, 'H');
+INSERT INTO t1 VALUES (repeat('I', 50), 0, 'I');
+INSERT INTO t1 VALUES (repeat('J', 50), 0, 'J');
+INSERT INTO t1 VALUES (repeat('K', 50), 0, 'K');
+COMMIT;
+SELECT c1 from t1;
+c1
+150000____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+150000____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+150000____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+150000____DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+150000____EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+150000____FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+150000____GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+150000____HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+150000____IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+150000____JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+150000____KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+300000____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+300000____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+300000____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+300000____DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+300000____EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+300000____FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+300000____GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+300000____HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+300000____IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+300000____JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+300000____KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+450000____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+450000____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+450000____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+450000____DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+450000____EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+450000____FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+450000____GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+450000____HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+450000____IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+450000____JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+450000____KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+600000____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+600000____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+600000____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+600000____DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+600000____EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+600000____FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+600000____GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+600000____HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+600000____IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+600000____JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+600000____KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+750000____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+750000____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+750000____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+750000____DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+750000____EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+750000____FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+750000____GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+750000____HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+750000____IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+750000____JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+750000____KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+900000____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+900000____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+900000____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+900000____DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+900000____EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+900000____FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+900000____GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+900000____HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+900000____IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+900000____JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+900000____KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+1050000___AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+1050000___BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+1050000___CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+1050000___DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+1050000___EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+1050000___FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+1050000___GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+1050000___HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+1050000___IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+1050000___JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+1050000___KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+1200000___AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+1200000___BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+1200000___CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+1200000___DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+1200000___EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+1200000___FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+1200000___GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+1200000___HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+1200000___IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+1200000___JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+1200000___KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+1350000___AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+1350000___BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+1350000___CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+1350000___DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+1350000___EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+1350000___FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+1350000___GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+1350000___HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+1350000___IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+1350000___JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+1350000___KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT c1 from t1;
+c1
+1500000___AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+1500000___BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+1500000___CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+1500000___DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+1500000___EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+1500000___FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+1500000___GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+1500000___HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+1500000___IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+1500000___JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+1500000___KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
+SELECT count(*) FROM t1;
+count(*)
+11
+DROP TABLE t1;

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_22207.result' => 'mysql-test/suite/falcon/r/falcon_bug_22207.result'
--- a/mysql-test/suite/falcon_team/r/falcon_bug_22207.result	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_22207.result	2008-09-09 08:30:18 +0000
@@ -1,4 +1,5 @@
-SET STORAGE_ENGINE = 'Falcon';
+*** Bug #22207 ***
+SET @@storage_engine = 'Falcon';
 DROP TABLE IF EXISTS t1;
 CREATE TABLE t1 (c1 varchar(50), c2 int, c3 char(1));
 INSERT INTO t1 VALUES (repeat('A', 50), 0, 'A');
@@ -7,52 +8,55 @@ INSERT INTO t1 VALUES (repeat('C', 50), 
 COMMIT;
 SELECT c1 from t1;
 c1
+2500______AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+2500______BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+2500______CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SELECT c1 from t1;
+c1
 5000______AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 5000______BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 5000______CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 SELECT c1 from t1;
 c1
+7500______AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+7500______BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+7500______CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SELECT c1 from t1;
+c1
 10000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 10000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 10000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 SELECT c1 from t1;
 c1
+12500_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+12500_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+12500_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SELECT c1 from t1;
+c1
 15000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 15000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 15000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 SELECT c1 from t1;
 c1
+17500_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+17500_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+17500_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SELECT c1 from t1;
+c1
 20000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 20000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 20000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 SELECT c1 from t1;
 c1
+22500_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+22500_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+22500_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SELECT c1 from t1;
+c1
 25000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 25000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 25000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-SELECT c1 from t1;
-c1
-30000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-30000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-30000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-SELECT c1 from t1;
-c1
-35000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-35000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-35000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-SELECT c1 from t1;
-c1
-40000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-40000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-40000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-SELECT c1 from t1;
-c1
-45000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-45000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-45000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-SELECT c1 from t1;
-c1
-50000_____AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-50000_____BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-50000_____CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SELECT count(*) FROM t1;
+count(*)
+3
 DROP TABLE t1;

=== modified file 'mysql-test/suite/falcon/r/falcon_bug_22972.result'
--- a/mysql-test/suite/falcon/r/falcon_bug_22972.result	2008-07-15 00:06:43 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_22972.result	2008-09-09 08:30:18 +0000
@@ -1,10 +1,21 @@
-CREATE TABLE t1(a INT) ENGINE=Falcon;
+*** Bug #22972 ***
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1(a int);
+# Establish connection conn1 (root)
+# Switch to connection conn1
 START TRANSACTION;
 INSERT INTO t1 VALUES(1);
+# Switch to connection default
 DROP TABLE t1;
 ERROR 42S02: Unknown table 't1'
 SHOW WARNINGS;
 Level	Code	Message
 Warning	178	Can't execute the given command because you have active locked tables or an active transaction
+# Switch to connection conn1
 COMMIT;
+SELECT count(*) FROM t1;
+count(*)
+1
+# Switch to connection default
 DROP TABLE t1;

=== renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_24024.result' => 'mysql-test/suite/falcon/r/falcon_bug_24024.result'
--- a/mysql-test/suite/falcon_team/r/falcon_bug_24024.result	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_24024.result	2008-09-09 14:59:40 +0000
@@ -1,23 +1,31 @@
 *** Bug #24024 ***
-SET SESSION STORAGE_ENGINE = Falcon;
+SET @@storage_engine = 'Falcon';
 DROP TABLE IF EXISTS t1;
-CREATE TABLE t1(a INT NOT NULL, b INT, primary key(a));
+CREATE TABLE t1(a int, b int, primary key(a));
 INSERT INTO t1(a) VALUES (1);
 COMMIT;
-SET AUTOCOMMIT = 0;
+# Establish connection conn1 (user=root)
+# Switch to connection default
+SET @@autocommit = 0;
 UPDATE t1 SET b = 5 WHERE a = 1;
-# Establish session con1 (user=root)
+# Switch to connection conn1
 INSERT INTO t1(a) VALUES(7);
 COMMIT;
 SELECT * FROM t1;
 a	b
 1	NULL
 7	NULL
+!!! Error message is total crap!
+!!! Something like "Cannot drop locked table" or similar would be fine,
+!!! But never the misleading    ERROR 42S02: Unknown table 't1'.
 DROP TABLE t1;
-!!! Error message has to be decided.
-!!! Something like "Cannot drop locked table" or similar would be fine.
-!!! But never the misleading    ERROR 42S02: Unknown table 't1'
-COMMIT;
-# Switch to session default and disconnect session con1
+ERROR 42S02: Unknown table 't1'
+SHOW WARNINGS;
+Level	Code	Message
+Warning	178	Can't execute the given command because you have active locked tables or an active transaction
+SELECT count(*) FROM t1;
+count(*)
+2
+# Switch to connection default
 COMMIT;
 DROP TABLE t1;

=== added file 'mysql-test/suite/falcon/r/falcon_bug_38304.result'
--- a/mysql-test/suite/falcon/r/falcon_bug_38304.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/r/falcon_bug_38304.result	2008-09-08 11:51:19 +0000
@@ -0,0 +1,646 @@
+*** Bug #<38304> ***
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+SET LOCAL SQL_MODE="";
+CREATE TABLE t1 (`├ñ├½├»├┤├ª├S ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+TABLE t1;
+SET LOCAL SQL_MODE="STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├T LOCAL SQL_MODE="STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├┤├_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`t utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæDE="NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├L SQL_MODE="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëNSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïLOCAL SQL_MODE="ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôSQL_MODE="ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+ABLE t1;
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëï INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äë+SET LOCAL SQL_MODE="ANSI_QUOTES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├┤├ª├="ANSI_QUOTES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├tf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├┤├ª├"ANSI_QUOTES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├┤├ª├="ANSI_QUOTES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äë+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├;
+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├ñ├½├»├NTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├ñ├½├ERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI";
+CREATE TABLE t1 (`äëïôæLUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├T LOCAL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├ñ├½├»├NTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├AL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├tf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├┤├ª├"PIPES_AS_CONCAT";
+CREATE TABLE t1 (`├ñ├½├»├NTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëINSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïLOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (` utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI";
+CREATE TABLE t1 (`äëNSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├tf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├┤├ª├"PIPES_AS_CONCAT,ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôt1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëNSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`├ñ├
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëï INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES";
+CREATE TABLE t1 (`├ñ├½├»├TO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+├ñ├½├»├AL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+ABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI";
+CREATE TABLE t1 (`├ñ├½├»├┤├ª├S ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëINSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïLOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`ä8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+DROP TABLE t1;
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├ñ├
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+äëïôæø
+this
+is
+a
+test
+SELECT count(*) FROM t1;
+count(*)
+4
+DROP TABLE t1;

=== added file 'mysql-test/suite/falcon/r/falcon_index_datatypes.result'
--- a/mysql-test/suite/falcon/r/falcon_index_datatypes.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/r/falcon_index_datatypes.result	2008-09-04 18:38:48 +0000
@@ -0,0 +1,939 @@
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+CREATE TABLE t1 (
+a_int       INT                 NOT NULL AUTO_INCREMENT PRIMARY KEY, 
+a_tinyint   TINYINT,
+a_bigint    BIGINT,
+a_float     FLOAT,
+a_double    DOUBLE,
+a_decimal   DECIMAL(10,2),
+a_date      DATE,
+a_time      TIME,
+a_datetime  DATETIME,
+a_timestamp TIMESTAMP           NOT NULL DEFAULT 0,
+a_year      YEAR,
+a_char      CHAR(10),
+a_varchar   VARCHAR(255),
+a_binary    BINARY(8),
+a_varbinary VARBINARY(255),
+a_enum      ENUM('enumValueOne', 'enumValueTwo', 'enumValueThree')
+);
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a_int` int(11) NOT NULL AUTO_INCREMENT,
+  `a_tinyint` tinyint(4) DEFAULT NULL,
+  `a_bigint` bigint(20) DEFAULT NULL,
+  `a_float` float DEFAULT NULL,
+  `a_double` double DEFAULT NULL,
+  `a_decimal` decimal(10,2) DEFAULT NULL,
+  `a_date` date DEFAULT NULL,
+  `a_time` time DEFAULT NULL,
+  `a_datetime` datetime DEFAULT NULL,
+  `a_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `a_year` year(4) DEFAULT NULL,
+  `a_char` char(10) DEFAULT NULL,
+  `a_varchar` varchar(255) DEFAULT NULL,
+  `a_binary` binary(8) DEFAULT NULL,
+  `a_varbinary` varbinary(255) DEFAULT NULL,
+  `a_enum` enum('enumValueOne','enumValueTwo','enumValueThree') DEFAULT NULL,
+  PRIMARY KEY (`a_int`)
+) ENGINE=Falcon DEFAULT CHARSET=latin1
+CREATE TABLE t2 (
+a_int       INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
+a_bit       BIT(8));
+SHOW CREATE TABLE t2;
+Table	Create Table
+t2	CREATE TABLE `t2` (
+  `a_int` int(11) NOT NULL AUTO_INCREMENT,
+  `a_bit` bit(8) DEFAULT NULL,
+  PRIMARY KEY (`a_int`)
+) ENGINE=Falcon DEFAULT CHARSET=latin1
+INSERT INTO t1 (
+a_tinyint, a_bigint, 
+a_float, a_double, a_decimal, a_date,
+a_time, a_datetime, a_timestamp, a_year,
+a_char, a_varchar, a_binary, a_varbinary,
+a_enum) 
+VALUES 
+(
+127, 9223372036854775807,
+999.99, 999.123456789, 111.99, '2008-07-09', 
+'11:30:00', '2008-07-09 11:30:00', '2008-07-09 11:30:00', '2008',
+'aTestChar', 'aTestVarChar', 'aTestBin', 'aTestVarBinary', 
+'enumValueOne'
+    ),
+(
+126, 9223372036854775806,
+998.88, 999.234567891, 112.00, '2008-07-10', 
+'12:30:10', '2008-07-10 12:30:10', '2008-07-10 12:30:10', '2009',
+'bTestChar', 'bTestVarChar', 'bTestBin', 'bTestVarBinary', 
+'enumValueTwo'
+    ),
+(
+125, 9223372036854775805,
+997.77, 999.345678912, 112.01, '2008-07-11', 
+'13:30:20', '2008-07-11 13:30:20', '2008-07-11 13:30:20', '2010',
+'cTestChar', 'cTestVarChar', 'cTestBin', 'cTestVarBinary', 
+'enumValueThree'
+    ),
+(
+124, 9223372036854775804,
+996.66, 999.456789123, 112.02, '2008-07-12', 
+'14:30:30', '2008-07-12 14:30:30', '2008-07-12 14:30:30', '2011',
+'dTestChar', 'dTestVarChar', 'dTestBin', 'dTestVarBinary', 
+'enumValueOne'
+    ),
+(
+123, 9223372036854775803,
+995.55, 999.567891234, 112.03, '2008-07-13', 
+'15:30:40', '2008-07-13 15:30:40', '2008-07-13 15:30:40', '2012',
+'eTestChar', 'eTestVarChar', 'eTestBin', 'eTestVarBinary', 
+'enumValueTwo'
+    );
+INSERT INTO t2 (a_bit) VALUES (b'0'), (b'1'), (b'10'), (b'11'), (b'100');
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	9223372036854775804	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+SELECT a_int, BIN(a_bit+0) FROM t2;
+a_int	BIN(a_bit+0)
+1	0
+2	1
+3	10
+4	11
+5	100
+#-------- Test: BIT --------#
+ALTER TABLE t2 ADD INDEX index_bit (a_bit);
+SHOW INDEXES FROM t2;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t2	0	PRIMARY	1	a_int	NULL	2	NULL	NULL		BTREE		
+t2	1	index_bit	1	a_bit	NULL	2	NULL	NULL	YES	BTREE		
+INSERT INTO t2 SET a_bit = b'11111';
+UPDATE t2 SET a_bit = b'101010' where a_int > b'101';
+SELECT a_int, BIN(a_bit+0) FROM t2;
+a_int	BIN(a_bit+0)
+1	0
+2	1
+3	10
+4	11
+5	100
+6	101010
+SELECT a_int, BIN(a_bit+0) FROM t2 WHERE a_bit > b'1' LIMIT 1;
+a_int	BIN(a_bit+0)
+3	10
+ALTER TABLE t2 DROP INDEX index_bit;
+SHOW INDEXES FROM t2;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t2	0	PRIMARY	1	a_int	NULL	3	NULL	NULL		BTREE		
+SELECT a_int, BIN(a_bit+0) FROM t2;
+a_int	BIN(a_bit+0)
+1	0
+2	1
+3	10
+4	11
+5	100
+6	101010
+#-------- Test: TINYINT --------#
+ALTER TABLE t1 ADD INDEX index_tinyint (a_tinyint);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	2	NULL	NULL		BTREE		
+t1	1	index_tinyint	1	a_tinyint	NULL	2	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_tinyint = 99;
+UPDATE t1 SET a_tinyint = 88 where a_tinyint = 99;
+SELECT * FROM t1 ORDER BY a_tinyint;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+4	124	9223372036854775804	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+SELECT * FROM t1 WHERE a_tinyint > 1 LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_tinyint;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	3	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	9223372036854775804	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: BIGINT --------#
+ALTER TABLE t1 ADD INDEX index_bigint (a_bigint);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	3	NULL	NULL		BTREE		
+t1	1	index_bigint	1	a_bigint	NULL	3	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_bigint = 9223372036854775804;
+UPDATE t1 SET a_bigint = 911111111111111111 where a_bigint = 9223372036854775804;
+SELECT * FROM t1 ORDER BY a_bigint;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+SELECT * FROM t1 WHERE a_bigint > 1 LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_bigint;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	3	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: FLOAT --------#
+ALTER TABLE t1 ADD INDEX index_float (a_float);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	3	NULL	NULL		BTREE		
+t1	1	index_float	1	a_float	NULL	3	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_float = 994.44;
+UPDATE t1 SET a_float = 993.33 where a_float > 994 AND a_float < 994.5;
+SELECT * FROM t1 ORDER BY a_float;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+SELECT * FROM t1 WHERE a_float > 1 LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_float;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	4	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: DOUBLE --------#
+ALTER TABLE t1 ADD INDEX index_double (a_double);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	4	NULL	NULL		BTREE		
+t1	1	index_double	1	a_double	NULL	4	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_double = 999.678912345;
+UPDATE t1 SET a_double = 999.998877665 where a_double = 999.678912345;
+SELECT * FROM t1 ORDER BY a_double;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_double > 1 LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_double;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	4	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: DECIMAL --------#
+ALTER TABLE t1 ADD INDEX index_decimal (a_decimal);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	4	NULL	NULL		BTREE		
+t1	1	index_decimal	1	a_decimal	NULL	4	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_decimal = 112.04;
+UPDATE t1 SET a_decimal = 112.05 where a_decimal = 112.04;
+SELECT * FROM t1 ORDER BY a_decimal;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_decimal > 1 LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_decimal;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	5	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: DATE --------#
+ALTER TABLE t1 ADD INDEX index_date (a_date);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	5	NULL	NULL		BTREE		
+t1	1	index_date	1	a_date	NULL	5	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_date = '2008-07-14';
+UPDATE t1 SET a_date = '2008-08-14' where a_date = '2008-07-14';
+SELECT * FROM t1 ORDER BY a_date;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_date > '2008-01-01' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_date;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	5	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: TIME --------#
+ALTER TABLE t1 ADD INDEX index_time (a_time);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	5	NULL	NULL		BTREE		
+t1	1	index_time	1	a_time	NULL	5	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_time = '16:30:50';
+UPDATE t1 SET a_time = '17:31:00' where a_time = '16:30:50';
+SELECT * FROM t1 ORDER BY a_time;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_time > '11:00:00' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_time;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	6	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: DATETIME --------#
+ALTER TABLE t1 ADD INDEX index_datetime (a_datetime);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	6	NULL	NULL		BTREE		
+t1	1	index_datetime	1	a_datetime	NULL	6	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_datetime = '2008-07-14 16:30:50';
+UPDATE t1 SET a_datetime = '2008-08-14 17:31:00' where a_datetime = '2008-07-14 16:30:50';
+SELECT * FROM t1 ORDER BY a_datetime;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_datetime > '2008-07-10 00:00:00' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+ALTER TABLE t1 DROP INDEX index_datetime;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	6	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: TIMESTAMP --------#
+ALTER TABLE t1 ADD INDEX index_timestamp (a_timestamp);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	6	NULL	NULL		BTREE		
+t1	1	index_timestamp	1	a_timestamp	NULL	6	NULL	NULL		BTREE		
+INSERT INTO t1 SET a_timestamp = '2008-07-14 16:30:50';
+UPDATE t1 SET a_timestamp = '2008-08-14 19:20:21' where a_timestamp = '2008-07-14 16:30:50';
+SELECT * FROM t1 ORDER BY a_timestamp;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_timestamp > '2008-07-10 00:00:00' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+ALTER TABLE t1 DROP INDEX index_timestamp;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	7	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+#-------- Test: YEAR --------#
+ALTER TABLE t1 ADD INDEX index_year (a_year);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	7	NULL	NULL		BTREE		
+t1	1	index_year	1	a_year	NULL	7	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_year = '2013';
+UPDATE t1 SET a_year = '2020' where a_year LIKE '2013';
+SELECT * FROM t1 ORDER BY a_year;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_year > '1999' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_year;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	7	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+#-------- Test: CHAR --------#
+ALTER TABLE t1 ADD INDEX index_char (a_char);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	7	NULL	NULL		BTREE		
+t1	1	index_char	1	a_char	NULL	7	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_char = 'fTestChar';
+UPDATE t1 SET a_char = 'gTestChar' where a_char = 'fTestChar';
+SELECT * FROM t1 ORDER BY a_char;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_char > 'afalcon' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_char;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	8	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+#-------- Test: VARCHAR --------#
+ALTER TABLE t1 ADD INDEX index_varchar (a_varchar);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	8	NULL	NULL		BTREE		
+t1	1	index_varchar	1	a_varchar	NULL	8	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_varchar = 'fTestVarChar';
+UPDATE t1 SET a_varchar = 'gTestVarChar' where a_varchar = 'fTestVarChar';
+SELECT * FROM t1 ORDER BY a_varchar;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+SELECT * FROM t1 WHERE a_varchar > 'afalcon' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_varchar;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	8	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+#-------- Test: BINARY --------#
+ALTER TABLE t1 ADD INDEX index_binary (a_binary);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	8	NULL	NULL		BTREE		
+t1	1	index_binary	1	a_binary	NULL	8	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_binary = 'fTestBin';
+UPDATE t1 SET a_binary = 'gTestBin' where a_binary = 'fTestBin';
+SELECT * FROM t1 ORDER BY a_binary;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+SELECT * FROM t1 WHERE a_binary > 'afalcon' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+ALTER TABLE t1 DROP INDEX index_binary;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	9	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+#-------- Test: VARBINARY --------#
+ALTER TABLE t1 ADD INDEX index_varbinary (a_varbinary);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	9	NULL	NULL		BTREE		
+t1	1	index_varbinary	1	a_varbinary	NULL	9	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_varbinary = 'fTestVarBinary';
+UPDATE t1 SET a_varbinary = 'gTestVarBinary' where a_varbinary = 'fTestVarBinary';
+SELECT * FROM t1 ORDER BY a_varbinary;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+19	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	gTestVarBinary	NULL
+SELECT * FROM t1 WHERE a_varbinary > 'afalcon' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+ALTER TABLE t1 DROP INDEX index_varbinary;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	9	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueThree
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+19	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	gTestVarBinary	NULL
+#-------- Test: ENUM --------#
+ALTER TABLE t1 ADD INDEX index_enum (a_binary);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	9	NULL	NULL		BTREE		
+t1	1	index_enum	1	a_binary	NULL	9	NULL	NULL	YES	BTREE		
+INSERT INTO t1 SET a_enum = 'enumValueThree';
+UPDATE t1 SET a_enum = 'enumValueOne' where a_enum = 'enumValueThree';
+SELECT * FROM t1 ORDER BY a_enum;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+19	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	gTestVarBinary	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueOne
+20	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+SELECT * FROM t1 WHERE a_enum > 'afalcon' LIMIT 1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+ALTER TABLE t1 DROP INDEX index_enum;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	10	NULL	NULL		BTREE		
+SELECT * FROM t1;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueOne
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+19	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	gTestVarBinary	NULL
+20	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	enumValueOne
+#-------- Test: Alternative CREATE INDEX --------#
+CREATE INDEX index_int on t1 (a_int);
+CREATE INDEX index_bit on t2 (a_bit);
+CREATE INDEX index_tinyint on t1 (a_tinyint);
+CREATE INDEX index_bigint on t1 (a_bigint);
+CREATE INDEX index_float on t1 (a_float);
+CREATE INDEX index_double on t1 (a_double);
+CREATE INDEX index_decimal on t1 (a_decimal);
+CREATE INDEX index_date on t1 (a_date);
+CREATE INDEX index_datetime on t1 (a_datetime);
+CREATE INDEX index_timestamp on t1 (a_timestamp);
+CREATE INDEX index_year on t1 (a_year);
+CREATE INDEX index_char on t1 (a_char);
+CREATE INDEX index_varchar on t1 (a_varchar);
+CREATE INDEX index_binary on t1 (a_binary);
+CREATE INDEX index_varbinary on t1 (a_varbinary);
+CREATE INDEX index_enum on t1 (a_enum);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	10	NULL	NULL		BTREE		
+t1	1	index_int	1	a_int	NULL	10	NULL	NULL		BTREE		
+t1	1	index_tinyint	1	a_tinyint	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_bigint	1	a_bigint	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_float	1	a_float	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_double	1	a_double	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_decimal	1	a_decimal	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_date	1	a_date	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_datetime	1	a_datetime	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_timestamp	1	a_timestamp	NULL	10	NULL	NULL		BTREE		
+t1	1	index_year	1	a_year	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_char	1	a_char	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_varchar	1	a_varchar	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_binary	1	a_binary	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_varbinary	1	a_varbinary	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_enum	1	a_enum	NULL	10	NULL	NULL	YES	BTREE		
+SELECT * FROM t1 ORDER BY a_int;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueOne
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+19	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	gTestVarBinary	NULL
+20	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	enumValueOne
+SHOW INDEXES FROM t2;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t2	0	PRIMARY	1	a_int	NULL	3	NULL	NULL		BTREE		
+t2	1	index_bit	1	a_bit	NULL	3	NULL	NULL	YES	BTREE		
+SELECT a_int, BIN(a_bit+0) FROM t2 ORDER BY a_int;
+a_int	BIN(a_bit+0)
+1	0
+2	1
+3	10
+4	11
+5	100
+6	101010
+#-------- Test: Alternative DROP INDEX --------#
+DROP INDEX index_int on t1;
+DROP INDEX index_bit on t2;
+DROP INDEX index_tinyint on t1;
+DROP INDEX index_bigint on t1;
+DROP INDEX index_float on t1;
+DROP INDEX index_double on t1;
+DROP INDEX index_decimal on t1;
+DROP INDEX index_date on t1;
+DROP INDEX index_datetime on t1;
+DROP INDEX index_timestamp on t1;
+DROP INDEX index_year on t1;
+DROP INDEX index_char on t1;
+DROP INDEX index_varchar on t1;
+DROP INDEX index_binary on t1;
+DROP INDEX index_varbinary on t1;
+DROP INDEX index_enum on t1;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a_int	NULL	10	NULL	NULL		BTREE		
+SELECT * FROM t1 ORDER BY a_int;
+a_int	a_tinyint	a_bigint	a_float	a_double	a_decimal	a_date	a_time	a_datetime	a_timestamp	a_year	a_char	a_varchar	a_binary	a_varbinary	a_enum
+1	127	9223372036854775807	999.99	999.123456789	111.99	2008-07-09	11:30:00	2008-07-09 11:30:00	2008-07-09 11:30:00	2008	aTestChar	aTestVarChar	aTestBin	aTestVarBinary	enumValueOne
+2	126	9223372036854775806	998.88	999.234567891	112.00	2008-07-10	12:30:10	2008-07-10 12:30:10	2008-07-10 12:30:10	2009	bTestChar	bTestVarChar	bTestBin	bTestVarBinary	enumValueTwo
+3	125	9223372036854775805	997.77	999.345678912	112.01	2008-07-11	13:30:20	2008-07-11 13:30:20	2008-07-11 13:30:20	2010	cTestChar	cTestVarChar	cTestBin	cTestVarBinary	enumValueOne
+4	124	911111111111111111	996.66	999.456789123	112.02	2008-07-12	14:30:30	2008-07-12 14:30:30	2008-07-12 14:30:30	2011	dTestChar	dTestVarChar	dTestBin	dTestVarBinary	enumValueOne
+5	123	9223372036854775803	995.55	999.567891234	112.03	2008-07-13	15:30:40	2008-07-13 15:30:40	2008-07-13 15:30:40	2012	eTestChar	eTestVarChar	eTestBin	eTestVarBinary	enumValueTwo
+6	88	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+7	NULL	911111111111111111	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+8	NULL	NULL	993.33	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+9	NULL	NULL	NULL	999.998877665	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+10	NULL	NULL	NULL	NULL	112.05	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+11	NULL	NULL	NULL	NULL	NULL	2008-08-14	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+12	NULL	NULL	NULL	NULL	NULL	NULL	17:31:00	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+13	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 17:31:00	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	NULL
+14	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	2008-08-14 19:20:21	NULL	NULL	NULL	NULL	NULL	NULL
+15	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	2020	NULL	NULL	NULL	NULL	NULL
+16	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	gTestChar	NULL	NULL	NULL	NULL
+17	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	gTestVarChar	NULL	NULL	NULL
+18	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	gTestBin	NULL	NULL
+19	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	gTestVarBinary	NULL
+20	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0000-00-00 00:00:00	NULL	NULL	NULL	NULL	NULL	enumValueOne
+SHOW INDEXES FROM t2;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t2	0	PRIMARY	1	a_int	NULL	3	NULL	NULL		BTREE		
+SELECT a_int, BIN(a_bit+0) FROM t2 ORDER BY a_int;
+a_int	BIN(a_bit+0)
+1	0
+2	1
+3	10
+4	11
+5	100
+6	101010
+DROP TABLE t1;
+DROP TABLE t2;

=== added file 'mysql-test/suite/falcon/r/falcon_online_index.result'
--- a/mysql-test/suite/falcon/r/falcon_online_index.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/r/falcon_online_index.result	2008-09-10 15:08:56 +0000
@@ -0,0 +1,372 @@
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+DROP TABLE IF EXISTS t3;
+CREATE TABLE t1 (
+a int PRIMARY KEY, 
+b VARCHAR(255), 
+c int,
+d CHAR(10)
+);
+INSERT INTO t1 VALUES (0, 'TestRow0', 0*2, 'Char0');
+INSERT INTO t1 VALUES (1, 'TestRow1', 1*2, 'Char1');
+INSERT INTO t1 VALUES (2, 'TestRow2', 2*2, 'Char2');
+INSERT INTO t1 VALUES (3, 'TestRow3', 3*2, 'Char3');
+INSERT INTO t1 VALUES (4, 'TestRow4', 4*2, 'Char4');
+INSERT INTO t1 VALUES (5, 'TestRow5', 5*2, 'Char5');
+INSERT INTO t1 VALUES (6, 'TestRow6', 6*2, 'Char6');
+INSERT INTO t1 VALUES (7, 'TestRow7', 7*2, 'Char7');
+INSERT INTO t1 VALUES (8, 'TestRow8', 8*2, 'Char8');
+INSERT INTO t1 VALUES (9, 'TestRow9', 9*2, 'Char9');
+INSERT INTO t1 VALUES (10, 'TestRow10', 10*2, 'Char10');
+INSERT INTO t1 VALUES (11, 'TestRow11', 11*2, 'Char11');
+INSERT INTO t1 VALUES (12, 'TestRow12', 12*2, 'Char12');
+INSERT INTO t1 VALUES (13, 'TestRow13', 13*2, 'Char13');
+INSERT INTO t1 VALUES (14, 'TestRow14', 14*2, 'Char14');
+INSERT INTO t1 VALUES (15, 'TestRow15', 15*2, 'Char15');
+INSERT INTO t1 VALUES (16, 'TestRow16', 16*2, 'Char16');
+INSERT INTO t1 VALUES (17, 'TestRow17', 17*2, 'Char17');
+INSERT INTO t1 VALUES (18, 'TestRow18', 18*2, 'Char18');
+INSERT INTO t1 VALUES (19, 'TestRow19', 19*2, 'Char19');
+CREATE TABLE t2 (
+a int PRIMARY KEY, 
+b int,
+c int,
+d VARCHAR(65)
+);
+#-------- Inserting 33 rows into t2 (query log disabled) --------#
+CREATE TABLE t3 (
+a int PRIMARY KEY AUTO_INCREMENT, 
+b int DEFAULT 9999,
+c int DEFAULT 8888 NOT NULL,
+d int NOT NULL,
+e VARCHAR(65)
+);
+#-------- Inserting 1000 rows into t3... (query log disabled) --------#
+#-------- Testing implicit ONLINE --------#
+ALTER TABLE t1 ADD INDEX ix_b (b);
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+DROP INDEX ix_b ON t1;
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+CREATE INDEX ix_c ON t1 (c);
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+DROP INDEX ix_c ON t1;
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+ALTER TABLE t3 ADD INDEX ix_b (b);
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+SELECT * from t3 where b > 555 ORDER BY a LIMIT 5;
+a	b	c	d	e
+279	556	279	277	SomeVarchar 278 for testing
+280	558	280	278	SomeVarchar 279 for testing
+281	560	281	279	SomeVarchar 280 for testing
+282	562	282	280	SomeVarchar 281 for testing
+283	564	283	281	SomeVarchar 282 for testing
+affected rows: 5
+DROP INDEX ix_b ON t3;
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+#-------- Testing implicit OFFLINE --------#
+ALTER TABLE t3 ADD INDEX ix_c (c);
+affected rows: 1000
+info: Records: 1000  Duplicates: 0  Warnings: 0
+DROP INDEX ix_c ON t3;
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+ALTER TABLE t3 ADD INDEX ix_cd (c, d);
+affected rows: 1000
+info: Records: 1000  Duplicates: 0  Warnings: 0
+DROP INDEX ix_cd ON t3;
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+#-------- Testing ONLINE keyword... --------#
+#-------- ONLINE: ALTER ADD/DROP INDEX --------#
+ALTER ONLINE TABLE t1 ADD INDEX ix_b (b);
+ALTER ONLINE TABLE t1 DROP INDEX ix_b;
+#-------- ONLINE: ALTER ADD/DROP KEY --------#
+ALTER ONLINE TABLE t1 ADD KEY ix_b (b);
+ALTER ONLINE TABLE t1 DROP KEY ix_b;
+#-------- ONLINE: CREATE/DROP INDEX --------#
+CREATE ONLINE INDEX ix_c ON t1 (c);
+DROP ONLINE INDEX ix_c ON t1;
+#-------- ONLINE: ADD INDEX default name --------#
+ALTER ONLINE TABLE t1 ADD INDEX (b);
+ALTER ONLINE TABLE t1 DROP INDEX b;
+#-------- ONLINE: ALTER ADD nullable with default --------#
+ALTER ONLINE TABLE t3 ADD INDEX ix_b (b);
+SELECT * from t3 where b > 555 ORDER BY a LIMIT 5;
+a	b	c	d	e
+279	556	279	277	SomeVarchar 278 for testing
+280	558	280	278	SomeVarchar 279 for testing
+281	560	281	279	SomeVarchar 280 for testing
+282	562	282	280	SomeVarchar 281 for testing
+283	564	283	281	SomeVarchar 282 for testing
+ALTER ONLINE TABLE t3 DROP INDEX ix_b;
+#-------- ONLINE: ALTER ADD not-null with default --------#
+ALTER ONLINE TABLE t3 ADD INDEX ix_c (c);
+ERROR 42000: This version of MySQL doesn't yet support 'ALTER ONLINE TABLE t3 ADD INDEX ix_c (c)'
+#-------- ONLINE: ALTER ADD not-null --------#
+ALTER ONLINE TABLE t3 ADD INDEX ix_d (d);
+ERROR 42000: This version of MySQL doesn't yet support 'ALTER ONLINE TABLE t3 ADD INDEX ix_d (d)'
+#-------- ONLINE: ALTER ADD same key multiple times --------#
+ALTER ONLINE TABLE t1 ADD INDEX index_c (c);
+ALTER ONLINE TABLE t1 ADD INDEX index_c (c);
+ERROR 42000: Duplicate key name 'index_c'
+ALTER ONLINE TABLE t1 ADD INDEX index_c (c);
+ERROR 42000: Duplicate key name 'index_c'
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+t1	1	index_c	1	c	NULL	10	NULL	NULL	YES	BTREE		
+#-------- ONLINE: ALTER DROP same key multiple times --------#
+ALTER ONLINE TABLE t1 DROP INDEX index_c;
+ALTER ONLINE TABLE t1 DROP INDEX index_c;
+ERROR 42000: Can't DROP 'index_c'; check that column/key exists
+ALTER ONLINE TABLE t1 DROP INDEX index_c;
+ERROR 42000: Can't DROP 'index_c'; check that column/key exists
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+#-------- ONLINE: ALTER ADD/DROP PRIMARY KEY --------#
+ALTER ONLINE TABLE t1 DROP PRIMARY KEY;
+ERROR 42000: This version of MySQL doesn't yet support 'ALTER ONLINE TABLE t1 DROP PRIMARY KEY'
+ALTER TABLE t1 DROP PRIMARY KEY;
+ALTER ONLINE TABLE t1 ADD PRIMARY KEY (c);
+ERROR 42000: This version of MySQL doesn't yet support 'ALTER ONLINE TABLE t1 ADD PRIMARY KEY (c)'
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+ALTER TABLE t1 ADD PRIMARY KEY (a);
+#-------- Test: UNIQUE --------#
+ALTER ONLINE TABLE t2 ADD UNIQUE INDEX ix_unique_c (c);
+EXPLAIN SELECT * FROM t2 WHERE c < 25 AND c > 20 ORDER BY c;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t2	range	ix_unique_c	ix_unique_c	5	NULL	1	Using where; Using filesort
+SELECT * FROM t2 WHERE c < 25 AND c > 20 ORDER BY c;
+a	b	c	d
+20	40	21	SomeString 20 for testing
+21	42	22	SomeString 21 for testing
+22	44	23	SomeString 22 for testing
+23	46	24	SomeString 23 for testing
+SHOW INDEXES FROM t2;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t2	0	PRIMARY	1	a	NULL	16	NULL	NULL		BTREE		
+t2	0	ix_unique_c	1	c	NULL	16	NULL	NULL	YES	BTREE		
+DESCRIBE t2;
+Field	Type	Null	Key	Default	Extra
+a	int(11)	NO	PRI	NULL	
+b	int(11)	YES		NULL	
+c	int(11)	YES	UNI	NULL	
+d	varchar(65)	YES		NULL	
+DROP ONLINE INDEX ix_unique_c ON t2;
+SHOW INDEXES FROM t2;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t2	0	PRIMARY	1	a	NULL	16	NULL	NULL		BTREE		
+#-------- Test: DESC --------#
+ALTER ONLINE TABLE t3 ADD INDEX ix_desc_b (b DESC);
+ALTER ONLINE TABLE t3 ADD INDEX ix_asc_b (b ASC);
+SHOW INDEXES FROM t3;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t3	0	PRIMARY	1	a	NULL	500	NULL	NULL		BTREE		
+t3	1	ix_desc_b	1	b	NULL	500	NULL	NULL	YES	BTREE		
+t3	1	ix_asc_b	1	b	NULL	500	NULL	NULL	YES	BTREE		
+DROP ONLINE INDEX ix_desc_b ON t3;
+DROP ONLINE INDEX ix_asc_b ON t3;
+#-------- Test: KEY_BLOCK_SIZE --------#
+ALTER ONLINE TABLE t1 ADD INDEX ix_keyblock_b (b) KEY_BLOCK_SIZE = 0;
+EXPLAIN SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	range	ix_keyblock_b	ix_keyblock_b	258	NULL	2	Using where; Using filesort
+SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+a	b	c	d
+1	TestRow1	2	Char1
+10	TestRow10	20	Char10
+11	TestRow11	22	Char11
+12	TestRow12	24	Char12
+13	TestRow13	26	Char13
+14	TestRow14	28	Char14
+15	TestRow15	30	Char15
+16	TestRow16	32	Char16
+17	TestRow17	34	Char17
+18	TestRow18	36	Char18
+19	TestRow19	38	Char19
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+t1	1	ix_keyblock_b	1	b	NULL	10	NULL	NULL	YES	BTREE		
+ALTER ONLINE TABLE t1 DROP INDEX ix_keyblock_b;
+#-------- Test: COMMENT --------#
+ALTER ONLINE TABLE t1 ADD INDEX ix_b (b) COMMENT 'Test comment';
+EXPLAIN SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	range	ix_b	ix_b	258	NULL	2	Using where; Using filesort
+SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+a	b	c	d
+1	TestRow1	2	Char1
+10	TestRow10	20	Char10
+11	TestRow11	22	Char11
+12	TestRow12	24	Char12
+13	TestRow13	26	Char13
+14	TestRow14	28	Char14
+15	TestRow15	30	Char15
+16	TestRow16	32	Char16
+17	TestRow17	34	Char17
+18	TestRow18	36	Char18
+19	TestRow19	38	Char19
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+t1	1	ix_b	1	b	NULL	10	NULL	NULL	YES	BTREE		Test comment
+ALTER ONLINE TABLE t1 DROP INDEX ix_b;
+#-------- Test: Multiple columns --------#
+ALTER ONLINE TABLE t1 ADD INDEX index_multicol (b, c, d);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+t1	1	index_multicol	1	b	NULL	2	NULL	NULL	YES	BTREE		
+t1	1	index_multicol	2	c	NULL	5	NULL	NULL	YES	BTREE		
+t1	1	index_multicol	3	d	NULL	10	NULL	NULL	YES	BTREE		
+EXPLAIN SELECT * FROM t1 WHERE b LIKE 'TestRow3%' AND c = 6 ORDER BY b, c, d;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	range	index_multicol	index_multicol	263	NULL	2	Using where; Using filesort
+SELECT * FROM t1 WHERE b LIKE 'TestRow3%' AND c = 6 ORDER BY b, c, d;
+a	b	c	d
+3	TestRow3	6	Char3
+DROP INDEX index_multicol ON t1;
+#-------- Test: Multiple ADD INDEX on same column --------#
+ALTER ONLINE TABLE t1 ADD INDEX index_1d (d);
+ALTER ONLINE TABLE t1 ADD INDEX index_2d (d);
+CREATE ONLINE INDEX index_3d ON t1 (d);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+t1	1	index_1d	1	d	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_2d	1	d	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_3d	1	d	NULL	10	NULL	NULL	YES	BTREE		
+DROP ONLINE INDEX index_1d ON t1;
+DROP ONLINE INDEX index_2d ON t1;
+DROP ONLINE INDEX index_3d ON t1;
+#-------- Test: Multiple ADD INDEX in a single statement --------#
+ALTER TABLE t1 
+ADD INDEX index_varchar (b), 
+ADD INDEX index_int (c);
+ALTER TABLE t3 
+ADD INDEX index_int (b), 
+ADD INDEX index_multi (b,e), 
+ADD INDEX index_varchar (e);
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+t1	1	index_varchar	1	b	NULL	10	NULL	NULL	YES	BTREE		
+t1	1	index_int	1	c	NULL	10	NULL	NULL	YES	BTREE		
+SHOW INDEXES FROM t3;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t3	0	PRIMARY	1	a	NULL	500	NULL	NULL		BTREE		
+t3	1	index_int	1	b	NULL	500	NULL	NULL	YES	BTREE		
+t3	1	index_multi	1	b	NULL	250	NULL	NULL	YES	BTREE		
+t3	1	index_multi	2	e	NULL	500	NULL	NULL	YES	BTREE		
+t3	1	index_varchar	1	e	NULL	500	NULL	NULL	YES	BTREE		
+#-------- Test: Multiple DROP INDEX in a single statement --------#
+ALTER TABLE t1 
+DROP INDEX index_varchar, 
+DROP INDEX index_int;
+ALTER TABLE t3 
+DROP INDEX index_int, 
+DROP INDEX index_multi,
+DROP INDEX index_varchar;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+SHOW INDEXES FROM t3;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t3	0	PRIMARY	1	a	NULL	500	NULL	NULL		BTREE		
+#-------- Test: Combined ADD/DROP INDEX in a single statement --------#
+ALTER TABLE t1 ADD INDEX index_int (c);
+ALTER TABLE t1 ADD INDEX index_char (d), DROP INDEX index_int;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+t1	1	index_char	1	d	NULL	10	NULL	NULL	YES	BTREE		
+ALTER TABLE t1 DROP INDEX index_char;
+#-------- Test: ADD INDEX followed by some complex queries --------#
+ALTER TABLE t1 ADD INDEX ix_a (a);
+ALTER ONLINE TABLE t1 ADD INDEX ix_b (b);
+ALTER ONLINE TABLE t1 ADD INDEX ix_c (c);
+ALTER ONLINE TABLE t2
+ADD INDEX ix_b (b),
+ADD INDEX ix_d (d);
+ALTER ONLINE TABLE t3 ADD INDEX ix_b (b);
+EXPLAIN SELECT * FROM t1 WHERE a = 3 OR (c > 10 AND a < 15) ORDER BY a;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	range	PRIMARY,ix_a,ix_c	PRIMARY	4	NULL	20	Using where; Using filesort
+SELECT * FROM t1 WHERE a = 3 OR (c > 10 AND a < 15) ORDER BY a;
+a	b	c	d
+3	TestRow3	6	Char3
+6	TestRow6	12	Char6
+7	TestRow7	14	Char7
+8	TestRow8	16	Char8
+9	TestRow9	18	Char9
+10	TestRow10	20	Char10
+11	TestRow11	22	Char11
+12	TestRow12	24	Char12
+13	TestRow13	26	Char13
+14	TestRow14	28	Char14
+EXPLAIN SELECT * FROM t1 WHERE a = 99 OR b LIKE 'TestRow7%';
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	PRIMARY,ix_a,ix_b	PRIMARY,ix_b	4,258	NULL	3	Using sort_union(PRIMARY,ix_b); Using where
+SELECT * FROM t1 WHERE a = 99 OR b LIKE 'TestRow7%';
+a	b	c	d
+7	TestRow7	14	Char7
+EXPLAIN SELECT * FROM t1 WHERE (a = 10 OR b LIKE 'TestRow11') AND d LIKE 'Char%' ORDER BY a;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	PRIMARY,ix_a,ix_b	PRIMARY,ix_b	4,258	NULL	3	Using sort_union(PRIMARY,ix_b); Using where; Using filesort
+SELECT * FROM t1 WHERE (a = 10 OR b LIKE 'TestRow11') AND d LIKE 'Char%' ORDER BY a;
+a	b	c	d
+10	TestRow10	20	Char10
+11	TestRow11	22	Char11
+EXPLAIN SELECT * FROM t1, t2 WHERE (t1.a IN (1,2) OR t1.b LIKE 'TestRow1%') AND t1.c=t2.c;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	PRIMARY,ix_a,ix_b,ix_c	PRIMARY,ix_b	4,258	NULL	4	Using sort_union(PRIMARY,ix_b); Using where
+1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	33	Using where; Using join buffer
+SELECT * FROM t1, t2 WHERE (t1.a IN (1,2) OR t1.b LIKE 'TestRow1%') AND t1.c=t2.c;
+a	b	c	d	a	b	c	d
+1	TestRow1	2	Char1	1	2	2	SomeString 1 for testing
+2	TestRow2	4	Char2	3	6	4	SomeString 3 for testing
+10	TestRow10	20	Char10	19	38	20	SomeString 19 for testing
+11	TestRow11	22	Char11	21	42	22	SomeString 21 for testing
+12	TestRow12	24	Char12	23	46	24	SomeString 23 for testing
+13	TestRow13	26	Char13	25	50	26	SomeString 25 for testing
+14	TestRow14	28	Char14	27	54	28	SomeString 27 for testing
+15	TestRow15	30	Char15	29	58	30	SomeString 29 for testing
+16	TestRow16	32	Char16	31	62	32	SomeString 31 for testing
+EXPLAIN SELECT * FROM t1, t3 WHERE t3.b=2 AND (t1.c = t3.c OR t1.a=t3.d);
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t3	ref	ix_b	ix_b	5	const	100	
+1	SIMPLE	t1	ALL	PRIMARY,ix_a,ix_c	NULL	NULL	NULL	20	Range checked for each record (index map: 0xB)
+SELECT * FROM t1, t3 WHERE t3.b=2 AND (t1.c = t3.c OR t1.a=t3.d);
+a	b	c	d	a	b	c	d	e
+0	TestRow0	0	Char0	2	2	2	0	SomeVarchar 1 for testing
+1	TestRow1	2	Char1	2	2	2	0	SomeVarchar 1 for testing
+ALTER ONLINE TABLE t1 
+DROP INDEX ix_a,
+DROP INDEX ix_b,
+DROP INDEX ix_c;
+ALTER ONLINE TABLE t2
+DROP INDEX ix_b,
+DROP INDEX ix_d;
+ALTER ONLINE TABLE t3 DROP INDEX ix_b;
+SHOW INDEXES FROM t1;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t1	0	PRIMARY	1	a	NULL	10	NULL	NULL		BTREE		
+SHOW INDEXES FROM t2;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t2	0	PRIMARY	1	a	NULL	16	NULL	NULL		BTREE		
+SHOW INDEXES FROM t3;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_Comment
+t3	0	PRIMARY	1	a	NULL	500	NULL	NULL		BTREE		
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;

=== removed file 'mysql-test/suite/falcon/r/falcon_select_excerpt.result'
--- a/mysql-test/suite/falcon/r/falcon_select_excerpt.result	2007-09-20 15:44:25 +0000
+++ b/mysql-test/suite/falcon/r/falcon_select_excerpt.result	1970-01-01 00:00:00 +0000
@@ -1,83 +0,0 @@
-*** Bug #28686 ***
-SET @@storage_engine = 'Falcon';
-DROP TABLE IF EXISTS t1;
-DROP TABLE IF EXISTS t2;
-DROP TABLE IF EXISTS t3;
-DROP TABLE IF EXISTS t4;
-DROP TABLE IF EXISTS t5;
-DROP TABLE IF EXISTS t6;
-CREATE TABLE t1 (f1 varchar(6) DEFAULT NULL, f2 int(6) PRIMARY KEY NOT NULL);
-CREATE TABLE t2 (f3 varchar(5) NOT NULL, f4 varchar(5) NOT NULL, UNIQUE KEY ukey (f3,f4));
-INSERT INTO t1 VALUES (' 2', 2);
-INSERT INTO t2 VALUES (' 2', ' one '),(' 2', ' two ');
-CREATE TABLE t3 (
-auto int not null auto_increment,
-fld1 int(6) unsigned zerofill DEFAULT '000000' NOT NULL,
-companynr tinyint(2) unsigned zerofill DEFAULT '00' NOT NULL,
-fld3 char(30) DEFAULT '' NOT NULL,
-fld4 char(35) DEFAULT '' NOT NULL,
-fld5 char(35) DEFAULT '' NOT NULL,
-fld6 char(4) DEFAULT '' NOT NULL,
-UNIQUE fld1 (fld1),
-KEY fld3 (fld3),
-PRIMARY KEY (auto)
-);
-INSERT INTO t3 (fld1, companynr) VALUES (999999,99);
-CREATE TABLE t4 (
-companynr tinyint(2) unsigned zerofill NOT NULL default '00',
-companyname char(30) NOT NULL default '',
-PRIMARY KEY (companynr),
-UNIQUE KEY companyname(companyname)
-) MAX_ROWS=50 PACK_KEYS=1 COMMENT='companynames';
-CREATE TABLE t5 (
-a int, b varchar(30),
-PRIMARY KEY(a)
-);
-INSERT INTO t5 VALUES (1,'one');
-INSERT INTO t5 VALUES (2,'two');
-INSERT INTO t5 VALUES (3,'three');
-INSERT INTO t5 VALUES (4,'four');
-CREATE TABLE t6 AS SELECT * FROM t5;
-SELECT * FROM t1 LEFT JOIN t2 ON f1 = f3;
-f1	f2	f3	f4
- 2	2	 2	 one 
- 2	2	 2	 two 
-SELECT t3.companynr,companyname FROM t3 LEFT JOIN t4 USING (companynr) WHERE t4.companynr IS NULL;
-companynr	companyname
-99	NULL
-SELECT * FROM t6 LEFT JOIN t5 ON(t5.a = t6.a) ORDER BY t6.a;
-a	b	a	b
-1	one	1	one
-2	two	2	two
-3	three	3	three
-4	four	4	four
-SELECT * FROM t6 LEFT JOIN t5 USING(a) ORDER BY t6.a;
-a	b	b
-1	one	one
-2	two	two
-3	three	three
-4	four	four
-SELECT count(*) FROM t1;
-count(*)
-1
-SELECT count(*) FROM t2;
-count(*)
-2
-SELECT count(*) FROM t3;
-count(*)
-1200
-SELECT count(*) FROM t4;
-count(*)
-12
-SELECT count(*) FROM t5;
-count(*)
-4
-SELECT count(*) FROM t6;
-count(*)
-4
-DROP TABLE t1;
-DROP TABLE t2;
-DROP TABLE t3;
-DROP TABLE t4;
-DROP TABLE t5;
-DROP TABLE t6;

=== modified file 'mysql-test/suite/falcon/t/disabled.def'
--- a/mysql-test/suite/falcon/t/disabled.def	2008-08-11 13:22:53 +0000
+++ b/mysql-test/suite/falcon/t/disabled.def	2008-09-09 08:30:18 +0000
@@ -10,5 +10,5 @@
 #
 ##############################################################################
 
-falcon_bug_28095_I  : Bug#xxxxx 2008-04-22 hakank Disabled until soft restart is in main tree
-falcon_bug_28095_II : Bug#xxxxx 2008-03-22 hakank Disabled until soft restart is in main tree
+falcon_bug_28095_I  : Bug#39205 2008-09-09 hakank Disabled until soft restart is in main tree
+falcon_bug_28095_II : Bug#39205 2008-09-09 hakank Disabled until soft restart is in main tree

=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_22189.test' => 'mysql-test/suite/falcon/t/falcon_bug_22189.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_22189.test	2008-04-28 11:21:52 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_22189.test	2008-09-09 08:30:18 +0000
@@ -68,8 +68,10 @@ SELECT * FROM x1;
 
 --echo # Switch to connection conn1
 connection conn1;
---send UPDATE x1 SET x1 = 0, x2 = 5
---send INSERT INTO x1 VALUES (0,6)
+--error ER_DUP_ENTRY
+UPDATE x1 SET x1 = 0, x2 = 5;
+--error ER_DUP_ENTRY
+INSERT INTO x1 VALUES (0,6);
 
 --echo # Switch to connection default
 connection default;
@@ -78,8 +80,6 @@ ROLLBACK;
 --echo # Switch to connection conn1
 connection conn1;
 --error ER_DUP_ENTRY
---reap
---error ER_DUP_ENTRY
 INSERT INTO x1 VALUES (0,6);
 --error ER_DUP_ENTRY
 INSERT INTO x1 VALUES (0,6);

=== added file 'mysql-test/suite/falcon/t/falcon_bug_22207-big.test'
--- a/mysql-test/suite/falcon/t/falcon_bug_22207-big.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_22207-big.test	2008-09-09 08:30:18 +0000
@@ -0,0 +1,78 @@
+--source include/have_falcon.inc
+--source include/big_test.inc
+
+#
+# Bug #22207: falcon_record_cache_memory_leak2.test leads to crash sometimes.
+#
+# Record cache memory leak test inspired by Kevin.
+#
+# Note: Big test variant
+#   For Mantis bug #257, set the inner loop to 10 and the middle loop to 10,000.
+#   We set the middle loop to 15,000 for this --big_test version.
+#
+--echo *** Bug #22207 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (c1 varchar(50), c2 int, c3 char(1));
+INSERT INTO t1 VALUES (repeat('A', 50), 0, 'A');
+INSERT INTO t1 VALUES (repeat('B', 50), 0, 'B');
+INSERT INTO t1 VALUES (repeat('C', 50), 0, 'C');
+INSERT INTO t1 VALUES (repeat('D', 50), 0, 'D');
+INSERT INTO t1 VALUES (repeat('E', 50), 0, 'E');
+INSERT INTO t1 VALUES (repeat('F', 50), 0, 'F');
+INSERT INTO t1 VALUES (repeat('G', 50), 0, 'G');
+INSERT INTO t1 VALUES (repeat('H', 50), 0, 'H');
+INSERT INTO t1 VALUES (repeat('I', 50), 0, 'I');
+INSERT INTO t1 VALUES (repeat('J', 50), 0, 'J');
+INSERT INTO t1 VALUES (repeat('K', 50), 0, 'K');
+COMMIT;
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+# During this series of updates, there should be no increase in memory
+# since each previous record version should be freed once it is replaced.
+
+# Outer loop controls how many SELECTs are done.
+let $i= 10;
+while ($i) 
+{
+    # Middle loop controls how often a COMMIT is done.
+    --disable_query_log
+    let $j= 15000;
+    while ($j) 
+    {
+        # Inner loop controls how many UPDATES are done.
+        BEGIN;
+        let $k= 10;
+        while ($k) 
+        {
+            UPDATE t1 SET c2 = c2 + 1, c1 = concat(rpad(conv(c2,10,10),10,'_'), repeat(c3, 40));
+            dec $k;
+        }
+        dec $j;
+        COMMIT;
+    }
+    --enable_query_log
+    SELECT c1 from t1;
+    dec $i;
+}
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+DROP TABLE t1;

=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_22207.test' => 'mysql-test/suite/falcon/t/falcon_bug_22207.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_22207.test	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_22207.test	2008-09-09 08:30:18 +0000
@@ -1,12 +1,22 @@
 --source include/have_falcon.inc
+
+#
+# Bug #22207: falcon_record_cache_memory_leak2.test leads to crash sometimes.
 #
 # Record cache memory leak test inspired by Kevin.
 #
 # Note: Do not run in ramdisk!
 #   For Mantis bug #257, set the inner loop to 10 and the middle loop to 10,000.
-#   We set the middle loop to 500 to cope with run time on various Pushbuild machines.
+#   We set the middle loop to 250 to cope with run time on various Pushbuild machines.
 #
-SET STORAGE_ENGINE = 'Falcon';
+--echo *** Bug #22207 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
 --disable_warnings
 DROP TABLE IF EXISTS t1;
 --enable_warnings
@@ -23,6 +33,9 @@ INSERT INTO t1 VALUES (repeat('C', 50), 
 #INSERT INTO t1 VALUES (repeat('I', 50), 0, 'I');
 COMMIT;
 
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
 # During this series of updates, there should be no increase in memory
 # since each previous record version should be freed once it is replaced.
 
@@ -30,9 +43,9 @@ COMMIT;
 let $i= 10;
 while ($i) 
 {
-    # Next loop controls how often a COMMIT is done
+    # Middle loop controls how often a COMMIT is done.
     --disable_query_log
-    let $j= 500;
+    let $j= 250;
     while ($j) 
     {
         # Inner loop controls how many UPDATES are done.
@@ -51,6 +64,12 @@ while ($i) 
     dec $i;
 }
 
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SELECT count(*) FROM t1;
 
-# Final cleanup.
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
 DROP TABLE t1;

=== modified file 'mysql-test/suite/falcon/t/falcon_bug_22972.test'
--- a/mysql-test/suite/falcon/t/falcon_bug_22972.test	2007-11-28 14:07:24 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_22972.test	2008-09-09 08:30:18 +0000
@@ -1,15 +1,51 @@
 --source include/have_falcon.inc
-CREATE TABLE t1(a INT) ENGINE=Falcon;
-connect (con1,localhost,root,,);
-connection con1;
+
+#
+# Bug #22972: Falcon: Partitioned table with pending transaction leads to strange error
+#
+--echo *** Bug #22972 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1(a int);
+
+--echo # Establish connection conn1 (root)
+connect (conn1,localhost,root,,);
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+--echo # Switch to connection conn1
 START TRANSACTION;
 INSERT INTO t1 VALUES(1);
+
+--echo # Switch to connection default
 connection default;
---error 1051
+--error ER_BAD_TABLE_ERROR
 DROP TABLE t1;
 SHOW WARNINGS;
-connection con1;
+
+--echo # Switch to connection conn1
+connection conn1;
 COMMIT;
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+--echo # Switch to connection default
 connection default;
-disconnect con1;
+disconnect conn1;
 DROP TABLE t1;

=== renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_24024.test' => 'mysql-test/suite/falcon/t/falcon_bug_24024.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_24024.test	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_24024.test	2008-09-09 14:59:40 +0000
@@ -1,36 +1,61 @@
+--source include/have_falcon.inc
+
 #
-# Bug#24024 wrong error message when drop table (used by pending transaction) fails
+# Bug #24024: wrong error message when drop table (used by pending transaction) fails
 #
 # This test is a derivate of a subtestcase in mix2.inc.
 # Therefore please delete this test when mix2_falcon is pushed.
 #
-
 --echo *** Bug #24024 ***
 
-
---source include/have_falcon.inc
-SET SESSION STORAGE_ENGINE = Falcon;
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
 
 --disable_warnings
 DROP TABLE IF EXISTS t1;
 --enable_warnings
-CREATE TABLE t1(a INT NOT NULL, b INT, primary key(a));
+
+CREATE TABLE t1(a int, b int, primary key(a));
 INSERT INTO t1(a) VALUES (1);
 COMMIT;
-SET AUTOCOMMIT = 0;
+
+--echo # Establish connection conn1 (user=root)
+connect (conn1,localhost,root,,);
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+--echo # Switch to connection default
+connection default;
+SET @@autocommit = 0;
 UPDATE t1 SET b = 5 WHERE a = 1;
---echo # Establish session con1 (user=root)
-connect (con1,localhost,root);
+
+--echo # Switch to connection conn1
+connection conn1;
 INSERT INTO t1(a) VALUES(7);
 COMMIT;
 SELECT * FROM t1;
 
---disable_abort_on_error
+--echo !!! Error message is total crap!
+--echo !!! Something like "Cannot drop locked table" or similar would be fine,
+--echo !!! But never the misleading    ERROR 42S02: Unknown table 't1'.
+--error ER_BAD_TABLE_ERROR
 DROP TABLE t1;
-COMMIT;
+SHOW WARNINGS;
 
---echo # Switch to session default and disconnect session con1
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+--echo # Switch to connection default
 connection default;
-disconnect con1;
+disconnect conn1;
 COMMIT;
 DROP TABLE t1;

=== added file 'mysql-test/suite/falcon/t/falcon_bug_38304.test'
--- a/mysql-test/suite/falcon/t/falcon_bug_38304.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/t/falcon_bug_38304.test	2008-09-08 11:51:19 +0000
@@ -0,0 +1,540 @@
+--source include/have_falcon.inc
+
+#
+# Bug #<38304>: <Data contents becomes NULL if column name in Falcon table uses accented letters>
+#
+--echo *** Bug #<38304> ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+
+SET LOCAL SQL_MODE="";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`t utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├ñ├½├»├TO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`├ñ├½├»├┤├ª├ES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëNSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`├ñ├½├»├┤├ª├S ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`t utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôt1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`ä);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├ñ├½├»├┤├ª├ES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`t utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`├ñ├½├ERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES";
+CREATE TABLE t1 (`äëï INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïô t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`ä8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëï INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëï INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`ä);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES";
+CREATE TABLE t1 (`├ñ├½├»├┤├ª├S ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES";
+CREATE TABLE t1 (`äëïôæø` varchar(30) character set utf8);
+INSERT INTO t1 VALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+SET LOCAL SQL_MODE="PIPES_AS_CONCAT,ANSI_QUOTES,ANSI,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES";
+CREATE TABLE t1 (`äëïôæALUES ('this'),('is'), ('a'), ('test');
+SELECT * FROM t1;
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+
+SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+DROP TABLE t1;
\ No newline at end of file

=== added file 'mysql-test/suite/falcon/t/falcon_index_datatypes.test'
--- a/mysql-test/suite/falcon/t/falcon_index_datatypes.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/t/falcon_index_datatypes.test	2008-09-04 18:38:48 +0000
@@ -0,0 +1,407 @@
+--source include/have_falcon.inc
+
+#
+# Test for ADD/DROP INDEX.
+#
+# ONLINE ADD/DROP is part of Worklog 4048, and is implicit.
+# Hence, this test will test ONLINE ADD/DROP INDEX if
+# it is supported by the engine. Otherwise, OFFLINE ADD/DROP
+# is used. See also falcon_online_index test.
+#
+# Note:
+# By using --enable_info command we can check if default 
+# ALTER TABLE ... ADD INDEX is online or offline. 
+# If ONLINE, affected rows is always 0. 
+# If OFFLINE, and the table is non-empty, affected rows is > 0, since the 
+# ALTER involved a table copy.
+#
+# This test is focusing on adding/dropping indexes to/from columns of various
+# data types.
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+--enable_warnings
+
+##
+## Should test adding/dropping index for as many supported datatypes as 
+## possible.
+##
+## Falcon does not support indexes on the types BLOB, MEDIUMBLOB, LONGBLOB
+## and TEXT. Falcon (supposedly) supports TINYBLOB indexes (because 
+## TINYBLOB is mapped to VARCHAR), but this distinction is not visible from
+## the MySQL server.
+##
+## BIT type is handled differently than the rest, as it requires special 
+## treatment in SELECTs for the output to be readable.
+## 
+## Omitting synonym types. Using mostly default settings.
+##
+## Default CREATE clauses for TIMESTAMP columns are 
+## "NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP".
+## To avoid having to filter out ever-changing timestamps, we are using 
+## "NOT NULL DEFAULT 0" instead.
+##
+
+
+CREATE TABLE t1 (
+    a_int       INT                 NOT NULL AUTO_INCREMENT PRIMARY KEY, 
+    a_tinyint   TINYINT,
+    a_bigint    BIGINT,
+    a_float     FLOAT,
+    a_double    DOUBLE,
+    a_decimal   DECIMAL(10,2),
+    a_date      DATE,
+    a_time      TIME,
+    a_datetime  DATETIME,
+    a_timestamp TIMESTAMP           NOT NULL DEFAULT 0,
+    a_year      YEAR,
+    a_char      CHAR(10),
+    a_varchar   VARCHAR(255),
+    a_binary    BINARY(8),
+    a_varbinary VARBINARY(255),
+    a_enum      ENUM('enumValueOne', 'enumValueTwo', 'enumValueThree')
+);
+
+SHOW CREATE TABLE t1;
+
+## BITs are special (binary), hence a separate table t2 so that we can do
+## simple SELECT * on t1.
+
+CREATE TABLE t2 (
+    a_int       INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
+    a_bit       BIT(8));
+
+SHOW CREATE TABLE t2;
+
+## Insert some example values. Should have 5 or more values to test LIMIT 
+## with indexes. Values may start at either max or min, but are basically 
+## randomly chosen (but sortable by humans).
+
+INSERT INTO t1 (
+    a_tinyint, a_bigint, 
+    a_float, a_double, a_decimal, a_date,
+    a_time, a_datetime, a_timestamp, a_year,
+    a_char, a_varchar, a_binary, a_varbinary,
+    a_enum) 
+    VALUES 
+    (
+    127, 9223372036854775807,
+    999.99, 999.123456789, 111.99, '2008-07-09', 
+    '11:30:00', '2008-07-09 11:30:00', '2008-07-09 11:30:00', '2008',
+    'aTestChar', 'aTestVarChar', 'aTestBin', 'aTestVarBinary', 
+    'enumValueOne'
+    ),
+    (
+    126, 9223372036854775806,
+    998.88, 999.234567891, 112.00, '2008-07-10', 
+    '12:30:10', '2008-07-10 12:30:10', '2008-07-10 12:30:10', '2009',
+    'bTestChar', 'bTestVarChar', 'bTestBin', 'bTestVarBinary', 
+    'enumValueTwo'
+    ),
+    (
+    125, 9223372036854775805,
+    997.77, 999.345678912, 112.01, '2008-07-11', 
+    '13:30:20', '2008-07-11 13:30:20', '2008-07-11 13:30:20', '2010',
+    'cTestChar', 'cTestVarChar', 'cTestBin', 'cTestVarBinary', 
+    'enumValueThree'
+    ),
+    (
+    124, 9223372036854775804,
+    996.66, 999.456789123, 112.02, '2008-07-12', 
+    '14:30:30', '2008-07-12 14:30:30', '2008-07-12 14:30:30', '2011',
+    'dTestChar', 'dTestVarChar', 'dTestBin', 'dTestVarBinary', 
+    'enumValueOne'
+    ),
+    (
+    123, 9223372036854775803,
+    995.55, 999.567891234, 112.03, '2008-07-13', 
+    '15:30:40', '2008-07-13 15:30:40', '2008-07-13 15:30:40', '2012',
+    'eTestChar', 'eTestVarChar', 'eTestBin', 'eTestVarBinary', 
+    'enumValueTwo'
+    );
+
+INSERT INTO t2 (a_bit) VALUES (b'0'), (b'1'), (b'10'), (b'11'), (b'100');
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+
+SELECT * FROM t1;
+SELECT a_int, BIN(a_bit+0) FROM t2;
+
+## Using the following procedure for each non-indexed data type/column:
+##  1. Add INDEX for the specific column
+##  2. Check index metadata (Falcon and server and user must agree)
+##  3. Insert new value in indexed column
+##  4. Update a value in indexed column
+##  4. Check that all values are still there
+##  5. Use a LIMIT query to excercise alternative index implementation
+##  6. Add additional index on the same column
+##  7. Drop newly added INDEX for the specified column
+##  8. Check index metadata (Falcon and server and user must agree)
+##  9. Check that the values are still there
+
+--echo #-------- Test: BIT --------#
+
+## BIT column, t2:
+ALTER TABLE t2 ADD INDEX index_bit (a_bit);
+SHOW INDEXES FROM t2;
+INSERT INTO t2 SET a_bit = b'11111';
+UPDATE t2 SET a_bit = b'101010' where a_int > b'101';
+SELECT a_int, BIN(a_bit+0) FROM t2;
+SELECT a_int, BIN(a_bit+0) FROM t2 WHERE a_bit > b'1' LIMIT 1;
+ALTER TABLE t2 DROP INDEX index_bit;
+SHOW INDEXES FROM t2;
+SELECT a_int, BIN(a_bit+0) FROM t2;
+
+--echo #-------- Test: TINYINT --------#
+
+ALTER TABLE t1 ADD INDEX index_tinyint (a_tinyint);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_tinyint = 99;
+UPDATE t1 SET a_tinyint = 88 where a_tinyint = 99;
+SELECT * FROM t1 ORDER BY a_tinyint;
+SELECT * FROM t1 WHERE a_tinyint > 1 LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_tinyint;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: BIGINT --------#
+
+ALTER TABLE t1 ADD INDEX index_bigint (a_bigint);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_bigint = 9223372036854775804;
+UPDATE t1 SET a_bigint = 911111111111111111 where a_bigint = 9223372036854775804;
+SELECT * FROM t1 ORDER BY a_bigint;
+SELECT * FROM t1 WHERE a_bigint > 1 LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_bigint;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: FLOAT --------#
+
+ALTER TABLE t1 ADD INDEX index_float (a_float);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_float = 994.44;
+UPDATE t1 SET a_float = 993.33 where a_float > 994 AND a_float < 994.5;
+SELECT * FROM t1 ORDER BY a_float;
+SELECT * FROM t1 WHERE a_float > 1 LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_float;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: DOUBLE --------#
+
+ALTER TABLE t1 ADD INDEX index_double (a_double);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_double = 999.678912345;
+UPDATE t1 SET a_double = 999.998877665 where a_double = 999.678912345;
+SELECT * FROM t1 ORDER BY a_double;
+SELECT * FROM t1 WHERE a_double > 1 LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_double;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: DECIMAL --------#
+
+ALTER TABLE t1 ADD INDEX index_decimal (a_decimal);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_decimal = 112.04;
+UPDATE t1 SET a_decimal = 112.05 where a_decimal = 112.04;
+SELECT * FROM t1 ORDER BY a_decimal;
+SELECT * FROM t1 WHERE a_decimal > 1 LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_decimal;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: DATE --------#
+
+ALTER TABLE t1 ADD INDEX index_date (a_date);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_date = '2008-07-14';
+UPDATE t1 SET a_date = '2008-08-14' where a_date = '2008-07-14';
+SELECT * FROM t1 ORDER BY a_date;
+SELECT * FROM t1 WHERE a_date > '2008-01-01' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_date;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: TIME --------#
+
+ALTER TABLE t1 ADD INDEX index_time (a_time);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_time = '16:30:50';
+UPDATE t1 SET a_time = '17:31:00' where a_time = '16:30:50';
+SELECT * FROM t1 ORDER BY a_time;
+SELECT * FROM t1 WHERE a_time > '11:00:00' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_time;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: DATETIME --------#
+
+ALTER TABLE t1 ADD INDEX index_datetime (a_datetime);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_datetime = '2008-07-14 16:30:50';
+UPDATE t1 SET a_datetime = '2008-08-14 17:31:00' where a_datetime = '2008-07-14 16:30:50';
+SELECT * FROM t1 ORDER BY a_datetime;
+SELECT * FROM t1 WHERE a_datetime > '2008-07-10 00:00:00' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_datetime;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: TIMESTAMP --------#
+
+ALTER TABLE t1 ADD INDEX index_timestamp (a_timestamp);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_timestamp = '2008-07-14 16:30:50';
+UPDATE t1 SET a_timestamp = '2008-08-14 19:20:21' where a_timestamp = '2008-07-14 16:30:50';
+SELECT * FROM t1 ORDER BY a_timestamp;
+SELECT * FROM t1 WHERE a_timestamp > '2008-07-10 00:00:00' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_timestamp;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: YEAR --------#
+
+ALTER TABLE t1 ADD INDEX index_year (a_year);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_year = '2013';
+UPDATE t1 SET a_year = '2020' where a_year LIKE '2013';
+SELECT * FROM t1 ORDER BY a_year;
+SELECT * FROM t1 WHERE a_year > '1999' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_year;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: CHAR --------#
+
+ALTER TABLE t1 ADD INDEX index_char (a_char);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_char = 'fTestChar';
+UPDATE t1 SET a_char = 'gTestChar' where a_char = 'fTestChar';
+SELECT * FROM t1 ORDER BY a_char;
+SELECT * FROM t1 WHERE a_char > 'afalcon' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_char;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: VARCHAR --------#
+
+ALTER TABLE t1 ADD INDEX index_varchar (a_varchar);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_varchar = 'fTestVarChar';
+UPDATE t1 SET a_varchar = 'gTestVarChar' where a_varchar = 'fTestVarChar';
+SELECT * FROM t1 ORDER BY a_varchar;
+SELECT * FROM t1 WHERE a_varchar > 'afalcon' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_varchar;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: BINARY --------#
+
+ALTER TABLE t1 ADD INDEX index_binary (a_binary);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_binary = 'fTestBin';
+UPDATE t1 SET a_binary = 'gTestBin' where a_binary = 'fTestBin';
+SELECT * FROM t1 ORDER BY a_binary;
+SELECT * FROM t1 WHERE a_binary > 'afalcon' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_binary;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: VARBINARY --------#
+
+ALTER TABLE t1 ADD INDEX index_varbinary (a_varbinary);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_varbinary = 'fTestVarBinary';
+UPDATE t1 SET a_varbinary = 'gTestVarBinary' where a_varbinary = 'fTestVarBinary';
+SELECT * FROM t1 ORDER BY a_varbinary;
+SELECT * FROM t1 WHERE a_varbinary > 'afalcon' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_varbinary;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: ENUM --------#
+
+ALTER TABLE t1 ADD INDEX index_enum (a_binary);
+SHOW INDEXES FROM t1;
+INSERT INTO t1 SET a_enum = 'enumValueThree';
+UPDATE t1 SET a_enum = 'enumValueOne' where a_enum = 'enumValueThree';
+SELECT * FROM t1 ORDER BY a_enum;
+SELECT * FROM t1 WHERE a_enum > 'afalcon' LIMIT 1;
+ALTER TABLE t1 DROP INDEX index_enum;
+SHOW INDEXES FROM t1;
+SELECT * FROM t1;
+
+--echo #-------- Test: Alternative CREATE INDEX --------#
+
+## Try adding all indexes once again using alternative syntax (CREATE...)
+CREATE INDEX index_int on t1 (a_int);
+CREATE INDEX index_bit on t2 (a_bit);
+CREATE INDEX index_tinyint on t1 (a_tinyint);
+CREATE INDEX index_bigint on t1 (a_bigint);
+CREATE INDEX index_float on t1 (a_float);
+CREATE INDEX index_double on t1 (a_double);
+CREATE INDEX index_decimal on t1 (a_decimal);
+CREATE INDEX index_date on t1 (a_date);
+CREATE INDEX index_datetime on t1 (a_datetime);
+CREATE INDEX index_timestamp on t1 (a_timestamp);
+CREATE INDEX index_year on t1 (a_year);
+CREATE INDEX index_char on t1 (a_char);
+CREATE INDEX index_varchar on t1 (a_varchar);
+CREATE INDEX index_binary on t1 (a_binary);
+CREATE INDEX index_varbinary on t1 (a_varbinary);
+CREATE INDEX index_enum on t1 (a_enum);
+
+
+SHOW INDEXES FROM t1;
+SELECT * FROM t1 ORDER BY a_int;
+
+SHOW INDEXES FROM t2;
+SELECT a_int, BIN(a_bit+0) FROM t2 ORDER BY a_int;
+
+## Try dropping all indexes using alternative syntax
+
+--echo #-------- Test: Alternative DROP INDEX --------#
+
+DROP INDEX index_int on t1;
+DROP INDEX index_bit on t2;
+DROP INDEX index_tinyint on t1;
+DROP INDEX index_bigint on t1;
+DROP INDEX index_float on t1;
+DROP INDEX index_double on t1;
+DROP INDEX index_decimal on t1;
+DROP INDEX index_date on t1;
+DROP INDEX index_datetime on t1;
+DROP INDEX index_timestamp on t1;
+DROP INDEX index_year on t1;
+DROP INDEX index_char on t1;
+DROP INDEX index_varchar on t1;
+DROP INDEX index_binary on t1;
+DROP INDEX index_varbinary on t1;
+DROP INDEX index_enum on t1;
+
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SHOW INDEXES FROM t1;
+SELECT * FROM t1 ORDER BY a_int;
+
+SHOW INDEXES FROM t2;
+SELECT a_int, BIN(a_bit+0) FROM t2 ORDER BY a_int;
+
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+DROP TABLE t1;
+DROP TABLE t2;

=== added file 'mysql-test/suite/falcon/t/falcon_online_index.test'
--- a/mysql-test/suite/falcon/t/falcon_online_index.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/falcon/t/falcon_online_index.test	2008-09-10 15:08:56 +0000
@@ -0,0 +1,360 @@
+--source include/have_falcon.inc
+
+#
+# Test for ONLINE ADD/DROP INDEX.
+# See also: falcon_index_datatypes
+#
+# ONLINE ADD/DROP was added to Falcon as part of
+# Worklog 4048 - "Falcon: On-line add attribute, Falcon handler part"
+# and is implicit for those statements where ONLINE functionality is supported 
+# by the storage engine (and the server).
+# 
+# This test is testing that:
+#
+#    a) ONLINE is used for some selected ALTER TABLE ... ADD INDEX statements
+#       where neither ONLINE nor OFFLINE is specified.
+#    b) Alternative syntax works with the ONLINE keyword, for example
+#       CREATE ONLINE INDEX
+#       ALTER ONLINE TABLE ... ADD KEY
+#    c) ONLINE ADD/DROP INDEX works where expected.
+#    d) Statements using ONLINE keyword are rejected if the storage engine does
+#       not support doing this online.
+#
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+DROP TABLE IF EXISTS t3;
+--enable_warnings
+
+CREATE TABLE t1 (
+    a int PRIMARY KEY, 
+    b VARCHAR(255), 
+    c int,
+    d CHAR(10)
+);
+
+# Populate t1, 20 rows
+let $i=20;
+let $r=0;
+while ($i < 20)
+{
+  eval INSERT INTO t1 VALUES ($r, 'TestRow$r', $r*2, 'Char$r');
+  dec $i;
+  inc $r;
+}
+
+CREATE TABLE t2 (
+    a int PRIMARY KEY, 
+    b int,
+    c int,
+    d VARCHAR(65)
+);
+
+# Populate t2, 33 rows
+# Disable query log for populating t2 in order to avoid large test result file.
+--disable_query_log
+let $i=33;
+let $r=0;
+--echo #-------- Inserting $i rows into t2 (query log disabled) --------#
+while ($i)
+{
+  eval INSERT INTO t2 VALUES ($r, $r*2, $r+1, 'SomeString $r for testing');
+  dec $i;
+  inc $r;
+}
+--enable_query_log
+
+# Need this to test with default values, nullable, non-nullable columns...
+CREATE TABLE t3 (
+    a int PRIMARY KEY AUTO_INCREMENT, 
+    b int DEFAULT 9999,
+    c int DEFAULT 8888 NOT NULL,
+    d int NOT NULL,
+    e VARCHAR(65)
+);
+
+# Populate t3, 1000 rows. Disable query log for this operation in order to avoid
+# huge test result file.
+--disable_query_log
+
+let $i=1000;
+let $r=0;
+--echo #-------- Inserting $i rows into t3... (query log disabled) --------#
+while ($i)
+{
+  eval INSERT INTO t3 (b, c, d, e) VALUES ($r*2, $r+1, $r-1, 'SomeVarchar $r for testing');
+  dec $i;
+  inc $r;
+}
+--enable_query_log
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+
+# Do implicit online checking by verifying the number of affected rows from
+# ALTER statement (0 if online, > 0 if offline), hence --enable_info.
+--enable_info
+
+--echo #-------- Testing implicit ONLINE --------#
+
+# Test that ALTER TABLE ADD INDEX is online for nullable column
+ALTER TABLE t1 ADD INDEX ix_b (b);
+DROP INDEX ix_b ON t1;
+
+# Test that CREATE INDEX is online for nullable column
+CREATE INDEX ix_c ON t1 (c);
+DROP INDEX ix_c ON t1;
+
+# Test that ALTER TABLE ADD INDEX is online for nullable column having default value
+ALTER TABLE t3 ADD INDEX ix_b (b);
+SELECT * from t3 where b > 555 ORDER BY a LIMIT 5;
+DROP INDEX ix_b ON t3;
+
+--echo #-------- Testing implicit OFFLINE --------#
+
+# Test that ALTER TABLE ADD INDEX is offline for non-nullable column having default value
+ALTER TABLE t3 ADD INDEX ix_c (c);
+DROP INDEX ix_c ON t3;
+
+# Test that ALTER TABLE ADD INDEX is offline for non-nullable columns
+ALTER TABLE t3 ADD INDEX ix_cd (c, d);
+DROP INDEX ix_cd ON t3;
+
+--disable_info
+
+
+# Test that ONLINE keyword is accepted (or not, depending on statement):
+
+--echo #-------- Testing ONLINE keyword... --------#
+
+--echo #-------- ONLINE: ALTER ADD/DROP INDEX --------#
+
+ALTER ONLINE TABLE t1 ADD INDEX ix_b (b);
+ALTER ONLINE TABLE t1 DROP INDEX ix_b;
+
+--echo #-------- ONLINE: ALTER ADD/DROP KEY --------#
+
+ALTER ONLINE TABLE t1 ADD KEY ix_b (b);
+ALTER ONLINE TABLE t1 DROP KEY ix_b;
+
+--echo #-------- ONLINE: CREATE/DROP INDEX --------#
+
+CREATE ONLINE INDEX ix_c ON t1 (c);
+DROP ONLINE INDEX ix_c ON t1;
+
+--echo #-------- ONLINE: ADD INDEX default name --------#
+
+ALTER ONLINE TABLE t1 ADD INDEX (b);
+ALTER ONLINE TABLE t1 DROP INDEX b;
+
+--echo #-------- ONLINE: ALTER ADD nullable with default --------#
+
+# Test ALTER ... ADD ... with ONLINE for nullable column having default value
+ALTER ONLINE TABLE t3 ADD INDEX ix_b (b);
+SELECT * from t3 where b > 555 ORDER BY a LIMIT 5;
+ALTER ONLINE TABLE t3 DROP INDEX ix_b;
+
+--echo #-------- ONLINE: ALTER ADD not-null with default --------#
+
+# Test that ALTER ONLINE ... ADD INDEX fails with ONLINE for non-nullable column having default value
+--error ER_NOT_SUPPORTED_YET
+ALTER ONLINE TABLE t3 ADD INDEX ix_c (c);
+
+--echo #-------- ONLINE: ALTER ADD not-null --------#
+
+# Test that ALTER ONLINE ... ADD INDEX fails with ONLINE for non-nullable columns
+--error ER_NOT_SUPPORTED_YET
+ALTER ONLINE TABLE t3 ADD INDEX ix_d (d);
+
+--echo #-------- ONLINE: ALTER ADD same key multiple times --------#
+
+# Test adding the same key more than once (should fail but not crash)
+ALTER ONLINE TABLE t1 ADD INDEX index_c (c);
+--error ER_DUP_KEYNAME
+ALTER ONLINE TABLE t1 ADD INDEX index_c (c);
+--error ER_DUP_KEYNAME
+ALTER ONLINE TABLE t1 ADD INDEX index_c (c);
+SHOW INDEXES FROM t1;
+
+--echo #-------- ONLINE: ALTER DROP same key multiple times --------#
+
+# Test dropping the same key more than once (dropping key added in previous segment).
+# Should fail but not crash.
+ALTER ONLINE TABLE t1 DROP INDEX index_c;
+--error ER_CANT_DROP_FIELD_OR_KEY
+ALTER ONLINE TABLE t1 DROP INDEX index_c;
+--error ER_CANT_DROP_FIELD_OR_KEY
+ALTER ONLINE TABLE t1 DROP INDEX index_c;
+SHOW INDEXES FROM t1;
+
+--echo #-------- ONLINE: ALTER ADD/DROP PRIMARY KEY --------#
+
+# Adding/dropping PRIMARY KEY is not supposed to work ONLINE
+--error ER_NOT_SUPPORTED_YET
+ALTER ONLINE TABLE t1 DROP PRIMARY KEY;
+# Now drop primary key (offline) on 'a' temporarily in order to try adding one online
+ALTER TABLE t1 DROP PRIMARY KEY;
+--error ER_NOT_SUPPORTED_YET
+ALTER ONLINE TABLE t1 ADD PRIMARY KEY (c);
+SHOW INDEXES FROM t1;
+# Re-set primary key on 'a'
+ALTER TABLE t1 ADD PRIMARY KEY (a);
+
+##
+## Testing some statement variations using ADD/DROP INDEX
+## 
+
+--echo #-------- Test: UNIQUE --------#
+
+## Test adding UNIQUE index
+ALTER ONLINE TABLE t2 ADD UNIQUE INDEX ix_unique_c (c);
+EXPLAIN SELECT * FROM t2 WHERE c < 25 AND c > 20 ORDER BY c;
+SELECT * FROM t2 WHERE c < 25 AND c > 20 ORDER BY c;
+SHOW INDEXES FROM t2;
+DESCRIBE t2;
+DROP ONLINE INDEX ix_unique_c ON t2;
+SHOW INDEXES FROM t2;
+
+--echo #-------- Test: DESC --------#
+
+## Test using DESC keyword (parsed but not used)
+ALTER ONLINE TABLE t3 ADD INDEX ix_desc_b (b DESC);
+ALTER ONLINE TABLE t3 ADD INDEX ix_asc_b (b ASC);
+SHOW INDEXES FROM t3;
+DROP ONLINE INDEX ix_desc_b ON t3;
+DROP ONLINE INDEX ix_asc_b ON t3;
+
+--echo #-------- Test: KEY_BLOCK_SIZE --------#
+
+## Test adding index and specifying KEY_BLOCK_SIZE.
+## KEY _BLOCK_SIZE 0 indicates that the default should be used.
+ALTER ONLINE TABLE t1 ADD INDEX ix_keyblock_b (b) KEY_BLOCK_SIZE = 0;
+EXPLAIN SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+SHOW INDEXES FROM t1;
+ALTER ONLINE TABLE t1 DROP INDEX ix_keyblock_b;
+
+--echo #-------- Test: COMMENT --------#
+
+## Test adding index and specifying a comment
+ALTER ONLINE TABLE t1 ADD INDEX ix_b (b) COMMENT 'Test comment';
+EXPLAIN SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+SELECT * FROM t1 WHERE b LIKE 'TestRow1%' ORDER BY b;
+SHOW INDEXES FROM t1;
+ALTER ONLINE TABLE t1 DROP INDEX ix_b;
+
+--echo #-------- Test: Multiple columns --------#
+
+## Test ADD INDEX on multiple columns
+ALTER ONLINE TABLE t1 ADD INDEX index_multicol (b, c, d);
+SHOW INDEXES FROM t1;
+## Query using the two left-most keys
+EXPLAIN SELECT * FROM t1 WHERE b LIKE 'TestRow3%' AND c = 6 ORDER BY b, c, d;
+SELECT * FROM t1 WHERE b LIKE 'TestRow3%' AND c = 6 ORDER BY b, c, d;
+DROP INDEX index_multicol ON t1;
+
+--echo #-------- Test: Multiple ADD INDEX on same column --------#
+
+ALTER ONLINE TABLE t1 ADD INDEX index_1d (d);
+ALTER ONLINE TABLE t1 ADD INDEX index_2d (d);
+CREATE ONLINE INDEX index_3d ON t1 (d);
+SHOW INDEXES FROM t1;
+DROP ONLINE INDEX index_1d ON t1;
+DROP ONLINE INDEX index_2d ON t1;
+DROP ONLINE INDEX index_3d ON t1;
+
+--echo #-------- Test: Multiple ADD INDEX in a single statement --------#
+
+ALTER TABLE t1 
+    ADD INDEX index_varchar (b), 
+    ADD INDEX index_int (c);
+ALTER TABLE t3 
+    ADD INDEX index_int (b), 
+    ADD INDEX index_multi (b,e), 
+    ADD INDEX index_varchar (e);
+SHOW INDEXES FROM t1;
+SHOW INDEXES FROM t3;
+
+--echo #-------- Test: Multiple DROP INDEX in a single statement --------#
+
+## Depends on indexes added in previous test segment.
+ALTER TABLE t1 
+    DROP INDEX index_varchar, 
+    DROP INDEX index_int;
+ALTER TABLE t3 
+    DROP INDEX index_int, 
+    DROP INDEX index_multi,
+    DROP INDEX index_varchar;
+SHOW INDEXES FROM t1;
+SHOW INDEXES FROM t3;
+
+--echo #-------- Test: Combined ADD/DROP INDEX in a single statement --------#
+
+ALTER TABLE t1 ADD INDEX index_int (c);
+ALTER TABLE t1 ADD INDEX index_char (d), DROP INDEX index_int;
+SHOW INDEXES FROM t1;
+ALTER TABLE t1 DROP INDEX index_char;
+
+--echo #-------- Test: ADD INDEX followed by some complex queries --------#
+
+# First index added offline (non-nullable column), others online.
+ALTER TABLE t1 ADD INDEX ix_a (a);
+ALTER ONLINE TABLE t1 ADD INDEX ix_b (b);
+ALTER ONLINE TABLE t1 ADD INDEX ix_c (c);
+
+ALTER ONLINE TABLE t2
+    ADD INDEX ix_b (b),
+    ADD INDEX ix_d (d);
+
+ALTER ONLINE TABLE t3 ADD INDEX ix_b (b);
+
+## Two keys, existing values
+EXPLAIN SELECT * FROM t1 WHERE a = 3 OR (c > 10 AND a < 15) ORDER BY a;
+SELECT * FROM t1 WHERE a = 3 OR (c > 10 AND a < 15) ORDER BY a;
+
+## Two keys, one non-existing and one existing value
+EXPLAIN SELECT * FROM t1 WHERE a = 99 OR b LIKE 'TestRow7%';
+SELECT * FROM t1 WHERE a = 99 OR b LIKE 'TestRow7%';
+
+## Two keys and a non-key
+EXPLAIN SELECT * FROM t1 WHERE (a = 10 OR b LIKE 'TestRow11') AND d LIKE 'Char%' ORDER BY a;
+SELECT * FROM t1 WHERE (a = 10 OR b LIKE 'TestRow11') AND d LIKE 'Char%' ORDER BY a;
+
+## Two tables, keys in both, compare key to non-key
+EXPLAIN SELECT * FROM t1, t2 WHERE (t1.a IN (1,2) OR t1.b LIKE 'TestRow1%') AND t1.c=t2.c;
+SELECT * FROM t1, t2 WHERE (t1.a IN (1,2) OR t1.b LIKE 'TestRow1%') AND t1.c=t2.c;
+EXPLAIN SELECT * FROM t1, t3 WHERE t3.b=2 AND (t1.c = t3.c OR t1.a=t3.d);
+SELECT * FROM t1, t3 WHERE t3.b=2 AND (t1.c = t3.c OR t1.a=t3.d);
+
+ALTER ONLINE TABLE t1 
+    DROP INDEX ix_a,
+    DROP INDEX ix_b,
+    DROP INDEX ix_c;
+
+ALTER ONLINE TABLE t2
+    DROP INDEX ix_b,
+    DROP INDEX ix_d;
+
+ALTER ONLINE TABLE t3 DROP INDEX ix_b;
+
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SHOW INDEXES FROM t1;
+SHOW INDEXES FROM t2;
+SHOW INDEXES FROM t3;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;

=== removed file 'mysql-test/suite/falcon/t/falcon_select_excerpt.test'
--- a/mysql-test/suite/falcon/t/falcon_select_excerpt.test	2007-09-29 04:30:42 +0000
+++ b/mysql-test/suite/falcon/t/falcon_select_excerpt.test	1970-01-01 00:00:00 +0000
@@ -1,1310 +0,0 @@
---source include/have_falcon.inc
-#
-# Bug #28686: Falcon: falcon_select.test regressed
-# Note: Extracted from falcon_select.test and ps_8falcon.test
-#
-
---echo *** Bug #28686 ***
-
-# ----------------------------------------------------- #
-# --- Initialisation                                --- #
-# ----------------------------------------------------- #
-let $engine = 'Falcon';
-eval SET @@storage_engine = $engine;
-
---disable_warnings
-DROP TABLE IF EXISTS t1;
-DROP TABLE IF EXISTS t2;
-DROP TABLE IF EXISTS t3;
-DROP TABLE IF EXISTS t4;
-DROP TABLE IF EXISTS t5;
-DROP TABLE IF EXISTS t6;
---enable_warnings
-
-CREATE TABLE t1 (f1 varchar(6) DEFAULT NULL, f2 int(6) PRIMARY KEY NOT NULL);
-CREATE TABLE t2 (f3 varchar(5) NOT NULL, f4 varchar(5) NOT NULL, UNIQUE KEY ukey (f3,f4));
-INSERT INTO t1 VALUES (' 2', 2);
-INSERT INTO t2 VALUES (' 2', ' one '),(' 2', ' two ');
-
-CREATE TABLE t3 (
-  auto int not null auto_increment,
-  fld1 int(6) unsigned zerofill DEFAULT '000000' NOT NULL,
-  companynr tinyint(2) unsigned zerofill DEFAULT '00' NOT NULL,
-  fld3 char(30) DEFAULT '' NOT NULL,
-  fld4 char(35) DEFAULT '' NOT NULL,
-  fld5 char(35) DEFAULT '' NOT NULL,
-  fld6 char(4) DEFAULT '' NOT NULL,
-  UNIQUE fld1 (fld1),
-  KEY fld3 (fld3),
-  PRIMARY KEY (auto)
-);
-
-#
-# Populate table t3
-#
-
---disable_query_log
-INSERT INTO t3 VALUES (1,000001,00,'Omaha','teethe','neat','');
-INSERT INTO t3 VALUES (2,011401,37,'breaking','dreaded','Steinberg','W');
-INSERT INTO t3 VALUES (3,011402,37,'Romans','scholastics','jarring','');
-INSERT INTO t3 VALUES (4,011403,37,'intercepted','audiology','tinily','');
-INSERT INTO t3 VALUES (5,011501,37,'bewilderingly','wallet','balled','');
-INSERT INTO t3 VALUES (6,011701,37,'astound','parters','persist','W');
-INSERT INTO t3 VALUES (7,011702,37,'admonishing','eschew','attainments','');
-INSERT INTO t3 VALUES (8,011703,37,'sumac','quitter','fanatic','');
-INSERT INTO t3 VALUES (9,012001,37,'flanking','neat','measures','FAS');
-INSERT INTO t3 VALUES (10,012003,37,'combed','Steinberg','rightfulness','');
-INSERT INTO t3 VALUES (11,012004,37,'subjective','jarring','capably','');
-INSERT INTO t3 VALUES (12,012005,37,'scatterbrain','tinily','impulsive','');
-INSERT INTO t3 VALUES (13,012301,37,'Eulerian','balled','starlet','');
-INSERT INTO t3 VALUES (14,012302,36,'dubbed','persist','terminators','');
-INSERT INTO t3 VALUES (15,012303,37,'Kane','attainments','untying','');
-INSERT INTO t3 VALUES (16,012304,37,'overlay','fanatic','announces','FAS');
-INSERT INTO t3 VALUES (17,012305,37,'perturb','measures','featherweight','FAS');
-INSERT INTO t3 VALUES (18,012306,37,'goblins','rightfulness','pessimist','FAS');
-INSERT INTO t3 VALUES (19,012501,37,'annihilates','capably','daughter','');
-INSERT INTO t3 VALUES (20,012602,37,'Wotan','impulsive','decliner','FAS');
-INSERT INTO t3 VALUES (21,012603,37,'snatching','starlet','lawgiver','');
-INSERT INTO t3 VALUES (22,012604,37,'concludes','terminators','stated','');
-INSERT INTO t3 VALUES (23,012605,37,'laterally','untying','readable','');
-INSERT INTO t3 VALUES (24,012606,37,'yelped','announces','attrition','');
-INSERT INTO t3 VALUES (25,012701,37,'grazing','featherweight','cascade','FAS');
-INSERT INTO t3 VALUES (26,012702,37,'Baird','pessimist','motors','FAS');
-INSERT INTO t3 VALUES (27,012703,37,'celery','daughter','interrogate','');
-INSERT INTO t3 VALUES (28,012704,37,'misunderstander','decliner','pests','W');
-INSERT INTO t3 VALUES (29,013601,37,'handgun','lawgiver','stairway','');
-INSERT INTO t3 VALUES (30,013602,37,'foldout','stated','dopers','FAS');
-INSERT INTO t3 VALUES (31,013603,37,'mystic','readable','testicle','W');
-INSERT INTO t3 VALUES (32,013604,37,'succumbed','attrition','Parsifal','W');
-INSERT INTO t3 VALUES (33,013605,37,'Nabisco','cascade','leavings','');
-INSERT INTO t3 VALUES (34,013606,37,'fingerings','motors','postulation','W');
-INSERT INTO t3 VALUES (35,013607,37,'aging','interrogate','squeaking','');
-INSERT INTO t3 VALUES (36,013608,37,'afield','pests','contrasted','');
-INSERT INTO t3 VALUES (37,013609,37,'ammonium','stairway','leftover','');
-INSERT INTO t3 VALUES (38,013610,37,'boat','dopers','whiteners','');
-INSERT INTO t3 VALUES (39,013801,37,'intelligibility','testicle','erases','W');
-INSERT INTO t3 VALUES (40,013802,37,'Augustine','Parsifal','Punjab','W');
-INSERT INTO t3 VALUES (41,013803,37,'teethe','leavings','Merritt','');
-INSERT INTO t3 VALUES (42,013804,37,'dreaded','postulation','Quixotism','');
-INSERT INTO t3 VALUES (43,013901,37,'scholastics','squeaking','sweetish','FAS');
-INSERT INTO t3 VALUES (44,016001,37,'audiology','contrasted','dogging','FAS');
-INSERT INTO t3 VALUES (45,016201,37,'wallet','leftover','scornfully','FAS');
-INSERT INTO t3 VALUES (46,016202,37,'parters','whiteners','bellow','');
-INSERT INTO t3 VALUES (47,016301,37,'eschew','erases','bills','');
-INSERT INTO t3 VALUES (48,016302,37,'quitter','Punjab','cupboard','FAS');
-INSERT INTO t3 VALUES (49,016303,37,'neat','Merritt','sureties','FAS');
-INSERT INTO t3 VALUES (50,016304,37,'Steinberg','Quixotism','puddings','');
-INSERT INTO t3 VALUES (51,018001,37,'jarring','sweetish','tapestry','');
-INSERT INTO t3 VALUES (52,018002,37,'tinily','dogging','fetters','');
-INSERT INTO t3 VALUES (53,018003,37,'balled','scornfully','bivalves','');
-INSERT INTO t3 VALUES (54,018004,37,'persist','bellow','incurring','');
-INSERT INTO t3 VALUES (55,018005,37,'attainments','bills','Adolph','');
-INSERT INTO t3 VALUES (56,018007,37,'fanatic','cupboard','pithed','');
-INSERT INTO t3 VALUES (57,018008,37,'measures','sureties','emergency','');
-INSERT INTO t3 VALUES (58,018009,37,'rightfulness','puddings','Miles','');
-INSERT INTO t3 VALUES (59,018010,37,'capably','tapestry','trimmings','');
-INSERT INTO t3 VALUES (60,018012,37,'impulsive','fetters','tragedies','W');
-INSERT INTO t3 VALUES (61,018013,37,'starlet','bivalves','skulking','W');
-INSERT INTO t3 VALUES (62,018014,37,'terminators','incurring','flint','');
-INSERT INTO t3 VALUES (63,018015,37,'untying','Adolph','flopping','W');
-INSERT INTO t3 VALUES (64,018016,37,'announces','pithed','relaxing','FAS');
-INSERT INTO t3 VALUES (65,018017,37,'featherweight','emergency','offload','FAS');
-INSERT INTO t3 VALUES (66,018018,37,'pessimist','Miles','suites','W');
-INSERT INTO t3 VALUES (67,018019,37,'daughter','trimmings','lists','FAS');
-INSERT INTO t3 VALUES (68,018020,37,'decliner','tragedies','animized','FAS');
-INSERT INTO t3 VALUES (69,018021,37,'lawgiver','skulking','multilayer','W');
-INSERT INTO t3 VALUES (70,018022,37,'stated','flint','standardizes','FAS');
-INSERT INTO t3 VALUES (71,018023,37,'readable','flopping','Judas','');
-INSERT INTO t3 VALUES (72,018024,37,'attrition','relaxing','vacuuming','W');
-INSERT INTO t3 VALUES (73,018025,37,'cascade','offload','dentally','W');
-INSERT INTO t3 VALUES (74,018026,37,'motors','suites','humanness','W');
-INSERT INTO t3 VALUES (75,018027,37,'interrogate','lists','inch','W');
-INSERT INTO t3 VALUES (76,018028,37,'pests','animized','Weissmuller','W');
-INSERT INTO t3 VALUES (77,018029,37,'stairway','multilayer','irresponsibly','W');
-INSERT INTO t3 VALUES (78,018030,37,'dopers','standardizes','luckily','FAS');
-INSERT INTO t3 VALUES (79,018032,37,'testicle','Judas','culled','W');
-INSERT INTO t3 VALUES (80,018033,37,'Parsifal','vacuuming','medical','FAS');
-INSERT INTO t3 VALUES (81,018034,37,'leavings','dentally','bloodbath','FAS');
-INSERT INTO t3 VALUES (82,018035,37,'postulation','humanness','subschema','W');
-INSERT INTO t3 VALUES (83,018036,37,'squeaking','inch','animals','W');
-INSERT INTO t3 VALUES (84,018037,37,'contrasted','Weissmuller','Micronesia','');
-INSERT INTO t3 VALUES (85,018038,37,'leftover','irresponsibly','repetitions','');
-INSERT INTO t3 VALUES (86,018039,37,'whiteners','luckily','Antares','');
-INSERT INTO t3 VALUES (87,018040,37,'erases','culled','ventilate','W');
-INSERT INTO t3 VALUES (88,018041,37,'Punjab','medical','pityingly','');
-INSERT INTO t3 VALUES (89,018042,37,'Merritt','bloodbath','interdependent','');
-INSERT INTO t3 VALUES (90,018043,37,'Quixotism','subschema','Graves','FAS');
-INSERT INTO t3 VALUES (91,018044,37,'sweetish','animals','neonatal','');
-INSERT INTO t3 VALUES (92,018045,37,'dogging','Micronesia','scribbled','FAS');
-INSERT INTO t3 VALUES (93,018046,37,'scornfully','repetitions','chafe','W');
-INSERT INTO t3 VALUES (94,018048,37,'bellow','Antares','honoring','');
-INSERT INTO t3 VALUES (95,018049,37,'bills','ventilate','realtor','');
-INSERT INTO t3 VALUES (96,018050,37,'cupboard','pityingly','elite','');
-INSERT INTO t3 VALUES (97,018051,37,'sureties','interdependent','funereal','');
-INSERT INTO t3 VALUES (98,018052,37,'puddings','Graves','abrogating','');
-INSERT INTO t3 VALUES (99,018053,50,'tapestry','neonatal','sorters','');
-INSERT INTO t3 VALUES (100,018054,37,'fetters','scribbled','Conley','');
-INSERT INTO t3 VALUES (101,018055,37,'bivalves','chafe','lectured','');
-INSERT INTO t3 VALUES (102,018056,37,'incurring','honoring','Abraham','');
-INSERT INTO t3 VALUES (103,018057,37,'Adolph','realtor','Hawaii','W');
-INSERT INTO t3 VALUES (104,018058,37,'pithed','elite','cage','');
-INSERT INTO t3 VALUES (105,018059,36,'emergency','funereal','hushes','');
-INSERT INTO t3 VALUES (106,018060,37,'Miles','abrogating','Simla','');
-INSERT INTO t3 VALUES (107,018061,37,'trimmings','sorters','reporters','');
-INSERT INTO t3 VALUES (108,018101,37,'tragedies','Conley','Dutchman','FAS');
-INSERT INTO t3 VALUES (109,018102,37,'skulking','lectured','descendants','FAS');
-INSERT INTO t3 VALUES (110,018103,37,'flint','Abraham','groupings','FAS');
-INSERT INTO t3 VALUES (111,018104,37,'flopping','Hawaii','dissociate','');
-INSERT INTO t3 VALUES (112,018201,37,'relaxing','cage','coexist','W');
-INSERT INTO t3 VALUES (113,018202,37,'offload','hushes','Beebe','');
-INSERT INTO t3 VALUES (114,018402,37,'suites','Simla','Taoism','');
-INSERT INTO t3 VALUES (115,018403,37,'lists','reporters','Connally','');
-INSERT INTO t3 VALUES (116,018404,37,'animized','Dutchman','fetched','FAS');
-INSERT INTO t3 VALUES (117,018405,37,'multilayer','descendants','checkpoints','FAS');
-INSERT INTO t3 VALUES (118,018406,37,'standardizes','groupings','rusting','');
-INSERT INTO t3 VALUES (119,018409,37,'Judas','dissociate','galling','');
-INSERT INTO t3 VALUES (120,018601,37,'vacuuming','coexist','obliterates','');
-INSERT INTO t3 VALUES (121,018602,37,'dentally','Beebe','traitor','');
-INSERT INTO t3 VALUES (122,018603,37,'humanness','Taoism','resumes','FAS');
-INSERT INTO t3 VALUES (123,018801,37,'inch','Connally','analyzable','FAS');
-INSERT INTO t3 VALUES (124,018802,37,'Weissmuller','fetched','terminator','FAS');
-INSERT INTO t3 VALUES (125,018803,37,'irresponsibly','checkpoints','gritty','FAS');
-INSERT INTO t3 VALUES (126,018804,37,'luckily','rusting','firearm','W');
-INSERT INTO t3 VALUES (127,018805,37,'culled','galling','minima','');
-INSERT INTO t3 VALUES (128,018806,37,'medical','obliterates','Selfridge','');
-INSERT INTO t3 VALUES (129,018807,37,'bloodbath','traitor','disable','');
-INSERT INTO t3 VALUES (130,018808,37,'subschema','resumes','witchcraft','W');
-INSERT INTO t3 VALUES (131,018809,37,'animals','analyzable','betroth','W');
-INSERT INTO t3 VALUES (132,018810,37,'Micronesia','terminator','Manhattanize','');
-INSERT INTO t3 VALUES (133,018811,37,'repetitions','gritty','imprint','');
-INSERT INTO t3 VALUES (134,018812,37,'Antares','firearm','peeked','');
-INSERT INTO t3 VALUES (135,019101,37,'ventilate','minima','swelling','');
-INSERT INTO t3 VALUES (136,019102,37,'pityingly','Selfridge','interrelationships','W');
-INSERT INTO t3 VALUES (137,019103,37,'interdependent','disable','riser','');
-INSERT INTO t3 VALUES (138,019201,37,'Graves','witchcraft','Gandhian','W');
-INSERT INTO t3 VALUES (139,030501,37,'neonatal','betroth','peacock','A');
-INSERT INTO t3 VALUES (140,030502,50,'scribbled','Manhattanize','bee','A');
-INSERT INTO t3 VALUES (141,030503,37,'chafe','imprint','kanji','');
-INSERT INTO t3 VALUES (142,030504,37,'honoring','peeked','dental','');
-INSERT INTO t3 VALUES (143,031901,37,'realtor','swelling','scarf','FAS');
-INSERT INTO t3 VALUES (144,036001,37,'elite','interrelationships','chasm','A');
-INSERT INTO t3 VALUES (145,036002,37,'funereal','riser','insolence','A');
-INSERT INTO t3 VALUES (146,036004,37,'abrogating','Gandhian','syndicate','');
-INSERT INTO t3 VALUES (147,036005,37,'sorters','peacock','alike','');
-INSERT INTO t3 VALUES (148,038001,37,'Conley','bee','imperial','A');
-INSERT INTO t3 VALUES (149,038002,37,'lectured','kanji','convulsion','A');
-INSERT INTO t3 VALUES (150,038003,37,'Abraham','dental','railway','A');
-INSERT INTO t3 VALUES (151,038004,37,'Hawaii','scarf','validate','A');
-INSERT INTO t3 VALUES (152,038005,37,'cage','chasm','normalizes','A');
-INSERT INTO t3 VALUES (153,038006,37,'hushes','insolence','comprehensive','');
-INSERT INTO t3 VALUES (154,038007,37,'Simla','syndicate','chewing','');
-INSERT INTO t3 VALUES (155,038008,37,'reporters','alike','denizen','');
-INSERT INTO t3 VALUES (156,038009,37,'Dutchman','imperial','schemer','');
-INSERT INTO t3 VALUES (157,038010,37,'descendants','convulsion','chronicle','');
-INSERT INTO t3 VALUES (158,038011,37,'groupings','railway','Kline','');
-INSERT INTO t3 VALUES (159,038012,37,'dissociate','validate','Anatole','');
-INSERT INTO t3 VALUES (160,038013,37,'coexist','normalizes','partridges','');
-INSERT INTO t3 VALUES (161,038014,37,'Beebe','comprehensive','brunch','');
-INSERT INTO t3 VALUES (162,038015,37,'Taoism','chewing','recruited','');
-INSERT INTO t3 VALUES (163,038016,37,'Connally','denizen','dimensions','W');
-INSERT INTO t3 VALUES (164,038017,37,'fetched','schemer','Chicana','W');
-INSERT INTO t3 VALUES (165,038018,37,'checkpoints','chronicle','announced','');
-INSERT INTO t3 VALUES (166,038101,37,'rusting','Kline','praised','FAS');
-INSERT INTO t3 VALUES (167,038102,37,'galling','Anatole','employing','');
-INSERT INTO t3 VALUES (168,038103,37,'obliterates','partridges','linear','');
-INSERT INTO t3 VALUES (169,038104,37,'traitor','brunch','quagmire','');
-INSERT INTO t3 VALUES (170,038201,37,'resumes','recruited','western','A');
-INSERT INTO t3 VALUES (171,038202,37,'analyzable','dimensions','relishing','');
-INSERT INTO t3 VALUES (172,038203,37,'terminator','Chicana','serving','A');
-INSERT INTO t3 VALUES (173,038204,37,'gritty','announced','scheduling','');
-INSERT INTO t3 VALUES (174,038205,37,'firearm','praised','lore','');
-INSERT INTO t3 VALUES (175,038206,37,'minima','employing','eventful','');
-INSERT INTO t3 VALUES (176,038208,37,'Selfridge','linear','arteriole','A');
-INSERT INTO t3 VALUES (177,042801,37,'disable','quagmire','disentangle','');
-INSERT INTO t3 VALUES (178,042802,37,'witchcraft','western','cured','A');
-INSERT INTO t3 VALUES (179,046101,37,'betroth','relishing','Fenton','W');
-INSERT INTO t3 VALUES (180,048001,37,'Manhattanize','serving','avoidable','A');
-INSERT INTO t3 VALUES (181,048002,37,'imprint','scheduling','drains','A');
-INSERT INTO t3 VALUES (182,048003,37,'peeked','lore','detectably','FAS');
-INSERT INTO t3 VALUES (183,048004,37,'swelling','eventful','husky','');
-INSERT INTO t3 VALUES (184,048005,37,'interrelationships','arteriole','impelling','');
-INSERT INTO t3 VALUES (185,048006,37,'riser','disentangle','undoes','');
-INSERT INTO t3 VALUES (186,048007,37,'Gandhian','cured','evened','');
-INSERT INTO t3 VALUES (187,048008,37,'peacock','Fenton','squeezes','');
-INSERT INTO t3 VALUES (188,048101,37,'bee','avoidable','destroyer','FAS');
-INSERT INTO t3 VALUES (189,048102,37,'kanji','drains','rudeness','');
-INSERT INTO t3 VALUES (190,048201,37,'dental','detectably','beaner','FAS');
-INSERT INTO t3 VALUES (191,048202,37,'scarf','husky','boorish','');
-INSERT INTO t3 VALUES (192,048203,37,'chasm','impelling','Everhart','');
-INSERT INTO t3 VALUES (193,048204,37,'insolence','undoes','encompass','A');
-INSERT INTO t3 VALUES (194,048205,37,'syndicate','evened','mushrooms','');
-INSERT INTO t3 VALUES (195,048301,37,'alike','squeezes','Alison','A');
-INSERT INTO t3 VALUES (196,048302,37,'imperial','destroyer','externally','FAS');
-INSERT INTO t3 VALUES (197,048303,37,'convulsion','rudeness','pellagra','');
-INSERT INTO t3 VALUES (198,048304,37,'railway','beaner','cult','');
-INSERT INTO t3 VALUES (199,048305,37,'validate','boorish','creek','A');
-INSERT INTO t3 VALUES (200,048401,37,'normalizes','Everhart','Huffman','');
-INSERT INTO t3 VALUES (201,048402,37,'comprehensive','encompass','Majorca','FAS');
-INSERT INTO t3 VALUES (202,048403,37,'chewing','mushrooms','governing','A');
-INSERT INTO t3 VALUES (203,048404,37,'denizen','Alison','gadfly','FAS');
-INSERT INTO t3 VALUES (204,048405,37,'schemer','externally','reassigned','FAS');
-INSERT INTO t3 VALUES (205,048406,37,'chronicle','pellagra','intentness','W');
-INSERT INTO t3 VALUES (206,048407,37,'Kline','cult','craziness','');
-INSERT INTO t3 VALUES (207,048408,37,'Anatole','creek','psychic','');
-INSERT INTO t3 VALUES (208,048409,37,'partridges','Huffman','squabbled','');
-INSERT INTO t3 VALUES (209,048410,37,'brunch','Majorca','burlesque','');
-INSERT INTO t3 VALUES (210,048411,37,'recruited','governing','capped','');
-INSERT INTO t3 VALUES (211,048412,37,'dimensions','gadfly','extracted','A');
-INSERT INTO t3 VALUES (212,048413,37,'Chicana','reassigned','DiMaggio','');
-INSERT INTO t3 VALUES (213,048601,37,'announced','intentness','exclamation','FAS');
-INSERT INTO t3 VALUES (214,048602,37,'praised','craziness','subdirectory','');
-INSERT INTO t3 VALUES (215,048603,37,'employing','psychic','fangs','');
-INSERT INTO t3 VALUES (216,048604,37,'linear','squabbled','buyer','A');
-INSERT INTO t3 VALUES (217,048801,37,'quagmire','burlesque','pithing','A');
-INSERT INTO t3 VALUES (218,050901,37,'western','capped','transistorizing','A');
-INSERT INTO t3 VALUES (219,051201,37,'relishing','extracted','nonbiodegradable','');
-INSERT INTO t3 VALUES (220,056002,37,'serving','DiMaggio','dislocate','');
-INSERT INTO t3 VALUES (221,056003,37,'scheduling','exclamation','monochromatic','FAS');
-INSERT INTO t3 VALUES (222,056004,37,'lore','subdirectory','batting','');
-INSERT INTO t3 VALUES (223,056102,37,'eventful','fangs','postcondition','A');
-INSERT INTO t3 VALUES (224,056203,37,'arteriole','buyer','catalog','FAS');
-INSERT INTO t3 VALUES (225,056204,37,'disentangle','pithing','Remus','');
-INSERT INTO t3 VALUES (226,058003,37,'cured','transistorizing','devices','A');
-INSERT INTO t3 VALUES (227,058004,37,'Fenton','nonbiodegradable','bike','A');
-INSERT INTO t3 VALUES (228,058005,37,'avoidable','dislocate','qualify','');
-INSERT INTO t3 VALUES (229,058006,37,'drains','monochromatic','detained','');
-INSERT INTO t3 VALUES (230,058007,37,'detectably','batting','commended','');
-INSERT INTO t3 VALUES (231,058101,37,'husky','postcondition','civilize','');
-INSERT INTO t3 VALUES (232,058102,37,'impelling','catalog','Elmhurst','');
-INSERT INTO t3 VALUES (233,058103,37,'undoes','Remus','anesthetizing','');
-INSERT INTO t3 VALUES (234,058105,37,'evened','devices','deaf','');
-INSERT INTO t3 VALUES (235,058111,37,'squeezes','bike','Brigham','');
-INSERT INTO t3 VALUES (236,058112,37,'destroyer','qualify','title','');
-INSERT INTO t3 VALUES (237,058113,37,'rudeness','detained','coarse','');
-INSERT INTO t3 VALUES (238,058114,37,'beaner','commended','combinations','');
-INSERT INTO t3 VALUES (239,058115,37,'boorish','civilize','grayness','');
-INSERT INTO t3 VALUES (240,058116,37,'Everhart','Elmhurst','innumerable','FAS');
-INSERT INTO t3 VALUES (241,058117,37,'encompass','anesthetizing','Caroline','A');
-INSERT INTO t3 VALUES (242,058118,37,'mushrooms','deaf','fatty','FAS');
-INSERT INTO t3 VALUES (243,058119,37,'Alison','Brigham','eastbound','');
-INSERT INTO t3 VALUES (244,058120,37,'externally','title','inexperienced','');
-INSERT INTO t3 VALUES (245,058121,37,'pellagra','coarse','hoarder','A');
-INSERT INTO t3 VALUES (246,058122,37,'cult','combinations','scotch','W');
-INSERT INTO t3 VALUES (247,058123,37,'creek','grayness','passport','A');
-INSERT INTO t3 VALUES (248,058124,37,'Huffman','innumerable','strategic','FAS');
-INSERT INTO t3 VALUES (249,058125,37,'Majorca','Caroline','gated','');
-INSERT INTO t3 VALUES (250,058126,37,'governing','fatty','flog','');
-INSERT INTO t3 VALUES (251,058127,37,'gadfly','eastbound','Pipestone','');
-INSERT INTO t3 VALUES (252,058128,37,'reassigned','inexperienced','Dar','');
-INSERT INTO t3 VALUES (253,058201,37,'intentness','hoarder','Corcoran','');
-INSERT INTO t3 VALUES (254,058202,37,'craziness','scotch','flyers','A');
-INSERT INTO t3 VALUES (255,058303,37,'psychic','passport','competitions','W');
-INSERT INTO t3 VALUES (256,058304,37,'squabbled','strategic','suppliers','FAS');
-INSERT INTO t3 VALUES (257,058602,37,'burlesque','gated','skips','');
-INSERT INTO t3 VALUES (258,058603,37,'capped','flog','institutes','');
-INSERT INTO t3 VALUES (259,058604,37,'extracted','Pipestone','troop','A');
-INSERT INTO t3 VALUES (260,058605,37,'DiMaggio','Dar','connective','W');
-INSERT INTO t3 VALUES (261,058606,37,'exclamation','Corcoran','denies','');
-INSERT INTO t3 VALUES (262,058607,37,'subdirectory','flyers','polka','');
-INSERT INTO t3 VALUES (263,060401,36,'fangs','competitions','observations','FAS');
-INSERT INTO t3 VALUES (264,061701,36,'buyer','suppliers','askers','');
-INSERT INTO t3 VALUES (265,066201,36,'pithing','skips','homeless','FAS');
-INSERT INTO t3 VALUES (266,066501,36,'transistorizing','institutes','Anna','');
-INSERT INTO t3 VALUES (267,068001,36,'nonbiodegradable','troop','subdirectories','W');
-INSERT INTO t3 VALUES (268,068002,36,'dislocate','connective','decaying','FAS');
-INSERT INTO t3 VALUES (269,068005,36,'monochromatic','denies','outwitting','W');
-INSERT INTO t3 VALUES (270,068006,36,'batting','polka','Harpy','W');
-INSERT INTO t3 VALUES (271,068007,36,'postcondition','observations','crazed','');
-INSERT INTO t3 VALUES (272,068008,36,'catalog','askers','suffocate','');
-INSERT INTO t3 VALUES (273,068009,36,'Remus','homeless','provers','FAS');
-INSERT INTO t3 VALUES (274,068010,36,'devices','Anna','technically','');
-INSERT INTO t3 VALUES (275,068011,36,'bike','subdirectories','Franklinizations','');
-INSERT INTO t3 VALUES (276,068202,36,'qualify','decaying','considered','');
-INSERT INTO t3 VALUES (277,068302,36,'detained','outwitting','tinnily','');
-INSERT INTO t3 VALUES (278,068303,36,'commended','Harpy','uninterruptedly','');
-INSERT INTO t3 VALUES (279,068401,36,'civilize','crazed','whistled','A');
-INSERT INTO t3 VALUES (280,068501,36,'Elmhurst','suffocate','automate','');
-INSERT INTO t3 VALUES (281,068502,36,'anesthetizing','provers','gutting','W');
-INSERT INTO t3 VALUES (282,068503,36,'deaf','technically','surreptitious','');
-INSERT INTO t3 VALUES (283,068602,36,'Brigham','Franklinizations','Choctaw','');
-INSERT INTO t3 VALUES (284,068603,36,'title','considered','cooks','');
-INSERT INTO t3 VALUES (285,068701,36,'coarse','tinnily','millivolt','FAS');
-INSERT INTO t3 VALUES (286,068702,36,'combinations','uninterruptedly','counterpoise','');
-INSERT INTO t3 VALUES (287,068703,36,'grayness','whistled','Gothicism','');
-INSERT INTO t3 VALUES (288,076001,36,'innumerable','automate','feminine','');
-INSERT INTO t3 VALUES (289,076002,36,'Caroline','gutting','metaphysically','W');
-INSERT INTO t3 VALUES (290,076101,36,'fatty','surreptitious','sanding','A');
-INSERT INTO t3 VALUES (291,076102,36,'eastbound','Choctaw','contributorily','');
-INSERT INTO t3 VALUES (292,076103,36,'inexperienced','cooks','receivers','FAS');
-INSERT INTO t3 VALUES (293,076302,36,'hoarder','millivolt','adjourn','');
-INSERT INTO t3 VALUES (294,076303,36,'scotch','counterpoise','straggled','A');
-INSERT INTO t3 VALUES (295,076304,36,'passport','Gothicism','druggists','');
-INSERT INTO t3 VALUES (296,076305,36,'strategic','feminine','thanking','FAS');
-INSERT INTO t3 VALUES (297,076306,36,'gated','metaphysically','ostrich','');
-INSERT INTO t3 VALUES (298,076307,36,'flog','sanding','hopelessness','FAS');
-INSERT INTO t3 VALUES (299,076402,36,'Pipestone','contributorily','Eurydice','');
-INSERT INTO t3 VALUES (300,076501,36,'Dar','receivers','excitation','W');
-INSERT INTO t3 VALUES (301,076502,36,'Corcoran','adjourn','presumes','FAS');
-INSERT INTO t3 VALUES (302,076701,36,'flyers','straggled','imaginable','FAS');
-INSERT INTO t3 VALUES (303,078001,36,'competitions','druggists','concoct','W');
-INSERT INTO t3 VALUES (304,078002,36,'suppliers','thanking','peering','W');
-INSERT INTO t3 VALUES (305,078003,36,'skips','ostrich','Phelps','FAS');
-INSERT INTO t3 VALUES (306,078004,36,'institutes','hopelessness','ferociousness','FAS');
-INSERT INTO t3 VALUES (307,078005,36,'troop','Eurydice','sentences','');
-INSERT INTO t3 VALUES (308,078006,36,'connective','excitation','unlocks','');
-INSERT INTO t3 VALUES (309,078007,36,'denies','presumes','engrossing','W');
-INSERT INTO t3 VALUES (310,078008,36,'polka','imaginable','Ruth','');
-INSERT INTO t3 VALUES (311,078101,36,'observations','concoct','tying','');
-INSERT INTO t3 VALUES (312,078103,36,'askers','peering','exclaimers','');
-INSERT INTO t3 VALUES (313,078104,36,'homeless','Phelps','synergy','');
-INSERT INTO t3 VALUES (314,078105,36,'Anna','ferociousness','Huey','W');
-INSERT INTO t3 VALUES (315,082101,36,'subdirectories','sentences','merging','');
-INSERT INTO t3 VALUES (316,083401,36,'decaying','unlocks','judges','A');
-INSERT INTO t3 VALUES (317,084001,36,'outwitting','engrossing','Shylock','W');
-INSERT INTO t3 VALUES (318,084002,36,'Harpy','Ruth','Miltonism','');
-INSERT INTO t3 VALUES (319,086001,36,'crazed','tying','hen','W');
-INSERT INTO t3 VALUES (320,086102,36,'suffocate','exclaimers','honeybee','FAS');
-INSERT INTO t3 VALUES (321,086201,36,'provers','synergy','towers','');
-INSERT INTO t3 VALUES (322,088001,36,'technically','Huey','dilutes','W');
-INSERT INTO t3 VALUES (323,088002,36,'Franklinizations','merging','numerals','FAS');
-INSERT INTO t3 VALUES (324,088003,36,'considered','judges','democracy','FAS');
-INSERT INTO t3 VALUES (325,088004,36,'tinnily','Shylock','Ibero-','');
-INSERT INTO t3 VALUES (326,088101,36,'uninterruptedly','Miltonism','invalids','');
-INSERT INTO t3 VALUES (327,088102,36,'whistled','hen','behavior','');
-INSERT INTO t3 VALUES (328,088103,36,'automate','honeybee','accruing','');
-INSERT INTO t3 VALUES (329,088104,36,'gutting','towers','relics','A');
-INSERT INTO t3 VALUES (330,088105,36,'surreptitious','dilutes','rackets','');
-INSERT INTO t3 VALUES (331,088106,36,'Choctaw','numerals','Fischbein','W');
-INSERT INTO t3 VALUES (332,088201,36,'cooks','democracy','phony','W');
-INSERT INTO t3 VALUES (333,088203,36,'millivolt','Ibero-','cross','FAS');
-INSERT INTO t3 VALUES (334,088204,36,'counterpoise','invalids','cleanup','');
-INSERT INTO t3 VALUES (335,088302,37,'Gothicism','behavior','conspirator','');
-INSERT INTO t3 VALUES (336,088303,37,'feminine','accruing','label','FAS');
-INSERT INTO t3 VALUES (337,088305,37,'metaphysically','relics','university','');
-INSERT INTO t3 VALUES (338,088402,37,'sanding','rackets','cleansed','FAS');
-INSERT INTO t3 VALUES (339,088501,36,'contributorily','Fischbein','ballgown','');
-INSERT INTO t3 VALUES (340,088502,36,'receivers','phony','starlet','');
-INSERT INTO t3 VALUES (341,088503,36,'adjourn','cross','aqueous','');
-INSERT INTO t3 VALUES (342,098001,58,'straggled','cleanup','portrayal','A');
-INSERT INTO t3 VALUES (343,098002,58,'druggists','conspirator','despising','W');
-INSERT INTO t3 VALUES (344,098003,58,'thanking','label','distort','W');
-INSERT INTO t3 VALUES (345,098004,58,'ostrich','university','palmed','');
-INSERT INTO t3 VALUES (346,098005,58,'hopelessness','cleansed','faced','');
-INSERT INTO t3 VALUES (347,098006,58,'Eurydice','ballgown','silverware','');
-INSERT INTO t3 VALUES (348,141903,29,'excitation','starlet','assessor','');
-INSERT INTO t3 VALUES (349,098008,58,'presumes','aqueous','spiders','');
-INSERT INTO t3 VALUES (350,098009,58,'imaginable','portrayal','artificially','');
-INSERT INTO t3 VALUES (351,098010,58,'concoct','despising','reminiscence','');
-INSERT INTO t3 VALUES (352,098011,58,'peering','distort','Mexican','');
-INSERT INTO t3 VALUES (353,098012,58,'Phelps','palmed','obnoxious','');
-INSERT INTO t3 VALUES (354,098013,58,'ferociousness','faced','fragile','');
-INSERT INTO t3 VALUES (355,098014,58,'sentences','silverware','apprehensible','');
-INSERT INTO t3 VALUES (356,098015,58,'unlocks','assessor','births','');
-INSERT INTO t3 VALUES (357,098016,58,'engrossing','spiders','garages','');
-INSERT INTO t3 VALUES (358,098017,58,'Ruth','artificially','panty','');
-INSERT INTO t3 VALUES (359,098018,58,'tying','reminiscence','anteater','');
-INSERT INTO t3 VALUES (360,098019,58,'exclaimers','Mexican','displacement','A');
-INSERT INTO t3 VALUES (361,098020,58,'synergy','obnoxious','drovers','A');
-INSERT INTO t3 VALUES (362,098021,58,'Huey','fragile','patenting','A');
-INSERT INTO t3 VALUES (363,098022,58,'merging','apprehensible','far','A');
-INSERT INTO t3 VALUES (364,098023,58,'judges','births','shrieks','');
-INSERT INTO t3 VALUES (365,098024,58,'Shylock','garages','aligning','W');
-INSERT INTO t3 VALUES (366,098025,37,'Miltonism','panty','pragmatism','');
-INSERT INTO t3 VALUES (367,106001,36,'hen','anteater','fevers','W');
-INSERT INTO t3 VALUES (368,108001,36,'honeybee','displacement','reexamines','A');
-INSERT INTO t3 VALUES (369,108002,36,'towers','drovers','occupancies','');
-INSERT INTO t3 VALUES (370,108003,36,'dilutes','patenting','sweats','FAS');
-INSERT INTO t3 VALUES (371,108004,36,'numerals','far','modulators','');
-INSERT INTO t3 VALUES (372,108005,36,'democracy','shrieks','demand','W');
-INSERT INTO t3 VALUES (373,108007,36,'Ibero-','aligning','Madeira','');
-INSERT INTO t3 VALUES (374,108008,36,'invalids','pragmatism','Viennese','W');
-INSERT INTO t3 VALUES (375,108009,36,'behavior','fevers','chillier','W');
-INSERT INTO t3 VALUES (376,108010,36,'accruing','reexamines','wildcats','FAS');
-INSERT INTO t3 VALUES (377,108011,36,'relics','occupancies','gentle','');
-INSERT INTO t3 VALUES (378,108012,36,'rackets','sweats','Angles','W');
-INSERT INTO t3 VALUES (379,108101,36,'Fischbein','modulators','accuracies','');
-INSERT INTO t3 VALUES (380,108102,36,'phony','demand','toggle','');
-INSERT INTO t3 VALUES (381,108103,36,'cross','Madeira','Mendelssohn','W');
-INSERT INTO t3 VALUES (382,108111,50,'cleanup','Viennese','behaviorally','');
-INSERT INTO t3 VALUES (383,108105,36,'conspirator','chillier','Rochford','');
-INSERT INTO t3 VALUES (384,108106,36,'label','wildcats','mirror','W');
-INSERT INTO t3 VALUES (385,108107,36,'university','gentle','Modula','');
-INSERT INTO t3 VALUES (386,108108,50,'cleansed','Angles','clobbering','');
-INSERT INTO t3 VALUES (387,108109,36,'ballgown','accuracies','chronography','');
-INSERT INTO t3 VALUES (388,108110,36,'starlet','toggle','Eskimoizeds','');
-INSERT INTO t3 VALUES (389,108201,36,'aqueous','Mendelssohn','British','W');
-INSERT INTO t3 VALUES (390,108202,36,'portrayal','behaviorally','pitfalls','');
-INSERT INTO t3 VALUES (391,108203,36,'despising','Rochford','verify','W');
-INSERT INTO t3 VALUES (392,108204,36,'distort','mirror','scatter','FAS');
-INSERT INTO t3 VALUES (393,108205,36,'palmed','Modula','Aztecan','');
-INSERT INTO t3 VALUES (394,108301,36,'faced','clobbering','acuity','W');
-INSERT INTO t3 VALUES (395,108302,36,'silverware','chronography','sinking','W');
-INSERT INTO t3 VALUES (396,112101,36,'assessor','Eskimoizeds','beasts','FAS');
-INSERT INTO t3 VALUES (397,112102,36,'spiders','British','Witt','W');
-INSERT INTO t3 VALUES (398,113701,36,'artificially','pitfalls','physicists','FAS');
-INSERT INTO t3 VALUES (399,116001,36,'reminiscence','verify','folksong','A');
-INSERT INTO t3 VALUES (400,116201,36,'Mexican','scatter','strokes','FAS');
-INSERT INTO t3 VALUES (401,116301,36,'obnoxious','Aztecan','crowder','');
-INSERT INTO t3 VALUES (402,116302,36,'fragile','acuity','merry','');
-INSERT INTO t3 VALUES (403,116601,36,'apprehensible','sinking','cadenced','');
-INSERT INTO t3 VALUES (404,116602,36,'births','beasts','alimony','A');
-INSERT INTO t3 VALUES (405,116603,36,'garages','Witt','principled','A');
-INSERT INTO t3 VALUES (406,116701,36,'panty','physicists','golfing','');
-INSERT INTO t3 VALUES (407,116702,36,'anteater','folksong','undiscovered','');
-INSERT INTO t3 VALUES (408,118001,36,'displacement','strokes','irritates','');
-INSERT INTO t3 VALUES (409,118002,36,'drovers','crowder','patriots','A');
-INSERT INTO t3 VALUES (410,118003,36,'patenting','merry','rooms','FAS');
-INSERT INTO t3 VALUES (411,118004,36,'far','cadenced','towering','W');
-INSERT INTO t3 VALUES (412,118005,36,'shrieks','alimony','displease','');
-INSERT INTO t3 VALUES (413,118006,36,'aligning','principled','photosensitive','');
-INSERT INTO t3 VALUES (414,118007,36,'pragmatism','golfing','inking','');
-INSERT INTO t3 VALUES (415,118008,36,'fevers','undiscovered','gainers','');
-INSERT INTO t3 VALUES (416,118101,36,'reexamines','irritates','leaning','A');
-INSERT INTO t3 VALUES (417,118102,36,'occupancies','patriots','hydrant','A');
-INSERT INTO t3 VALUES (418,118103,36,'sweats','rooms','preserve','');
-INSERT INTO t3 VALUES (419,118202,36,'modulators','towering','blinded','A');
-INSERT INTO t3 VALUES (420,118203,36,'demand','displease','interactions','A');
-INSERT INTO t3 VALUES (421,118204,36,'Madeira','photosensitive','Barry','');
-INSERT INTO t3 VALUES (422,118302,36,'Viennese','inking','whiteness','A');
-INSERT INTO t3 VALUES (423,118304,36,'chillier','gainers','pastimes','W');
-INSERT INTO t3 VALUES (424,118305,36,'wildcats','leaning','Edenization','');
-INSERT INTO t3 VALUES (425,118306,36,'gentle','hydrant','Muscat','');
-INSERT INTO t3 VALUES (426,118307,36,'Angles','preserve','assassinated','');
-INSERT INTO t3 VALUES (427,123101,36,'accuracies','blinded','labeled','');
-INSERT INTO t3 VALUES (428,123102,36,'toggle','interactions','glacial','A');
-INSERT INTO t3 VALUES (429,123301,36,'Mendelssohn','Barry','implied','W');
-INSERT INTO t3 VALUES (430,126001,36,'behaviorally','whiteness','bibliographies','W');
-INSERT INTO t3 VALUES (431,126002,36,'Rochford','pastimes','Buchanan','');
-INSERT INTO t3 VALUES (432,126003,36,'mirror','Edenization','forgivably','FAS');
-INSERT INTO t3 VALUES (433,126101,36,'Modula','Muscat','innuendo','A');
-INSERT INTO t3 VALUES (434,126301,36,'clobbering','assassinated','den','FAS');
-INSERT INTO t3 VALUES (435,126302,36,'chronography','labeled','submarines','W');
-INSERT INTO t3 VALUES (436,126402,36,'Eskimoizeds','glacial','mouthful','A');
-INSERT INTO t3 VALUES (437,126601,36,'British','implied','expiring','');
-INSERT INTO t3 VALUES (438,126602,36,'pitfalls','bibliographies','unfulfilled','FAS');
-INSERT INTO t3 VALUES (439,126702,36,'verify','Buchanan','precession','');
-INSERT INTO t3 VALUES (440,128001,36,'scatter','forgivably','nullified','');
-INSERT INTO t3 VALUES (441,128002,36,'Aztecan','innuendo','affects','');
-INSERT INTO t3 VALUES (442,128003,36,'acuity','den','Cynthia','');
-INSERT INTO t3 VALUES (443,128004,36,'sinking','submarines','Chablis','A');
-INSERT INTO t3 VALUES (444,128005,36,'beasts','mouthful','betterments','FAS');
-INSERT INTO t3 VALUES (445,128007,36,'Witt','expiring','advertising','');
-INSERT INTO t3 VALUES (446,128008,36,'physicists','unfulfilled','rubies','A');
-INSERT INTO t3 VALUES (447,128009,36,'folksong','precession','southwest','FAS');
-INSERT INTO t3 VALUES (448,128010,36,'strokes','nullified','superstitious','A');
-INSERT INTO t3 VALUES (449,128011,36,'crowder','affects','tabernacle','W');
-INSERT INTO t3 VALUES (450,128012,36,'merry','Cynthia','silk','A');
-INSERT INTO t3 VALUES (451,128013,36,'cadenced','Chablis','handsomest','A');
-INSERT INTO t3 VALUES (452,128014,36,'alimony','betterments','Persian','A');
-INSERT INTO t3 VALUES (453,128015,36,'principled','advertising','analog','W');
-INSERT INTO t3 VALUES (454,128016,36,'golfing','rubies','complex','W');
-INSERT INTO t3 VALUES (455,128017,36,'undiscovered','southwest','Taoist','');
-INSERT INTO t3 VALUES (456,128018,36,'irritates','superstitious','suspend','');
-INSERT INTO t3 VALUES (457,128019,36,'patriots','tabernacle','relegated','');
-INSERT INTO t3 VALUES (458,128020,36,'rooms','silk','awesome','W');
-INSERT INTO t3 VALUES (459,128021,36,'towering','handsomest','Bruxelles','');
-INSERT INTO t3 VALUES (460,128022,36,'displease','Persian','imprecisely','A');
-INSERT INTO t3 VALUES (461,128023,36,'photosensitive','analog','televise','');
-INSERT INTO t3 VALUES (462,128101,36,'inking','complex','braking','');
-INSERT INTO t3 VALUES (463,128102,36,'gainers','Taoist','true','FAS');
-INSERT INTO t3 VALUES (464,128103,36,'leaning','suspend','disappointing','FAS');
-INSERT INTO t3 VALUES (465,128104,36,'hydrant','relegated','navally','W');
-INSERT INTO t3 VALUES (466,128106,36,'preserve','awesome','circus','');
-INSERT INTO t3 VALUES (467,128107,36,'blinded','Bruxelles','beetles','');
-INSERT INTO t3 VALUES (468,128108,36,'interactions','imprecisely','trumps','');
-INSERT INTO t3 VALUES (469,128202,36,'Barry','televise','fourscore','W');
-INSERT INTO t3 VALUES (470,128203,36,'whiteness','braking','Blackfoots','');
-INSERT INTO t3 VALUES (471,128301,36,'pastimes','true','Grady','');
-INSERT INTO t3 VALUES (472,128302,36,'Edenization','disappointing','quiets','FAS');
-INSERT INTO t3 VALUES (473,128303,36,'Muscat','navally','floundered','FAS');
-INSERT INTO t3 VALUES (474,128304,36,'assassinated','circus','profundity','W');
-INSERT INTO t3 VALUES (475,128305,36,'labeled','beetles','Garrisonian','W');
-INSERT INTO t3 VALUES (476,128307,36,'glacial','trumps','Strauss','');
-INSERT INTO t3 VALUES (477,128401,36,'implied','fourscore','cemented','FAS');
-INSERT INTO t3 VALUES (478,128502,36,'bibliographies','Blackfoots','contrition','A');
-INSERT INTO t3 VALUES (479,128503,36,'Buchanan','Grady','mutations','');
-INSERT INTO t3 VALUES (480,128504,36,'forgivably','quiets','exhibits','W');
-INSERT INTO t3 VALUES (481,128505,36,'innuendo','floundered','tits','');
-INSERT INTO t3 VALUES (482,128601,36,'den','profundity','mate','A');
-INSERT INTO t3 VALUES (483,128603,36,'submarines','Garrisonian','arches','');
-INSERT INTO t3 VALUES (484,128604,36,'mouthful','Strauss','Moll','');
-INSERT INTO t3 VALUES (485,128702,36,'expiring','cemented','ropers','');
-INSERT INTO t3 VALUES (486,128703,36,'unfulfilled','contrition','bombast','');
-INSERT INTO t3 VALUES (487,128704,36,'precession','mutations','difficultly','A');
-INSERT INTO t3 VALUES (488,138001,36,'nullified','exhibits','adsorption','');
-INSERT INTO t3 VALUES (489,138002,36,'affects','tits','definiteness','FAS');
-INSERT INTO t3 VALUES (490,138003,36,'Cynthia','mate','cultivation','A');
-INSERT INTO t3 VALUES (491,138004,36,'Chablis','arches','heals','A');
-INSERT INTO t3 VALUES (492,138005,36,'betterments','Moll','Heusen','W');
-INSERT INTO t3 VALUES (493,138006,36,'advertising','ropers','target','FAS');
-INSERT INTO t3 VALUES (494,138007,36,'rubies','bombast','cited','A');
-INSERT INTO t3 VALUES (495,138008,36,'southwest','difficultly','congresswoman','W');
-INSERT INTO t3 VALUES (496,138009,36,'superstitious','adsorption','Katherine','');
-INSERT INTO t3 VALUES (497,138102,36,'tabernacle','definiteness','titter','A');
-INSERT INTO t3 VALUES (498,138103,36,'silk','cultivation','aspire','A');
-INSERT INTO t3 VALUES (499,138104,36,'handsomest','heals','Mardis','');
-INSERT INTO t3 VALUES (500,138105,36,'Persian','Heusen','Nadia','W');
-INSERT INTO t3 VALUES (501,138201,36,'analog','target','estimating','FAS');
-INSERT INTO t3 VALUES (502,138302,36,'complex','cited','stuck','A');
-INSERT INTO t3 VALUES (503,138303,36,'Taoist','congresswoman','fifteenth','A');
-INSERT INTO t3 VALUES (504,138304,36,'suspend','Katherine','Colombo','');
-INSERT INTO t3 VALUES (505,138401,29,'relegated','titter','survey','A');
-INSERT INTO t3 VALUES (506,140102,29,'awesome','aspire','staffing','');
-INSERT INTO t3 VALUES (507,140103,29,'Bruxelles','Mardis','obtain','');
-INSERT INTO t3 VALUES (508,140104,29,'imprecisely','Nadia','loaded','');
-INSERT INTO t3 VALUES (509,140105,29,'televise','estimating','slaughtered','');
-INSERT INTO t3 VALUES (510,140201,29,'braking','stuck','lights','A');
-INSERT INTO t3 VALUES (511,140701,29,'true','fifteenth','circumference','');
-INSERT INTO t3 VALUES (512,141501,29,'disappointing','Colombo','dull','A');
-INSERT INTO t3 VALUES (513,141502,29,'navally','survey','weekly','A');
-INSERT INTO t3 VALUES (514,141901,29,'circus','staffing','wetness','');
-INSERT INTO t3 VALUES (515,141902,29,'beetles','obtain','visualized','');
-INSERT INTO t3 VALUES (516,142101,29,'trumps','loaded','Tannenbaum','');
-INSERT INTO t3 VALUES (517,142102,29,'fourscore','slaughtered','moribund','');
-INSERT INTO t3 VALUES (518,142103,29,'Blackfoots','lights','demultiplex','');
-INSERT INTO t3 VALUES (519,142701,29,'Grady','circumference','lockings','');
-INSERT INTO t3 VALUES (520,143001,29,'quiets','dull','thugs','FAS');
-INSERT INTO t3 VALUES (521,143501,29,'floundered','weekly','unnerves','');
-INSERT INTO t3 VALUES (522,143502,29,'profundity','wetness','abut','');
-INSERT INTO t3 VALUES (523,148001,29,'Garrisonian','visualized','Chippewa','A');
-INSERT INTO t3 VALUES (524,148002,29,'Strauss','Tannenbaum','stratifications','A');
-INSERT INTO t3 VALUES (525,148003,29,'cemented','moribund','signaled','');
-INSERT INTO t3 VALUES (526,148004,29,'contrition','demultiplex','Italianizes','A');
-INSERT INTO t3 VALUES (527,148005,29,'mutations','lockings','algorithmic','A');
-INSERT INTO t3 VALUES (528,148006,29,'exhibits','thugs','paranoid','FAS');
-INSERT INTO t3 VALUES (529,148007,29,'tits','unnerves','camping','A');
-INSERT INTO t3 VALUES (530,148009,29,'mate','abut','signifying','A');
-INSERT INTO t3 VALUES (531,148010,29,'arches','Chippewa','Patrice','W');
-INSERT INTO t3 VALUES (532,148011,29,'Moll','stratifications','search','A');
-INSERT INTO t3 VALUES (533,148012,29,'ropers','signaled','Angeles','A');
-INSERT INTO t3 VALUES (534,148013,29,'bombast','Italianizes','semblance','');
-INSERT INTO t3 VALUES (535,148023,36,'difficultly','algorithmic','taxed','');
-INSERT INTO t3 VALUES (536,148015,29,'adsorption','paranoid','Beatrice','');
-INSERT INTO t3 VALUES (537,148016,29,'definiteness','camping','retrace','');
-INSERT INTO t3 VALUES (538,148017,29,'cultivation','signifying','lockout','');
-INSERT INTO t3 VALUES (539,148018,29,'heals','Patrice','grammatic','');
-INSERT INTO t3 VALUES (540,148019,29,'Heusen','search','helmsman','');
-INSERT INTO t3 VALUES (541,148020,29,'target','Angeles','uniform','W');
-INSERT INTO t3 VALUES (542,148021,29,'cited','semblance','hamming','');
-INSERT INTO t3 VALUES (543,148022,29,'congresswoman','taxed','disobedience','');
-INSERT INTO t3 VALUES (544,148101,29,'Katherine','Beatrice','captivated','A');
-INSERT INTO t3 VALUES (545,148102,29,'titter','retrace','transferals','A');
-INSERT INTO t3 VALUES (546,148201,29,'aspire','lockout','cartographer','A');
-INSERT INTO t3 VALUES (547,148401,29,'Mardis','grammatic','aims','FAS');
-INSERT INTO t3 VALUES (548,148402,29,'Nadia','helmsman','Pakistani','');
-INSERT INTO t3 VALUES (549,148501,29,'estimating','uniform','burglarized','FAS');
-INSERT INTO t3 VALUES (550,148502,29,'stuck','hamming','saucepans','A');
-INSERT INTO t3 VALUES (551,148503,29,'fifteenth','disobedience','lacerating','A');
-INSERT INTO t3 VALUES (552,148504,29,'Colombo','captivated','corny','');
-INSERT INTO t3 VALUES (553,148601,29,'survey','transferals','megabytes','FAS');
-INSERT INTO t3 VALUES (554,148602,29,'staffing','cartographer','chancellor','');
-INSERT INTO t3 VALUES (555,150701,29,'obtain','aims','bulk','A');
-INSERT INTO t3 VALUES (556,152101,29,'loaded','Pakistani','commits','A');
-INSERT INTO t3 VALUES (557,152102,29,'slaughtered','burglarized','meson','W');
-INSERT INTO t3 VALUES (558,155202,36,'lights','saucepans','deputies','');
-INSERT INTO t3 VALUES (559,155203,29,'circumference','lacerating','northeaster','A');
-INSERT INTO t3 VALUES (560,155204,29,'dull','corny','dipole','');
-INSERT INTO t3 VALUES (561,155205,29,'weekly','megabytes','machining','0');
-INSERT INTO t3 VALUES (562,156001,29,'wetness','chancellor','therefore','');
-INSERT INTO t3 VALUES (563,156002,29,'visualized','bulk','Telefunken','');
-INSERT INTO t3 VALUES (564,156102,29,'Tannenbaum','commits','salvaging','');
-INSERT INTO t3 VALUES (565,156301,29,'moribund','meson','Corinthianizes','A');
-INSERT INTO t3 VALUES (566,156302,29,'demultiplex','deputies','restlessly','A');
-INSERT INTO t3 VALUES (567,156303,29,'lockings','northeaster','bromides','');
-INSERT INTO t3 VALUES (568,156304,29,'thugs','dipole','generalized','A');
-INSERT INTO t3 VALUES (569,156305,29,'unnerves','machining','mishaps','');
-INSERT INTO t3 VALUES (570,156306,29,'abut','therefore','quelling','');
-INSERT INTO t3 VALUES (571,156501,29,'Chippewa','Telefunken','spiritual','A');
-INSERT INTO t3 VALUES (572,158001,29,'stratifications','salvaging','beguiles','FAS');
-INSERT INTO t3 VALUES (573,158002,29,'signaled','Corinthianizes','Trobriand','FAS');
-INSERT INTO t3 VALUES (574,158101,29,'Italianizes','restlessly','fleeing','A');
-INSERT INTO t3 VALUES (575,158102,29,'algorithmic','bromides','Armour','A');
-INSERT INTO t3 VALUES (576,158103,29,'paranoid','generalized','chin','A');
-INSERT INTO t3 VALUES (577,158201,29,'camping','mishaps','provers','A');
-INSERT INTO t3 VALUES (578,158202,29,'signifying','quelling','aeronautic','A');
-INSERT INTO t3 VALUES (579,158203,29,'Patrice','spiritual','voltage','W');
-INSERT INTO t3 VALUES (580,158204,29,'search','beguiles','sash','');
-INSERT INTO t3 VALUES (581,158301,29,'Angeles','Trobriand','anaerobic','A');
-INSERT INTO t3 VALUES (582,158302,29,'semblance','fleeing','simultaneous','A');
-INSERT INTO t3 VALUES (583,158303,29,'taxed','Armour','accumulating','A');
-INSERT INTO t3 VALUES (584,158304,29,'Beatrice','chin','Medusan','A');
-INSERT INTO t3 VALUES (585,158305,29,'retrace','provers','shouted','A');
-INSERT INTO t3 VALUES (586,158306,29,'lockout','aeronautic','freakish','');
-INSERT INTO t3 VALUES (587,158501,29,'grammatic','voltage','index','FAS');
-INSERT INTO t3 VALUES (588,160301,29,'helmsman','sash','commercially','');
-INSERT INTO t3 VALUES (589,166101,50,'uniform','anaerobic','mistiness','A');
-INSERT INTO t3 VALUES (590,166102,50,'hamming','simultaneous','endpoint','');
-INSERT INTO t3 VALUES (591,168001,29,'disobedience','accumulating','straight','A');
-INSERT INTO t3 VALUES (592,168002,29,'captivated','Medusan','flurried','');
-INSERT INTO t3 VALUES (593,168003,29,'transferals','shouted','denotative','A');
-INSERT INTO t3 VALUES (594,168101,29,'cartographer','freakish','coming','FAS');
-INSERT INTO t3 VALUES (595,168102,29,'aims','index','commencements','FAS');
-INSERT INTO t3 VALUES (596,168103,29,'Pakistani','commercially','gentleman','');
-INSERT INTO t3 VALUES (597,168104,29,'burglarized','mistiness','gifted','');
-INSERT INTO t3 VALUES (598,168202,29,'saucepans','endpoint','Shanghais','');
-INSERT INTO t3 VALUES (599,168301,29,'lacerating','straight','sportswriting','A');
-INSERT INTO t3 VALUES (600,168502,29,'corny','flurried','sloping','A');
-INSERT INTO t3 VALUES (601,168503,29,'megabytes','denotative','navies','');
-INSERT INTO t3 VALUES (602,168601,29,'chancellor','coming','leaflet','A');
-INSERT INTO t3 VALUES (603,173001,40,'bulk','commencements','shooter','');
-INSERT INTO t3 VALUES (604,173701,40,'commits','gentleman','Joplin','FAS');
-INSERT INTO t3 VALUES (605,173702,40,'meson','gifted','babies','');
-INSERT INTO t3 VALUES (606,176001,40,'deputies','Shanghais','subdivision','FAS');
-INSERT INTO t3 VALUES (607,176101,40,'northeaster','sportswriting','burstiness','W');
-INSERT INTO t3 VALUES (608,176201,40,'dipole','sloping','belted','FAS');
-INSERT INTO t3 VALUES (609,176401,40,'machining','navies','assails','FAS');
-INSERT INTO t3 VALUES (610,176501,40,'therefore','leaflet','admiring','W');
-INSERT INTO t3 VALUES (611,176601,40,'Telefunken','shooter','swaying','0');
-INSERT INTO t3 VALUES (612,176602,40,'salvaging','Joplin','Goldstine','FAS');
-INSERT INTO t3 VALUES (613,176603,40,'Corinthianizes','babies','fitting','');
-INSERT INTO t3 VALUES (614,178001,40,'restlessly','subdivision','Norwalk','W');
-INSERT INTO t3 VALUES (615,178002,40,'bromides','burstiness','weakening','W');
-INSERT INTO t3 VALUES (616,178003,40,'generalized','belted','analogy','FAS');
-INSERT INTO t3 VALUES (617,178004,40,'mishaps','assails','deludes','');
-INSERT INTO t3 VALUES (618,178005,40,'quelling','admiring','cokes','');
-INSERT INTO t3 VALUES (619,178006,40,'spiritual','swaying','Clayton','');
-INSERT INTO t3 VALUES (620,178007,40,'beguiles','Goldstine','exhausts','');
-INSERT INTO t3 VALUES (621,178008,40,'Trobriand','fitting','causality','');
-INSERT INTO t3 VALUES (622,178101,40,'fleeing','Norwalk','sating','FAS');
-INSERT INTO t3 VALUES (623,178102,40,'Armour','weakening','icon','');
-INSERT INTO t3 VALUES (624,178103,40,'chin','analogy','throttles','');
-INSERT INTO t3 VALUES (625,178201,40,'provers','deludes','communicants','FAS');
-INSERT INTO t3 VALUES (626,178202,40,'aeronautic','cokes','dehydrate','FAS');
-INSERT INTO t3 VALUES (627,178301,40,'voltage','Clayton','priceless','FAS');
-INSERT INTO t3 VALUES (628,178302,40,'sash','exhausts','publicly','');
-INSERT INTO t3 VALUES (629,178401,40,'anaerobic','causality','incidentals','FAS');
-INSERT INTO t3 VALUES (630,178402,40,'simultaneous','sating','commonplace','');
-INSERT INTO t3 VALUES (631,178403,40,'accumulating','icon','mumbles','');
-INSERT INTO t3 VALUES (632,178404,40,'Medusan','throttles','furthermore','W');
-INSERT INTO t3 VALUES (633,178501,40,'shouted','communicants','cautioned','W');
-INSERT INTO t3 VALUES (634,186002,37,'freakish','dehydrate','parametrized','A');
-INSERT INTO t3 VALUES (635,186102,37,'index','priceless','registration','A');
-INSERT INTO t3 VALUES (636,186201,40,'commercially','publicly','sadly','FAS');
-INSERT INTO t3 VALUES (637,186202,40,'mistiness','incidentals','positioning','');
-INSERT INTO t3 VALUES (638,186203,40,'endpoint','commonplace','babysitting','');
-INSERT INTO t3 VALUES (639,186302,37,'straight','mumbles','eternal','A');
-INSERT INTO t3 VALUES (640,188007,37,'flurried','furthermore','hoarder','');
-INSERT INTO t3 VALUES (641,188008,37,'denotative','cautioned','congregates','');
-INSERT INTO t3 VALUES (642,188009,37,'coming','parametrized','rains','');
-INSERT INTO t3 VALUES (643,188010,37,'commencements','registration','workers','W');
-INSERT INTO t3 VALUES (644,188011,37,'gentleman','sadly','sags','A');
-INSERT INTO t3 VALUES (645,188012,37,'gifted','positioning','unplug','W');
-INSERT INTO t3 VALUES (646,188013,37,'Shanghais','babysitting','garage','A');
-INSERT INTO t3 VALUES (647,188014,37,'sportswriting','eternal','boulder','A');
-INSERT INTO t3 VALUES (648,188015,37,'sloping','hoarder','hollowly','A');
-INSERT INTO t3 VALUES (649,188016,37,'navies','congregates','specifics','');
-INSERT INTO t3 VALUES (650,188017,37,'leaflet','rains','Teresa','');
-INSERT INTO t3 VALUES (651,188102,37,'shooter','workers','Winsett','');
-INSERT INTO t3 VALUES (652,188103,37,'Joplin','sags','convenient','A');
-INSERT INTO t3 VALUES (653,188202,37,'babies','unplug','buckboards','FAS');
-INSERT INTO t3 VALUES (654,188301,40,'subdivision','garage','amenities','');
-INSERT INTO t3 VALUES (655,188302,40,'burstiness','boulder','resplendent','FAS');
-INSERT INTO t3 VALUES (656,188303,40,'belted','hollowly','priding','FAS');
-INSERT INTO t3 VALUES (657,188401,37,'assails','specifics','configurations','');
-INSERT INTO t3 VALUES (658,188402,37,'admiring','Teresa','untidiness','A');
-INSERT INTO t3 VALUES (659,188503,37,'swaying','Winsett','Brice','W');
-INSERT INTO t3 VALUES (660,188504,37,'Goldstine','convenient','sews','FAS');
-INSERT INTO t3 VALUES (661,188505,37,'fitting','buckboards','participated','');
-INSERT INTO t3 VALUES (662,190701,37,'Norwalk','amenities','Simon','FAS');
-INSERT INTO t3 VALUES (663,190703,50,'weakening','resplendent','certificates','');
-INSERT INTO t3 VALUES (664,191701,37,'analogy','priding','Fitzpatrick','');
-INSERT INTO t3 VALUES (665,191702,37,'deludes','configurations','Evanston','A');
-INSERT INTO t3 VALUES (666,191703,37,'cokes','untidiness','misted','');
-INSERT INTO t3 VALUES (667,196001,37,'Clayton','Brice','textures','A');
-INSERT INTO t3 VALUES (668,196002,37,'exhausts','sews','save','');
-INSERT INTO t3 VALUES (669,196003,37,'causality','participated','count','');
-INSERT INTO t3 VALUES (670,196101,37,'sating','Simon','rightful','A');
-INSERT INTO t3 VALUES (671,196103,37,'icon','certificates','chaperone','');
-INSERT INTO t3 VALUES (672,196104,37,'throttles','Fitzpatrick','Lizzy','A');
-INSERT INTO t3 VALUES (673,196201,37,'communicants','Evanston','clenched','A');
-INSERT INTO t3 VALUES (674,196202,37,'dehydrate','misted','effortlessly','');
-INSERT INTO t3 VALUES (675,196203,37,'priceless','textures','accessed','');
-INSERT INTO t3 VALUES (676,198001,37,'publicly','save','beaters','A');
-INSERT INTO t3 VALUES (677,198003,37,'incidentals','count','Hornblower','FAS');
-INSERT INTO t3 VALUES (678,198004,37,'commonplace','rightful','vests','A');
-INSERT INTO t3 VALUES (679,198005,37,'mumbles','chaperone','indulgences','FAS');
-INSERT INTO t3 VALUES (680,198006,37,'furthermore','Lizzy','infallibly','A');
-INSERT INTO t3 VALUES (681,198007,37,'cautioned','clenched','unwilling','FAS');
-INSERT INTO t3 VALUES (682,198008,37,'parametrized','effortlessly','excrete','FAS');
-INSERT INTO t3 VALUES (683,198009,37,'registration','accessed','spools','A');
-INSERT INTO t3 VALUES (684,198010,37,'sadly','beaters','crunches','FAS');
-INSERT INTO t3 VALUES (685,198011,37,'positioning','Hornblower','overestimating','FAS');
-INSERT INTO t3 VALUES (686,198012,37,'babysitting','vests','ineffective','');
-INSERT INTO t3 VALUES (687,198013,37,'eternal','indulgences','humiliation','A');
-INSERT INTO t3 VALUES (688,198014,37,'hoarder','infallibly','sophomore','');
-INSERT INTO t3 VALUES (689,198015,37,'congregates','unwilling','star','');
-INSERT INTO t3 VALUES (690,198017,37,'rains','excrete','rifles','');
-INSERT INTO t3 VALUES (691,198018,37,'workers','spools','dialysis','');
-INSERT INTO t3 VALUES (692,198019,37,'sags','crunches','arriving','');
-INSERT INTO t3 VALUES (693,198020,37,'unplug','overestimating','indulge','');
-INSERT INTO t3 VALUES (694,198021,37,'garage','ineffective','clockers','');
-INSERT INTO t3 VALUES (695,198022,37,'boulder','humiliation','languages','');
-INSERT INTO t3 VALUES (696,198023,50,'hollowly','sophomore','Antarctica','A');
-INSERT INTO t3 VALUES (697,198024,37,'specifics','star','percentage','');
-INSERT INTO t3 VALUES (698,198101,37,'Teresa','rifles','ceiling','A');
-INSERT INTO t3 VALUES (699,198103,37,'Winsett','dialysis','specification','');
-INSERT INTO t3 VALUES (700,198105,37,'convenient','arriving','regimented','A');
-INSERT INTO t3 VALUES (701,198106,37,'buckboards','indulge','ciphers','');
-INSERT INTO t3 VALUES (702,198201,37,'amenities','clockers','pictures','A');
-INSERT INTO t3 VALUES (703,198204,37,'resplendent','languages','serpents','A');
-INSERT INTO t3 VALUES (704,198301,53,'priding','Antarctica','allot','A');
-INSERT INTO t3 VALUES (705,198302,53,'configurations','percentage','realized','A');
-INSERT INTO t3 VALUES (706,198303,53,'untidiness','ceiling','mayoral','A');
-INSERT INTO t3 VALUES (707,198304,53,'Brice','specification','opaquely','A');
-INSERT INTO t3 VALUES (708,198401,37,'sews','regimented','hostess','FAS');
-INSERT INTO t3 VALUES (709,198402,37,'participated','ciphers','fiftieth','');
-INSERT INTO t3 VALUES (710,198403,37,'Simon','pictures','incorrectly','');
-INSERT INTO t3 VALUES (711,202101,37,'certificates','serpents','decomposition','FAS');
-INSERT INTO t3 VALUES (712,202301,37,'Fitzpatrick','allot','stranglings','');
-INSERT INTO t3 VALUES (713,202302,37,'Evanston','realized','mixture','FAS');
-INSERT INTO t3 VALUES (714,202303,37,'misted','mayoral','electroencephalography','FAS');
-INSERT INTO t3 VALUES (715,202304,37,'textures','opaquely','similarities','FAS');
-INSERT INTO t3 VALUES (716,202305,37,'save','hostess','charges','W');
-INSERT INTO t3 VALUES (717,202601,37,'count','fiftieth','freest','FAS');
-INSERT INTO t3 VALUES (718,202602,37,'rightful','incorrectly','Greenberg','FAS');
-INSERT INTO t3 VALUES (719,202605,37,'chaperone','decomposition','tinting','');
-INSERT INTO t3 VALUES (720,202606,37,'Lizzy','stranglings','expelled','W');
-INSERT INTO t3 VALUES (721,202607,37,'clenched','mixture','warm','');
-INSERT INTO t3 VALUES (722,202901,37,'effortlessly','electroencephalography','smoothed','');
-INSERT INTO t3 VALUES (723,202902,37,'accessed','similarities','deductions','FAS');
-INSERT INTO t3 VALUES (724,202903,37,'beaters','charges','Romano','W');
-INSERT INTO t3 VALUES (725,202904,37,'Hornblower','freest','bitterroot','');
-INSERT INTO t3 VALUES (726,202907,37,'vests','Greenberg','corset','');
-INSERT INTO t3 VALUES (727,202908,37,'indulgences','tinting','securing','');
-INSERT INTO t3 VALUES (728,203101,37,'infallibly','expelled','environing','FAS');
-INSERT INTO t3 VALUES (729,203103,37,'unwilling','warm','cute','');
-INSERT INTO t3 VALUES (730,203104,37,'excrete','smoothed','Crays','');
-INSERT INTO t3 VALUES (731,203105,37,'spools','deductions','heiress','FAS');
-INSERT INTO t3 VALUES (732,203401,37,'crunches','Romano','inform','FAS');
-INSERT INTO t3 VALUES (733,203402,37,'overestimating','bitterroot','avenge','');
-INSERT INTO t3 VALUES (734,203404,37,'ineffective','corset','universals','');
-INSERT INTO t3 VALUES (735,203901,37,'humiliation','securing','Kinsey','W');
-INSERT INTO t3 VALUES (736,203902,37,'sophomore','environing','ravines','FAS');
-INSERT INTO t3 VALUES (737,203903,37,'star','cute','bestseller','');
-INSERT INTO t3 VALUES (738,203906,37,'rifles','Crays','equilibrium','');
-INSERT INTO t3 VALUES (739,203907,37,'dialysis','heiress','extents','0');
-INSERT INTO t3 VALUES (740,203908,37,'arriving','inform','relatively','');
-INSERT INTO t3 VALUES (741,203909,37,'indulge','avenge','pressure','FAS');
-INSERT INTO t3 VALUES (742,206101,37,'clockers','universals','critiques','FAS');
-INSERT INTO t3 VALUES (743,206201,37,'languages','Kinsey','befouled','');
-INSERT INTO t3 VALUES (744,206202,37,'Antarctica','ravines','rightfully','FAS');
-INSERT INTO t3 VALUES (745,206203,37,'percentage','bestseller','mechanizing','FAS');
-INSERT INTO t3 VALUES (746,206206,37,'ceiling','equilibrium','Latinizes','');
-INSERT INTO t3 VALUES (747,206207,37,'specification','extents','timesharing','');
-INSERT INTO t3 VALUES (748,206208,37,'regimented','relatively','Aden','');
-INSERT INTO t3 VALUES (749,208001,37,'ciphers','pressure','embassies','');
-INSERT INTO t3 VALUES (750,208002,37,'pictures','critiques','males','FAS');
-INSERT INTO t3 VALUES (751,208003,37,'serpents','befouled','shapelessly','FAS');
-INSERT INTO t3 VALUES (752,208004,37,'allot','rightfully','genres','FAS');
-INSERT INTO t3 VALUES (753,208008,37,'realized','mechanizing','mastering','');
-INSERT INTO t3 VALUES (754,208009,37,'mayoral','Latinizes','Newtonian','');
-INSERT INTO t3 VALUES (755,208010,37,'opaquely','timesharing','finishers','FAS');
-INSERT INTO t3 VALUES (756,208011,37,'hostess','Aden','abates','');
-INSERT INTO t3 VALUES (757,208101,37,'fiftieth','embassies','teem','');
-INSERT INTO t3 VALUES (758,208102,37,'incorrectly','males','kiting','FAS');
-INSERT INTO t3 VALUES (759,208103,37,'decomposition','shapelessly','stodgy','FAS');
-INSERT INTO t3 VALUES (760,208104,37,'stranglings','genres','scalps','FAS');
-INSERT INTO t3 VALUES (761,208105,37,'mixture','mastering','feed','FAS');
-INSERT INTO t3 VALUES (762,208110,37,'electroencephalography','Newtonian','guitars','');
-INSERT INTO t3 VALUES (763,208111,37,'similarities','finishers','airships','');
-INSERT INTO t3 VALUES (764,208112,37,'charges','abates','store','');
-INSERT INTO t3 VALUES (765,208113,37,'freest','teem','denounces','');
-INSERT INTO t3 VALUES (766,208201,37,'Greenberg','kiting','Pyle','FAS');
-INSERT INTO t3 VALUES (767,208203,37,'tinting','stodgy','Saxony','');
-INSERT INTO t3 VALUES (768,208301,37,'expelled','scalps','serializations','FAS');
-INSERT INTO t3 VALUES (769,208302,37,'warm','feed','Peruvian','FAS');
-INSERT INTO t3 VALUES (770,208305,37,'smoothed','guitars','taxonomically','FAS');
-INSERT INTO t3 VALUES (771,208401,37,'deductions','airships','kingdom','A');
-INSERT INTO t3 VALUES (772,208402,37,'Romano','store','stint','A');
-INSERT INTO t3 VALUES (773,208403,37,'bitterroot','denounces','Sault','A');
-INSERT INTO t3 VALUES (774,208404,37,'corset','Pyle','faithful','');
-INSERT INTO t3 VALUES (775,208501,37,'securing','Saxony','Ganymede','FAS');
-INSERT INTO t3 VALUES (776,208502,37,'environing','serializations','tidiness','FAS');
-INSERT INTO t3 VALUES (777,208503,37,'cute','Peruvian','gainful','FAS');
-INSERT INTO t3 VALUES (778,208504,37,'Crays','taxonomically','contrary','FAS');
-INSERT INTO t3 VALUES (779,208505,37,'heiress','kingdom','Tipperary','FAS');
-INSERT INTO t3 VALUES (780,210101,37,'inform','stint','tropics','W');
-INSERT INTO t3 VALUES (781,210102,37,'avenge','Sault','theorizers','');
-INSERT INTO t3 VALUES (782,210103,37,'universals','faithful','renew','0');
-INSERT INTO t3 VALUES (783,210104,37,'Kinsey','Ganymede','already','');
-INSERT INTO t3 VALUES (784,210105,37,'ravines','tidiness','terminal','');
-INSERT INTO t3 VALUES (785,210106,37,'bestseller','gainful','Hegelian','');
-INSERT INTO t3 VALUES (786,210107,37,'equilibrium','contrary','hypothesizer','');
-INSERT INTO t3 VALUES (787,210401,37,'extents','Tipperary','warningly','FAS');
-INSERT INTO t3 VALUES (788,213201,37,'relatively','tropics','journalizing','FAS');
-INSERT INTO t3 VALUES (789,213203,37,'pressure','theorizers','nested','');
-INSERT INTO t3 VALUES (790,213204,37,'critiques','renew','Lars','');
-INSERT INTO t3 VALUES (791,213205,37,'befouled','already','saplings','');
-INSERT INTO t3 VALUES (792,213206,37,'rightfully','terminal','foothill','');
-INSERT INTO t3 VALUES (793,213207,37,'mechanizing','Hegelian','labeled','');
-INSERT INTO t3 VALUES (794,216101,37,'Latinizes','hypothesizer','imperiously','FAS');
-INSERT INTO t3 VALUES (795,216103,37,'timesharing','warningly','reporters','FAS');
-INSERT INTO t3 VALUES (796,218001,37,'Aden','journalizing','furnishings','FAS');
-INSERT INTO t3 VALUES (797,218002,37,'embassies','nested','precipitable','FAS');
-INSERT INTO t3 VALUES (798,218003,37,'males','Lars','discounts','FAS');
-INSERT INTO t3 VALUES (799,218004,37,'shapelessly','saplings','excises','FAS');
-INSERT INTO t3 VALUES (800,143503,50,'genres','foothill','Stalin','');
-INSERT INTO t3 VALUES (801,218006,37,'mastering','labeled','despot','FAS');
-INSERT INTO t3 VALUES (802,218007,37,'Newtonian','imperiously','ripeness','FAS');
-INSERT INTO t3 VALUES (803,218008,37,'finishers','reporters','Arabia','');
-INSERT INTO t3 VALUES (804,218009,37,'abates','furnishings','unruly','');
-INSERT INTO t3 VALUES (805,218010,37,'teem','precipitable','mournfulness','');
-INSERT INTO t3 VALUES (806,218011,37,'kiting','discounts','boom','FAS');
-INSERT INTO t3 VALUES (807,218020,37,'stodgy','excises','slaughter','A');
-INSERT INTO t3 VALUES (808,218021,50,'scalps','Stalin','Sabine','');
-INSERT INTO t3 VALUES (809,218022,37,'feed','despot','handy','FAS');
-INSERT INTO t3 VALUES (810,218023,37,'guitars','ripeness','rural','');
-INSERT INTO t3 VALUES (811,218024,37,'airships','Arabia','organizer','');
-INSERT INTO t3 VALUES (812,218101,37,'store','unruly','shipyard','FAS');
-INSERT INTO t3 VALUES (813,218102,37,'denounces','mournfulness','civics','FAS');
-INSERT INTO t3 VALUES (814,218103,37,'Pyle','boom','inaccuracy','FAS');
-INSERT INTO t3 VALUES (815,218201,37,'Saxony','slaughter','rules','FAS');
-INSERT INTO t3 VALUES (816,218202,37,'serializations','Sabine','juveniles','FAS');
-INSERT INTO t3 VALUES (817,218203,37,'Peruvian','handy','comprised','W');
-INSERT INTO t3 VALUES (818,218204,37,'taxonomically','rural','investigations','');
-INSERT INTO t3 VALUES (819,218205,37,'kingdom','organizer','stabilizes','A');
-INSERT INTO t3 VALUES (820,218301,37,'stint','shipyard','seminaries','FAS');
-INSERT INTO t3 VALUES (821,218302,37,'Sault','civics','Hunter','A');
-INSERT INTO t3 VALUES (822,218401,37,'faithful','inaccuracy','sporty','FAS');
-INSERT INTO t3 VALUES (823,218402,37,'Ganymede','rules','test','FAS');
-INSERT INTO t3 VALUES (824,218403,37,'tidiness','juveniles','weasels','');
-INSERT INTO t3 VALUES (825,218404,37,'gainful','comprised','CERN','');
-INSERT INTO t3 VALUES (826,218407,37,'contrary','investigations','tempering','');
-INSERT INTO t3 VALUES (827,218408,37,'Tipperary','stabilizes','afore','FAS');
-INSERT INTO t3 VALUES (828,218409,37,'tropics','seminaries','Galatean','');
-INSERT INTO t3 VALUES (829,218410,37,'theorizers','Hunter','techniques','W');
-INSERT INTO t3 VALUES (830,226001,37,'renew','sporty','error','');
-INSERT INTO t3 VALUES (831,226002,37,'already','test','veranda','');
-INSERT INTO t3 VALUES (832,226003,37,'terminal','weasels','severely','');
-INSERT INTO t3 VALUES (833,226004,37,'Hegelian','CERN','Cassites','FAS');
-INSERT INTO t3 VALUES (834,226005,37,'hypothesizer','tempering','forthcoming','');
-INSERT INTO t3 VALUES (835,226006,37,'warningly','afore','guides','');
-INSERT INTO t3 VALUES (836,226007,37,'journalizing','Galatean','vanish','FAS');
-INSERT INTO t3 VALUES (837,226008,37,'nested','techniques','lied','A');
-INSERT INTO t3 VALUES (838,226203,37,'Lars','error','sawtooth','FAS');
-INSERT INTO t3 VALUES (839,226204,37,'saplings','veranda','fated','FAS');
-INSERT INTO t3 VALUES (840,226205,37,'foothill','severely','gradually','');
-INSERT INTO t3 VALUES (841,226206,37,'labeled','Cassites','widens','');
-INSERT INTO t3 VALUES (842,226207,37,'imperiously','forthcoming','preclude','');
-INSERT INTO t3 VALUES (843,226208,37,'reporters','guides','Jobrel','');
-INSERT INTO t3 VALUES (844,226209,37,'furnishings','vanish','hooker','');
-INSERT INTO t3 VALUES (845,226210,37,'precipitable','lied','rainstorm','');
-INSERT INTO t3 VALUES (846,226211,37,'discounts','sawtooth','disconnects','');
-INSERT INTO t3 VALUES (847,228001,37,'excises','fated','cruelty','');
-INSERT INTO t3 VALUES (848,228004,37,'Stalin','gradually','exponentials','A');
-INSERT INTO t3 VALUES (849,228005,37,'despot','widens','affective','A');
-INSERT INTO t3 VALUES (850,228006,37,'ripeness','preclude','arteries','');
-INSERT INTO t3 VALUES (851,228007,37,'Arabia','Jobrel','Crosby','FAS');
-INSERT INTO t3 VALUES (852,228008,37,'unruly','hooker','acquaint','');
-INSERT INTO t3 VALUES (853,228009,37,'mournfulness','rainstorm','evenhandedly','');
-INSERT INTO t3 VALUES (854,228101,37,'boom','disconnects','percentage','');
-INSERT INTO t3 VALUES (855,228108,37,'slaughter','cruelty','disobedience','');
-INSERT INTO t3 VALUES (856,228109,37,'Sabine','exponentials','humility','');
-INSERT INTO t3 VALUES (857,228110,37,'handy','affective','gleaning','A');
-INSERT INTO t3 VALUES (858,228111,37,'rural','arteries','petted','A');
-INSERT INTO t3 VALUES (859,228112,37,'organizer','Crosby','bloater','A');
-INSERT INTO t3 VALUES (860,228113,37,'shipyard','acquaint','minion','A');
-INSERT INTO t3 VALUES (861,228114,37,'civics','evenhandedly','marginal','A');
-INSERT INTO t3 VALUES (862,228115,37,'inaccuracy','percentage','apiary','A');
-INSERT INTO t3 VALUES (863,228116,37,'rules','disobedience','measures','');
-INSERT INTO t3 VALUES (864,228117,37,'juveniles','humility','precaution','');
-INSERT INTO t3 VALUES (865,228118,37,'comprised','gleaning','repelled','');
-INSERT INTO t3 VALUES (866,228119,37,'investigations','petted','primary','FAS');
-INSERT INTO t3 VALUES (867,228120,37,'stabilizes','bloater','coverings','');
-INSERT INTO t3 VALUES (868,228121,37,'seminaries','minion','Artemia','A');
-INSERT INTO t3 VALUES (869,228122,37,'Hunter','marginal','navigate','');
-INSERT INTO t3 VALUES (870,228201,37,'sporty','apiary','spatial','');
-INSERT INTO t3 VALUES (871,228206,37,'test','measures','Gurkha','');
-INSERT INTO t3 VALUES (872,228207,37,'weasels','precaution','meanwhile','A');
-INSERT INTO t3 VALUES (873,228208,37,'CERN','repelled','Melinda','A');
-INSERT INTO t3 VALUES (874,228209,37,'tempering','primary','Butterfield','');
-INSERT INTO t3 VALUES (875,228210,37,'afore','coverings','Aldrich','A');
-INSERT INTO t3 VALUES (876,228211,37,'Galatean','Artemia','previewing','A');
-INSERT INTO t3 VALUES (877,228212,37,'techniques','navigate','glut','A');
-INSERT INTO t3 VALUES (878,228213,37,'error','spatial','unaffected','');
-INSERT INTO t3 VALUES (879,228214,37,'veranda','Gurkha','inmate','');
-INSERT INTO t3 VALUES (880,228301,37,'severely','meanwhile','mineral','');
-INSERT INTO t3 VALUES (881,228305,37,'Cassites','Melinda','impending','A');
-INSERT INTO t3 VALUES (882,228306,37,'forthcoming','Butterfield','meditation','A');
-INSERT INTO t3 VALUES (883,228307,37,'guides','Aldrich','ideas','');
-INSERT INTO t3 VALUES (884,228308,37,'vanish','previewing','miniaturizes','W');
-INSERT INTO t3 VALUES (885,228309,37,'lied','glut','lewdly','');
-INSERT INTO t3 VALUES (886,228310,37,'sawtooth','unaffected','title','');
-INSERT INTO t3 VALUES (887,228311,37,'fated','inmate','youthfulness','');
-INSERT INTO t3 VALUES (888,228312,37,'gradually','mineral','creak','FAS');
-INSERT INTO t3 VALUES (889,228313,37,'widens','impending','Chippewa','');
-INSERT INTO t3 VALUES (890,228314,37,'preclude','meditation','clamored','');
-INSERT INTO t3 VALUES (891,228401,65,'Jobrel','ideas','freezes','');
-INSERT INTO t3 VALUES (892,228402,65,'hooker','miniaturizes','forgivably','FAS');
-INSERT INTO t3 VALUES (893,228403,65,'rainstorm','lewdly','reduce','FAS');
-INSERT INTO t3 VALUES (894,228404,65,'disconnects','title','McGovern','W');
-INSERT INTO t3 VALUES (895,228405,65,'cruelty','youthfulness','Nazis','W');
-INSERT INTO t3 VALUES (896,228406,65,'exponentials','creak','epistle','W');
-INSERT INTO t3 VALUES (897,228407,65,'affective','Chippewa','socializes','W');
-INSERT INTO t3 VALUES (898,228408,65,'arteries','clamored','conceptions','');
-INSERT INTO t3 VALUES (899,228409,65,'Crosby','freezes','Kevin','');
-INSERT INTO t3 VALUES (900,228410,65,'acquaint','forgivably','uncovering','');
-INSERT INTO t3 VALUES (901,230301,37,'evenhandedly','reduce','chews','FAS');
-INSERT INTO t3 VALUES (902,230302,37,'percentage','McGovern','appendixes','FAS');
-INSERT INTO t3 VALUES (903,230303,37,'disobedience','Nazis','raining','');
-INSERT INTO t3 VALUES (904,018062,37,'humility','epistle','infest','');
-INSERT INTO t3 VALUES (905,230501,37,'gleaning','socializes','compartment','');
-INSERT INTO t3 VALUES (906,230502,37,'petted','conceptions','minting','');
-INSERT INTO t3 VALUES (907,230503,37,'bloater','Kevin','ducks','');
-INSERT INTO t3 VALUES (908,230504,37,'minion','uncovering','roped','A');
-INSERT INTO t3 VALUES (909,230505,37,'marginal','chews','waltz','');
-INSERT INTO t3 VALUES (910,230506,37,'apiary','appendixes','Lillian','');
-INSERT INTO t3 VALUES (911,230507,37,'measures','raining','repressions','A');
-INSERT INTO t3 VALUES (912,230508,37,'precaution','infest','chillingly','');
-INSERT INTO t3 VALUES (913,230509,37,'repelled','compartment','noncritical','');
-INSERT INTO t3 VALUES (914,230901,37,'primary','minting','lithograph','');
-INSERT INTO t3 VALUES (915,230902,37,'coverings','ducks','spongers','');
-INSERT INTO t3 VALUES (916,230903,37,'Artemia','roped','parenthood','');
-INSERT INTO t3 VALUES (917,230904,37,'navigate','waltz','posed','');
-INSERT INTO t3 VALUES (918,230905,37,'spatial','Lillian','instruments','');
-INSERT INTO t3 VALUES (919,230906,37,'Gurkha','repressions','filial','');
-INSERT INTO t3 VALUES (920,230907,37,'meanwhile','chillingly','fixedly','');
-INSERT INTO t3 VALUES (921,230908,37,'Melinda','noncritical','relives','');
-INSERT INTO t3 VALUES (922,230909,37,'Butterfield','lithograph','Pandora','');
-INSERT INTO t3 VALUES (923,230910,37,'Aldrich','spongers','watering','A');
-INSERT INTO t3 VALUES (924,230911,37,'previewing','parenthood','ungrateful','');
-INSERT INTO t3 VALUES (925,230912,37,'glut','posed','secures','');
-INSERT INTO t3 VALUES (926,230913,37,'unaffected','instruments','chastisers','');
-INSERT INTO t3 VALUES (927,230914,37,'inmate','filial','icon','');
-INSERT INTO t3 VALUES (928,231304,37,'mineral','fixedly','reuniting','A');
-INSERT INTO t3 VALUES (929,231305,37,'impending','relives','imagining','A');
-INSERT INTO t3 VALUES (930,231306,37,'meditation','Pandora','abiding','A');
-INSERT INTO t3 VALUES (931,231307,37,'ideas','watering','omnisciently','');
-INSERT INTO t3 VALUES (932,231308,37,'miniaturizes','ungrateful','Britannic','');
-INSERT INTO t3 VALUES (933,231309,37,'lewdly','secures','scholastics','A');
-INSERT INTO t3 VALUES (934,231310,37,'title','chastisers','mechanics','A');
-INSERT INTO t3 VALUES (935,231311,37,'youthfulness','icon','humidly','A');
-INSERT INTO t3 VALUES (936,231312,37,'creak','reuniting','masterpiece','');
-INSERT INTO t3 VALUES (937,231313,37,'Chippewa','imagining','however','');
-INSERT INTO t3 VALUES (938,231314,37,'clamored','abiding','Mendelian','');
-INSERT INTO t3 VALUES (939,231315,37,'freezes','omnisciently','jarred','');
-INSERT INTO t3 VALUES (940,232102,37,'forgivably','Britannic','scolds','');
-INSERT INTO t3 VALUES (941,232103,37,'reduce','scholastics','infatuate','');
-INSERT INTO t3 VALUES (942,232104,37,'McGovern','mechanics','willed','A');
-INSERT INTO t3 VALUES (943,232105,37,'Nazis','humidly','joyfully','');
-INSERT INTO t3 VALUES (944,232106,37,'epistle','masterpiece','Microsoft','');
-INSERT INTO t3 VALUES (945,232107,37,'socializes','however','fibrosities','');
-INSERT INTO t3 VALUES (946,232108,37,'conceptions','Mendelian','Baltimorean','');
-INSERT INTO t3 VALUES (947,232601,37,'Kevin','jarred','equestrian','');
-INSERT INTO t3 VALUES (948,232602,37,'uncovering','scolds','Goodrich','');
-INSERT INTO t3 VALUES (949,232603,37,'chews','infatuate','apish','A');
-INSERT INTO t3 VALUES (950,232605,37,'appendixes','willed','Adlerian','');
-INSERT INTO t3 VALUES (5950,1232605,37,'appendixes','willed','Adlerian','');
-INSERT INTO t3 VALUES (5951,1232606,37,'appendixes','willed','Adlerian','');
-INSERT INTO t3 VALUES (5952,1232607,37,'appendixes','willed','Adlerian','');
-INSERT INTO t3 VALUES (5953,1232608,37,'appendixes','willed','Adlerian','');
-INSERT INTO t3 VALUES (5954,1232609,37,'appendixes','willed','Adlerian','');
-INSERT INTO t3 VALUES (951,232606,37,'raining','joyfully','Tropez','');
-INSERT INTO t3 VALUES (952,232607,37,'infest','Microsoft','nouns','');
-INSERT INTO t3 VALUES (953,232608,37,'compartment','fibrosities','distracting','');
-INSERT INTO t3 VALUES (954,232609,37,'minting','Baltimorean','mutton','');
-INSERT INTO t3 VALUES (955,236104,37,'ducks','equestrian','bridgeable','A');
-INSERT INTO t3 VALUES (956,236105,37,'roped','Goodrich','stickers','A');
-INSERT INTO t3 VALUES (957,236106,37,'waltz','apish','transcontinental','A');
-INSERT INTO t3 VALUES (958,236107,37,'Lillian','Adlerian','amateurish','');
-INSERT INTO t3 VALUES (959,236108,37,'repressions','Tropez','Gandhian','');
-INSERT INTO t3 VALUES (960,236109,37,'chillingly','nouns','stratified','');
-INSERT INTO t3 VALUES (961,236110,37,'noncritical','distracting','chamberlains','');
-INSERT INTO t3 VALUES (962,236111,37,'lithograph','mutton','creditably','');
-INSERT INTO t3 VALUES (963,236112,37,'spongers','bridgeable','philosophic','');
-INSERT INTO t3 VALUES (964,236113,37,'parenthood','stickers','ores','');
-INSERT INTO t3 VALUES (965,238005,37,'posed','transcontinental','Carleton','');
-INSERT INTO t3 VALUES (966,238006,37,'instruments','amateurish','tape','A');
-INSERT INTO t3 VALUES (967,238007,37,'filial','Gandhian','afloat','A');
-INSERT INTO t3 VALUES (968,238008,37,'fixedly','stratified','goodness','A');
-INSERT INTO t3 VALUES (969,238009,37,'relives','chamberlains','welcoming','');
-INSERT INTO t3 VALUES (970,238010,37,'Pandora','creditably','Pinsky','FAS');
-INSERT INTO t3 VALUES (971,238011,37,'watering','philosophic','halting','');
-INSERT INTO t3 VALUES (972,238012,37,'ungrateful','ores','bibliography','');
-INSERT INTO t3 VALUES (973,238013,37,'secures','Carleton','decoding','');
-INSERT INTO t3 VALUES (974,240401,41,'chastisers','tape','variance','A');
-INSERT INTO t3 VALUES (975,240402,41,'icon','afloat','allowed','A');
-INSERT INTO t3 VALUES (976,240901,41,'reuniting','goodness','dire','A');
-INSERT INTO t3 VALUES (977,240902,41,'imagining','welcoming','dub','A');
-INSERT INTO t3 VALUES (978,241801,41,'abiding','Pinsky','poisoning','');
-INSERT INTO t3 VALUES (979,242101,41,'omnisciently','halting','Iraqis','A');
-INSERT INTO t3 VALUES (980,242102,41,'Britannic','bibliography','heaving','');
-INSERT INTO t3 VALUES (981,242201,41,'scholastics','decoding','population','A');
-INSERT INTO t3 VALUES (982,242202,41,'mechanics','variance','bomb','A');
-INSERT INTO t3 VALUES (983,242501,41,'humidly','allowed','Majorca','A');
-INSERT INTO t3 VALUES (984,242502,41,'masterpiece','dire','Gershwins','');
-INSERT INTO t3 VALUES (985,246201,41,'however','dub','explorers','');
-INSERT INTO t3 VALUES (986,246202,41,'Mendelian','poisoning','libretto','A');
-INSERT INTO t3 VALUES (987,246203,41,'jarred','Iraqis','occurred','');
-INSERT INTO t3 VALUES (988,246204,41,'scolds','heaving','Lagos','');
-INSERT INTO t3 VALUES (989,246205,41,'infatuate','population','rats','');
-INSERT INTO t3 VALUES (990,246301,41,'willed','bomb','bankruptcies','A');
-INSERT INTO t3 VALUES (991,246302,41,'joyfully','Majorca','crying','');
-INSERT INTO t3 VALUES (992,248001,41,'Microsoft','Gershwins','unexpected','');
-INSERT INTO t3 VALUES (993,248002,41,'fibrosities','explorers','accessed','A');
-INSERT INTO t3 VALUES (994,248003,41,'Baltimorean','libretto','colorful','A');
-INSERT INTO t3 VALUES (995,248004,41,'equestrian','occurred','versatility','A');
-INSERT INTO t3 VALUES (996,248005,41,'Goodrich','Lagos','cosy','');
-INSERT INTO t3 VALUES (997,248006,41,'apish','rats','Darius','A');
-INSERT INTO t3 VALUES (998,248007,41,'Adlerian','bankruptcies','mastering','A');
-INSERT INTO t3 VALUES (999,248008,41,'Tropez','crying','Asiaticizations','A');
-INSERT INTO t3 VALUES (1000,248009,41,'nouns','unexpected','offerers','A');
-INSERT INTO t3 VALUES (1001,248010,41,'distracting','accessed','uncles','A');
-INSERT INTO t3 VALUES (1002,248011,41,'mutton','colorful','sleepwalk','');
-INSERT INTO t3 VALUES (1003,248012,41,'bridgeable','versatility','Ernestine','');
-INSERT INTO t3 VALUES (1004,248013,41,'stickers','cosy','checksumming','');
-INSERT INTO t3 VALUES (1005,248014,41,'transcontinental','Darius','stopped','');
-INSERT INTO t3 VALUES (1006,248015,41,'amateurish','mastering','sicker','');
-INSERT INTO t3 VALUES (1007,248016,41,'Gandhian','Asiaticizations','Italianization','');
-INSERT INTO t3 VALUES (1008,248017,41,'stratified','offerers','alphabetic','');
-INSERT INTO t3 VALUES (1009,248018,41,'chamberlains','uncles','pharmaceutic','');
-INSERT INTO t3 VALUES (1010,248019,41,'creditably','sleepwalk','creator','');
-INSERT INTO t3 VALUES (1011,248020,41,'philosophic','Ernestine','chess','');
-INSERT INTO t3 VALUES (1012,248021,41,'ores','checksumming','charcoal','');
-INSERT INTO t3 VALUES (1013,248101,41,'Carleton','stopped','Epiphany','A');
-INSERT INTO t3 VALUES (1014,248102,41,'tape','sicker','bulldozes','A');
-INSERT INTO t3 VALUES (1015,248201,41,'afloat','Italianization','Pygmalion','A');
-INSERT INTO t3 VALUES (1016,248202,41,'goodness','alphabetic','caressing','A');
-INSERT INTO t3 VALUES (1017,248203,41,'welcoming','pharmaceutic','Palestine','A');
-INSERT INTO t3 VALUES (1018,248204,41,'Pinsky','creator','regimented','A');
-INSERT INTO t3 VALUES (1019,248205,41,'halting','chess','scars','A');
-INSERT INTO t3 VALUES (1020,248206,41,'bibliography','charcoal','realest','A');
-INSERT INTO t3 VALUES (1021,248207,41,'decoding','Epiphany','diffusing','A');
-INSERT INTO t3 VALUES (1022,248208,41,'variance','bulldozes','clubroom','A');
-INSERT INTO t3 VALUES (1023,248209,41,'allowed','Pygmalion','Blythe','A');
-INSERT INTO t3 VALUES (1024,248210,41,'dire','caressing','ahead','');
-INSERT INTO t3 VALUES (1025,248211,50,'dub','Palestine','reviver','');
-INSERT INTO t3 VALUES (1026,250501,34,'poisoning','regimented','retransmitting','A');
-INSERT INTO t3 VALUES (1027,250502,34,'Iraqis','scars','landslide','');
-INSERT INTO t3 VALUES (1028,250503,34,'heaving','realest','Eiffel','');
-INSERT INTO t3 VALUES (1029,250504,34,'population','diffusing','absentee','');
-INSERT INTO t3 VALUES (1030,250505,34,'bomb','clubroom','aye','');
-INSERT INTO t3 VALUES (1031,250601,34,'Majorca','Blythe','forked','A');
-INSERT INTO t3 VALUES (1032,250602,34,'Gershwins','ahead','Peruvianizes','');
-INSERT INTO t3 VALUES (1033,250603,34,'explorers','reviver','clerked','');
-INSERT INTO t3 VALUES (1034,250604,34,'libretto','retransmitting','tutor','');
-INSERT INTO t3 VALUES (1035,250605,34,'occurred','landslide','boulevard','');
-INSERT INTO t3 VALUES (1036,251001,34,'Lagos','Eiffel','shuttered','');
-INSERT INTO t3 VALUES (1037,251002,34,'rats','absentee','quotes','A');
-INSERT INTO t3 VALUES (1038,251003,34,'bankruptcies','aye','Caltech','');
-INSERT INTO t3 VALUES (1039,251004,34,'crying','forked','Mossberg','');
-INSERT INTO t3 VALUES (1040,251005,34,'unexpected','Peruvianizes','kept','');
-INSERT INTO t3 VALUES (1041,251301,34,'accessed','clerked','roundly','');
-INSERT INTO t3 VALUES (1042,251302,34,'colorful','tutor','features','A');
-INSERT INTO t3 VALUES (1043,251303,34,'versatility','boulevard','imaginable','A');
-INSERT INTO t3 VALUES (1044,251304,34,'cosy','shuttered','controller','');
-INSERT INTO t3 VALUES (1045,251305,34,'Darius','quotes','racial','');
-INSERT INTO t3 VALUES (1046,251401,34,'mastering','Caltech','uprisings','A');
-INSERT INTO t3 VALUES (1047,251402,34,'Asiaticizations','Mossberg','narrowed','A');
-INSERT INTO t3 VALUES (1048,251403,34,'offerers','kept','cannot','A');
-INSERT INTO t3 VALUES (1049,251404,34,'uncles','roundly','vest','');
-INSERT INTO t3 VALUES (1050,251405,34,'sleepwalk','features','famine','');
-INSERT INTO t3 VALUES (1051,251406,34,'Ernestine','imaginable','sugars','');
-INSERT INTO t3 VALUES (1052,251801,34,'checksumming','controller','exterminated','A');
-INSERT INTO t3 VALUES (1053,251802,34,'stopped','racial','belays','');
-INSERT INTO t3 VALUES (1054,252101,34,'sicker','uprisings','Hodges','A');
-INSERT INTO t3 VALUES (1055,252102,34,'Italianization','narrowed','translatable','');
-INSERT INTO t3 VALUES (1056,252301,34,'alphabetic','cannot','duality','A');
-INSERT INTO t3 VALUES (1057,252302,34,'pharmaceutic','vest','recording','A');
-INSERT INTO t3 VALUES (1058,252303,34,'creator','famine','rouses','A');
-INSERT INTO t3 VALUES (1059,252304,34,'chess','sugars','poison','');
-INSERT INTO t3 VALUES (1060,252305,34,'charcoal','exterminated','attitude','');
-INSERT INTO t3 VALUES (1061,252306,34,'Epiphany','belays','dusted','');
-INSERT INTO t3 VALUES (1062,252307,34,'bulldozes','Hodges','encompasses','');
-INSERT INTO t3 VALUES (1063,252308,34,'Pygmalion','translatable','presentation','');
-INSERT INTO t3 VALUES (1064,252309,34,'caressing','duality','Kantian','');
-INSERT INTO t3 VALUES (1065,256001,34,'Palestine','recording','imprecision','A');
-INSERT INTO t3 VALUES (1066,256002,34,'regimented','rouses','saving','');
-INSERT INTO t3 VALUES (1067,256003,34,'scars','poison','maternal','');
-INSERT INTO t3 VALUES (1068,256004,34,'realest','attitude','hewed','');
-INSERT INTO t3 VALUES (1069,256005,34,'diffusing','dusted','kerosene','');
-INSERT INTO t3 VALUES (1070,258001,34,'clubroom','encompasses','Cubans','');
-INSERT INTO t3 VALUES (1071,258002,34,'Blythe','presentation','photographers','');
-INSERT INTO t3 VALUES (1072,258003,34,'ahead','Kantian','nymph','A');
-INSERT INTO t3 VALUES (1073,258004,34,'reviver','imprecision','bedlam','A');
-INSERT INTO t3 VALUES (1074,258005,34,'retransmitting','saving','north','A');
-INSERT INTO t3 VALUES (1075,258006,34,'landslide','maternal','Schoenberg','A');
-INSERT INTO t3 VALUES (1076,258007,34,'Eiffel','hewed','botany','A');
-INSERT INTO t3 VALUES (1077,258008,34,'absentee','kerosene','curs','');
-INSERT INTO t3 VALUES (1078,258009,34,'aye','Cubans','solidification','');
-INSERT INTO t3 VALUES (1079,258010,34,'forked','photographers','inheritresses','');
-INSERT INTO t3 VALUES (1080,258011,34,'Peruvianizes','nymph','stiller','');
-INSERT INTO t3 VALUES (1081,258101,68,'clerked','bedlam','t1','A');
-INSERT INTO t3 VALUES (1082,258102,68,'tutor','north','suite','A');
-INSERT INTO t3 VALUES (1083,258103,34,'boulevard','Schoenberg','ransomer','');
-INSERT INTO t3 VALUES (1084,258104,68,'shuttered','botany','Willy','');
-INSERT INTO t3 VALUES (1085,258105,68,'quotes','curs','Rena','A');
-INSERT INTO t3 VALUES (1086,258106,68,'Caltech','solidification','Seattle','A');
-INSERT INTO t3 VALUES (1087,258107,68,'Mossberg','inheritresses','relaxes','A');
-INSERT INTO t3 VALUES (1088,258108,68,'kept','stiller','exclaim','');
-INSERT INTO t3 VALUES (1089,258109,68,'roundly','t1','implicated','A');
-INSERT INTO t3 VALUES (1090,258110,68,'features','suite','distinguish','');
-INSERT INTO t3 VALUES (1091,258111,68,'imaginable','ransomer','assayed','');
-INSERT INTO t3 VALUES (1092,258112,68,'controller','Willy','homeowner','');
-INSERT INTO t3 VALUES (1093,258113,68,'racial','Rena','and','');
-INSERT INTO t3 VALUES (1094,258201,34,'uprisings','Seattle','stealth','');
-INSERT INTO t3 VALUES (1095,258202,34,'narrowed','relaxes','coinciding','A');
-INSERT INTO t3 VALUES (1096,258203,34,'cannot','exclaim','founder','A');
-INSERT INTO t3 VALUES (1097,258204,34,'vest','implicated','environing','');
-INSERT INTO t3 VALUES (1098,258205,34,'famine','distinguish','jewelry','');
-INSERT INTO t3 VALUES (1099,258301,34,'sugars','assayed','lemons','A');
-INSERT INTO t3 VALUES (1100,258401,34,'exterminated','homeowner','brokenness','A');
-INSERT INTO t3 VALUES (1101,258402,34,'belays','and','bedpost','A');
-INSERT INTO t3 VALUES (1102,258403,34,'Hodges','stealth','assurers','A');
-INSERT INTO t3 VALUES (1103,258404,34,'translatable','coinciding','annoyers','');
-INSERT INTO t3 VALUES (1104,258405,34,'duality','founder','affixed','');
-INSERT INTO t3 VALUES (1105,258406,34,'recording','environing','warbling','');
-INSERT INTO t3 VALUES (1106,258407,34,'rouses','jewelry','seriously','');
-INSERT INTO t3 VALUES (1107,228123,37,'poison','lemons','boasted','');
-INSERT INTO t3 VALUES (1108,250606,34,'attitude','brokenness','Chantilly','');
-INSERT INTO t3 VALUES (1109,208405,37,'dusted','bedpost','Iranizes','');
-INSERT INTO t3 VALUES (1110,212101,37,'encompasses','assurers','violinist','');
-INSERT INTO t3 VALUES (1111,218206,37,'presentation','annoyers','extramarital','');
-INSERT INTO t3 VALUES (1112,150401,37,'Kantian','affixed','spates','');
-INSERT INTO t3 VALUES (1113,248212,41,'imprecision','warbling','cloakroom','');
-INSERT INTO t3 VALUES (1114,128026,00,'saving','seriously','gazer','');
-INSERT INTO t3 VALUES (1115,128024,00,'maternal','boasted','hand','');
-INSERT INTO t3 VALUES (1116,128027,00,'hewed','Chantilly','tucked','');
-INSERT INTO t3 VALUES (1117,128025,00,'kerosene','Iranizes','gems','');
-INSERT INTO t3 VALUES (1118,128109,00,'Cubans','violinist','clinker','');
-INSERT INTO t3 VALUES (1119,128705,00,'photographers','extramarital','refiner','');
-INSERT INTO t3 VALUES (1120,126303,00,'nymph','spates','callus','');
-INSERT INTO t3 VALUES (1121,128308,00,'bedlam','cloakroom','leopards','');
-INSERT INTO t3 VALUES (1122,128204,00,'north','gazer','comfortingly','');
-INSERT INTO t3 VALUES (1123,128205,00,'Schoenberg','hand','generically','');
-INSERT INTO t3 VALUES (1124,128206,00,'botany','tucked','getters','');
-INSERT INTO t3 VALUES (1125,128207,00,'curs','gems','sexually','');
-INSERT INTO t3 VALUES (1126,118205,00,'solidification','clinker','spear','');
-INSERT INTO t3 VALUES (1127,116801,00,'inheritresses','refiner','serums','');
-INSERT INTO t3 VALUES (1128,116803,00,'stiller','callus','Italianization','');
-INSERT INTO t3 VALUES (1129,116804,00,'t1','leopards','attendants','');
-INSERT INTO t3 VALUES (1130,116802,00,'suite','comfortingly','spies','');
-INSERT INTO t3 VALUES (1131,128605,00,'ransomer','generically','Anthony','');
-INSERT INTO t3 VALUES (1132,118308,00,'Willy','getters','planar','');
-INSERT INTO t3 VALUES (1133,113702,00,'Rena','sexually','cupped','');
-INSERT INTO t3 VALUES (1134,113703,00,'Seattle','spear','cleanser','');
-INSERT INTO t3 VALUES (1135,112103,00,'relaxes','serums','commuters','');
-INSERT INTO t3 VALUES (1136,118009,00,'exclaim','Italianization','honeysuckle','');
-INSERT INTO t3 VALUES (5136,1118009,00,'exclaim','Italianization','honeysuckle','');
-INSERT INTO t3 VALUES (1137,138011,00,'implicated','attendants','orphanage','');
-INSERT INTO t3 VALUES (1138,138010,00,'distinguish','spies','skies','');
-INSERT INTO t3 VALUES (1139,138012,00,'assayed','Anthony','crushers','');
-INSERT INTO t3 VALUES (1140,068304,00,'homeowner','planar','Puritan','');
-INSERT INTO t3 VALUES (1141,078009,00,'and','cupped','squeezer','');
-INSERT INTO t3 VALUES (1142,108013,00,'stealth','cleanser','bruises','');
-INSERT INTO t3 VALUES (1143,084004,00,'coinciding','commuters','bonfire','');
-INSERT INTO t3 VALUES (1144,083402,00,'founder','honeysuckle','Colombo','');
-INSERT INTO t3 VALUES (1145,084003,00,'environing','orphanage','nondecreasing','');
-INSERT INTO t3 VALUES (1146,088504,00,'jewelry','skies','innocents','');
-INSERT INTO t3 VALUES (1147,088005,00,'lemons','crushers','masked','');
-INSERT INTO t3 VALUES (1148,088007,00,'brokenness','Puritan','file','');
-INSERT INTO t3 VALUES (1149,088006,00,'bedpost','squeezer','brush','');
-INSERT INTO t3 VALUES (1150,148025,00,'assurers','bruises','mutilate','');
-INSERT INTO t3 VALUES (1151,148024,00,'annoyers','bonfire','mommy','');
-INSERT INTO t3 VALUES (1152,138305,00,'affixed','Colombo','bulkheads','');
-INSERT INTO t3 VALUES (1153,138306,00,'warbling','nondecreasing','undeclared','');
-INSERT INTO t3 VALUES (1154,152701,00,'seriously','innocents','displacements','');
-INSERT INTO t3 VALUES (1155,148505,00,'boasted','masked','nieces','');
-INSERT INTO t3 VALUES (1156,158003,00,'Chantilly','file','coeducation','');
-INSERT INTO t3 VALUES (1157,156201,00,'Iranizes','brush','brassy','');
-INSERT INTO t3 VALUES (1158,156202,00,'violinist','mutilate','authenticator','');
-INSERT INTO t3 VALUES (1159,158307,00,'extramarital','mommy','Washoe','');
-INSERT INTO t3 VALUES (1160,158402,00,'spates','bulkheads','penny','');
-INSERT INTO t3 VALUES (1161,158401,00,'cloakroom','undeclared','Flagler','');
-INSERT INTO t3 VALUES (1162,068013,00,'gazer','displacements','stoned','');
-INSERT INTO t3 VALUES (1163,068012,00,'hand','nieces','cranes','');
-INSERT INTO t3 VALUES (1164,068203,00,'tucked','coeducation','masterful','');
-INSERT INTO t3 VALUES (1165,088205,00,'gems','brassy','biracial','');
-INSERT INTO t3 VALUES (1166,068704,00,'clinker','authenticator','steamships','');
-INSERT INTO t3 VALUES (1167,068604,00,'refiner','Washoe','windmills','');
-INSERT INTO t3 VALUES (1168,158502,00,'callus','penny','exploit','');
-INSERT INTO t3 VALUES (1169,123103,00,'leopards','Flagler','riverfront','');
-INSERT INTO t3 VALUES (1170,148026,00,'comfortingly','stoned','sisterly','');
-INSERT INTO t3 VALUES (1171,123302,00,'generically','cranes','sharpshoot','');
-INSERT INTO t3 VALUES (1172,076503,00,'getters','masterful','mittens','');
-INSERT INTO t3 VALUES (1173,126304,00,'sexually','biracial','interdependency','');
-INSERT INTO t3 VALUES (1174,068306,00,'spear','steamships','policy','');
-INSERT INTO t3 VALUES (1175,143504,00,'serums','windmills','unleashing','');
-INSERT INTO t3 VALUES (1176,160201,00,'Italianization','exploit','pretenders','');
-INSERT INTO t3 VALUES (1177,148028,00,'attendants','riverfront','overstatements','');
-INSERT INTO t3 VALUES (1178,148027,00,'spies','sisterly','birthed','');
-INSERT INTO t3 VALUES (1179,143505,00,'Anthony','sharpshoot','opportunism','');
-INSERT INTO t3 VALUES (1180,108014,00,'planar','mittens','showroom','');
-INSERT INTO t3 VALUES (1181,076104,00,'cupped','interdependency','compromisingly','');
-INSERT INTO t3 VALUES (1182,078106,00,'cleanser','policy','Medicare','');
-INSERT INTO t3 VALUES (1183,126102,00,'commuters','unleashing','corresponds','');
-INSERT INTO t3 VALUES (1184,128029,00,'honeysuckle','pretenders','hardware','');
-INSERT INTO t3 VALUES (1185,128028,00,'orphanage','overstatements','implant','');
-INSERT INTO t3 VALUES (1186,018410,00,'skies','birthed','Alicia','');
-INSERT INTO t3 VALUES (1187,128110,00,'crushers','opportunism','requesting','');
-INSERT INTO t3 VALUES (1188,148506,00,'Puritan','showroom','produced','');
-INSERT INTO t3 VALUES (1189,123303,00,'squeezer','compromisingly','criticizes','');
-INSERT INTO t3 VALUES (1190,123304,00,'bruises','Medicare','backer','');
-INSERT INTO t3 VALUES (1191,068504,00,'bonfire','corresponds','positively','');
-INSERT INTO t3 VALUES (1192,068305,00,'Colombo','hardware','colicky','');
-INSERT INTO t3 VALUES (1193,000000,00,'nondecreasing','implant','thrillingly','');
---enable_query_log
-INSERT INTO t3 (fld1, companynr) VALUES (999999,99);
-
-CREATE TABLE t4 (
-  companynr tinyint(2) unsigned zerofill NOT NULL default '00',
-  companyname char(30) NOT NULL default '',
-  PRIMARY KEY (companynr),
-  UNIQUE KEY companyname(companyname)
-) MAX_ROWS=50 PACK_KEYS=1 COMMENT='companynames';
-
---disable_query_log
-INSERT INTO t4 (companynr, companyname) VALUES (29,'company 1');
-INSERT INTO t4 (companynr, companyname) VALUES (34,'company 2');
-INSERT INTO t4 (companynr, companyname) VALUES (36,'company 3');
-INSERT INTO t4 (companynr, companyname) VALUES (37,'company 4');
-INSERT INTO t4 (companynr, companyname) VALUES (40,'company 5');
-INSERT INTO t4 (companynr, companyname) VALUES (41,'company 6');
-INSERT INTO t4 (companynr, companyname) VALUES (53,'company 7');
-INSERT INTO t4 (companynr, companyname) VALUES (58,'company 8');
-INSERT INTO t4 (companynr, companyname) VALUES (65,'company 9');
-INSERT INTO t4 (companynr, companyname) VALUES (68,'company 10');
-INSERT INTO t4 (companynr, companyname) VALUES (50,'company 11');
-INSERT INTO t4 (companynr, companyname) VALUES (00,'Unknown');
---enable_query_log
-
-CREATE TABLE t5 (
-  a int, b varchar(30),
-  PRIMARY KEY(a)
-);
-INSERT INTO t5 VALUES (1,'one');
-INSERT INTO t5 VALUES (2,'two');
-INSERT INTO t5 VALUES (3,'three');
-INSERT INTO t5 VALUES (4,'four');
-
-CREATE TABLE t6 AS SELECT * FROM t5;
-
-
-# ----------------------------------------------------- #
-# --- Test                                          --- #
-# ----------------------------------------------------- #
-SELECT * FROM t1 LEFT JOIN t2 ON f1 = f3;
-SELECT t3.companynr,companyname FROM t3 LEFT JOIN t4 USING (companynr) WHERE t4.companynr IS NULL;
-SELECT * FROM t6 LEFT JOIN t5 ON(t5.a = t6.a) ORDER BY t6.a;
-SELECT * FROM t6 LEFT JOIN t5 USING(a) ORDER BY t6.a;
-
-
-# ----------------------------------------------------- #
-# --- Check                                         --- #
-# ----------------------------------------------------- #
-SELECT count(*) FROM t1;
-SELECT count(*) FROM t2;
-SELECT count(*) FROM t3;
-SELECT count(*) FROM t4;
-SELECT count(*) FROM t5;
-SELECT count(*) FROM t6;
-
-# ----------------------------------------------------- #
-# --- Final cleanup                                 --- #
-# ----------------------------------------------------- #
-DROP TABLE t1;
-DROP TABLE t2;
-DROP TABLE t3;
-DROP TABLE t4;
-DROP TABLE t5;
-DROP TABLE t6;

=== modified file 'mysql-test/suite/falcon_team/r/falcon_bug_23945.result'
--- a/mysql-test/suite/falcon_team/r/falcon_bug_23945.result	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon_team/r/falcon_bug_23945.result	2008-09-09 08:30:18 +0000
@@ -1,14 +1,14 @@
 *** Bug #23945 ***
-SET STORAGE_ENGINE = Falcon;
+SET @@storage_engine = 'Falcon';
 DROP TABLE IF EXISTS t1;
-SET AUTOCOMMIT = 1;
+SET @@autocommit = 1;
 CREATE TABLE t1 (PRIMARY KEY (a)) SELECT 1 AS a UNION ALL SELECT 1;
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 SELECT * FROM t1;
 ERROR 42S02: Table 'test.t1' doesn't exist
 DROP TABLE t1;
 ERROR 42S02: Unknown table 't1'
-SET AUTOCOMMIT = 0;
+SET @@autocommit = 0;
 CREATE TABLE t1 (PRIMARY KEY (a)) SELECT 1 AS a UNION ALL SELECT 1;
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 SELECT * FROM t1;

=== modified file 'mysql-test/suite/falcon_team/t/falcon_bug_23945.test'
--- a/mysql-test/suite/falcon_team/t/falcon_bug_23945.test	2008-04-20 00:05:17 +0000
+++ b/mysql-test/suite/falcon_team/t/falcon_bug_23945.test	2008-09-09 08:30:18 +0000
@@ -1,19 +1,25 @@
+--source include/have_falcon.inc
+
 #
 # Bug #23945: crash during drop table, AUTOCOMMIT=0, CREATE TABLE .. AS SELECT
 #
 --echo *** Bug #23945 ***
 
-
-# --source include/have_innodb.inc
-# SET STORAGE_ENGINE = InnoDB;
---source include/have_falcon.inc
-SET STORAGE_ENGINE = Falcon;
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
 
 --disable_warnings
 DROP TABLE IF EXISTS t1;
 --enable_warnings
 
-SET AUTOCOMMIT = 1;
+SET @@autocommit = 1;
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
 --error ER_DUP_ENTRY
 CREATE TABLE t1 (PRIMARY KEY (a)) SELECT 1 AS a UNION ALL SELECT 1;
 --error ER_NO_SUCH_TABLE
@@ -21,7 +27,7 @@ SELECT * FROM t1;
 --error ER_BAD_TABLE_ERROR
 DROP TABLE t1;
 
-SET AUTOCOMMIT = 0;
+SET @@autocommit = 0;
 --error ER_DUP_ENTRY
 CREATE TABLE t1 (PRIMARY KEY (a)) SELECT 1 AS a UNION ALL SELECT 1;
 --error ER_NO_SUCH_TABLE
@@ -29,3 +35,15 @@ SELECT * FROM t1;
 # Here comes a server crash.
 --error ER_BAD_TABLE_ERROR
 DROP TABLE t1;
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+# Check not applicable in this test.
+#SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+# Final cleanup not applicable in this test.
+#DROP TABLE t1;

=== modified file 'mysql-test/suite/ndb/r/ndb_dd_dump.result'
--- a/mysql-test/suite/ndb/r/ndb_dd_dump.result	2007-11-22 14:46:54 +0000
+++ b/mysql-test/suite/ndb/r/ndb_dd_dump.result	2008-09-04 09:22:16 +0000
@@ -182,7 +182,8 @@ FILE_NAME,
 EXTENT_SIZE,
 INITIAL_SIZE,
 ENGINE
-FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE="DATAFILE" ORDER BY FILE_NAME;
+FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE="DATAFILE"
+AND ENGINE='ndbcluster' ORDER BY FILE_NAME;
 TABLESPACE_NAME	LOGFILE_GROUP_NAME	FILE_NAME	EXTENT_SIZE	INITIAL_SIZE	ENGINE
 ts1	lg1	datafile_ts1_01.dat	1048576	2097152	ndbcluster
 ts1	lg1	datafile_ts1_02.dat	1048576	1048576	ndbcluster

=== modified file 'mysql-test/suite/ndb/t/ndb_dd_dump.test'
--- a/mysql-test/suite/ndb/t/ndb_dd_dump.test	2007-08-21 19:22:35 +0000
+++ b/mysql-test/suite/ndb/t/ndb_dd_dump.test	2008-09-04 09:22:16 +0000
@@ -211,7 +211,8 @@ SELECT DISTINCT
   EXTENT_SIZE,
   INITIAL_SIZE,
   ENGINE
-FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE="DATAFILE" ORDER BY FILE_NAME;
+FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE="DATAFILE"
+AND ENGINE='ndbcluster' ORDER BY FILE_NAME;
 
 SELECT COUNT(*) FROM t1;
 SELECT COUNT(*) FROM t2;

=== modified file 'mysys/stacktrace.c'
--- a/mysys/stacktrace.c	2008-06-20 11:40:01 +0000
+++ b/mysys/stacktrace.c	2008-09-05 00:35:12 +0000
@@ -544,8 +544,11 @@ void my_write_core(int unused)
   if(hFile)
   {
     /* Create minidump */
+    MINIDUMP_TYPE dump_type = (MINIDUMP_TYPE)
+    (MiniDumpWithDataSegs|MiniDumpWithPrivateReadWriteMemory);
+
     if(pMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
-      hFile, MiniDumpNormal, &info, 0, 0))
+      hFile, dump_type, &info, 0, 0))
     {
       fprintf(stderr, "Minidump written to %s\n",
         _fullpath(path, dump_fname, sizeof(path)) ? path : dump_fname);

=== modified file 'storage/falcon/BDB.cpp'
--- a/storage/falcon/BDB.cpp	2008-07-24 08:45:03 +0000
+++ b/storage/falcon/BDB.cpp	2008-09-04 14:49:10 +0000
@@ -53,6 +53,9 @@ Bdb::Bdb()
 	pageNumber = -1;
 	useCount = 0;
 	age = 0;
+#ifdef CHECK_STALLED_BDB
+	stallCount = 0;
+#endif // CHECK_STALLED_BDB
 	markingThread = NULL;
 	priorDirty = nextDirty = NULL;
 	flushIt = false;

=== modified file 'storage/falcon/BDB.h'
--- a/storage/falcon/BDB.h	2008-07-24 08:45:03 +0000
+++ b/storage/falcon/BDB.h	2008-09-04 14:49:10 +0000
@@ -27,11 +27,11 @@
 #include "SyncObject.h"
 
 //#define COLLECT_BDB_HISTORY
-#if defined _DEBUG  && defined COLLECT_BDB_HISTORY
-	#define ADD_HISTORY          +1, THIS_FILE, __LINE__
-	#define COMMA_ADD_HISTORY   ,+1, THIS_FILE, __LINE__
-	#define REL_HISTORY          -1, THIS_FILE, __LINE__
-	#define BDB_HISTORY(_bdb_)   {if (_bdb_) (_bdb_)->addHistory(0, THIS_FILE, __LINE__);}
+#if defined COLLECT_BDB_HISTORY
+	#define ADD_HISTORY          +1, __FILE__, __LINE__
+	#define COMMA_ADD_HISTORY   ,+1, __FILE__, __LINE__
+	#define REL_HISTORY          -1, __FILE__, __LINE__
+	#define BDB_HISTORY(_bdb_)   {if (_bdb_) (_bdb_)->addHistory(0, __FILE__, __LINE__);}
 	#define MAX_BDB_HISTORY 100
 	#define BDB_HISTORY_FILE_LEN 16
 	struct bdb_history
@@ -97,6 +97,9 @@ public:
 	SyncObject		syncWrite;
 	time_t			lastMark;
 	LockType		lockType;
+#ifdef CHECK_STALLED_BDB
+	int		stallCount;
+#endif // CHECK_STALLED_BDB
 	bool			flushIt;				// PageWriter wants to hear about this
 	bool			isDirty;
 	bool			isRegistered;			// Register with PageWrite on next release

=== modified file 'storage/falcon/Cache.cpp'
--- a/storage/falcon/Cache.cpp	2008-08-22 06:47:40 +0000
+++ b/storage/falcon/Cache.cpp	2008-09-10 21:24:50 +0000
@@ -50,9 +50,11 @@
 extern uint falcon_io_threads;
 
 //#define STOP_PAGE		55
-#define TRACE_FILE	"cache.trace"
+//#define CACHE_TRACE_FILE	"cache.trace"
 
+#ifdef CACHE_TRACE_FILE
 static FILE			*traceFile;
+#endif // CACHE_TRACE_FILE
 
 static const uint64 cacheHunkSize		= 1024 * 1024 * 128;
 static const int	ASYNC_BUFFER_SIZE	= 1024000;
@@ -68,20 +70,43 @@ static const char THIS_FILE[]=__FILE__;
 
 Cache::Cache(Database *db, int pageSz, int hashSz, int numBuffers)
 {
-	//openTraceFile();
+	openTraceFile();
 	database = db;
 	panicShutdown = false;
 	pageSize = pageSz;
-	hashSize = hashSz;
+
+	unsigned int highBit;
+	for (highBit=0x01; highBit < (unsigned int)hashSz; highBit= highBit << 1) { }
+
+	// If there are more than 4096 buckets then lets round down
+	// else lets round up
+	if (highBit >= 0x00001000) {
+		// use power of two rounded down
+		hashSize = highBit << 1;
+	} else {
+		// use power of two rounded up
+		hashSize = highBit;
+	}
+
+	hashMask = hashSize - 1;
 	numberBuffers = numBuffers;
 	upperFraction = numberBuffers / 4;
 	bufferAge = 0;
 	firstDirty = NULL;
 	lastDirty = NULL;
-	numberDirtyPages = 0;
 	pageWriter = NULL;
-	hashTable = new Bdb* [hashSz];
+	hashTable = new Bdb* [hashSize];
 	memset (hashTable, 0, sizeof (Bdb*) * hashSize);
+#ifdef DEBUG_SYNC_HASH_TABLE_SIZE
+	syncHashTable = new SyncObject [DEBUG_SYNC_HASH_TABLE_SIZE];
+	for (int loop = 0; loop < DEBUG_SYNC_HASH_TABLE_SIZE; loop ++)
+		syncHashTable[loop].setName("Cache::syncHashTable");
+#else /* DEBUG_SYNC_HASH_TABLE_SIZE */
+	syncHashTable = new SyncObject [hashSize];
+	for (int loop = 0; loop < hashSize; loop ++)
+		syncHashTable[loop].setName("Cache::syncHashTable");
+#endif /* DEBUG_SYNC_HASH_TABLE_SIZE */
+
 	sectorCache = new SectorCache(sectorCacheSize / SECTOR_BUFFER_SIZE, pageSize);
 
 	uint64 n = ((uint64) pageSize * numberBuffers + cacheHunkSize - 1) / cacheHunkSize;
@@ -103,6 +128,7 @@ Cache::Cache(Database *db, int pageSz, i
 	
 	try
 		{
+		// non-protected access to bdbs,endBdbs is OK during initialization
 		bdbs = new Bdb [numberBuffers];
 		endBdbs = bdbs + numberBuffers;
 		int remaining = 0;
@@ -121,6 +147,7 @@ Cache::Cache(Database *db, int pageSz, i
 				}
 
 			bdb->cache = this;
+			// non-protected access to bufferQueue is OK during initialization
 			bufferQueue.append(bdb);
 			bdb->buffer = (Page*) stuff;
 			stuff += pageSize;
@@ -146,10 +173,11 @@ Cache::Cache(Database *db, int pageSz, i
 
 Cache::~Cache()
 {
-	if (traceFile)
-		closeTraceFile();
+
+	closeTraceFile();
 
 	delete [] hashTable;
+	delete [] syncHashTable;
 	delete [] bdbs;
 	delete [] ioThreads;
 	delete flushBitmap;
@@ -167,15 +195,12 @@ Cache::~Cache()
 Bdb* Cache::probePage(Dbb *dbb, int32 pageNumber)
 {
 	ASSERT (pageNumber >= 0);
-	Sync sync (&syncObject, "Cache::probePage");
-	sync.lock (Shared);
-	Bdb *bdb = findBdb(dbb, pageNumber);
+	Bdb *bdb;
 	
+	/* If we already have a buffer for this, we're done */
+	bdb = lockFindBdbIncrementUseCount(dbb, pageNumber);
 	if (bdb)
 		{
-		bdb->incrementUseCount(ADD_HISTORY);
-		sync.unlock();
-
 		if (bdb->buffer->pageType == PAGE_free)
 			{
 			bdb->decrementUseCount(REL_HISTORY);
@@ -192,11 +217,49 @@ Bdb* Cache::probePage(Dbb *dbb, int32 pa
 	return NULL;
 }
 
-Bdb* Cache::findBdb(Dbb* dbb, int32 pageNumber)
+Bdb* Cache::findBdb(Dbb* dbb, int32 pageNumber, int slot)
+{
+	for (Bdb *bdb = hashTable [slot]; bdb; bdb = bdb->hash)
 {
-	for (Bdb *bdb = hashTable [pageNumber % hashSize]; bdb; bdb = bdb->hash)
 		if (bdb->pageNumber == pageNumber && bdb->dbb == dbb)
+			{
 			return bdb;
+			}
+		}
+
+	return NULL;
+}
+
+Bdb* Cache::findBdb(Dbb* dbb, int32 pageNumber)
+{
+	return (findBdb(dbb, pageNumber, PAGENUM_2_SLOT(pageNumber)));
+}
+
+Bdb* Cache::lockFindBdbIncrementUseCount(Dbb* dbb, int32 pageNumber)
+{
+	int slot = PAGENUM_2_SLOT(pageNumber);
+	Sync lockHash (&syncHashTable[PAGENUM_2_LOCK_INDEX(pageNumber, slot)], "Cache::lockFindBdbIncrementUseCount");
+	lockHash.lock (Shared);
+	Bdb *bdb;
+
+	bdb = findBdb(dbb, pageNumber, slot);
+	if (bdb != NULL)
+		bdb->incrementUseCount(ADD_HISTORY);
+
+	return bdb;
+}
+
+Bdb* Cache::lockFindBdbIncrementUseCount(int32 pageNumber, int slot)
+{
+	Sync lockHash (&syncHashTable[PAGENUM_2_LOCK_INDEX(pageNumber, slot)], "Cache::lockFindBdbIncrementUseCount");
+	lockHash.lock (Shared);
+
+	for (Bdb *bdb = hashTable [slot]; bdb; bdb = bdb->hash)
+		if (bdb->pageNumber == pageNumber)
+		{
+			bdb->incrementUseCount(ADD_HISTORY);
+			return bdb;
+		}
 
 	return NULL;
 }
@@ -217,52 +280,40 @@ Bdb* Cache::fetchPage(Dbb *dbb, int32 pa
 #endif
 
 	ASSERT (pageNumber >= 0);
-	int slot = pageNumber % hashSize;
-	LockType actual = lockType;
-	Sync sync (&syncObject, "Cache::fetchPage");
-	sync.lock (Shared);
-	int hit = 0;
-
-	/* If we already have a buffer for this go, we're done */
-
 	Bdb *bdb;
 
-	for (bdb = hashTable [slot]; bdb; bdb = bdb->hash)
-		if (bdb->pageNumber == pageNumber && bdb->dbb == dbb)
-			{
-			//syncObject.validateShared("Cache::fetchPage");
-			bdb->incrementUseCount(ADD_HISTORY);
-			sync.unlock();
-			bdb->addRef(lockType  COMMA_ADD_HISTORY);
-			bdb->decrementUseCount(REL_HISTORY);
-			hit = 1;
-			break;
-			}
-
+	/* If we already have a buffer for this, we're done */
+	bdb = lockFindBdbIncrementUseCount(dbb, pageNumber);
 	if (!bdb)
 		{
-		sync.unlock();
-		actual = Exclusive;
-		sync.lock(Exclusive);
-
-		for (bdb = hashTable [slot]; bdb; bdb = bdb->hash)
-			if (bdb->pageNumber == pageNumber && bdb->dbb == dbb)
-				{
-				//syncObject.validateExclusive("Cache::fetchPage (retry)");
-				bdb->incrementUseCount(ADD_HISTORY);
-				sync.unlock();
-				bdb->addRef(lockType  COMMA_ADD_HISTORY);
-				bdb->decrementUseCount(REL_HISTORY);
-				hit = 2;
-				break;
-				}
+		// getFreeBuffer() locks a hash bucket to remove the candidate bdb
+		// if we locked our hash bucket before the call then we could have
+		// a deadlock
+		// thus we get the free buffer before we lock the hash bucket we will
+		// be inserting into.  This avoids a dead lock but generates a race
+		// we take care of the race by reversing the getFreeBuffer() work
+		// when we lose the race
+		Bdb *bdbAvailable;
+		int slot = PAGENUM_2_SLOT(pageNumber);
+		Sync lockHash (&syncHashTable[PAGENUM_2_LOCK_INDEX(pageNumber, slot)], "Cache::fetchPage");
+
+		// Assume we'll be inserting this new BDB.  Set new page number. */
+
+		bdbAvailable = getFreeBuffer();
+		bdbAvailable->pageNumber = pageNumber;
+		bdbAvailable->dbb = dbb;
 
+		lockHash.lock(Exclusive);
+		bdb = findBdb(dbb, pageNumber, slot);
 		if (!bdb)
 			{
-			bdb = findBuffer(dbb, pageNumber, actual);
-			moveToHead(bdb);
-			sync.unlock();
+			// we won the race so lets use the free bdb
+			// relink into hash table
+			bdbAvailable->hash = hashTable [slot];
+			hashTable [slot] = bdbAvailable;
+			lockHash.unlock();
 
+			bdb = bdbAvailable;
 #ifdef STOP_PAGE			
 			if (bdb->pageNumber == STOP_PAGE)
 				Log::debug("reading page %d/%d\n", bdb->pageNumber, dbb->tableSpaceId);
@@ -278,9 +329,31 @@ Bdb* Cache::fetchPage(Dbb *dbb, int32 pa
 #ifdef HAVE_PAGE_NUMBER
 			ASSERT(bdb->buffer->pageNumber == pageNumber);
 #endif			
-			if (actual != lockType)
+			if (Exclusive != lockType)
 				bdb->downGrade(lockType);
 			}
+			else
+			{
+			//syncObject.validateExclusive("Cache::fetchPage (retry)");
+			bdb->incrementUseCount(ADD_HISTORY);
+			lockHash.unlock();
+			bdb->addRef(lockType  COMMA_ADD_HISTORY);
+			bdb->decrementUseCount(REL_HISTORY);
+			moveToHead(bdb);
+
+			// lost a race.  put our available back to useable
+			// side effect, bdbAvailable will have to age again before we re-use it.
+			bdbAvailable->hash = NULL;
+			bdbAvailable->pageNumber = -1;
+			bdbAvailable->dbb = NULL;
+			bdbAvailable->release(REL_HISTORY);
+			}
+		}
+		else
+		{
+		bdb->addRef(lockType  COMMA_ADD_HISTORY);
+		bdb->decrementUseCount(REL_HISTORY);
+		moveToHead(bdb);
 		}
 
 	Page *page = bdb->buffer;
@@ -294,7 +367,7 @@ Bdb* Cache::fetchPage(Dbb *dbb, int32 pa
 	if (pageType && page->pageType != pageType)
 		{
 		/*** future code
-		bdb->release();
+		bdb->release(REL_HISTORY);
 		throw SQLError (DATABASE_CORRUPTION, "page %d wrong page type, expected %d got %d\n",
 						pageNumber, pageType, page->pageType);
 		***/
@@ -302,14 +375,6 @@ Bdb* Cache::fetchPage(Dbb *dbb, int32 pa
 				 bdb->pageNumber, dbb->tableSpaceId, pageType, page->pageType);
 		}
 
-	// If buffer has moved out of the upper "fraction" of the LRU queue, move it back up
-	
-	if (bdb->age < bufferAge - (uint64) upperFraction)
-		{
-		sync.lock (Exclusive);
-		moveToHead (bdb);
-		}
-		
 	ASSERT (bdb->pageNumber == pageNumber);
 	ASSERT (bdb->dbb == dbb);
 	ASSERT (bdb->useCount > 0);
@@ -319,9 +384,7 @@ Bdb* Cache::fetchPage(Dbb *dbb, int32 pa
 
 Bdb* Cache::fakePage(Dbb *dbb, int32 pageNumber, PageType type, TransId transId)
 {
-	Sync sync(&syncObject, "Cache::fakePage");
-	sync.lock(Exclusive);
-	int	slot = pageNumber % hashSize;
+	Bdb *bdb;
 
 #ifdef STOP_PAGE			
 	if (pageNumber == STOP_PAGE)
@@ -330,32 +393,67 @@ Bdb* Cache::fakePage(Dbb *dbb, int32 pag
 
 	/* If we already have a buffer for this, we're done */
 
-	Bdb *bdb;
+	bdb = lockFindBdbIncrementUseCount(dbb, pageNumber);
+	if (!bdb)
+		{
+		// getFreeBuffer() locks a hash bucket to remove the candidate bdb
+		// if we locked our hash bucket before the call then we could have
+		// a deadlock
+		// thus we get the free buffer before we lock the hash bucket we will
+		// be inserting into.  This avoids a dead lock but generates a race
+		// we take care of the race by reversing the getFreeBuffer() work
+		// when we lose the race
+		Bdb *bdbAvailable;
+		int slot = PAGENUM_2_SLOT(pageNumber);
+		Sync lockHash (&syncHashTable[PAGENUM_2_LOCK_INDEX(pageNumber, slot)], "Cache::fetchPage");
+
+		// Assume we'll be inserting this new BDB.  Set new page number.
+
+		bdbAvailable = getFreeBuffer();
+		bdbAvailable->pageNumber = pageNumber;
+		bdbAvailable->dbb = dbb;
 
-	for (bdb = hashTable [slot]; bdb; bdb = bdb->hash)
-		if (bdb->pageNumber == pageNumber && bdb->dbb == dbb)
+		lockHash.lock(Exclusive);
+		bdb = findBdb(dbb, pageNumber, slot);
+		if (!bdb)
 			{
-			if (bdb->syncObject.isLocked())
-				{
-				// The pageWriter may still be cleaning up this freed page with a shared lock
-				ASSERT(bdb->buffer->pageType == PAGE_free);
-				ASSERT(bdb->syncObject.getState() >= 0);
-				}
-				
-			bdb->addRef(Exclusive  COMMA_ADD_HISTORY);
-			
-			break;
+			// we won the race so lets use the free bdb
+			// relink into hash table
+			bdbAvailable->hash = hashTable [slot];
+			hashTable [slot] = bdbAvailable;
+			lockHash.unlock();
+
+			bdb = bdbAvailable;
 			}
+			else
+			{
+			//syncObject.validateExclusive("Cache::fetchPage (retry)");
+			bdb->incrementUseCount(ADD_HISTORY);
+			lockHash.unlock();
+			bdb->addRef(Exclusive  COMMA_ADD_HISTORY);
+			bdb->decrementUseCount(REL_HISTORY);
+			moveToHead(bdb);
 
-	if (!bdb)
-		bdb = findBuffer(dbb, pageNumber, Exclusive);
+			// lost a race.  put our available back to useable
+			// side effect, bdbAvailable will have to age again before we re-use it.
+			bdbAvailable->hash = NULL;
+			bdbAvailable->pageNumber = -1;
+			bdbAvailable->dbb = NULL;
+			bdbAvailable->release(REL_HISTORY);
+			}
+		}
+		else
+		{
+		bdb->addRef(Exclusive  COMMA_ADD_HISTORY);
+		bdb->decrementUseCount(REL_HISTORY);
+		moveToHead(bdb);
+		}
 
 	if (!dbb->isReadOnly)
 		bdb->mark(transId);
 		
 	memset(bdb->buffer, 0, pageSize);
 	bdb->setPageHeader(type);
-	moveToHead(bdb);
 
 	return bdb;
 }
@@ -363,32 +461,31 @@ Bdb* Cache::fakePage(Dbb *dbb, int32 pag
 void Cache::flush(int64 arg)
 {
 	Sync flushLock(&syncFlush, "Cache::flush(1)");
-	Sync sync(&syncDirty, "Cache::flush(2)");
+	Sync dirtyLock(&syncDirty, "Cache::flush(2)");
 	flushLock.lock(Exclusive);
 	
 	if (flushing)
 		return;
 
 	syncWait.lock(NULL, Exclusive);
-	sync.lock(Shared);
 	//Log::debug(%d: "Initiating flush\n", dbb->deltaTime);
 	flushArg = arg;
 	flushPages = 0;
 	physicalWrites = 0;
 	
+	dirtyLock.lock(Shared);
 	for (Bdb *bdb = firstDirty; bdb; bdb = bdb->nextDirty)
 		{
 		bdb->flushIt = true;
 		flushBitmap->set(bdb->pageNumber);
 		++flushPages;
 		}
+	dirtyLock.unlock();
 
-	if (traceFile)
-		analyzeFlush();
+	analyzeFlush();
 
 	flushStart = database->timestamp;
 	flushing = true;
-	sync.unlock();
 	flushLock.unlock();
 	
 	for (int n = 0; n < numberIoThreads; ++n)
@@ -398,69 +495,132 @@ void Cache::flush(int64 arg)
 
 void Cache::moveToHead(Bdb * bdb)
 {
+	// If buffer has moved out of the upper "fraction" of the LRU queue, move it back up
+	// non-protected access to age is harmless since it is fuzzy anyway
+	if (bdb->age < bufferAge - (uint64) upperFraction)
+		{
+		Sync bufferQueueLock (&bufferQueue.syncObject, "Cache::moveToHead");
+
+		bufferQueueLock.lock (Exclusive);
+		bdb->age = bufferAge++;
+		bufferQueue.remove(bdb);
+		bufferQueue.prepend(bdb);
+		//validateUnique (bdb);
+		}
+}
+
+void Cache::moveToHeadAlreadyLocked(Bdb * bdb)
+{
 	bdb->age = bufferAge++;
 	bufferQueue.remove(bdb);
 	bufferQueue.prepend(bdb);
 	//validateUnique (bdb);
 }
 
-Bdb* Cache::findBuffer(Dbb *dbb, int pageNumber, LockType lockType)
+Bdb* Cache::getFreeBuffer(void)
 {
-	//syncObject.validateExclusive("Cache::findBuffer");
-	int	slot = pageNumber % hashSize;
-	Sync sync(&syncDirty, "Cache::findBuffer");
-	
-	/* Find least recently used, not-in-use buffer */
-
+	Sync bufferQueueLock (&bufferQueue.syncObject, "Cache::getFreeBuffer(queue)");
+	unsigned int count;
 	Bdb *bdb;
 
 	// Find a candidate BDB.
-	
 	for (;;)
 		{
-		for (bdb = bufferQueue.last; bdb; bdb = bdb->prior)
-			if (bdb->useCount == 0)
+		bufferQueueLock.lock (Exclusive);
+		// find a candidate that is NOT in use and NOT dirty and in the tail fraction of the LRU
+		for (count = 0, bdb = bufferQueue.last; bdb ; bdb = bdb->prior, count++)
+			{
+			if (count >= upperFraction)
+				{
+				bdb = NULL;
 				break;
+				}
+			if (bdb->useCount == 0)
+				{
+				if (!bdb->isDirty)
+					{
+					bdb->incrementUseCount(REL_HISTORY);
+					moveToHeadAlreadyLocked(bdb);
+					break;
+					}
+				}
+				else
+				{
+					// get this one out of the way so we don't search it every time
+					moveToHeadAlreadyLocked(bdb);
+#ifdef CHECK_STALLED_BDB
+					bdb->stallCount++;
+					if ((bdb->stallCount & 0x03) == 0x03) {
+						Log::debug("Page %d is in use and aged %d times\n",
+								bdb->pageNumber, bdb->stallCount);
+					}
+#endif // CHECK_STALLED_BDB
+				}
+			}
+
+		if (!bdb)
+			// find a candidate that is NOT in use, could be dirty
+			for (bdb = bufferQueue.last; bdb; bdb = bdb->prior)
+				if (bdb->useCount == 0)
+					{
+					bdb->incrementUseCount(REL_HISTORY);
+					moveToHeadAlreadyLocked(bdb);
+					break;
+					}
+		bufferQueueLock.unlock();
 
 		if (!bdb)
 			throw SQLError(RUNTIME_ERROR, "buffer pool is exhausted\n");
 			
-		if (!bdb->isDirty)
-			break;
-			
-		writePage (bdb, WRITE_TYPE_REUSE);
-		}
-
-	/* Unlink its old incarnation from the page/hash table */
+		if (bdb->pageNumber >= 0)
+		{
+			int	slotRemove = PAGENUM_2_SLOT(bdb->pageNumber);
+			Sync lockHashRemove (&syncHashTable[PAGENUM_2_LOCK_INDEX(bdb->pageNumber, slotRemove)], "Cache::getFreeBuffer(remove)");
+			lockHashRemove.lock(Exclusive);
 
-	if (bdb->pageNumber >= 0)
-		for (Bdb **ptr = hashTable + bdb->pageNumber % hashSize;; ptr = &(*ptr)->hash)
-			if (*ptr == bdb)
+			if (bdb->useCount != 1)
 				{
-				*ptr = bdb->hash;
-				break;
+				// we lost a race try again
+				bdb->decrementUseCount(REL_HISTORY);
+				lockHashRemove.unlock();
+				continue;
 				}
-			else
-				ASSERT (*ptr);
 
-	bdb->addRef (lockType  COMMA_ADD_HISTORY);
+			if (bdb->isDirty)
+				writePage (bdb, WRITE_TYPE_REUSE);
 
-	/* Set new page number and relink into hash table */
+			/* Unlink its old incarnation from the page/hash table */
+			for (Bdb **ptr = hashTable + PAGENUM_2_SLOT(bdb->pageNumber) ;; ptr = &(*ptr)->hash)
+				if (*ptr == bdb)
+					{
+					*ptr = bdb->hash;
+					break;
+					}
+				else
+					ASSERT (*ptr);
+		}
 
-	bdb->hash = hashTable [slot];
-	hashTable [slot] = bdb;
-	bdb->pageNumber = pageNumber;
-	bdb->dbb = dbb;
+		break;
+		}
+#ifdef CHECK_STALLED_BDB
+	bdb->stallCount = 0;
+#endif // CHECK_STALLED_BDB
 
 #ifdef COLLECT_BDB_HISTORY
 	bdb->initHistory();
 #endif
+	bdb->addRef (Exclusive  COMMA_ADD_HISTORY);
+	bdb->decrementUseCount(REL_HISTORY);
 
 	return bdb;
 }
 
 void Cache::validate()
 {
+	//Sync bufferQueueLock (&bufferQueue.syncObject, "Cache::validate");
+
+	//bufferQueueLock.lock (Shared);
+	// non-protected access to bufferQueue is DANGEROUS...
 	for (Bdb *bdb = bufferQueue.last; bdb; bdb = bdb->prior)
 		{
 		//IndexPage *page = (IndexPage*) bdb->buffer;
@@ -470,8 +630,8 @@ void Cache::validate()
 
 void Cache::markDirty(Bdb *bdb)
 {
-	Sync sync (&syncDirty, "Cache::markDirty");
-	sync.lock (Exclusive);
+	Sync dirtyLock (&syncDirty, "Cache::markDirty");
+	dirtyLock.lock (Exclusive);
 	bdb->nextDirty = NULL;
 	bdb->priorDirty = lastDirty;
 
@@ -481,14 +641,13 @@ void Cache::markDirty(Bdb *bdb)
 		firstDirty = bdb;
 
 	lastDirty = bdb;
-	++numberDirtyPages;
 	//validateUnique (bdb);
 }
 
 void Cache::markClean(Bdb *bdb)
 {
-	Sync sync (&syncDirty, "Cache::markClean");
-	sync.lock (Exclusive);
+	Sync dirtyLock (&syncDirty, "Cache::markClean");
+	dirtyLock.lock (Exclusive);
 
 	/***
 	if (bdb->flushIt)
@@ -496,7 +655,6 @@ void Cache::markClean(Bdb *bdb)
 	***/
 	
 	bdb->flushIt = false;
-	--numberDirtyPages;
 	
 	if (bdb == lastDirty)
 		lastDirty = bdb->priorDirty;
@@ -600,8 +758,8 @@ void Cache::writePage(Bdb *bdb, int type
 
 	if (dbb->shadows)
 		{
-		Sync sync (&dbb->syncClone, "Cache::writePage(2)");
-		sync.lock (Shared);
+		Sync cloneLock (&dbb->syncClone, "Cache::writePage(2)");
+		cloneLock.lock (Shared);
 
 		for (DatabaseCopy *shadow = dbb->shadows; shadow; shadow = shadow->next)
 			shadow->rewritePage(bdb);
@@ -610,14 +768,14 @@ void Cache::writePage(Bdb *bdb, int type
 
 void Cache::analyze(Stream *stream)
 {
-	Sync sync (&syncDirty, "Cache::analyze");
-	sync.lock (Shared);
+	Sync dirtyLock (&syncDirty, "Cache::analyze");
 	int inUse = 0;
 	int dirty = 0;
 	int dirtyList = 0;
 	int total = 0;
 	Bdb *bdb;
 
+	// non-protected access to bdbs,endBdbs is DANGEROUS...
 	for (bdb = bdbs; bdb < endBdbs; ++bdb)
 		{
 		++total;
@@ -629,8 +787,10 @@ void Cache::analyze(Stream *stream)
 			++inUse;
 		}
 
+	dirtyLock.lock (Shared);
 	for (bdb = firstDirty; bdb; bdb = bdb->nextDirty)
 		++dirtyList;
+	dirtyLock.unlock();
 
 	stream->format ("Cache: %d pages, %d in use, %d dirty, %d in dirty chain\n",
 					total, inUse, dirty, dirtyList);
@@ -638,17 +798,18 @@ void Cache::analyze(Stream *stream)
 
 void Cache::validateUnique(Bdb *target)
 {
-	int	slot = target->pageNumber % hashSize;
+	int	slot = PAGENUM_2_SLOT(target->pageNumber);
 
+	// WARNING: unlocked walk of hash table.... DANGEROUS
 	for (Bdb *bdb = hashTable [slot]; bdb; bdb = bdb->hash)
 		ASSERT (bdb == target || !(bdb->pageNumber == target->pageNumber && bdb->dbb == target->dbb));
 }
 
 void Cache::freePage(Dbb *dbb, int32 pageNumber)
 {
-	Sync sync (&syncObject, "Cache::freePage");
-	sync.lock (Shared);
-	int	slot = pageNumber % hashSize;
+	int slot = PAGENUM_2_SLOT(pageNumber);
+	Sync lockHash (&syncHashTable[PAGENUM_2_LOCK_INDEX(pageNumber, slot)], "Cache::freePage");
+	lockHash.lock(Shared);
 
 	// If page exists in cache (usual case), clean it up
 
@@ -657,7 +818,6 @@ void Cache::freePage(Dbb *dbb, int32 pag
 			{
 			if (bdb->isDirty)
 				{
-				sync.unlock();
 				markClean (bdb);
 				}
 				
@@ -685,8 +845,8 @@ void Cache::flush(Dbb *dbb)
 
 bool Cache::hasDirtyPages(Dbb *dbb)
 {
-	Sync sync (&syncDirty, "Cache::hasDirtyPages");
-	sync.lock (Shared);
+	Sync dirtyLock (&syncDirty, "Cache::hasDirtyPages");
+	dirtyLock.lock (Shared);
 
 	for (Bdb *bdb = firstDirty; bdb; bdb = bdb->nextDirty)
 		if (bdb->dbb == dbb)
@@ -717,26 +877,16 @@ Bdb* Cache::trialFetch(Dbb* dbb, int32 p
 		}
 
 	ASSERT (pageNumber >= 0);
-	int	slot = pageNumber % hashSize;
-	Sync sync (&syncObject, "Cache::trialFetch");
-	sync.lock (Shared);
-	int hit = 0;
-
-	/* If we already have a buffer for this go, we're done */
-
 	Bdb *bdb;
 
-	for (bdb = hashTable [slot]; bdb; bdb = bdb->hash)
-		if (bdb->pageNumber == pageNumber && bdb->dbb == dbb)
-			{
-			//syncObject.validateShared("Cache::trialFetch");
-			bdb->incrementUseCount(ADD_HISTORY);
-			sync.unlock();
-			bdb->addRef(lockType  COMMA_ADD_HISTORY);
-			bdb->decrementUseCount(REL_HISTORY);
-			hit = 1;
-			break;
-			}
+	/* If we already have a buffer for this, we're done */
+	bdb = lockFindBdbIncrementUseCount(dbb, pageNumber);
+	if (bdb)
+		{
+		bdb->addRef(lockType  COMMA_ADD_HISTORY);
+		bdb->decrementUseCount(REL_HISTORY);
+		moveToHead(bdb);
+	}
 
 	return bdb;
 }
@@ -764,10 +914,9 @@ void Cache::ioThread(void* arg)
 
 void Cache::ioThread(void)
 {
-	Sync syncThread(&syncThreads, "Cache::ioThread(1)");
+	Sync syncThread(&syncThreads, "Cache::ioThread(threads)");
 	syncThread.lock(Shared);
-	Sync flushLock(&syncFlush, "Cache::ioThread(2)");
-	Sync sync(&syncObject, "Cache::ioThread(3)");
+	Sync flushLock(&syncFlush, "Cache::ioThread(flush)");
 	Priority priority(database->ioScheduler);
 	Thread *thread = Thread::getThread("Cache::ioThread");
 	UCHAR *rawBuffer = new UCHAR[ASYNC_BUFFER_SIZE];
@@ -781,137 +930,135 @@ void Cache::ioThread(void)
 		{
 		int32 pageNumber = flushBitmap->nextSet(0);
 		int count;
-		Dbb *dbb;
 		
 		if (pageNumber >= 0)
 			{
-			int	slot = pageNumber % hashSize;
+			Bdb *bdb;
+			Dbb *dbb;
+			int	slot = PAGENUM_2_SLOT(pageNumber);
 			bool hit = false;
 			Bdb *bdbList = NULL;
 			UCHAR *p = buffer;
-			sync.lock(Shared);
 			
-			// Look for a page to flush.  Then get all his friends
-			
-			for (Bdb *bdb = hashTable[slot]; bdb; bdb = bdb->hash)
-				if (bdb->pageNumber == pageNumber && bdb->flushIt && bdb->isDirty)
+			// Look for the page to flush.
+			bdb = lockFindBdbIncrementUseCount(pageNumber, slot);
+			if (bdb && bdb->flushIt && bdb->isDirty)
+				{
+				hit = true;
+				count = 0;
+				dbb = bdb->dbb;
+				
+				flushBitmap->clear(pageNumber);
+				
+				// get all his friends
+				while (p < end)
 					{
-					hit = true;
-					count = 0;
-					dbb = bdb->dbb;
+					++count;
+					bdb->addRef(Shared  COMMA_ADD_HISTORY);
 					
-					if (!bdb->hash)
-						flushBitmap->clear(pageNumber);
+					bdb->syncWrite.lock(NULL, Exclusive);
+					bdb->ioThreadNext = bdbList;
+					bdbList = bdb;
 					
-					while (p < end)
-						{
-						++count;
-						bdb->incrementUseCount(ADD_HISTORY);
-						sync.unlock();
-						bdb->addRef(Shared  COMMA_ADD_HISTORY);
-						if (falcon_use_sectorcache)
-							sectorCache->writePage(bdb);
-						
-						bdb->syncWrite.lock(NULL, Exclusive);
-						bdb->ioThreadNext = bdbList;
-						bdbList = bdb;
-						
-						//ASSERT(!(bdb->flags & BDB_write_pending));
-						//bdb->flags |= BDB_write_pending;
-						memcpy(p, bdb->buffer, pageSize);
-						p += pageSize;
-						bdb->flushIt = false;
-						markClean(bdb);
-						bdb->isDirty = false;
-						bdb->release(REL_HISTORY);
-						sync.lock(Shared);
-						
-						if ( !(bdb = findBdb(dbb, bdb->pageNumber + 1)) )
-							break;
-						
-						if (!bdb->isDirty && !continueWrite(bdb))
-							break;
-						}
+					//ASSERT(!(bdb->flags & BDB_write_pending));
+					//bdb->flags |= BDB_write_pending;
+					memcpy(p, bdb->buffer, pageSize);
+					p += pageSize;
+					bdb->flushIt = false;
+					markClean(bdb);
+					bdb->isDirty = false;
+					bdb->release(REL_HISTORY);
 					
-					if (sync.state != None)
-						sync.unlock();
-						
-					flushLock.unlock();
-					//Log::debug(" %d Writing %s %d pages: %d - %d\n", thread->threadId, (const char*) dbb->fileName, count, pageNumber, pageNumber + count - 1);
-					int length = p - buffer;
-					priority.schedule(PRIORITY_LOW);
+					bdb = lockFindBdbIncrementUseCount(dbb, bdb->pageNumber + 1);
+					if (!bdb)
+						break;
 					
-					try
+					if (!bdb->isDirty && !continueWrite(bdb))
 						{
-						priority.schedule(PRIORITY_LOW);
-						dbb->writePages(pageNumber, length, buffer, WRITE_TYPE_FLUSH);
+						bdb->decrementUseCount(REL_HISTORY);
+						break;
 						}
-					catch (SQLException& exception)
+					}
+				
+				flushLock.unlock();
+				//Log::debug(" %d Writing %s %d pages: %d - %d\n", thread->threadId, (const char*) dbb->fileName, count, pageNumber, pageNumber + count - 1);
+				int length = p - buffer;
+				priority.schedule(PRIORITY_LOW);
+				
+				try
+					{
+					priority.schedule(PRIORITY_LOW);
+					dbb->writePages(pageNumber, length, buffer, WRITE_TYPE_FLUSH);
+					}
+				catch (SQLException& exception)
+					{
+					priority.finished();
+					
+					if (exception.getSqlcode() != DEVICE_FULL)
+						throw;
+					
+					database->setIOError(&exception);
+					
+					for (bool error = true; error;)
 						{
-						priority.finished();
-						
-						if (exception.getSqlcode() != DEVICE_FULL)
-							throw;
-						
-						database->setIOError(&exception);
-						
-						for (bool error = true; error;)
+						if (thread->shutdownInProgress)
 							{
-							if (thread->shutdownInProgress)
-								{
-								Bdb *next;
+							Bdb *next;
 
-								for (bdb = bdbList; bdb; bdb = next)
-									{
-									//bdb->flags &= ~BDB_write_pending;
-									next = bdb->ioThreadNext;
-									bdb->syncWrite.unlock();
-									bdb->decrementUseCount(REL_HISTORY);
-									}
-									
-								return;
-								}
-							
-							thread->sleep(1000);
-							
-							try
+							for (bdb = bdbList; bdb; bdb = next)
 								{
-								priority.schedule(PRIORITY_LOW);
-								dbb->writePages(pageNumber, length, buffer, WRITE_TYPE_FLUSH);
-								error = false;
-								database->clearIOError();
+								//bdb->flags &= ~BDB_write_pending;
+								next = bdb->ioThreadNext;
+								bdb->syncWrite.unlock();
+								bdb->decrementUseCount(REL_HISTORY);
 								}
-							catch (SQLException& exception2)
-								{
-								priority.finished();
 								
-								if (exception2.getSqlcode() != DEVICE_FULL)
-									throw;
-								}
+							return;
+							}
+						
+						thread->sleep(1000);
+						
+						try
+							{
+							priority.schedule(PRIORITY_LOW);
+							dbb->writePages(pageNumber, length, buffer, WRITE_TYPE_FLUSH);
+							error = false;
+							database->clearIOError();
+							}
+						catch (SQLException& exception2)
+							{
+							priority.finished();
+							
+							if (exception2.getSqlcode() != DEVICE_FULL)
+								throw;
 							}
 						}
+					}
 
-					priority.finished();
-					Bdb *next;
+				priority.finished();
+				Bdb *next;
 
-					for (bdb = bdbList; bdb; bdb = next)
-						{
-						//ASSERT(bdb->flags & BDB_write_pending);
-						//bdb->flags &= ~BDB_write_pending;
-						next = bdb->ioThreadNext;
-						bdb->syncWrite.unlock();
-						bdb->decrementUseCount(REL_HISTORY);
-						}
-					
-					flushLock.lock(Exclusive);
-					++physicalWrites;
-					
-					break;
+				for (bdb = bdbList; bdb; bdb = next)
+					{
+					//ASSERT(bdb->flags & BDB_write_pending);
+					//bdb->flags &= ~BDB_write_pending;
+					next = bdb->ioThreadNext;
+					bdb->syncWrite.unlock();
+					bdb->decrementUseCount(REL_HISTORY);
 					}
+				
+				flushLock.lock(Exclusive);
+				++physicalWrites;
+				
+				}
+			else
+				{
+					if (bdb)
+						bdb->decrementUseCount(REL_HISTORY);
+				}
 			
 			if (!hit)
 				{
-				sync.unlock();
 				flushBitmap->clear(pageNumber);
 				}
 			}
@@ -922,7 +1069,9 @@ void Cache::ioThread(void)
 				int writes = physicalWrites;
 				int pages = flushPages;
 				int delta = (int) (database->timestamp - flushStart);
+				int64 callbackArg = flushArg;
 				flushing = false;
+				flushArg = 0;
 				flushLock.unlock();
 				syncWait.unlock();
 				
@@ -930,7 +1079,8 @@ void Cache::ioThread(void)
 					Log::log(LogInfo, "%d: Cache flush: %d pages, %d writes in %d seconds (%d pps)\n",
 								database->deltaTime, pages, writes, delta, pages / MAX(delta, 1));
 
-				database->pageCacheFlushed(flushArg);
+				if (callbackArg != 0)
+					database->pageCacheFlushed(callbackArg);
 				}
 			else
 				flushLock.unlock();
@@ -940,8 +1090,8 @@ void Cache::ioThread(void)
 
 			thread->sleep();
 			flushLock.lock(Exclusive);
-			}
 		}
+		} // for ever
 	
 	delete [] rawBuffer;			
 }
@@ -954,11 +1104,12 @@ bool Cache::continueWrite(Bdb* startingB
 	
 	for (int32 pageNumber = startingBdb->pageNumber + 1, end = pageNumber+ 5; pageNumber < end; ++pageNumber)
 		{
-		Bdb *bdb = findBdb(dbb, pageNumber);
+		Bdb *bdb;
 		
 		if (dirty > clean)
 			return true;
-			
+
+		bdb = lockFindBdbIncrementUseCount(dbb, pageNumber);
 		if (!bdb)
 			return dirty >= clean;
 		
@@ -966,6 +1117,7 @@ bool Cache::continueWrite(Bdb* startingB
 			++dirty;
 		else
 			++clean;
+		bdb->decrementUseCount(REL_HISTORY);
 		}
 	
 	return (dirty >= clean);
@@ -995,15 +1147,18 @@ void Cache::shutdownThreads(void)
 		ioThreads[n] = 0;
 		}
 	
-	Sync sync(&syncThreads, "Cache::shutdownThreads");
-	sync.lock(Exclusive);
+	Sync lockThreads(&syncThreads, "Cache::shutdownThreads");
+	lockThreads.lock(Exclusive);
 }
 
+#ifdef CACHE_TRACE_FILE
 void Cache::analyzeFlush(void)
 {
 	Dbb *dbb = NULL;
 	Bdb *bdb;
+	Sync dirtyLock (&syncDirty, "Cache::hasDirtyPages");
 	
+	dirtyLock.lock (Shared);
 	for (bdb = firstDirty; bdb; bdb = bdb->nextDirty)
 		if (bdb->dbb->tableSpaceId == 1)
 			{
@@ -1011,6 +1166,7 @@ void Cache::analyzeFlush(void)
 			
 			break;
 			}
+	dirtyLock.unlock();
 	
 	if (!dbb)
 		return;
@@ -1018,16 +1174,19 @@ void Cache::analyzeFlush(void)
 	fprintf(traceFile, "-------- time %d -------\n", database->deltaTime);
 
 	for (int pageNumber = 0; (pageNumber = flushBitmap->nextSet(pageNumber)) >= 0;)
+		// non-protected access to hash table via findBdb()!
 		if ( (bdb = findBdb(dbb, pageNumber)) )
 			{
 			int start = pageNumber;
 			int type = bdb->buffer->pageType;
 			
+			// non-protected access to hash table via findBdb()!
 			for (; (bdb = findBdb(dbb, ++pageNumber)) && bdb->flushIt;)
 				;
 			
 			fprintf(traceFile, " %d flushed: %d to %d, first type %d\n", pageNumber - start, start, pageNumber - 1, type);
 			
+			// non-protected access to hash table via findBdb()!
 			for (int max = pageNumber + 5; pageNumber < max && (bdb = findBdb(dbb, pageNumber)) && !bdb->flushIt; ++pageNumber)
 				{
 				if (bdb->isDirty)
@@ -1044,27 +1203,39 @@ void Cache::analyzeFlush(void)
 
 void Cache::openTraceFile(void)
 {
-#ifdef TRACE_FILE
 	if (traceFile)
 		closeTraceFile();
 		
-	traceFile = fopen(TRACE_FILE, "w");
-#endif
+	traceFile = fopen(TRACE_FILE, "a+");
+	fprintf(traceFile, "Starting\n");
+//KEL
+//	setvbuf(traceFile, (char *) NULL, _IOLBF, 0);
+
 }
 
 void Cache::closeTraceFile(void)
 {
-#ifdef TRACE_FILE
 	if (traceFile)
 		{
 		fclose(traceFile);
 		traceFile = NULL;
 		}
-#endif
 }
+#else // CACHE_TRACE_FILE
+void Cache::analyzeFlush(void)
+{
+}
+void Cache::openTraceFile(void)
+{
+}
+void Cache::closeTraceFile(void)
+{
+}
+#endif // CACHE_TRACE_FILE
 
 void Cache::flushWait(void)
 {
-	Sync sync(&syncWait, "Cache::flushWait");
-	sync.lock(Shared);
+	Sync waitLock(&syncWait, "Cache::flushWait");
+	waitLock.lock(Exclusive);
 }
+

=== modified file 'storage/falcon/Cache.h'
--- a/storage/falcon/Cache.h	2008-08-22 06:47:40 +0000
+++ b/storage/falcon/Cache.h	2008-09-10 21:24:50 +0000
@@ -28,6 +28,17 @@
 #include "SyncObject.h"
 #include "Queue.h"
 
+// uncomment DEBUG_SYNC_HASH_TABLE_SIZE to cause more contention and test for race conditions
+//#define DEBUG_SYNC_HASH_TABLE_SIZE (0x01 << 1)
+#ifdef DEBUG_SYNC_HASH_TABLE_SIZE
+#  define DEBUG_SYNC_HASH_TABLE_MASK (DEBUG_SYNC_HASH_TABLE_SIZE - 1)
+#  define PAGENUM_2_LOCK_INDEX(_pgnum, _slot) ((_pgnum) & DEBUG_SYNC_HASH_TABLE_MASK)
+#else /* DEBUG_SYNC_HASH_TABLE_SIZE */
+#  define PAGENUM_2_LOCK_INDEX(_pgnum, _slot) ((_slot))
+#endif /* DEBUG_SYNC_HASH_TABLE_SIZE */
+
+#define PAGENUM_2_SLOT(_pgnum) ((_pgnum) & hashMask)
+
 class Bdb;
 class Dbb;
 class PageWriter;
@@ -54,7 +65,6 @@ public:
 	void	markClean (Bdb *bdb);
 	void	markDirty (Bdb *bdb);
 	void	validate();
-	void	moveToHead (Bdb *bdb);
 	void	flush(int64 arg);
 	void	validateCache(void);
 	void	syncFile(Dbb *dbb, const char *text);
@@ -77,24 +87,30 @@ public:
 
 	SyncObject	syncObject;
 	PageWriter	*pageWriter;
-	Database	*database;
+	Database		*database;
 	int			numberBuffers;
-	bool		panicShutdown;
-	bool		flushing;
+	bool			panicShutdown;
+	bool			flushing;
 
 protected:
-	Bdb*		findBuffer (Dbb *dbb, int pageNumber, LockType lockType);
+	void		moveToHead (Bdb *bdb);
+	void		moveToHeadAlreadyLocked (Bdb *bdb);
+	Bdb*		getFreeBuffer(void);
+	Bdb*		findBdb(Dbb* dbb, int32 pageNumber, int slot);
 	Bdb*		findBdb(Dbb* dbb, int32 pageNumber);
+	Bdb*		lockFindBdbIncrementUseCount(Dbb* dbb, int32 pageNumber);
+	Bdb*		lockFindBdbIncrementUseCount(int32 pageNumber, int slot);
 
-	int64		flushArg;
+	int64			flushArg;
 	Bdb			*bdbs;
 	Bdb			*endBdbs;
 	Queue<Bdb>	bufferQueue;
 	Bdb			**hashTable;
+	SyncObject  *syncHashTable;
 	Bdb			*firstDirty;
 	Bdb			*lastDirty;
 	Bitmap		*flushBitmap;
-	char		**bufferHunks;
+	char			**bufferHunks;
 	Thread		**ioThreads;
 	SectorCache	*sectorCache;
 	SyncObject	syncFlush;
@@ -105,12 +121,13 @@ protected:
 	int			flushPages;
 	int			physicalWrites;
 	int			hashSize;
+	unsigned int	hashMask;
 	int			pageSize;
-	int			upperFraction;
+	unsigned int upperFraction;
 	int			numberHunks;
-	int			numberDirtyPages;
 	int			numberIoThreads;
-	volatile int bufferAge;
+	volatile uint64 bufferAge;
+
 public:
 	void flushWait(void);
 };

=== modified file 'storage/falcon/Configuration.cpp'
--- a/storage/falcon/Configuration.cpp	2008-08-29 20:41:13 +0000
+++ b/storage/falcon/Configuration.cpp	2008-09-09 23:15:17 +0000
@@ -42,7 +42,6 @@
 #include "SQLError.h"
 #include "Log.h"
 #include "IOx.h"
-#include "ScanDir.h"
 
 #ifndef ULL
 #define ULL(a)		((uint64) a)

=== modified file 'storage/falcon/Database.cpp'
--- a/storage/falcon/Database.cpp	2008-09-03 21:49:18 +0000
+++ b/storage/falcon/Database.cpp	2008-09-10 21:38:01 +0000
@@ -683,9 +683,7 @@ void Database::createDatabase(const char
 		}
 	catch (...)
 		{
-		dbb->closeFile();
-		dbb->deleteFile();
-		
+		deleteFilesOnExit = true;
 		throw;
 		}
 }
@@ -709,34 +707,18 @@ void Database::openDatabase(const char *
 			{
 			if (dbb->logLength)
 				serialLog->copyClone(dbb->logRoot, dbb->logOffset, dbb->logLength);
+			serialLog->open(dbb->logRoot, false);
+			if (dbb->tableSpaceSectionId)
+				tableSpaceManager->bootstrap(dbb->tableSpaceSectionId);
 
-			try
+			try 
 				{
-				serialLog->open(dbb->logRoot, false);
+				serialLog->recover();
 				}
-			catch (SQLException&)
+			catch(SQLError &e)
 				{
-				const char *p = strrchr(filename, '.');
-				JString logRoot = (p) ? JString(filename, (int) (p - filename)) : name;
-				bool failed = true;
-				
-				try
-					{
-					serialLog->open(logRoot, false);
-					failed = false;
-					}
-				catch (...)
-					{
-					}
-				
-				if (failed)
-					throw;
+				throw SQLError(RECOVERY_ERROR, "Recovery failed: %s",e.getText());
 				}
-			
-			if (dbb->tableSpaceSectionId)
-				tableSpaceManager->bootstrap(dbb->tableSpaceSectionId);
-
-			serialLog->recover();
 			tableSpaceManager->postRecovery();
 			serialLog->start();
 			}
@@ -1459,50 +1441,61 @@ void Database::dropTable(Table *table, T
 
 void Database::truncateTable(Table *table, Sequence *sequence, Transaction *transaction)
 {
-	Sync syncDDL(&syncSysDDL, "Database::truncateTable(1)");
-	syncDDL.lock(Exclusive);
-	
-	table->checkDrop();
-	
 	// Check for records in active transactions
 
 	if (hasUncommittedRecords(table, transaction))
 		throw SQLError(UNCOMMITTED_UPDATES, "table %s.%s has uncommitted updates and cannot be truncated",
 						table->schemaName, table->name);
-						   
-	// Block table drop/add, table list scans ok
-	
-	Sync syncTbl(&syncTables, "Database::truncateTable(2)");
-	syncTbl.lock(Shared);
+
+	// Lock SystemDDL first.  This lock can happen multiple times in many call stacks,
+	// both before and after the following locks.  So it is important that we get an 
+	// exclusive lock first.
+
+	Sync syncDDLLock(&syncSysDDL, "Database::truncateTable(SysDDL)");
+	syncDDLLock.lock(Exclusive);
+	
+	// Lock syncScavenge before locking syncSysDDL, syncTables, or table->syncObject.
+	// The scavenger locks syncScavenge  and then syncTables
+	// If we run out of record memory, forceRecordScavenge will eventually call table->syncObject.
+
+	Sync syncScavengeLock(&syncScavenge, "Database::truncateTable(scavenge)");
+	syncScavengeLock.lock(Exclusive);
+
+	table->checkDrop();
 	
+	// Block table drop/add, table list scans ok
+
+	Sync syncTablesLock(&syncTables, "Database::truncateTable(tables)");
+	syncTablesLock.lock(Shared);
+
 	//Lock sections (factored out of SRLDropTable to avoid a deadlock)
 	//The lock order (serialLog->syncSections before table->syncObject) is 
 	//important
 
-	Sync syncSections(&serialLog->syncSections, "Database::truncateTable(3)");
-	syncSections.lock(Exclusive);
-	
+	Sync syncSectionsLock(&serialLog->syncSections, "Database::truncateTable(sections)");
+	syncSectionsLock.lock(Exclusive);
+
 	// No table access until truncate completes
-	
-	Sync syncObj(&table->syncObject, "Database::truncateTable(4)");
-	syncObj.lock(Exclusive);
-	
+
+	Sync syncTableLock(&table->syncObject, "Database::truncateTable(table)");
+	syncTableLock.lock(Exclusive);
+
 	table->deleting = true;
-	
+
 	// Purge records out of committed transactions
-	
+
 	transactionManager->truncateTable(table, transaction);
-	
+
 	Transaction *sysTransaction = getSystemTransaction();
-	
+
 	// Recreate data/blob sections and indexes
-	
+
 	table->truncate(sysTransaction);
-	
+
 	commitSystemTransaction();
-	
+
 	// Delete and recreate the sequence
-	
+
 	if (sequence)
 		sequence = sequence->recreate();
 }

=== modified file 'storage/falcon/DeferredIndex.cpp'
--- a/storage/falcon/DeferredIndex.cpp	2008-07-25 18:07:24 +0000
+++ b/storage/falcon/DeferredIndex.cpp	2008-09-10 19:51:03 +0000
@@ -840,7 +840,7 @@ void DeferredIndex::detachTransaction(vo
 	else
 		sync.unlock();
 
-	releaseRef();
+	//releaseRef();
 }
 
 void DeferredIndex::chill(Dbb *dbb)
@@ -884,8 +884,11 @@ void DeferredIndex::addRef()
 
 void DeferredIndex::releaseRef()
 {
+	ASSERT(useCount > 0);
+	
 	INTERLOCKED_DECREMENT(useCount);
 
 	if (useCount == 0)
 		delete this;
-}
\ No newline at end of file
+}
+

=== modified file 'storage/falcon/DeferredIndexWalker.cpp'
--- a/storage/falcon/DeferredIndexWalker.cpp	2008-05-07 22:37:18 +0000
+++ b/storage/falcon/DeferredIndexWalker.cpp	2008-09-10 19:51:03 +0000
@@ -31,6 +31,7 @@ DeferredIndexWalker::DeferredIndexWalker
 void DeferredIndexWalker::initialize(DeferredIndex *deferredIdx, IndexKey *indexKey, int searchFlags)
 {
 	deferredIndex = deferredIdx;
+	deferredIndex->addRef();
 	currentNode = NULL;
 	DIBucket *bucket = (DIBucket*) deferredIndex->root;
 	nodePending = true;
@@ -94,6 +95,8 @@ void DeferredIndexWalker::initialize(Def
 
 DeferredIndexWalker::~DeferredIndexWalker(void)
 {
+	if (deferredIndex)
+		deferredIndex->releaseRef();
 }
 
 DINode* DeferredIndexWalker::next(void)

=== modified file 'storage/falcon/Error.cpp'
--- a/storage/falcon/Error.cpp	2008-06-19 17:24:09 +0000
+++ b/storage/falcon/Error.cpp	2008-09-05 00:35:12 +0000
@@ -89,10 +89,9 @@ void Error::validateHeap(const char *whe
 void Error::debugBreak()
 {
 #ifdef _WIN32
-	DebugBreak();
-#else
-	raise (SIGABRT);
+	__debugbreak();
 #endif
+	raise (SIGABRT);
 }
 
 void Error::notYetImplemented(const char *fileName, int line)

=== modified file 'storage/falcon/IO.cpp'
--- a/storage/falcon/IO.cpp	2008-08-29 20:41:13 +0000
+++ b/storage/falcon/IO.cpp	2008-09-06 05:14:38 +0000
@@ -114,6 +114,8 @@ static int simulateDiskFull = SIMULATE_D
 	
 static FILE	*traceFile;
 static char baseDir[PATH_MAX+1]={0};
+bool deleteFilesOnExit = false;
+bool inCreateDatabase = false;
 
 #ifdef _DEBUG
 #undef THIS_FILE
@@ -133,6 +135,7 @@ IO::IO()
 	dbb = NULL;
 	forceFsync = true;
 	fatalError = false;
+	created = false;
 	memset(writeTypes, 0, sizeof(writeTypes));
 	syncObject.setName("IO::syncObject");
 }
@@ -141,6 +144,8 @@ IO::~IO()
 {
 	traceClose();
 	closeFile();
+	if(created && deleteFilesOnExit)
+		deleteFile();
 }
 
 static bool isAbsolutePath(const char *name)
@@ -178,26 +183,21 @@ static JString getPath(const char *filen
 
 bool IO::openFile(const char * name, bool readOnly)
 {
+	ASSERT(!inCreateDatabase);
+
 	fileName = getPath(name);
-	
-	for (int attempt = 0; attempt < 3; ++attempt)
-		{
-		fileId = ::open (fileName, (readOnly) ? O_RDONLY | O_BINARY : getWriteMode(attempt) | O_RDWR | O_BINARY);
-		
-		if (fileId >= 0)
-			break;
-		
-		if (attempt == 1)
-			forceFsync = true;
-		}
+	fileId = ::open (fileName, (readOnly) ? (O_RDONLY | O_BINARY) : (O_RDWR | O_BINARY));
 
 	if (fileId < 0)
 		{
 			int sqlError = (errno == EACCES )? FILE_ACCESS_ERROR :CONNECTION_ERROR;
-			throw SQLEXCEPTION (sqlError, "can't open file \"%s\": %s (%d)", name, strerror (errno), errno);
+			throw SQLEXCEPTION (sqlError, "can't open file \"%s\": %s (%d)", 
+								fileName.getString(), strerror (errno), errno);
 		}
 
+	setWriteFlags(fileId, &forceFsync);
 	isReadOnly = readOnly;
+	created = false;
 	
 #ifndef _WIN32
 	signal (SIGXFSZ, SIG_IGN);
@@ -219,28 +219,37 @@ bool IO::openFile(const char * name, boo
 	return fileId != -1;
 }
 
+void IO::setWriteFlags(int fileId, bool *forceFsync)
+{
+#ifndef _WIN32
+	int flags = fcntl(fileId, F_GETFL);
+
+	for (int attempt = 0; attempt < 2; attempt++)
+		{
+		if (fcntl(fileId, F_SETFL, flags|getWriteMode(attempt)) == 0)
+			break;
+		if(attempt == 1)
+			*forceFsync = true;
+		}
+#else
+	*forceFsync = true;
+#endif
+}
+
 bool IO::createFile(const char *name)
 {
 	Log::debug("IO::createFile: creating file \"%s\"\n", name);
 
 	fileName = getPath(name);
-	
-	for (int attempt = 0; attempt < 3; ++attempt)
-		{
-		fileId = ::open (fileName,
-						getWriteMode(attempt) | O_CREAT | O_RDWR | O_RANDOM | O_TRUNC | O_BINARY,
+	fileId = ::open (fileName.getString(),O_CREAT | O_RDWR | O_RANDOM | O_EXCL | O_BINARY,
 						S_IREAD | S_IWRITE | S_IRGRP | S_IWGRP);
 
-		if (fileId >= 0)
-			break;
-		
-		if (attempt == 1)
-			forceFsync = true;
-		}
 
 	if (fileId < 0)
-		throw SQLEXCEPTION (CONNECTION_ERROR,"can't create file \"%s\", %s (%d)", name, strerror (errno), errno);
+		throw SQLEXCEPTION (CONNECTION_ERROR,"can't create file \"%s\", %s (%d)", 
+			fileName.getString(), strerror (errno), errno);
 
+	setWriteFlags(fileId, &forceFsync);
 	isReadOnly = false;
 #ifndef _WIN32
 #ifndef __NETWARE__
@@ -252,7 +261,7 @@ bool IO::createFile(const char *name)
 	fcntl(fileId, F_SETLK, &lock);
 #endif
 #endif
-
+	created = true;
 	return fileId != -1;
 }
 

=== modified file 'storage/falcon/IOx.h'
--- a/storage/falcon/IOx.h	2008-08-29 20:41:13 +0000
+++ b/storage/falcon/IOx.h	2008-09-05 22:36:19 +0000
@@ -66,6 +66,7 @@ public:
 	void	readPage (Bdb *page);
 	bool	createFile (const char *name);
 	static	void setBaseDirectory(const char *path);
+	static	void setWriteFlags(int fileId, bool *forceFsync);
 	bool	openFile (const char *name, bool readOnly);
 	void	longSeek(int64 offset);
 	void	read(int64 offset, int length, UCHAR* buffer);
@@ -107,9 +108,11 @@ public:
 	bool		fatalError;
 	bool		isReadOnly;
 	bool		forceFsync;
+	bool		created;
 
 //private:
 	Dbb			*dbb;						// this is a crock and should be phased out
 };
-
+extern bool deleteFilesOnExit;
+extern bool inCreateDatabase;
 #endif // !defined(AFX_IO_H__6A019C19_A340_11D2_AB5A_0000C01D2301__INCLUDED_)

=== modified file 'storage/falcon/Index.cpp'
--- a/storage/falcon/Index.cpp	2008-08-19 03:33:01 +0000
+++ b/storage/falcon/Index.cpp	2008-09-10 21:24:50 +0000
@@ -123,6 +123,7 @@ Index::~Index()
 			{
 			ASSERT(deferredIndex->index == this);
 			deferredIndex->detachIndex();
+//			deferredIndex->releaseRef();
 			}
 		}
 
@@ -277,6 +278,7 @@ DeferredIndex *Index::getDeferredIndex(T
 	deferredIndex = new DeferredIndex(this, transaction);
 	sync.lock(Exclusive);
 	deferredIndexes.append(deferredIndex);
+//	deferredIndex->addRef();
 	sync.unlock();
 	transaction->add(deferredIndex);
 
@@ -843,6 +845,7 @@ void Index::detachDeferredIndex(Deferred
 	Sync sync(&deferredIndexes.syncObject, "Index::detachDeferredIndex(1)");
 	sync.lock(Exclusive);
 	deferredIndexes.remove(deferredIndex);
+//	deferredIndex->releaseRef();
 	sync.unlock();
 
 	if (   (database->configuration->useDeferredIndexHash)

=== modified file 'storage/falcon/SQLException.h'
--- a/storage/falcon/SQLException.h	2008-04-22 09:19:03 +0000
+++ b/storage/falcon/SQLException.h	2008-09-04 10:49:57 +0000
@@ -69,7 +69,8 @@ enum SqlCode {
 	TABLESPACE_NOT_EXIST_ERROR	= -35,
 	DEVICE_FULL					= -36,
 	FILE_ACCESS_ERROR			= -37,
-	TABLESPACE_DATAFILE_EXIST_ERROR	= -38
+	TABLESPACE_DATAFILE_EXIST_ERROR	= -38,
+	RECOVERY_ERROR				= -39
 	};
 
 class DllExport SQLException {

=== modified file 'storage/falcon/SerialLogFile.cpp'
--- a/storage/falcon/SerialLogFile.cpp	2008-07-15 18:57:27 +0000
+++ b/storage/falcon/SerialLogFile.cpp	2008-09-10 21:24:50 +0000
@@ -76,16 +76,22 @@ SerialLogFile::SerialLogFile(Database *d
 	highWater = 0;
 	writePoint = 0;
 	forceFsync = false;
+	created = false;
 	sectorSize = database->serialLogBlockSize;
 }
 
 SerialLogFile::~SerialLogFile()
 {
 	close();
+	if(created && deleteFilesOnExit)
+		unlink(fileName);
 }
 
 void SerialLogFile::open(JString filename, bool create)
 {
+	if(!create)
+		ASSERT(!inCreateDatabase);
+
 #ifdef _WIN32
 	handle = 0;
 	char pathName[1024];
@@ -96,7 +102,7 @@ void SerialLogFile::open(JString filenam
 						GENERIC_READ | GENERIC_WRITE,
 						0,							// share mode
 						NULL,						// security attributes
-						(create) ? CREATE_ALWAYS : OPEN_ALWAYS,
+						(create) ? CREATE_NEW : OPEN_EXISTING,
 						FILE_FLAG_NO_BUFFERING | FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_WRITE_THROUGH,
 						0);
 
@@ -119,25 +125,19 @@ void SerialLogFile::open(JString filenam
 
 	sectorSize = MAX(bytesPerSector, database->serialLogBlockSize);
 #else
+	
 
-	for (int attempt = 0; attempt < 3; ++attempt)
-		{
-		if (create)
-			handle = ::open(filename,  IO::getWriteMode(attempt) | O_RDWR | O_BINARY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
-		else
-			handle = ::open(filename, IO::getWriteMode(attempt) | O_RDWR | O_BINARY);
+	if (create)
+		handle = ::open(filename, O_RDWR | O_BINARY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+	else
+		handle = ::open(filename, O_RDWR | O_BINARY);
 
-		if (handle > 0)
-			break;
-		
-		if (attempt == 1)
-			forceFsync = true;
-		}
 
 	if (handle <= 0)		
 		throw SQLEXCEPTION (IO_ERROR, "can't open file \"%s\": %s (%d)", 
 							(const char*) filename, strerror (errno), errno);
 
+	IO::setWriteFlags(handle, &forceFsync);
 	fileName = filename;
 	struct stat statBuffer;
 	fstat(handle, &statBuffer);
@@ -146,7 +146,10 @@ void SerialLogFile::open(JString filenam
 #endif
 
 	if (create)
+	{
+		created = true;
 		zap();
+	}
 }
 
 void SerialLogFile::close()

=== modified file 'storage/falcon/SerialLogFile.h'
--- a/storage/falcon/SerialLogFile.h	2008-06-23 10:22:43 +0000
+++ b/storage/falcon/SerialLogFile.h	2008-09-04 10:49:57 +0000
@@ -51,6 +51,7 @@ public:
 	Mutex		syncObject;
 	Database	*database;
 	bool		forceFsync;
+	bool		created;
 
 #ifdef _WIN32
 	void	*handle;

=== modified file 'storage/falcon/StorageHandler.cpp'
--- a/storage/falcon/StorageHandler.cpp	2008-09-03 22:17:54 +0000
+++ b/storage/falcon/StorageHandler.cpp	2008-09-05 22:36:19 +0000
@@ -81,7 +81,7 @@ static const char *falconSchema [] = {
 class Server;
 extern Server*	startServer(int port, const char *configFile);
 
-static StorageHandler *storageHandler;
+StorageHandler *storageHandler;
 
 static char charTable[256];
 static int init();
@@ -113,6 +113,14 @@ StorageHandler*	getFalconStorageHandler(
 	return storageHandler;
 }
 
+void freeFalconStorageHandler(void)
+{
+	if (storageHandler)
+		{
+		delete storageHandler;
+		storageHandler = 0;
+		}
+}
 void StorageHandler::setDataDirectory(const char *directory)
 {
 	IO::setBaseDirectory(directory);
@@ -131,6 +139,8 @@ StorageHandler::StorageHandler(int lockS
 	syncObject.setName("StorageHandler::syncObject");
 	hashSyncObject.setName("StorageHandler::hashSyncObject");
 	dictionarySyncObject.setName("StorageHandler::dictionarySyncObject");
+	inCreateDatabase=false;
+	deleteFilesOnExit=false;
 }
 
 StorageHandler::~StorageHandler(void)
@@ -191,7 +201,6 @@ void StorageHandler::shutdownHandler(voi
 	connection->shutdown();
 	connection->close();
 	***/
-	delete this;
 }
 
 void StorageHandler::databaseDropped(StorageDatabase *storageDatabase, StorageConnection* storageConnection)
@@ -990,32 +999,51 @@ void StorageHandler::initialize(void)
 		}
 	catch (SQLException &e)
 		{
-		// No point in creating a database if we got memory error.
-		// On FILE_ACCESS_ERROR, an external application can temporarily lock the file.
-		// In this both cases, trying to create database in this case could eventually
-		// lead to "recreate" and data loss.
-		
 		int err = e.getSqlcode();
-		
-		if (err == OUT_OF_MEMORY_ERROR || err == FILE_ACCESS_ERROR || err == VERSION_ERROR)
+
+		// If got one of following errors, just rethrow. No point in 
+		// trying to create database.
+		if (err == OUT_OF_MEMORY_ERROR || err == FILE_ACCESS_ERROR ||
+			err == VERSION_ERROR || err == RECOVERY_ERROR)
 			throw;
 
-		defaultDatabase->createDatabase();
-		IO::deleteFile(FALCON_USER);
-		IO::deleteFile(FALCON_TEMPORARY);
-		dictionaryConnection = defaultDatabase->getOpenConnection();
-		Statement *statement = dictionaryConnection->createStatement();
-		JString createTableSpace = genCreateTableSpace(DEFAULT_TABLESPACE, FALCON_USER);
-		statement->executeUpdate(createTableSpace);
-			
-		for (const char **ddl = falconSchema; *ddl; ++ddl)
-			statement->executeUpdate(*ddl);
-		
-		statement->close();
-		dictionaryConnection->commit();
+		try
+			{
+			createDatabase();
+			}
+		catch(SQLException &e2)
+			{
+			deleteFilesOnExit = true; 	// Cleanup created files
+
+			throw SQLError(e2.getSqlcode(),
+				"create database failed : %s \n" \
+				"prior open database failure was: %s",
+				e2.getText(),e.getText());
+			}
+		catch(...)
+			{
+			deleteFilesOnExit = true;
+			}
 		}
 }
 
+void StorageHandler::createDatabase(void)
+{
+	// Check all files are properly opened with O_CREAT
+	inCreateDatabase = true;
+	defaultDatabase->createDatabase();
+	dictionaryConnection = defaultDatabase->getOpenConnection();
+	Statement *statement = dictionaryConnection->createStatement();
+	JString createTableSpace = genCreateTableSpace(DEFAULT_TABLESPACE, FALCON_USER);
+	statement->executeUpdate(createTableSpace);
+
+	for (const char **ddl = falconSchema; *ddl; ++ddl)
+		statement->executeUpdate(*ddl);
+	statement->close();
+	dictionaryConnection->commit();
+	inCreateDatabase = false;
+}
+
 void StorageHandler::dropTempTables(void)
 {
 	Statement *statement = dictionaryConnection->createStatement();

=== modified file 'storage/falcon/StorageHandler.h'
--- a/storage/falcon/StorageHandler.h	2008-08-14 11:24:18 +0000
+++ b/storage/falcon/StorageHandler.h	2008-09-04 10:49:57 +0000
@@ -53,6 +53,7 @@ class THD;
 extern "C" 
 {
 StorageHandler*	getFalconStorageHandler(int lockSize);
+void freeFalconStorageHandler(void);
 }
 
 static const int databaseHashSize = 101;
@@ -126,6 +127,7 @@ public:
 	int					closeConnections(THD* thd);
 	int					dropDatabase(const char* path);
 	void				initialize(void);
+	void				createDatabase(void);
 	void				dropTempTables(void);
 	void				cleanFileName(const char* pathname, char* filename, int filenameLength);
 	JString				genCreateTableSpace(const char* tableSpaceName, const char* filename, const char* comment = NULL);

=== modified file 'storage/falcon/StorageTable.cpp'
--- a/storage/falcon/StorageTable.cpp	2008-08-22 06:47:40 +0000
+++ b/storage/falcon/StorageTable.cpp	2008-09-09 23:15:17 +0000
@@ -195,7 +195,7 @@ int StorageTable::setCurrentIndex(int in
 		}
 	
 	if (!(currentIndex = share->getIndex(indexId)))
-{
+		{
 		clearCurrentIndex();
 		return StorageErrorNoIndex;
 		}

=== modified file 'storage/falcon/StorageTableShare.cpp'
--- a/storage/falcon/StorageTableShare.cpp	2008-09-03 22:17:54 +0000
+++ b/storage/falcon/StorageTableShare.cpp	2008-09-10 04:02:07 +0000
@@ -62,10 +62,10 @@ StorageIndexDesc::StorageIndexDesc()
 	rawName[0] = '\0';
 };
 
-StorageIndexDesc::StorageIndexDesc(const StorageIndexDesc *indexInfo)
+StorageIndexDesc::StorageIndexDesc(const StorageIndexDesc *indexDesc)
 {
-	if (indexInfo)
-		*this = *indexInfo;
+	if (indexDesc)
+		*this = *indexDesc;
 	else
 		{
 		id = 0;
@@ -86,6 +86,35 @@ StorageIndexDesc::~StorageIndexDesc(void
 {
 }
 
+bool StorageIndexDesc::operator==(const StorageIndexDesc &indexDesc) const
+{
+	if ( !(id			  == indexDesc.id
+		&& unique		  == indexDesc.unique
+		&& primaryKey 	  == indexDesc.primaryKey
+		&& numberSegments == indexDesc.numberSegments))
+		return false;
+
+	if (strcmp(indexDesc.name, name) != 0)
+		return false;
+	
+	/***
+	const char *q = indexDesc.name;
+	const char *p = name;
+	
+	for (; (*p && *q); ++p, ++q)
+		if (*p != *q)
+			return false;
+	***/
+
+	return true;
+}
+
+bool StorageIndexDesc::operator!=(const StorageIndexDesc &indexDesc) const
+{
+	return !(*this == indexDesc);
+}
+
+
 //////////////////////////////////////////////////////////////////////
 // Construction/Destruction
 //////////////////////////////////////////////////////////////////////
@@ -100,8 +129,8 @@ StorageTableShare::StorageTableShare(Sto
 	format = NULL;
 	syncObject = new SyncObject;
 	syncObject->setName("StorageTableShare::syncObject");
-	syncIndexes = new SyncObject;
-	syncIndexes->setName("StorageTableShare::syncIndexes");
+	syncIndexMap = new SyncObject;
+	syncIndexMap->setName("StorageTableShare::syncIndexMap");
 	sequence = NULL;
 	tempTable = tempTbl;
 	setPath(path);
@@ -118,7 +147,7 @@ StorageTableShare::StorageTableShare(Sto
 StorageTableShare::~StorageTableShare(void)
 {
 	delete syncObject;
-	delete syncIndexes;
+	delete syncIndexMap;
 	delete [] impure;
 	
 	if (storageDatabase)
@@ -143,12 +172,12 @@ void StorageTableShare::unlock(void)
 
 void StorageTableShare::lockIndexes(bool exclusiveLock)
 {
-	syncIndexes->lock(NULL, (exclusiveLock) ? Exclusive : Shared);
+	syncIndexMap->lock(NULL, (exclusiveLock) ? Exclusive : Shared);
 }
 
 void StorageTableShare::unlockIndexes(void)
 {
-	syncIndexes->unlock();
+	syncIndexMap->unlock();
 }
 
 int StorageTableShare::open(void)
@@ -285,11 +314,17 @@ const char* StorageTableShare::cleanupTa
 	return buffer;
 }
 
-char* StorageTableShare::createIndexName(const char *rawName, char *indexName)
+char* StorageTableShare::createIndexName(const char *rawName, char *indexName, bool primary)
 {
-	char nameBuffer[indexNameSize];
-	cleanupFieldName(rawName, nameBuffer, sizeof(nameBuffer));
-	sprintf(indexName, "%s$%s", name.getString(), nameBuffer);
+	if (primary)
+		strcpy(indexName, table->getPrimaryKeyName().getString());
+	else
+		{
+		char nameBuffer[indexNameSize];
+		cleanupFieldName(rawName, nameBuffer, sizeof(nameBuffer));
+		sprintf(indexName, "%s$%s", name.getString(), nameBuffer);
+		}
+	
 	return indexName;
 }
 
@@ -300,7 +335,7 @@ int StorageTableShare::createIndex(Stora
 
 	// Lock out other clients before locking the table
 	
-	Sync syncIndex(syncIndexes, "StorageTableShare::createIndex(1)");
+	Sync syncIndex(syncIndexMap, "StorageTableShare::createIndex(1)");
 	syncIndex.lock(Exclusive);
 	
 	Sync syncObj(syncObject, "StorageTableShare::createIndex(2)");
@@ -354,7 +389,7 @@ int StorageTableShare::dropIndex(Storage
 
 	// Lock out other clients before locking the table
 
-	Sync syncIndex(syncIndexes, "StorageTableShare::dropIndex(1)");
+	Sync syncIndex(syncIndexMap, "StorageTableShare::dropIndex(1)");
 	syncIndex.lock(Exclusive);
 	
 	Sync syncObj(syncObject, "StorageTableShare::dropIndex(2)");
@@ -362,12 +397,35 @@ int StorageTableShare::dropIndex(Storage
 	
 	int ret = storageDatabase->dropIndex(storageConnection, table, sql);
 	
-	if (!ret)
-		deleteIndex(indexDesc->id);
+	deleteIndex(indexDesc->id);
 				
 	return ret;
 }
 
+bool StorageTableShare::validateIndex(int indexId, StorageIndexDesc *indexTarget)
+{
+	StorageIndexDesc *indexDesc = getIndex(indexId);
+	
+	if (!indexDesc || *indexDesc != *indexTarget)
+		return false;
+	
+	Index *index = table->findIndex(indexDesc->name);
+	
+	if (!index)
+		return false;
+	
+	if (index != indexDesc->index)
+		return false;
+	
+	if (indexTarget->primaryKey && index->type != PrimaryKey)
+		return false;
+			
+	if (index->recordsPerSegment != indexDesc->segmentRecordCounts)
+		return false;
+	
+	return true;
+}
+
 void StorageTableShare::deleteIndexes()
 {
 	for (StorageIndexDesc *indexDesc; (indexDesc = indexes);)
@@ -377,6 +435,16 @@ void StorageTableShare::deleteIndexes()
 		}
 }
 
+int StorageTableShare::numberIndexes()
+{
+	int indexCount = 0;
+	
+	for (StorageIndexDesc *indexDesc = indexes; indexDesc; indexDesc = indexDesc->next, indexCount++)
+		;
+	
+	return indexCount;
+}
+
 int StorageTableShare::renameTable(StorageConnection *storageConnection, const char* newName)
 {
 	char tableName[256];
@@ -402,24 +470,25 @@ int StorageTableShare::setIndex(const St
 
 	if (!getIndex(indexInfo->id))
 		{
-		StorageIndexDesc *indexDesc = new StorageIndexDesc(indexInfo);
-		addIndex(indexDesc);
 
-	// Find the corresponding Falcon index
-	
-	if (indexDesc->primaryKey)
-		indexDesc->index = table->primaryKey;
-	else
-		{
-		char indexName[indexNameSize];
-		sprintf(indexName, "%s$%s", name.getString(), indexDesc->name);
-		indexDesc->index = table->findIndex(indexName);
-		}
+		// Find the corresponding Falcon index else fail
 
-	if (indexDesc->index)
-		indexDesc->segmentRecordCounts = indexDesc->index->recordsPerSegment;
-	else
-		ret = StorageErrorNoIndex;
+		Index *index;
+		
+		if (indexInfo->primaryKey)
+			index = table->primaryKey;
+		else
+			index = table->findIndex(indexInfo->name);
+		
+		if (index)
+			{
+			StorageIndexDesc *indexDesc = new StorageIndexDesc(indexInfo);
+			indexDesc->index = index;
+			indexDesc->segmentRecordCounts = indexDesc->index->recordsPerSegment;
+			addIndex(indexDesc);
+			}
+		else
+			ret = StorageErrorNoIndex;
 		}
 		
 	return ret;
@@ -432,7 +501,10 @@ StorageIndexDesc* StorageTableShare::get
 			
 	for (StorageIndexDesc *indexDesc = indexes; indexDesc; indexDesc = indexDesc->next)
 		if (indexDesc->id == indexId)
+			{
+			ASSERT(indexDesc->index != NULL);
 			return indexDesc;
+			}
 		
 	return NULL;
 }
@@ -442,7 +514,7 @@ StorageIndexDesc* StorageTableShare::get
 	if (!indexes)
 		return NULL;
 	
-	Sync sync(syncIndexes, "StorageTableShare::getIndex");
+	Sync sync(syncIndexMap, "StorageTableShare::getIndex");
 	sync.lock(Shared);
 	
 	StorageIndexDesc *index = getIndex(indexId);
@@ -453,21 +525,6 @@ StorageIndexDesc* StorageTableShare::get
 	return index;
 }
 
-StorageIndexDesc* StorageTableShare::getIndex(const char *name)
-{
-	if (!indexes)
-		return NULL;
-	
-	Sync sync(syncIndexes, "StorageTableShare::getIndex(name)");
-	sync.lock(Shared);
-	
-	for (StorageIndexDesc *indexDesc = indexes; indexDesc; indexDesc = indexDesc->next)
-		if (indexDesc->name == name)
-			return indexDesc;
-			
-	return NULL;
-}
-
 int StorageTableShare::getIndexId(const char* schemaName, const char* indexName)
 {
 	if (!indexes)

=== modified file 'storage/falcon/StorageTableShare.h'
--- a/storage/falcon/StorageTableShare.h	2008-08-22 06:47:40 +0000
+++ b/storage/falcon/StorageTableShare.h	2008-09-10 04:02:07 +0000
@@ -53,8 +53,10 @@ class StorageIndexDesc
 {
 public:
 	StorageIndexDesc();
-	StorageIndexDesc(const StorageIndexDesc *indexInfo);
+	StorageIndexDesc(const StorageIndexDesc *indexDesc);
 	virtual ~StorageIndexDesc(void);
+	bool operator==(const StorageIndexDesc &indexDesc) const;
+	bool operator!=(const StorageIndexDesc &indexDesc) const;
 	
 	int			id;
 	int			unique;
@@ -113,7 +115,9 @@ public:
 	virtual void		unlockIndexes(void);
 	virtual int			createIndex(StorageConnection *storageConnection, StorageIndexDesc *indexDesc, const char *sql);
 	virtual int			dropIndex(StorageConnection *storageConnection, StorageIndexDesc *indexDesc, const char *sql);
+	virtual bool		validateIndex(int indexId, StorageIndexDesc *indexTarget);
 	virtual void		deleteIndexes();
+	virtual int			numberIndexes();
 	virtual int			renameTable(StorageConnection *storageConnection, const char* newName);
 	virtual INT64		getSequenceValue(int delta);
 	virtual int			setSequenceValue(INT64 value);
@@ -129,7 +133,6 @@ public:
 	void				clearIndex(StorageIndexDesc *indexDesc);
 	StorageIndexDesc*	getIndex(int indexId);
 	StorageIndexDesc*	getIndex(int indexId, StorageIndexDesc *indexDesc);
-	StorageIndexDesc*	getIndex(const char *name);
 	int					getIndexId(const char* schemaName, const char* indexName);
 	int					create(StorageConnection *storageConnection, const char* sql, int64 autoIncrementValue);
 	int					upgrade(StorageConnection *storageConnection, const char* sql, int64 autoIncrementValue);
@@ -148,7 +151,7 @@ public:
 
 	static const char*	getDefaultRoot(void);
 	static const char*	cleanupTableName(const char* name, char* buffer, int bufferLength, char *schema, int schemaLength);
-	char*				createIndexName(const char *rawName, char *indexName);
+	char*				createIndexName(const char *rawName, char *indexName, bool primary = false);
 	
 	JString				name;
 	JString				schemaName;
@@ -160,7 +163,7 @@ public:
 	unsigned char		*impure;
 	int					initialized;
 	SyncObject			*syncObject;
-	SyncObject			*syncIndexes;
+	SyncObject			*syncIndexMap;
 	StorageDatabase		*storageDatabase;
 	StorageHandler		*storageHandler;
 	Table				*table;

=== modified file 'storage/falcon/SyncHandler.cpp'
--- a/storage/falcon/SyncHandler.cpp	2008-09-03 21:49:18 +0000
+++ b/storage/falcon/SyncHandler.cpp	2008-09-10 21:30:08 +0000
@@ -143,7 +143,7 @@ SyncHandler::~SyncHandler(void)
 #endif
 }
 
-void SyncHandler::addLock(SyncObject *syncObj, const char* locationName)
+void SyncHandler::addLock(SyncObject *syncObj, const char* locationName, LockType type)
 {
 #ifdef USE_FALCON_SYNC_HANDLER
 	if (syncObj == &syncObject)
@@ -158,7 +158,7 @@ void SyncHandler::addLock(SyncObject *sy
 
 	SyncThreadInfo *thd = addThread(thread->threadId);
 	SyncObjectInfo *soi = addSyncObject(syncObj->getName());
-	SyncLocationInfo *loc = addLocation(locationName, soi);
+	SyncLocationInfo *loc = addLocation(locationName, soi, type);
 
 	addToThread(thd, loc);
 #endif
@@ -297,29 +297,30 @@ void SyncHandler::showSyncObjects(void)
 			Log::debug("  %s\n", soi->name);
 }
 
-SyncLocationInfo *SyncHandler::findLocation(const char* locationName, int slot)
+SyncLocationInfo *SyncHandler::findLocation(const char* locationName, LockType type, int slot)
 {
 	for (SyncLocationInfo *loc = locations[slot]; loc; loc = loc->collision)
 		{
-		if (loc->name == locationName)
+		if ((loc->name == locationName) && (loc->type == type))
 			return loc;
 		}
 
 	return NULL;
 }
-SyncLocationInfo *SyncHandler::addLocation(const char* locationName, SyncObjectInfo *soi)
+SyncLocationInfo *SyncHandler::addLocation(const char* locationName, SyncObjectInfo *soi, LockType type)
 {
 	ASSERT(locationName != NULL);
 	ASSERT(strlen(locationName) != 0);
 
 	int slot = JString::hash(locationName, locationHashSize);
-	SyncLocationInfo *loc = findLocation(locationName, slot);
+	SyncLocationInfo *loc = findLocation(locationName, type, slot);
 
 	if (!loc)
 		{
 		loc = new SyncLocationInfo;
 		loc->name = locationName;
 		loc->soi = soi;
+		loc->type = type;
 		loc->collision = locations[slot];
 		locations[slot] = loc;
 		if ((++locationCount % 100) == 0)
@@ -339,10 +340,9 @@ void SyncHandler::showLocations(void)
 
 	for (int slot = 0; slot < locationHashSize; slot++)
 		for (SyncLocationInfo *loc = locations[slot]; loc; loc = loc->collision)
-			Log::debug("  %s\t%s\n", loc->name, loc->soi->name);
+			Log::debug("  %s\t%s\t%s\n", loc->name, loc->soi->name, (loc->type == Exclusive ? "Exclusive" : "Shared"));
 }
 
-
 void SyncHandler::addToThread(SyncThreadInfo* thd, SyncLocationInfo *loc)
 {
 	// Be sure this soi is only recorded once.
@@ -480,14 +480,16 @@ void SyncHandler::showLocationStacks(voi
 			int stackHeight = 0;
 			stackCount++;
 			for (int n = 0; n < lsi->height - 1; n++)
-				Log::debug("  %4d-%03d; %s (%s) ->\n", 
+				Log::debug("  %4d-%03d; %s (%s) - %s ->\n", 
 				           stackCount, ++stackHeight, 
-				           lsi->loc[n]->name, lsi->loc[n]->soi->name);
+				           lsi->loc[n]->name, lsi->loc[n]->soi->name,
+						   (lsi->loc[n]->type == Exclusive ? "Exclusive" : "Shared"));
 
-			Log::debug("  %4d-%03d; %s (%s)\n\n", 
+			Log::debug("  %4d-%03d; %s (%s) - %s\n\n", 
 			           stackCount, ++stackHeight, 
 			           lsi->loc[lsi->height - 1]->name, 
-			           lsi->loc[lsi->height - 1]->soi->name);
+			           lsi->loc[lsi->height - 1]->soi->name,
+			          (lsi->loc[lsi->height - 1]->type == Exclusive ? "Exclusive" : "Shared"));
 			}
 }
 
@@ -579,6 +581,74 @@ void SyncHandler::validate(void)
 						if (before[b] == after[c])
 							addPossibleDeadlock(soi, after[c]);
 			}
+
+	// Refine the list of possible deadlocks
+	// The second SOI  was found before and after the first.
+	// But if that happened on the same stack,  it is OK as long as
+	// the two calls do not go from shared up to exclusive.
+	for (a = 0; a < deadlockHashSize; a++)
+		for (DeadlockInfo *dli = possibleDeadlocks[a]; dli; dli = dli->collision)
+			{
+			bool foundBothInOneStack = false;
+			bool foundBefore = false;
+			bool foundAfter = false;
+			bool foundRisingLock = false;
+
+			// Quit seraching stacks when the possibility has been reconfirmed
+
+			for (b = 0; b < stackHashSize; b++)
+				for (LocationStackInfo *lsi = locationStacks[b]; lsi; lsi = lsi->collision)
+					{
+					SyncLocationInfo *reference = NULL;
+					SyncLocationInfo *first = NULL;
+					SyncLocationInfo *second = NULL;
+					
+					for (c = 0; c < lsi->height; c++)
+						{
+						if (dli->soi[0] == lsi->loc[c]->soi)
+							reference = lsi->loc[c];
+						else if (dli->soi[1] == lsi->loc[c]->soi)
+							{
+							if ((first == NULL) && (reference == NULL))
+								first = lsi->loc[c];
+							else if ((first != NULL) && (reference != NULL))
+								{
+								second = lsi->loc[c];
+								if ((first->type == Shared) && (second->type == Exclusive))
+									{
+									foundRisingLock = true;
+									lsi->hasRisingLockTypes = true;
+									}
+								}
+							}
+						}
+
+					if (reference)
+						{
+						if (first)
+							{
+							foundBefore = true;
+							if (second)
+								{
+								if (foundRisingLock)
+									foundAfter = true;
+								else
+									// It's not really a possible deadlock
+									foundBothInOneStack = true;
+								}
+							}
+						else if (second)
+							foundAfter = true;
+						}
+					}
+
+			// Is this still a possible deadlock?
+			if (foundBothInOneStack && !(foundBefore && foundAfter) && !foundRisingLock)
+				{
+				// Take this possible deadlock out of the list.
+				removePossibleDeadlock(dli);
+				}
+			}
 }
 
 void SyncHandler::addPossibleDeadlock(SyncObjectInfo *soi1, SyncObjectInfo *soi2)
@@ -591,6 +661,7 @@ void SyncHandler::addPossibleDeadlock(Sy
 
 	dli->soi[0] = soi1;
 	dli->soi[1] = soi2;
+	dli->isPossible = true;
 
 	// Now calulate the hash number and slot.  
 	// This hash algorithm must return the same slot for two SyncObjectInfo *
@@ -614,6 +685,17 @@ void SyncHandler::addPossibleDeadlock(Sy
 	delete dli;
 }
 
+void SyncHandler::removePossibleDeadlock(DeadlockInfo* dli)
+{
+	int slot = dli->hash % deadlockHashSize;
+
+	for (DeadlockInfo* stack = possibleDeadlocks[slot]; stack; stack = stack->collision)
+		{
+		if (stack == dli)
+			dli->isPossible = false;
+		}
+}
+
 #define FOUND_FIRST 1
 #define FOUND_SECOND 2
 #define FOUND_BOTH 3
@@ -623,41 +705,43 @@ void SyncHandler::showPossibleDeadlockSt
 	int possibleDeadlockCount = 0;
 	for (a = 0; a < deadlockHashSize; a++)
 		for (DeadlockInfo *dli = possibleDeadlocks[a]; dli; dli = dli->collision)
-			possibleDeadlockCount++;
+			if (dli->isPossible)
+				possibleDeadlockCount++;
 
 	Log::debug("\n== SyncHandler has found %d possible deadlocks ==\n", possibleDeadlockCount);
 
 	for (a = 0; a < deadlockHashSize; a++)
 		for (DeadlockInfo *dli = possibleDeadlocks[a]; dli; dli = dli->collision)
-			{
-			int stackCount = 0;
-			Log::debug("\n=== Possible Deadlock;  %s and %s ===\n    Stacks =", dli->soi[0]->name, dli->soi[1]->name);
-
-			// Reference all call stacks with these two SyncObjects.
+			if (dli->isPossible)
+				{
+				int stackCount = 0;
+				Log::debug("\n=== Possible Deadlock;  %s and %s ===\n    Stacks =", dli->soi[0]->name, dli->soi[1]->name);
 
-			for (b = 0; b < stackHashSize; b++)
-				for (LocationStackInfo *lsi = locationStacks[b]; lsi; lsi = lsi->collision)
-					{
-					// Does this location stack have both SyncObjects?
+				// Reference all call stacks with these two SyncObjects.
 
-					int numFound = 0;
-					for (c = 0; c < lsi->height; c++)
+				for (b = 0; b < stackHashSize; b++)
+					for (LocationStackInfo *lsi = locationStacks[b]; lsi; lsi = lsi->collision)
 						{
-						if (lsi->loc[c]->soi == dli->soi[0])
-							numFound |= FOUND_FIRST;
-						else if (lsi->loc[c]->soi == dli->soi[1])
-							numFound |= FOUND_SECOND;
-						}
+						// Does this location stack have both SyncObjects?
 
-					if (numFound == FOUND_BOTH)
-						{
-						if (stackCount && ((stackCount % 10) == 0))
-							Log::debug("\n   ");
-						stackCount++;
-						Log::debug(" %d", lsi->count);
+						int numFound = 0;
+						for (c = 0; c < lsi->height; c++)
+							{
+							if (lsi->loc[c]->soi == dli->soi[0])
+								numFound |= FOUND_FIRST;
+							else if (lsi->loc[c]->soi == dli->soi[1])
+								numFound |= FOUND_SECOND;
+							}
+
+						if (numFound == FOUND_BOTH)
+							{
+							if (stackCount && ((stackCount % 10) == 0))
+								Log::debug("\n   ");
+							stackCount++;
+							Log::debug(" %d", lsi->count);
+							}
 						}
-					}
-			Log::debug("\n");
-			}
+				Log::debug("\n");
+				}
 }
 #endif

=== modified file 'storage/falcon/SyncHandler.h'
--- a/storage/falcon/SyncHandler.h	2008-09-03 21:49:18 +0000
+++ b/storage/falcon/SyncHandler.h	2008-09-10 21:30:08 +0000
@@ -43,6 +43,7 @@ struct SyncLocationInfo
 {
 	JString name;
 	SyncObjectInfo *soi;
+	LockType type;
 	SyncLocationInfo *collision;
 };
 
@@ -61,6 +62,7 @@ struct LocationStackInfo
 	int height;
 	int hash;
 	int count;
+	bool hasRisingLockTypes;
 	LocationStackInfo *collision;
 };
 
@@ -68,6 +70,7 @@ struct DeadlockInfo
 {
 	SyncObjectInfo *soi[2];
 	int hash;
+	bool isPossible;
 	DeadlockInfo *collision;
 };
 
@@ -84,7 +87,7 @@ public:
 	SyncHandler(void);
 	virtual ~SyncHandler(void);
 
-	void	addLock(SyncObject *syncObj, const char *locationName);
+	void	addLock(SyncObject *syncObj, const char *locationName, LockType type);
 	void	delLock(SyncObject *syncObj);
 	void	dump(void);
 
@@ -98,8 +101,8 @@ private:
 	SyncObjectInfo *	findSyncObject(const char* syncObjectName, int slot);
 	SyncObjectInfo *	addSyncObject(const char* syncObjectName);
 	void				showSyncObjects(void);
-	SyncLocationInfo *	findLocation(const char* locationName, int slot);
-	SyncLocationInfo *	addLocation(const char* locationName, SyncObjectInfo *soi);
+	SyncLocationInfo *	findLocation(const char* locationName, LockType type, int slot);
+	SyncLocationInfo *	addLocation(const char* locationName, SyncObjectInfo *soi, LockType type);
 	void				showLocations(void);
 	LocationStackInfo *	findStack(LocationStackInfo* stk, int slot);
 	void				addStack(SyncThreadInfo* thd);
@@ -113,6 +116,7 @@ private:
 
 	void				validate(void);
 	void				addPossibleDeadlock(SyncObjectInfo *soi1, SyncObjectInfo *soi2);
+	void				removePossibleDeadlock(DeadlockInfo* dli);
 	void				showPossibleDeadlockStacks(void);
 
 	SyncObject			syncObject;

=== modified file 'storage/falcon/SyncObject.cpp'
--- a/storage/falcon/SyncObject.cpp	2008-09-03 21:49:18 +0000
+++ b/storage/falcon/SyncObject.cpp	2008-09-10 21:30:08 +0000
@@ -148,7 +148,7 @@ void SyncObject::lock(Sync *sync, LockTy
 #ifdef USE_FALCON_SYNC_HANDLER
 	SyncHandler *syncHandler = getFalconSyncHandler();
 	if (sync && syncHandler)
-		syncHandler->addLock(this, location);
+		syncHandler->addLock(this, location, type);
 #endif
 #endif
 
@@ -320,7 +320,7 @@ void SyncObject::lock(Sync *sync, LockTy
 #ifdef USE_FALCON_SYNC_HANDLER
 	SyncHandler *syncHandler = getFalconSyncHandler();
 	if (sync && syncHandler)
-		syncHandler->addLock(this, location);
+		syncHandler->addLock(this, location, type);
 #endif
 #endif
 

=== modified file 'storage/falcon/Table.cpp'
--- a/storage/falcon/Table.cpp	2008-09-03 22:17:54 +0000
+++ b/storage/falcon/Table.cpp	2008-09-08 11:51:19 +0000
@@ -166,7 +166,7 @@ Table::~Table()
 
 Field* Table::findField(const char * fieldName)
 {
-	const char *name = database->getSymbol(fieldName);
+	const char *name = database->getString(fieldName);
 	Sync sync(&syncObject, "Table::findField");
 	sync.lock(Shared);
 

=== modified file 'storage/falcon/Transaction.cpp'
--- a/storage/falcon/Transaction.cpp	2008-09-03 22:17:54 +0000
+++ b/storage/falcon/Transaction.cpp	2008-09-10 21:24:50 +0000
@@ -85,7 +85,7 @@ Transaction::Transaction(Connection *cnc
 	useCount = 1;
 	syncObject.setName("Transaction::syncObject");
 	syncIsActive.setName("Transaction::syncActive");
-	syncIndexes.setName("Transaction::syncIndexes");
+	syncDeferredIndexes.setName("Transaction::syncDeferredIndexes");
 	syncRecords.setName("Transaction::syncRecords");
 	syncSavepoints.setName("Transaction::syncSavepoints");
 	firstRecord = NULL;
@@ -254,7 +254,7 @@ void Transaction::commit()
 
 	if (state == Active)
 		{
-		Sync sync(&syncIndexes, "Transaction::commit(1)");
+		Sync sync(&syncDeferredIndexes, "Transaction::commit(1)");
 		sync.lock(Shared);
 		
 		for (DeferredIndex *deferredIndex= deferredIndexes; deferredIndex;  
@@ -370,8 +370,8 @@ void Transaction::commitNoUpdates(void)
 	connection = NULL;
 	transactionId = 0;
 	writePending = false;
-	syncActiveTransactions.unlock();
 	state = Available;
+	syncActiveTransactions.unlock();
 	syncIsActive.unlock();
 	release();
 }
@@ -397,7 +397,7 @@ void Transaction::rollback()
 	// Rollback pending record versions from newest to oldest in case
 	// there are multiple record versions on a prior record chain
 
-	Sync syncRec(&syncRecords, "Transaction::rollback(1.5)");
+	Sync syncRec(&syncRecords, "Transaction::rollback(records)");
 	syncRec.lock(Exclusive);
 
 	while (firstRecord)
@@ -436,10 +436,8 @@ void Transaction::rollback()
 		database->backLog->rollbackRecords(backloggedRecords, this);
 
 	ASSERT(writePending);
-	state = RolledBack;
 	writePending = false;
 	releaseDependencies();
-	syncIsActive.unlock();
 	
 	if (hasUpdates)
 		database->serialLog->preCommit(this);
@@ -453,7 +451,7 @@ void Transaction::rollback()
 		xidLength = 0;
 		}
 	
-	Sync syncActiveTransactions (&transactionManager->activeTransactions.syncObject, "Transaction::rollback(2)");
+	Sync syncActiveTransactions (&transactionManager->activeTransactions.syncObject, "Transaction::rollback(active)");
 	syncActiveTransactions.lock (Exclusive);
 	++transactionManager->rolledBack;
 	
@@ -464,6 +462,8 @@ void Transaction::rollback()
 	inList = false;
 	transactionManager->activeTransactions.remove(this);
 	syncActiveTransactions.unlock();
+	state = RolledBack;
+	syncIsActive.unlock();
 	release();
 }
 
@@ -502,7 +502,7 @@ void Transaction::prepare(int xidLen, co
 	state = Limbo;
 	database->dbb->prepareTransaction(transactionId, xidLength, xid);
 
-	Sync sync(&syncIndexes, "Transaction::prepare");
+	Sync sync(&syncDeferredIndexes, "Transaction::prepare");
 	sync.lock(Shared);
 	
 	for (DeferredIndex *deferredIndex= deferredIndexes; deferredIndex;  
@@ -1314,9 +1314,10 @@ void Transaction::rollbackSavepoint(int 
 
 void Transaction::add(DeferredIndex* deferredIndex)
 {
-	Sync sync(&syncIndexes, "Transaction::add");
+	Sync sync(&syncDeferredIndexes, "Transaction::add");
 	sync.lock(Exclusive);
 
+	deferredIndex->addRef();
 	deferredIndex->nextInTransaction = deferredIndexes;
 	deferredIndexes = deferredIndex;
 	deferredIndexCount++;
@@ -1495,25 +1496,31 @@ void Transaction::printBlockage(void)
 
 void Transaction::releaseDeferredIndexes(void)
 {
-	Sync sync(&syncIndexes, "Transaction::releaseDeferredIndexes");
+	Sync sync(&syncDeferredIndexes, "Transaction::releaseDeferredIndexes");
 	sync.lock(Exclusive);
+	
 	for (DeferredIndex *deferredIndex; (deferredIndex = deferredIndexes);)
 		{
 		ASSERT(deferredIndex->transaction == this);
 		deferredIndexes = deferredIndex->nextInTransaction;
 		deferredIndex->detachTransaction();
+		deferredIndex->releaseRef();
 		deferredIndexCount--;
 		}
 }
 
 void Transaction::releaseDeferredIndexes(Table* table)
 {
+	Sync sync(&syncDeferredIndexes, "Transaction::releaseDeferredIndexes(Table *)");
+	sync.lock(Exclusive);
+
 	for (DeferredIndex **ptr = &deferredIndexes, *deferredIndex; (deferredIndex = *ptr);)
 		{
 		if (deferredIndex->index && (deferredIndex->index->table == table))
 			{
 			*ptr = deferredIndex->nextInTransaction;
 			deferredIndex->detachTransaction();
+			deferredIndex->releaseRef();
 			--deferredIndexCount;
 			}
 		else

=== modified file 'storage/falcon/Transaction.h'
--- a/storage/falcon/Transaction.h	2008-09-03 22:17:54 +0000
+++ b/storage/falcon/Transaction.h	2008-09-10 04:02:07 +0000
@@ -170,8 +170,8 @@ public:
 	bool			pendingPageWrites;
 	bool			hasLocks;
 	SyncObject		syncObject;
-	SyncObject		syncIsActive;  // locked while transaction is active
-	SyncObject		syncIndexes;
+	SyncObject		syncIsActive;		// locked while transaction is active
+	SyncObject		syncDeferredIndexes;
 	SyncObject		syncRecords;
 	SyncObject		syncSavepoints;
 	uint64			totalRecordData;	// total bytes of record data for this transaction (unchilled + thawed)

=== modified file 'storage/falcon/ha_falcon.cpp'
--- a/storage/falcon/ha_falcon.cpp	2008-09-03 22:17:54 +0000
+++ b/storage/falcon/ha_falcon.cpp	2008-09-10 13:42:36 +0000
@@ -34,6 +34,7 @@
 #include "CmdGen.h"
 #include "InfoTable.h"
 #include "Format.h"
+#include "Error.h"
 
 #ifdef _WIN32
 #define I64FORMAT			"%I64d"
@@ -72,7 +73,7 @@ static const char *falcon_extensions[] =
 	NullS
 };
 
-static StorageHandler	*storageHandler;
+extern StorageHandler	*storageHandler;
 
 #define PARAMETER_UINT(_name, _text, _min, _default, _max, _flags, _update_function) \
 	uint falcon_##_name;
@@ -156,16 +157,37 @@ void flushFalconLogFile()
 		fflush(falcon_log_file);
 }
 
+bool checkExceptionSupport()
+{
+    // Validate that the code has been compiled with support for exceptions
+    // by throwing and catching an exception. If the executable does not
+    // support exceptions we will reach the return false statement
+	try
+		{
+		throw 1;
+		}
+	catch (int) 
+		{
+		return true;
+		}
+	return false;
+}
+
 int StorageInterface::falcon_init(void *p)
 {
 	DBUG_ENTER("falcon_init");
 	falcon_hton = (handlerton *)p;
 	my_bool error = false;
 
+	if (!checkExceptionSupport()) 
+		{
+		sql_print_error("Falcon must be compiled with C++ exceptions enabled to work");
+		DBUG_RETURN(1);
+		}
+
 	StorageHandler::setDataDirectory(mysql_real_data_home);
 
-	if (!storageHandler)
-		storageHandler = getFalconStorageHandler(sizeof(THR_LOCK));
+	storageHandler = getFalconStorageHandler(sizeof(THR_LOCK));
 	
 	falcon_hton->state = SHOW_OPTION_YES;
 	falcon_hton->db_type = DB_TYPE_FALCON;
@@ -216,13 +238,12 @@ int StorageInterface::falcon_init(void *
 		}
 	catch(SQLException &e)
 		{
-		sql_print_error("Falcon: Exception '%s' during initialization",
-			e.getText());
+		sql_print_error("Falcon: %s", e.getText());
 		error = true;
 		}
 	catch(...)
 		{
-		sql_print_error(" Falcon: General exception in initialization");
+		sql_print_error("Falcon: General exception in initialization");
 		error = true;
 		}
 
@@ -230,8 +251,7 @@ int StorageInterface::falcon_init(void *
 	if (error)
 		{
 		// Cleanup after error
-		delete storageHandler;
-		storageHandler = 0;
+		falcon_deinit(0);
 		DBUG_RETURN(1);
 		}
 		
@@ -244,9 +264,8 @@ int StorageInterface::falcon_deinit(void
 	if(storageHandler)
 		{
 		storageHandler->shutdownHandler();
-		storageHandler = NULL;
+		freeFalconStorageHandler();
 		}
-
 	return 0;
 }
 
@@ -522,11 +541,11 @@ int StorageInterface::open(const char *n
 
 	thr_lock_data_init((THR_LOCK *)storageShare->impure, &lockData, NULL);
 
-	ret = setIndexes();
-	
 	if (table)
 		mapFields(table);
 	
+	setIndexes(table);
+	
 	if (ret)
 		DBUG_RETURN(error(ret));
 
@@ -854,6 +873,8 @@ int StorageInterface::create(const char 
 				}
 
 	mapFields(form);
+	
+	setIndexes(table);
 
 	DBUG_RETURN(0);
 }
@@ -872,12 +893,9 @@ int StorageInterface::createIndex(const 
 	StorageIndexDesc indexDesc;
 	getKeyDesc(table, indexId, &indexDesc);
 	
-	char indexName[indexNameSize];
-	storageShare->createIndexName(indexDesc.name, indexName);
-
 	CmdGen gen;
 	const char *unique = (key->flags & HA_NOSAME) ? "unique " : "";
-	gen.gen("create %sindex \"%s\" on %s.\"%s\" ", unique, indexName, schemaName, tableName);
+	gen.gen("create %sindex \"%s\" on %s.\"%s\" ", unique, indexDesc.name, schemaName, tableName);
 	genKeyFields(key, &gen);
 	const char *sql = gen.getString();
 
@@ -889,11 +907,8 @@ int StorageInterface::dropIndex(const ch
 	StorageIndexDesc indexDesc;
 	getKeyDesc(table, indexId, &indexDesc);
 	
-	char indexName[indexNameSize];
-	storageShare->createIndexName(indexDesc.name, indexName);
-
 	CmdGen gen;
-	gen.gen("drop index %s.\"%s\"", schemaName, indexName);
+	gen.gen("drop index %s.\"%s\"", schemaName, indexDesc.name);
 	const char *sql = gen.getString();
 
 	return storageTable->dropIndex(&indexDesc, sql);
@@ -1398,8 +1413,9 @@ int StorageInterface::index_init(uint id
 	nextRecord = 0;
 	haveStartKey = false;
 	haveEndKey = false;
+	int ret = 0;
 
-	int ret = storageTable->setCurrentIndex(idx);
+	ret = storageTable->setCurrentIndex(idx);
 
 	if (ret)
 		{
@@ -1407,6 +1423,8 @@ int StorageInterface::index_init(uint id
 		ret = storageTable->setCurrentIndex(idx);
 		}
 		
+	// validateIndexes(table);
+		
 	if (ret)
 		DBUG_RETURN(error(ret));
 
@@ -1469,22 +1487,18 @@ void StorageInterface::getKeyDesc(TABLE 
 {
 	KEY *keyInfo = table->key_info + indexId;
 	int numberKeys = keyInfo->key_parts;
-	char nameBuffer[indexNameSize];
+	
+	indexDesc->id			  = indexId;
+	indexDesc->numberSegments = numberKeys;
+	indexDesc->unique		  = (keyInfo->flags & HA_NOSAME);
+	indexDesc->primaryKey	  = (table->s->primary_key == (uint)indexId);
 	
 	// Clean up the index name for internal use
 	
 	strncpy(indexDesc->rawName, (const char*)keyInfo->name, MIN(indexNameSize, (int)strlen(keyInfo->name)+1));
-	storageShare->cleanupFieldName(indexDesc->rawName, nameBuffer, sizeof(nameBuffer));
 	indexDesc->rawName[indexNameSize-1] = '\0';
+	storageShare->createIndexName(indexDesc->rawName, indexDesc->name, indexDesc->primaryKey);
 	
-	strncpy(indexDesc->name, (const char*)nameBuffer, MIN(indexNameSize, (int)strlen(nameBuffer)+1));
-	indexDesc->name[indexNameSize-1] = '\0';
-
-	indexDesc->id			  = indexId;
-	indexDesc->numberSegments = numberKeys;
-	indexDesc->unique		  = (keyInfo->flags & HA_NOSAME);
-	indexDesc->primaryKey	  = (table->s->primary_key == (uint)indexId);
-
 	for (int n = 0; n < numberKeys; ++n)
 		{
 		StorageSegment *segment = indexDesc->segments + n;
@@ -1523,8 +1537,17 @@ int StorageInterface::rename_table(const
 	if (ret)
 		DBUG_RETURN(error(ret));
 
+	storageTable->clearCurrentIndex();
+	storageShare->lockIndexes(true);
+	storageShare->lock(true);
+
 	ret = storageShare->renameTable(storageConnection, to);
 	
+	remapIndexes(table);
+	
+	storageShare->unlock();
+	storageShare->unlockIndexes();
+
 	if (ret)
 		DBUG_RETURN(error(ret));
 
@@ -1545,6 +1568,7 @@ int StorageInterface::read_range_first(c
 	storageTable->clearIndexBounds();
 	haveStartKey = false;
 	haveEndKey = false;
+	int ret = 0;
 
 	if (start_key && !storageTable->isKeyNull((const unsigned char*) start_key->key, start_key->length))
 		{
@@ -1567,7 +1591,7 @@ int StorageInterface::read_range_first(c
 		if (end_key->flag == HA_READ_BEFORE_KEY)
 			storageTable->setReadBeforeKey();
 
-		int ret = storageTable->setIndexBound((const unsigned char*) end_key->key,
+		ret = storageTable->setIndexBound((const unsigned char*) end_key->key,
 												end_key->length, UpperBound);
 		if (ret)
 			DBUG_RETURN(error(ret));
@@ -2013,22 +2037,12 @@ void StorageInterface::freeActiveBlobs(v
 
 void StorageInterface::shutdown(handlerton *htons)
 {
-	if(storageHandler)
-		{
-		storageHandler->shutdownHandler();
-		storageHandler = NULL;
-		}
+	falcon_deinit(0);
 }
 
 int StorageInterface::panic(handlerton* hton, ha_panic_function flag)
 {
-	if(storageHandler)
-		{
-		storageHandler->shutdownHandler();
-		storageHandler = NULL;
-		}
-
-	return 0;
+	return falcon_deinit(0);
 }
 
 int StorageInterface::closeConnection(handlerton *hton, THD *thd)
@@ -2123,10 +2137,9 @@ int StorageInterface::check_if_supported
 	DBUG_ENTER("StorageInterface::check_if_supported_alter");
 	tempTable = (create_info->options & HA_LEX_CREATE_TMP_TABLE) ? true : false;
 	HA_ALTER_FLAGS supported;
-	supported = supported | HA_ADD_INDEX | HA_DROP_INDEX;
+	supported = supported | HA_ADD_INDEX | HA_DROP_INDEX | HA_ADD_UNIQUE_INDEX | HA_DROP_UNIQUE_INDEX;
 						/**
-						| HA_ADD_COLUMN | HA_ADD_UNIQUE_INDEX | HA_DROP_UNIQUE_INDEX
-						| HA_COLUMN_STORAGE | HA_COLUMN_FORMAT;
+						| HA_ADD_COLUMN | HA_COLUMN_STORAGE | HA_COLUMN_FORMAT;
 						**/
 	HA_ALTER_FLAGS notSupported = ~(supported);
 	
@@ -2167,7 +2180,7 @@ int StorageInterface::check_if_supported
 	// 1. Check for supported ALTER combinations
 	// 2. Can error message be improved for non-null columns?
 	
-	if (alter_flags->is_set(HA_ADD_INDEX))
+	if (alter_flags->is_set(HA_ADD_INDEX) || alter_flags->is_set(HA_ADD_UNIQUE_INDEX))
 		{
 		for (unsigned int n = 0; n < altered_table->s->keys; n++)
 			{
@@ -2199,7 +2212,7 @@ int StorageInterface::check_if_supported
 			}
 		}
 		
-	if (alter_flags->is_set(HA_DROP_INDEX))
+	if (alter_flags->is_set(HA_DROP_INDEX) || alter_flags->is_set(HA_DROP_UNIQUE_INDEX))
 		{
 		}
 		
@@ -2214,10 +2227,10 @@ int StorageInterface::alter_table_phase1
 	if (alter_flags->is_set(HA_ADD_COLUMN))
 		ret = addColumn(thd, altered_table, create_info, alter_info, alter_flags);
 		
-	if (alter_flags->is_set(HA_ADD_INDEX) && !ret)
+	if ((alter_flags->is_set(HA_ADD_INDEX) || alter_flags->is_set(HA_ADD_UNIQUE_INDEX)) && !ret)
 		ret = addIndex(thd, altered_table, create_info, alter_info, alter_flags);
 		
-	if (alter_flags->is_set(HA_DROP_INDEX) && !ret)
+	if ((alter_flags->is_set(HA_DROP_INDEX) || alter_flags->is_set(HA_DROP_UNIQUE_INDEX)) && !ret)
 		ret = dropIndex(thd, altered_table, create_info, alter_info, alter_flags);
 		
 	DBUG_RETURN(ret);
@@ -2400,7 +2413,7 @@ int StorageInterface::setIndex(TABLE *ta
 	return storageTable->setIndex(&indexDesc);
 }
 
-int StorageInterface::setIndexes(void)
+int StorageInterface::setIndexes(TABLE *table)
 {
 	int ret = 0;
 	
@@ -2408,14 +2421,14 @@ int StorageInterface::setIndexes(void)
 		return ret;
 
 	storageShare->lockIndexes(true);
+	storageShare->lock(true);
 
-	if (!storageShare->haveIndexes(table->s->keys))
-		for (uint n = 0; n < table->s->keys; ++n)
-			if ((ret = setIndex(table, n)))
-				break;
+	ret = remapIndexes(table);
+	// validateIndexes(table, true);
 
+	storageShare->unlock();
 	storageShare->unlockIndexes();
-
+	
 	return ret;
 }
 
@@ -2423,11 +2436,11 @@ int StorageInterface::remapIndexes(TABLE
 {
 	int ret = 0;
 	
+	storageShare->deleteIndexes();
+
 	if (!table)
 		return ret;
 		
-	storageShare->deleteIndexes();
-
 	for (uint n = 0; n < table->s->keys; ++n)
 		if ((ret = setIndex(table, n)))
 			break;
@@ -2435,6 +2448,32 @@ int StorageInterface::remapIndexes(TABLE
 	return ret;
 }
 
+bool StorageInterface::validateIndexes(TABLE *table, bool exclusiveLock)
+{
+	bool ret = true;
+	
+	if (!table)
+		return false;
+	
+	storageShare->lockIndexes(exclusiveLock);
+		
+	for (uint n = 0; (n < table->s->keys) && ret; ++n)
+		{
+		StorageIndexDesc indexDesc;
+		getKeyDesc(table, n, &indexDesc);
+		
+		if (!storageShare->validateIndex(n, &indexDesc))
+			ret = false;
+		}
+	
+	if (ret && (table->s->keys != (uint)storageShare->numberIndexes()))
+		ret = false;
+	
+	storageShare->unlockIndexes();
+
+	return ret;
+}
+
 int StorageInterface::genTable(TABLE* table, CmdGen* gen)
 {
 	const char *tableName = storageTable->getName();
@@ -2625,13 +2664,7 @@ void StorageInterface::encodeRecord(ucha
 			continue;
 			
 		Field *field = fieldMap[fieldFormat->fieldId];
-
-		if (!field)
-			{
-			dataStream->encodeNull();
-			
-			continue;
-			}
+		ASSERT(field);
 		
 		if (ptrDiff)
 			field->move_field_offset(ptrDiff);

=== modified file 'storage/falcon/ha_falcon.h'
--- a/storage/falcon/ha_falcon.h	2008-09-03 22:17:54 +0000
+++ b/storage/falcon/ha_falcon.h	2008-09-09 23:15:17 +0000
@@ -122,8 +122,9 @@ public:
 	int				error(int storageError);
 	void			freeActiveBlobs(void);
 	int				setIndex(TABLE *table, int indexId);
-	int				setIndexes(void);
+	int				setIndexes(TABLE *table);
 	int				remapIndexes(TABLE *table);
+	bool			validateIndexes(TABLE *table, bool exclusiveLock = false);
 	int				genTable(TABLE* table, CmdGen* gen);
 	int				genType(Field *field, CmdGen *gen);
 	void			genKeyFields(KEY *key, CmdGen *gen);

=== modified file 'storage/maria/CMakeLists.txt'
--- a/storage/maria/CMakeLists.txt	2008-08-26 18:57:58 +0000
+++ b/storage/maria/CMakeLists.txt	2008-09-05 00:35:12 +0000
@@ -49,7 +49,7 @@ SET(MARIA_SOURCES ma_init.c ma_open.c ma
 IF(NOT SOURCE_SUBLIBS)
 
   ADD_LIBRARY(maria ${MARIA_SOURCES})
-  ADD_DEPENDENCIES(ha_falcon GenError)
+  ADD_DEPENDENCIES(maria GenError)
 
 ADD_EXECUTABLE(maria_ftdump maria_ftdump.c)
 TARGET_LINK_LIBRARIES(maria_ftdump maria myisam mysys dbug strings zlib wsock32)

Thread
bzr push into mysql-6.0-falcon branch (klewis:2813 to 2824) Bug#38947Kevin Lewis10 Sep