#At lp:maria based on revid:[email protected]

 2791 Michael Widenius  2010-01-09 [merge]
      Automatic merge
      renamed:
        mysql-test/suite/pbxt/t/load_unique_error1.inc => 
mysql-test/std_data/pbxt_load_unique_error1.inc
      modified:
        .bzrignore
        config/ac-macros/plugins.m4
        configure.in
        mysql-test/mysql-test-run.pl
        mysql-test/suite/pbxt/r/join_nested.result
        mysql-test/suite/pbxt/r/pbxt_bugs.result
        mysql-test/suite/pbxt/t/join_nested.test
        mysql-test/suite/pbxt/t/pbxt_bugs.test
        mysql-test/suite/pbxt/t/pbxt_locking.test
        mysql-test/suite/pbxt/t/pbxt_transactions.test
        mysql-test/suite/pbxt/t/ps_1general.test
        sql/handler.h
        sql/sql_plugin.cc
        storage/pbxt/ChangeLog
        storage/pbxt/plug.in
        storage/pbxt/src/Makefile.am
        storage/pbxt/src/discover_xt.cc
        storage/pbxt/src/ha_pbxt.cc
        storage/pbxt/src/strutil_xt.cc
        storage/pbxt/src/table_xt.cc
        storage/pbxt/src/thread_xt.cc
        storage/pbxt/src/trace_xt.cc

=== modified file '.bzrignore'
--- a/.bzrignore        2009-12-03 11:34:11 +0000
+++ b/.bzrignore        2009-12-22 13:50:20 +0000
@@ -666,6 +666,9 @@ libmysqld/time.cc
 libmysqld/tztime.cc
 libmysqld/uniques.cc
 libmysqld/unireg.cc
+libmysqld/discover_xt.cc
+libmysqld/ha_pbxt.cc
+libmysqld/myxt_xt.cc
 libmysqltest/*.ds?
 libmysqltest/*.vcproj
 libmysqltest/mytest.c

=== modified file 'config/ac-macros/plugins.m4'
--- a/config/ac-macros/plugins.m4       2009-04-25 10:05:32 +0000
+++ b/config/ac-macros/plugins.m4       2009-12-22 10:33:20 +0000
@@ -267,7 +267,6 @@ dnl   we have to recompile these modules
 dnl   to compile server parts with the different #defines
 dnl   Normally it happens when we compile the embedded server
 dnl   Thus one should mark such files in his handler using this macro
-dnl    (currently only one such a file per plugin is supported)
 dnl
 dnl ---------------------------------------------------------------------------
 
@@ -463,11 +462,13 @@ dnl Although this is "pretty", it breaks
       mysql_plugin_defs="$mysql_plugin_defs, [builtin_]$2[_plugin]"
       [with_plugin_]$2=yes
       AC_MSG_RESULT([yes])
-      m4_ifdef([$11],[
-       condition_dependent_plugin_modules="$condition_dependent_plugin_modules 
m4_bregexp($11, [[^/]+$], [\&])"
-       condition_dependent_plugin_objects="$condition_dependent_plugin_objects 
m4_bregexp($11, [[^/]+\.], [\&o])"
-       condition_dependent_plugin_links="$condition_dependent_plugin_links 
$6/$11"
-       
condition_dependent_plugin_includes="$condition_dependent_plugin_includes 
-I[\$(top_srcdir)]/$6/m4_bregexp($11, [^.+[/$]], [\&])"
+      m4_ifdef([$11], [
+        m4_foreach([plugin], [$11], [
+           
condition_dependent_plugin_modules="$condition_dependent_plugin_modules 
m4_bregexp(plugin, [[^/]+$], [\&])"
+           
condition_dependent_plugin_objects="$condition_dependent_plugin_objects 
m4_bregexp(plugin, [[^/]+\.], [\&o])"
+           condition_dependent_plugin_links="$condition_dependent_plugin_links 
$6/plugin"
+           
condition_dependent_plugin_includes="$condition_dependent_plugin_includes 
-I[\$(top_srcdir)]/$6/m4_bregexp(plugin, [^.+[/$]], [\&])"
+        ])
       ])
     fi
   fi

=== modified file 'configure.in'
--- a/configure.in      2009-12-03 11:34:11 +0000
+++ b/configure.in      2009-12-23 08:32:14 +0000
@@ -15,7 +15,7 @@ AC_CANONICAL_SYSTEM
 # MySQL version number.
 #
 # Note: the following line must be parseable by win/configure.js:GetVersion()
-AM_INIT_AUTOMAKE(mysql, 5.1.41-MariaDB-beta)
+AM_INIT_AUTOMAKE(mysql, 5.1.41-MariaDB-rc)
 AM_CONFIG_HEADER([include/config.h:config.h.in])
 
 PROTOCOL_VERSION=10

=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl      2009-12-21 16:26:36 +0000
+++ b/mysql-test/mysql-test-run.pl      2010-01-05 14:28:34 +0000
@@ -301,6 +301,9 @@ sub main {
     }
   }
 
+  # Check for plugin availability so we know whether to skip tests or not.
+  detect_plugins();
+
   mtr_report("Collecting tests...");
   my $tests= collect_test_cases($opt_suites, \...@opt_cases);
 
@@ -1877,6 +1880,37 @@ sub have_maria_support () {
 }
 
 
+# Detect plugin presense and set environment variables appropriately.
+# This needs to be done early, so we can know whether to skip tests.
+sub detect_plugins {
+  # --------------------------------------------------------------------------
+  # Add the path where mysqld will find ha_example.so
+  # --------------------------------------------------------------------------
+  if ($mysql_version_id >= 50100) {
+    my $plugin_filename;
+    if (IS_WINDOWS)
+    {
+       $plugin_filename = "ha_example.dll";
+    }
+    else 
+    {
+       $plugin_filename = "ha_example.so";
+    }
+    my $lib_example_plugin=
+      mtr_file_exists(vs_config_dirs('storage/example',$plugin_filename),
+                     "$basedir/storage/example/.libs/".$plugin_filename,
+                      "$basedir/lib/mariadb/plugin/".$plugin_filename,
+                      "$basedir/lib/mysql/plugin/".$plugin_filename);
+    $ENV{'EXAMPLE_PLUGIN'}=
+      ($lib_example_plugin ? basename($lib_example_plugin) : "");
+    $ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=".
+      ($lib_example_plugin ? dirname($lib_example_plugin) : "");
+
+    $ENV{'HA_EXAMPLE_SO'}="'".$plugin_filename."'";
+    $ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=EXAMPLE=".$plugin_filename;
+  }
+}
+
 #
 # Set environment to be used by childs of this process for
 # things that are constant during the whole lifetime of mysql-test-run
@@ -1935,33 +1969,6 @@ sub environment_setup {
   $ENV{'UDF_EXAMPLE_LIB_OPT'}= "--plugin-dir=".
     ($lib_udf_example ? dirname($lib_udf_example) : "");
 
-  # --------------------------------------------------------------------------
-  # Add the path where mysqld will find ha_example.so
-  # --------------------------------------------------------------------------
-  if ($mysql_version_id >= 50100) {
-    my $plugin_filename;
-    if (IS_WINDOWS)
-    {
-       $plugin_filename = "ha_example.dll";
-    }
-    else 
-    {
-       $plugin_filename = "ha_example.so";
-    }
-    my $lib_example_plugin=
-      mtr_file_exists(vs_config_dirs('storage/example',$plugin_filename),
-                     "$basedir/storage/example/.libs/".$plugin_filename,
-                      "$basedir/lib/mariadb/plugin/".$plugin_filename,
-                      "$basedir/lib/mysql/plugin/".$plugin_filename);
-    $ENV{'EXAMPLE_PLUGIN'}=
-      ($lib_example_plugin ? basename($lib_example_plugin) : "");
-    $ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=".
-      ($lib_example_plugin ? dirname($lib_example_plugin) : "");
-
-    $ENV{'HA_EXAMPLE_SO'}="'".$plugin_filename."'";
-    $ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=EXAMPLE=".$plugin_filename;
-  }
-
   # ----------------------------------------------------
   # Add the path where mysqld will find mypluglib.so
   # ----------------------------------------------------

=== renamed file 'mysql-test/suite/pbxt/t/load_unique_error1.inc' => 
'mysql-test/std_data/pbxt_load_unique_error1.inc'
=== modified file 'mysql-test/suite/pbxt/r/join_nested.result'
--- a/mysql-test/suite/pbxt/r/join_nested.result        2009-11-24 10:19:08 
+0000
+++ b/mysql-test/suite/pbxt/r/join_nested.result        2009-12-27 16:48:27 
+0000
@@ -968,7 +968,7 @@ id  select_type     table   type    possible_keys
 Warnings:
 Note   1003    select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS 
`b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS 
`a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS 
`b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS 
`a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS 
`b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS 
`a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from 
`test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join 
`test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 
1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join 
`test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 
10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) 
on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 
2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`
 .`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) 
or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where 
((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and 
(`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) 
and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = 
`test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and 
((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) 
or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or 
isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) 
and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
 CREATE INDEX idx_b ON t8(b);
-EXPLAIN EXTENDED
+EXPLAIN
 SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
 t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
 FROM t0,t1
@@ -1003,22 +1003,23 @@ t0.b=t1.b AND
 (t8.a < 1 OR t8.c IS NULL) AND
 (t8.b=t9.b OR t8.c IS NULL) AND
 (t9.a=1);
-id     select_type     table   type    possible_keys   key     key_len ref     
rows    filtered        Extra
-1      SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where
-1      SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where; Using join buffer
-1      SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where
-1      SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       100.00  
Using where
-1      SIMPLE  t4      ref     idx_b   idx_b   5       test.t2.b       1       
100.00  Using where
-1      SIMPLE  t5      ALL     idx_b   NULL    NULL    NULL    3       100.00  
Using where
-1      SIMPLE  t6      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where
-1      SIMPLE  t7      ALL     NULL    NULL    NULL    NULL    2       100.00  
Using where
-1      SIMPLE  t8      ref     idx_b   idx_b   5       test.t5.b       1       
100.00  Using where
-1      SIMPLE  t9      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where; Using join buffer
-Note   1003    select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS 
`b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS 
`a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS 
`b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS 
`a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS 
`b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS 
`a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from 
`test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join 
`test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 
1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join 
`test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 
10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) 
on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 
2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`
 .`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) 
or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where 
((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and 
(`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) 
and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = 
`test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and 
((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) 
or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or 
isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) 
and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
-Warnings:
+id     select_type     table   type    possible_keys   key     key_len ref     
rows    Extra
+1      SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    3       
+1      SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using 
join buffer
+1      SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    3       
+1      SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       
+1      SIMPLE  t4      ref     idx_b   idx_b   5       test.t2.b       1       
+1      SIMPLE  t5      ALL     idx_b   NULL    NULL    NULL    3       
+1      SIMPLE  t6      ALL     NULL    NULL    NULL    NULL    3       
+1      SIMPLE  t7      ALL     NULL    NULL    NULL    NULL    2       
+1      SIMPLE  t8      ref     idx_b   idx_b   5       test.t5.b       1       
+1      SIMPLE  t9      ALL     NULL    NULL    NULL    NULL    3       Using 
join buffer
+ATTENTION: the above EXPLAIN has several competing QEPs with identical
+.          costs. To combat the plan change it uses --sorted_result and
+.          and --replace tricks
 CREATE INDEX idx_b ON t1(b);
 CREATE INDEX idx_a ON t0(a);
-EXPLAIN EXTENDED
+EXPLAIN 
 SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
 t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
 FROM t0,t1
@@ -1053,19 +1054,20 @@ t0.b=t1.b AND
 (t8.a < 1 OR t8.c IS NULL) AND
 (t8.b=t9.b OR t8.c IS NULL) AND
 (t9.a=1);
-id     select_type     table   type    possible_keys   key     key_len ref     
rows    filtered        Extra
-1      SIMPLE  t0      ref     idx_a   idx_a   5       const   1       100.00  
Using where
-1      SIMPLE  t1      ref     idx_b   idx_b   5       test.t0.b       1       
100.00  Using where
-1      SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where
-1      SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       100.00  
Using where
-1      SIMPLE  t4      ref     idx_b   idx_b   5       test.t2.b       1       
100.00  Using where
-1      SIMPLE  t5      ALL     idx_b   NULL    NULL    NULL    3       100.00  
Using where
-1      SIMPLE  t6      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where
-1      SIMPLE  t7      ALL     NULL    NULL    NULL    NULL    2       100.00  
Using where
-1      SIMPLE  t8      ref     idx_b   idx_b   5       test.t5.b       1       
100.00  Using where
-1      SIMPLE  t9      ALL     NULL    NULL    NULL    NULL    3       100.00  
Using where; Using join buffer
-Note   1003    select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS 
`b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS 
`a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS 
`b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS 
`a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS 
`b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS 
`a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from 
`test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join 
`test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 
1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join 
`test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 
10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) 
on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 
2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`
 .`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) 
or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where 
((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and 
(`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) 
and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = 
`test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and 
((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) 
or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or 
isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) 
and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
-Warnings:
+id     select_type     table   type    possible_keys   key     key_len ref     
rows    Extra
+1      SIMPLE  t0      ref     idx_a   idx_a   5       const   1       
+1      SIMPLE  t1      ref     idx_b   idx_b   5       test.t0.b       1       
+1      SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    3       
+1      SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       
+1      SIMPLE  t4      ref     idx_b   idx_b   5       test.t2.b       1       
+1      SIMPLE  t5      ALL     idx_b   NULL    NULL    NULL    3       
+1      SIMPLE  t6      ALL     NULL    NULL    NULL    NULL    3       
+1      SIMPLE  t7      ALL     NULL    NULL    NULL    NULL    2       
+1      SIMPLE  t8      ref     idx_b   idx_b   5       test.t5.b       1       
+1      SIMPLE  t9      ALL     NULL    NULL    NULL    NULL    3       Using 
join buffer
+ATTENTION: the above EXPLAIN has several competing QEPs with identical
+.          costs. To combat the plan change it uses --sorted_result
+.          and --replace tricks
 SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
 t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
 FROM t0,t1

=== modified file 'mysql-test/suite/pbxt/r/pbxt_bugs.result'
--- a/mysql-test/suite/pbxt/r/pbxt_bugs.result  2009-08-17 15:57:58 +0000
+++ b/mysql-test/suite/pbxt/r/pbxt_bugs.result  2009-12-22 10:33:20 +0000
@@ -1212,7 +1212,7 @@ c1
 2147483647
 DROP TABLE IF EXISTS t1;
 CREATE TABLE t1 (c1 INTEGER NOT NULL PRIMARY KEY, c2 VARCHAR(255));
-LOAD DATA LOCAL INFILE 'suite/pbxt/t/load_unique_error1.inc' REPLACE INTO 
TABLE t1 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (@c1,c2) SET c1 = 
@c1 % 2;
+LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/std_data/pbxt_load_unique_error1.inc' 
REPLACE INTO TABLE t1 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' 
(@c1,c2) SET c1 = @c1 % 2;
 SELECT * FROM t1 ORDER BY c1;
 c1     c2
 0      opq

=== modified file 'mysql-test/suite/pbxt/t/join_nested.test'
--- a/mysql-test/suite/pbxt/t/join_nested.test  2009-08-17 15:57:58 +0000
+++ b/mysql-test/suite/pbxt/t/join_nested.test  2009-12-27 16:48:27 +0000
@@ -546,8 +546,9 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.
 
 CREATE INDEX idx_b ON t8(b);
 
+--replace_regex /Using where; // /Using where//
 --sorted_result
-EXPLAIN EXTENDED
+EXPLAIN
 SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
        t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
   FROM t0,t1
@@ -582,12 +583,16 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.
            (t8.a < 1 OR t8.c IS NULL) AND
            (t8.b=t9.b OR t8.c IS NULL) AND
            (t9.a=1); 
+--echo ATTENTION: the above EXPLAIN has several competing QEPs with identical
+--echo .          costs. To combat the plan change it uses --sorted_result and
+--echo .          and --replace tricks
 
 CREATE INDEX idx_b ON t1(b);
 CREATE INDEX idx_a ON t0(a);
 
+--replace_regex /Using where; // /Using where//
 --sorted_result
-EXPLAIN EXTENDED
+EXPLAIN 
 SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
        t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
   FROM t0,t1
@@ -622,6 +627,9 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.
            (t8.a < 1 OR t8.c IS NULL) AND
            (t8.b=t9.b OR t8.c IS NULL) AND
            (t9.a=1); 
+--echo ATTENTION: the above EXPLAIN has several competing QEPs with identical
+--echo .          costs. To combat the plan change it uses --sorted_result
+--echo .          and --replace tricks
 
 --sorted_result
 SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,

=== modified file 'mysql-test/suite/pbxt/t/pbxt_bugs.test'
--- a/mysql-test/suite/pbxt/t/pbxt_bugs.test    2009-08-17 15:57:58 +0000
+++ b/mysql-test/suite/pbxt/t/pbxt_bugs.test    2009-12-22 10:33:20 +0000
@@ -921,7 +921,8 @@ SELECT c1 FROM t2;
 DROP TABLE IF EXISTS t1;
 --enable_warnings
 CREATE TABLE t1 (c1 INTEGER NOT NULL PRIMARY KEY, c2 VARCHAR(255));
-LOAD DATA LOCAL INFILE 'suite/pbxt/t/load_unique_error1.inc' REPLACE INTO 
TABLE t1 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (@c1,c2) SET c1 = 
@c1 % 2;
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval LOAD DATA LOCAL INFILE 
'$MYSQLTEST_VARDIR/std_data/pbxt_load_unique_error1.inc' REPLACE INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (@c1,c2) SET c1 = @c1 % 2;
 --sorted_result
 SELECT * FROM t1 ORDER BY c1;
 DROP TABLE t1;

=== modified file 'mysql-test/suite/pbxt/t/pbxt_locking.test'
--- a/mysql-test/suite/pbxt/t/pbxt_locking.test 2009-04-02 10:03:14 +0000
+++ b/mysql-test/suite/pbxt/t/pbxt_locking.test 2009-12-22 10:33:20 +0000
@@ -1,6 +1,9 @@
 # This test covers various aspects of PBXT locking mechanism, including
 # internal permanent/temporary row locking and MySQL locking
 
+# SHOW PROCESSLIST has hardcoded "Writing to net" as state.
+-- source include/not_embedded.inc
+
 # TEST: select for update test
  
 drop table if exists t1;

=== modified file 'mysql-test/suite/pbxt/t/pbxt_transactions.test'
--- a/mysql-test/suite/pbxt/t/pbxt_transactions.test    2009-04-02 10:03:14 
+0000
+++ b/mysql-test/suite/pbxt/t/pbxt_transactions.test    2009-12-22 10:33:20 
+0000
@@ -1,3 +1,6 @@
+# We cannot run mysqldump against embedded server.
+-- source include/not_embedded.inc
+
 --disable_warnings
 drop table if exists t1, t2, t3;
 --enable_warnings

=== modified file 'mysql-test/suite/pbxt/t/ps_1general.test'
--- a/mysql-test/suite/pbxt/t/ps_1general.test  2009-04-02 10:03:14 +0000
+++ b/mysql-test/suite/pbxt/t/ps_1general.test  2009-12-22 10:33:20 +0000
@@ -582,7 +582,7 @@ prepare stmt1 from ' rename table t5 to
 create table t5 (a int) ;
 # rename must fail, t7 does not exist
 # Clean up the filename here because embedded server reports whole path
---replace_result $MYSQLTEST_VARDIR . master-data/ '' t7.frm t7
+--replace_result $MYSQLTEST_VARDIR . mysqld.1/data/ '' t7.frm t7
 --error 1017
 execute stmt1 ;
 create table t7 (a int) ;

=== modified file 'sql/handler.h'
--- a/sql/handler.h     2009-12-03 11:19:05 +0000
+++ b/sql/handler.h     2010-01-04 13:12:53 +0000
@@ -278,6 +278,11 @@ enum legacy_db_type
   DB_TYPE_FIRST_DYNAMIC=42,
   DB_TYPE_DEFAULT=127 // Must be last
 };
+/*
+  Better name for DB_TYPE_UNKNOWN. Should be used for engines that do not have
+  a hard-coded type value here.
+ */
+#define DB_TYPE_AUTOASSIGN DB_TYPE_UNKNOWN
 
 enum row_type { ROW_TYPE_NOT_USED=-1, ROW_TYPE_DEFAULT, ROW_TYPE_FIXED,
                ROW_TYPE_DYNAMIC, ROW_TYPE_COMPRESSED,

=== modified file 'sql/sql_plugin.cc'
--- a/sql/sql_plugin.cc 2009-12-03 11:19:05 +0000
+++ b/sql/sql_plugin.cc 2009-12-22 10:33:20 +0000
@@ -1168,22 +1168,7 @@ int plugin_init(int *argc, char **argv,
           !my_strnncoll(&my_charset_latin1, (const uchar*) plugin->name,
                         6, (const uchar*) "InnoDB", 6))
         continue;
-#ifdef EMBEDDED_LIBRARY
-      /*
-        MariaDB: disable PBXT in embedded server. We do this for two reasons
-         - PBXT currently doesn't work in embedded server (see 
-         https://bugs.launchpad.net/maria/+bug/439889)
-         - Embedded server is supposed to be "leaner" and our current
-           understanding of that is "without PBXT". At the same time, we want
-           regular server to be with PBXT, and since we don't support compiling
-           embedded server with different options than the regular server,
-           the only way was to disable PBXT from here.
-      */
-      if (!my_strnncoll(&my_charset_latin1, (const uchar*) plugin->name,
-                        4, (const uchar*) "PBXT", 4))
-        continue;
 
-#endif
       bzero(&tmp, sizeof(tmp));
       tmp.plugin= plugin;
       tmp.name.str= (char *)plugin->name;

=== modified file 'storage/pbxt/ChangeLog'
--- a/storage/pbxt/ChangeLog    2009-12-01 09:50:46 +0000
+++ b/storage/pbxt/ChangeLog    2009-12-21 13:13:15 +0000
@@ -1,6 +1,10 @@
 PBXT Release Notes
 ==================
 
+------- 1.0.09g RC3 - 2009-12-16
+
+RN292: Fixed a bug that resulted in 2-phase commit not being used between PBXT 
and the binlog. This bug was a result of a hack which as added to solve a 
problem in an pre-release version of MySQL 5.1. The hack was removed. 
+
 ------- 1.0.09f RC3 - 2009-11-30
 
 RN291: Fixed bug #489088: On shutdown MySQL reports: [Warning] Plugin 'PBXT' 
will be forced to shutdown.

=== modified file 'storage/pbxt/plug.in'
--- a/storage/pbxt/plug.in      2009-05-12 06:44:01 +0000
+++ b/storage/pbxt/plug.in      2009-12-09 21:39:23 +0000
@@ -5,3 +5,4 @@ MYSQL_PLUGIN_STATIC(pbxt,    [src/libpbx
 MYSQL_PLUGIN_ACTIONS(pbxt,  [
 #               AC_CONFIG_FILES(storage/pbxt/src/Makefile)
                ])
+MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS(pbxt, 
[[src/ha_pbxt.cc],[src/myxt_xt.cc],[src/discover_xt.cc]])

=== modified file 'storage/pbxt/src/Makefile.am'
--- a/storage/pbxt/src/Makefile.am      2009-11-24 10:55:06 +0000
+++ b/storage/pbxt/src/Makefile.am      2009-12-22 10:33:20 +0000
@@ -46,7 +46,5 @@ libpbxt_la_CFLAGS =           $(AM_CFLAGS) -DMYSQ
 EXTRA_LIBRARIES =              libpbxt.a
 noinst_LIBRARIES =             libpbxt.a
 libpbxt_a_SOURCES =            $(libpbxt_la_SOURCES)
-libpbxt_a_CXXFLAGS =   $(AM_CXXFLAGS)
-libpbxt_a_CFLAGS =             $(AM_CFLAGS) -std=c99
 
 EXTRA_DIST =                   pbms_enabled.cc win_inttypes.h

=== modified file 'storage/pbxt/src/discover_xt.cc'
--- a/storage/pbxt/src/discover_xt.cc   2009-12-16 08:13:18 +0000
+++ b/storage/pbxt/src/discover_xt.cc   2009-12-21 13:13:15 +0000
@@ -355,10 +355,10 @@ static int sort_keys(KEY *a, KEY *b)
   {
     if (!(b_flags & HA_NOSAME))
       return -1;
-    if ((a_flags ^ b_flags) & (HA_NULL_PART_KEY | HA_END_SPACE_KEY))
+    if ((a_flags ^ b_flags) & HA_NULL_PART_KEY)
     {
       /* Sort NOT NULL keys before other keys */
-      return (a_flags & (HA_NULL_PART_KEY | HA_END_SPACE_KEY)) ? 1 : -1;
+      return (a_flags & HA_NULL_PART_KEY) ? 1 : -1;
     }
     if (a->name == primary_key_name)
       return -1;

=== modified file 'storage/pbxt/src/ha_pbxt.cc'
--- a/storage/pbxt/src/ha_pbxt.cc       2009-11-27 15:37:02 +0000
+++ b/storage/pbxt/src/ha_pbxt.cc       2009-12-29 11:34:44 +0000
@@ -1175,8 +1175,13 @@ static int pbxt_init(void *p)
                 * +1 Temporary thread (e.g. TempForClose, TempForEnd)
                 */
 #ifndef DRIZZLED
-               if (pbxt_max_threads == 0)
-                       pbxt_max_threads = max_connections + 7;
+               if (pbxt_max_threads == 0) {
+                       // Embedded server sets max_connections=1
+                       if (max_connections > 1)
+                               pbxt_max_threads = max_connections + 7;
+                       else
+                               pbxt_max_threads = 100;
+               }
 #endif
                self = xt_init_threading(pbxt_max_threads);                     
        /* Create the main self: */
                if (!self)
@@ -1442,7 +1447,7 @@ static int pbxt_commit(handlerton *hton,
        XTThreadPtr     self;
 
        if ((self = (XTThreadPtr) *thd_ha_data(thd, hton))) {
-               XT_PRINT1(self, "pbxt_commit all=%d\n", all);
+               XT_PRINT2(self, "%s pbxt_commit all=%d\n", all ? "END CONN 
XACT" : "END STAT", all);
 
                if (self->st_xact_data) {
                        /* There are no table locks, commit immediately in all 
cases
@@ -1474,7 +1479,7 @@ static int pbxt_rollback(handlerton *hto
        XTThreadPtr     self;
 
        if ((self = (XTThreadPtr) *thd_ha_data(thd, hton))) {
-               XT_PRINT1(self, "pbxt_rollback all=%d in pbxt_commit\n", all);
+               XT_PRINT2(self, "%s pbxt_rollback all=%d\n", all ? "CONN END 
XACT" : "STAT END", all);
 
                if (self->st_xact_data) {
                        /* There are no table locks, rollback immediately in 
all cases
@@ -1538,7 +1543,7 @@ static int pbxt_prepare(handlerton *hton
                         * except when this is a statement commit with an 
explicit
                         * transaction (!all && !self->st_auto_commit).
                         */
-                       if (all) {
+                       if (all || self->st_auto_commit) {
                                XID xid;
 
                                XT_PRINT0(self, "xt_xn_prepare in 
pbxt_prepare\n");
@@ -2620,26 +2625,7 @@ int ha_pbxt::write_row(byte *buf)
        }
 #endif
 
-       /* GOTCHA: I have a huge problem with the transaction statement.
-        * It is not ALWAYS committed (I mean ha_commit_trans() is
-        * not always called - for example in SELECT).
-        *
-        * If I call trans_register_ha() but ha_commit_trans() is not called
-        * then MySQL thinks a transaction is still running (while
-        * I have committed the auto-transaction in ha_pbxt::external_lock()).
-        *
-        * This causes all kinds of problems, like transactions
-        * are killed when they should not be.
-        *
-        * To prevent this, I only inform MySQL that a transaction
-        * has beens started when an update is performed. I have determined that
-        * ha_commit_trans() is only guarenteed to be called if an update is 
done. 
-        */
-       if (!pb_open_tab->ot_thread->st_stat_trans) {
-               trans_register_ha(pb_mysql_thd, FALSE, pbxt_hton);
-               XT_PRINT0(pb_open_tab->ot_thread, "ha_pbxt::write_row 
trans_register_ha all=FALSE\n");
-               pb_open_tab->ot_thread->st_stat_trans = TRUE;
-       }
+       /* {START-STAT-HACK} previously position of start statement hack. */
 
        xt_xlog_check_long_writer(pb_open_tab->ot_thread);
 
@@ -2730,11 +2716,7 @@ int ha_pbxt::update_row(const byte * old
        XT_DISABLED_TRACE(("UPDATE tx=%d val=%d\n", (int) 
self->st_xact_data->xd_start_xn_id, (int) XT_GET_DISK_4(&new_data[1])));
        //statistic_increment(ha_update_count,&LOCK_status);
 
-       if (!self->st_stat_trans) {
-               trans_register_ha(pb_mysql_thd, FALSE, pbxt_hton);
-               XT_PRINT0(self, "ha_pbxt::update_row trans_register_ha 
all=FALSE\n");
-               self->st_stat_trans = TRUE;
-       }
+       /* {START-STAT-HACK} previously position of start statement hack. */
 
        xt_xlog_check_long_writer(self);
 
@@ -2821,11 +2803,7 @@ int ha_pbxt::delete_row(const byte * buf
        }
 #endif
 
-       if (!pb_open_tab->ot_thread->st_stat_trans) {
-               trans_register_ha(pb_mysql_thd, FALSE, pbxt_hton);
-               XT_PRINT0(pb_open_tab->ot_thread, "ha_pbxt::delete_row 
trans_register_ha all=FALSE\n");
-               pb_open_tab->ot_thread->st_stat_trans = TRUE;
-       }
+       /* {START-STAT-HACK} previously position of start statement hack. */
 
        xt_xlog_check_long_writer(pb_open_tab->ot_thread);
 
@@ -3155,15 +3133,12 @@ int ha_pbxt::index_init(uint idx, bool X
 
                printf("index_init %s index %d cols req=%d/%d read_bits=%X 
write_bits=%X index_bits=%X\n", pb_open_tab->ot_table->tab_name->ps_path, (int) 
idx, pb_open_tab->ot_cols_req, pb_open_tab->ot_cols_req, (int) 
*table->read_set->bitmap, (int) *table->write_set->bitmap, (int) 
*ind->mi_col_map.bitmap);
 #endif
+               /* {START-STAT-HACK} previously position of start statement 
hack,
+                * previous comment to code below: */
                /* Start a statement based transaction as soon
                 * as a read is done for a modify type statement!
                 * Previously, this was done too late!
                 */
-               if (!thread->st_stat_trans) {
-                       trans_register_ha(pb_mysql_thd, FALSE, pbxt_hton);
-                       XT_PRINT0(thread, "ha_pbxt::update_row 
trans_register_ha all=FALSE\n");
-                       thread->st_stat_trans = TRUE;
-               }
        }
        else {
                pb_open_tab->ot_cols_req = ha_get_max_bit(table->read_set);
@@ -3612,15 +3587,12 @@ int ha_pbxt::rnd_init(bool scan)
        /* The number of columns required: */
        if (pb_open_tab->ot_is_modify) {
                pb_open_tab->ot_cols_req = table->read_set->MX_BIT_SIZE();
+               /* {START-STAT-HACK} previously position of start statement 
hack,
+                * previous comment to code below: */
                /* Start a statement based transaction as soon
                 * as a read is done for a modify type statement!
                 * Previously, this was done too late!
                 */
-               if (!thread->st_stat_trans) {
-                       trans_register_ha(pb_mysql_thd, FALSE, pbxt_hton);
-                       XT_PRINT0(thread, "ha_pbxt::update_row 
trans_register_ha all=FALSE\n");
-                       thread->st_stat_trans = TRUE;
-               }
        }
        else {
                pb_open_tab->ot_cols_req = ha_get_max_bit(table->read_set);
@@ -4631,7 +4603,7 @@ xtPublic int ha_pbxt::external_lock(THD
                        cont_(b);
                }
 
-               /* See (***) */
+               /* See {IS-UPDATE-STAT} */
                self->st_is_update = FALSE;
 
                /* Auto begin a transaction (if one is not already running): */
@@ -4660,7 +4632,7 @@ xtPublic int ha_pbxt::external_lock(THD
                        }
 
                        /*
-                        * (**) GOTCHA: trans_register_ha() is not mentioned in 
the documentation.
+                        * {START-TRANS} GOTCHA: trans_register_ha() is not 
mentioned in the documentation.
                         * It must be called to inform MySQL that we have a 
transaction (see start_stmt).
                         *
                         * Here are some tests that confirm whether things are 
done correctly:
@@ -4698,10 +4670,46 @@ xtPublic int ha_pbxt::external_lock(THD
                         */
                        if (!self->st_auto_commit) {
                                trans_register_ha(thd, TRUE, pbxt_hton);
-                               XT_PRINT0(self, "ha_pbxt::external_lock 
trans_register_ha all=TRUE\n");
+                               XT_PRINT0(self, "CONN START XACT - 
ha_pbxt::external_lock --> trans_register_ha\n");
                        }
                }
 
+               /* Start a statment transaction: */
+               /* {START-STAT-HACK} The problem that ha_commit_trans() is not
+                * called by MySQL seems to be fixed (tests confirm this).
+                * Here is the previous comment when this code was execute 
+                * here {START-STAT-HACK}
+                *
+                * GOTCHA: I have a huge problem with the transaction statement.
+                * It is not ALWAYS committed (I mean ha_commit_trans() is
+                * not always called - for example in SELECT).
+                *
+                * If I call trans_register_ha() but ha_commit_trans() is not 
called
+                * then MySQL thinks a transaction is still running (while
+                * I have committed the auto-transaction in 
ha_pbxt::external_lock()).
+                *
+                * This causes all kinds of problems, like transactions
+                * are killed when they should not be.
+                *
+                * To prevent this, I only inform MySQL that a transaction
+                * has beens started when an update is performed. I have 
determined that
+                * ha_commit_trans() is only guarenteed to be called if an 
update is done.
+                * --------
+                *
+                * So, this is the correct place to start a statement 
transaction.
+                *
+                * Note: if trans_register_ha() is not called before 
ha_write_row(), then 
+                * PBXT is not registered correctly as a modification 
transaction.
+                * (mark_trx_read_write call in ha_write_row).
+                * This leads to 2-phase commit not being called as it should 
when
+                * binary logging is enabled.
+                */
+               if (!pb_open_tab->ot_thread->st_stat_trans) {
+                       trans_register_ha(pb_mysql_thd, FALSE, pbxt_hton);
+                       XT_PRINT0(pb_open_tab->ot_thread, "STAT START - 
ha_pbxt::external_lock --> trans_register_ha\n");
+                       pb_open_tab->ot_thread->st_stat_trans = TRUE;
+               }
+
                if (lock_type == F_WRLCK || self->st_xact_mode < 
XT_XACT_REPEATABLE_READ)
                        self->st_visible_time = 
self->st_database->db_xn_end_time;
 
@@ -4826,7 +4834,7 @@ int ha_pbxt::start_stmt(THD *thd, thr_lo
                }
        }
 
-       /* (***) This is required at this level!
+       /* {IS-UPDATE-STAT} This is required at this level!
         * No matter how often it is called, it is still the start of a
         * statement. We need to make sure statements that are NOT mistaken
         * for different type of statement.
@@ -4841,7 +4849,7 @@ int ha_pbxt::start_stmt(THD *thd, thr_lo
         */
        self->st_is_update = FALSE;
 
-       /* See comment (**) */
+       /* See comment {START-TRANS} */
        if (!self->st_xact_data) {
                self->st_xact_mode = thd_tx_isolation(thd) <= 
ISO_READ_COMMITTED ? XT_XACT_COMMITTED_READ : XT_XACT_REPEATABLE_READ;
                self->st_ignore_fkeys = (thd_test_options(thd, 
OPTION_NO_FOREIGN_KEY_CHECKS)) != 0;
@@ -4858,10 +4866,17 @@ int ha_pbxt::start_stmt(THD *thd, thr_lo
                }
                if (!self->st_auto_commit) {
                        trans_register_ha(thd, TRUE, pbxt_hton);
-                       XT_PRINT0(self, "ha_pbxt::start_stmt trans_register_ha 
all=TRUE\n");
+                       XT_PRINT0(self, "START CONN XACT - ha_pbxt::start_stmt 
--> trans_register_ha\n");
                }
        }
 
+       /* Start a statment (see {START-STAT-HACK}): */
+       if (!pb_open_tab->ot_thread->st_stat_trans) {
+               trans_register_ha(pb_mysql_thd, FALSE, pbxt_hton);
+               XT_PRINT0(pb_open_tab->ot_thread, "START STAT - 
ha_pbxt::start_stmt --> trans_register_ha\n");
+               pb_open_tab->ot_thread->st_stat_trans = TRUE;
+       }
+
        if (pb_open_tab->ot_for_update || self->st_xact_mode < 
XT_XACT_REPEATABLE_READ)
                self->st_visible_time = self->st_database->db_xn_end_time;
 

=== modified file 'storage/pbxt/src/strutil_xt.cc'
--- a/storage/pbxt/src/strutil_xt.cc    2009-11-24 10:55:06 +0000
+++ b/storage/pbxt/src/strutil_xt.cc    2009-12-21 13:13:15 +0000
@@ -380,7 +380,7 @@ xtPublic void xt_int8_to_byte_size(xtInt
 /* Version number must also be set in configure.in! */
 xtPublic c_char *xt_get_version(void)
 {
-       return "1.0.09f RC";
+       return "1.0.09g RC";
 }
 
 /* Copy and URL decode! */

=== modified file 'storage/pbxt/src/table_xt.cc'
--- a/storage/pbxt/src/table_xt.cc      2009-11-25 15:40:51 +0000
+++ b/storage/pbxt/src/table_xt.cc      2009-12-22 10:33:20 +0000
@@ -1297,7 +1297,7 @@ xtPublic void xt_create_table(XTThreadPt
        XTSortedListInfoRec     li_undo;
 
 #ifdef TRACE_CREATE_TABLES
-       printf("CREATE %s\n", name->ps_path);
+       fprintf(stderr, "CREATE %s\n", name->ps_path);
 #endif
        enter_();
        if (strlen(xt_last_name_of_path(name->ps_path)) > XT_TABLE_NAME_SIZE-1)
@@ -1619,7 +1619,7 @@ xtPublic void xt_drop_table(XTThreadPtr
        enter_();
 
 #ifdef TRACE_CREATE_TABLES
-       printf("DROP %s\n", tab_name->ps_path);
+       fprintf(stderr, "DROP %s\n", tab_name->ps_path);
 #endif
 
        table_pool = tab_lock_table(self, tab_name, FALSE, TRUE, TRUE, &tab);
@@ -1777,7 +1777,7 @@ xtPublic void xt_check_table(XTThreadPtr
        u_llong                                 ext_data_len = 0;
 
 #if defined(DUMP_CHECK_TABLE) || defined(CHECK_TABLE_STATS)
-       printf("\nCHECK TABLE: %s\n", tab->tab_name->ps_path);
+       fprintf(stderr, "\nCHECK TABLE: %s\n", tab->tab_name->ps_path);
 #endif
 
        xt_lock_mutex(self, &tab->tab_db->db_co_ext_lock);
@@ -1787,38 +1787,38 @@ xtPublic void xt_check_table(XTThreadPtr
        pushr_(xt_unlock_mutex, &tab->tab_rec_lock);
 
 #ifdef CHECK_TABLE_STATS
-       printf("Record buffer size      = %lu\n", (u_long) 
tab->tab_dic.dic_mysql_buf_size);
-       printf("Fixed length rec. len.  = %lu\n", (u_long) 
tab->tab_dic.dic_mysql_rec_size);
-       printf("Handle data record size = %lu\n", (u_long) 
tab->tab_dic.dic_rec_size);
-       printf("Min/max header size     = %d/%d\n", (int) offsetof(XTTabRecFix, 
rf_data), tab->tab_dic.dic_rec_fixed ? (int) offsetof(XTTabRecFix, rf_data) : 
(int) offsetof(XTTabRecExtDRec, re_data));
-       printf("Min/avg/max record size = %llu/%llu/%llu\n", (u_llong) 
tab->tab_dic.dic_min_row_size, (u_llong) tab->tab_dic.dic_ave_row_size, 
(u_llong) tab->tab_dic.dic_max_row_size);
+       fprintf(stderr, "Record buffer size      = %lu\n", (u_long) 
tab->tab_dic.dic_mysql_buf_size);
+       fprintf(stderr, "Fixed length rec. len.  = %lu\n", (u_long) 
tab->tab_dic.dic_mysql_rec_size);
+       fprintf(stderr, "Handle data record size = %lu\n", (u_long) 
tab->tab_dic.dic_rec_size);
+       fprintf(stderr, "Min/max header size     = %d/%d\n", (int) 
offsetof(XTTabRecFix, rf_data), tab->tab_dic.dic_rec_fixed ? (int) 
offsetof(XTTabRecFix, rf_data) : (int) offsetof(XTTabRecExtDRec, re_data));
+       fprintf(stderr, "Min/avg/max record size = %llu/%llu/%llu\n", (u_llong) 
tab->tab_dic.dic_min_row_size, (u_llong) tab->tab_dic.dic_ave_row_size, 
(u_llong) tab->tab_dic.dic_max_row_size);
        if (tab->tab_dic.dic_def_ave_row_size)
-               printf("Avg row len set for tab = %lu\n", (u_long) 
tab->tab_dic.dic_def_ave_row_size);
+               fprintf(stderr, "Avg row len set for tab = %lu\n", (u_long) 
tab->tab_dic.dic_def_ave_row_size);
        else
-               printf("Avg row len set for tab = not specified\n");
-       printf("Rows fixed length       = %s\n", tab->tab_dic.dic_rec_fixed ? 
"YES" : "NO");
+               fprintf(stderr, "Avg row len set for tab = not specified\n");
+       fprintf(stderr, "Rows fixed length       = %s\n", 
tab->tab_dic.dic_rec_fixed ? "YES" : "NO");
        if (tab->tab_dic.dic_tab_flags & XT_TAB_FLAGS_TEMP_TAB)
-               printf("Table type              = TEMP\n");
+               fprintf(stderr, "Table type              = TEMP\n");
        if (tab->tab_dic.dic_def_ave_row_size)
-               printf("Maximum fixed size      = %lu\n", (u_long) 
XT_TAB_MAX_FIX_REC_LENGTH_SPEC);
+               fprintf(stderr, "Maximum fixed size      = %lu\n", (u_long) 
XT_TAB_MAX_FIX_REC_LENGTH_SPEC);
        else
-               printf("Maximum fixed size      = %lu\n", (u_long) 
XT_TAB_MAX_FIX_REC_LENGTH);
-       printf("Minimum variable size   = %lu\n", (u_long) 
XT_TAB_MIN_VAR_REC_LENGTH);
-       printf("Minimum auto-increment  = %llu\n", (u_llong) 
tab->tab_dic.dic_min_auto_inc);
-       printf("Number of columns       = %lu\n", (u_long) 
tab->tab_dic.dic_no_of_cols);
-       printf("Number of fixed columns = %lu\n", (u_long) 
tab->tab_dic.dic_fix_col_count);
-       printf("Columns req. for index  = %lu\n", (u_long) 
tab->tab_dic.dic_ind_cols_req);
+               fprintf(stderr, "Maximum fixed size      = %lu\n", (u_long) 
XT_TAB_MAX_FIX_REC_LENGTH);
+       fprintf(stderr, "Minimum variable size   = %lu\n", (u_long) 
XT_TAB_MIN_VAR_REC_LENGTH);
+       fprintf(stderr, "Minimum auto-increment  = %llu\n", (u_llong) 
tab->tab_dic.dic_min_auto_inc);
+       fprintf(stderr, "Number of columns       = %lu\n", (u_long) 
tab->tab_dic.dic_no_of_cols);
+       fprintf(stderr, "Number of fixed columns = %lu\n", (u_long) 
tab->tab_dic.dic_fix_col_count);
+       fprintf(stderr, "Columns req. for index  = %lu\n", (u_long) 
tab->tab_dic.dic_ind_cols_req);
        if (tab->tab_dic.dic_ind_rec_len)
-               printf("Rec len req. for index  = %llu\n", (u_llong) 
tab->tab_dic.dic_ind_rec_len);
-       printf("Columns req. for blobs  = %lu\n", (u_long) 
tab->tab_dic.dic_blob_cols_req);
-       printf("Number of blob columns  = %lu\n", (u_long) 
tab->tab_dic.dic_blob_count);
-       printf("Number of indices       = %lu\n", (u_long) 
tab->tab_dic.dic_key_count);
+               fprintf(stderr, "Rec len req. for index  = %llu\n", (u_llong) 
tab->tab_dic.dic_ind_rec_len);
+       fprintf(stderr, "Columns req. for blobs  = %lu\n", (u_long) 
tab->tab_dic.dic_blob_cols_req);
+       fprintf(stderr, "Number of blob columns  = %lu\n", (u_long) 
tab->tab_dic.dic_blob_count);
+       fprintf(stderr, "Number of indices       = %lu\n", (u_long) 
tab->tab_dic.dic_key_count);
 #endif
 
 #ifdef DUMP_CHECK_TABLE
-       printf("Records:-\n");
-       printf("Free list: %llu (%llu)\n", (u_llong) tab->tab_rec_free_id, 
(u_llong) tab->tab_rec_fnum);
-       printf("EOF:       %llu\n", (u_llong) tab->tab_rec_eof_id);
+       fprintf(stderr, "Records:-\n");
+       fprintf(stderr, "Free list: %llu (%llu)\n", (u_llong) 
tab->tab_rec_free_id, (u_llong) tab->tab_rec_fnum);
+       fprintf(stderr, "EOF:       %llu\n", (u_llong) tab->tab_rec_eof_id);
 #endif
 
        rec_size = XT_REC_EXT_HEADER_SIZE;
@@ -1830,24 +1830,24 @@ xtPublic void xt_check_table(XTThreadPtr
                        xt_throw(self);
 
 #ifdef DUMP_CHECK_TABLE
-               printf("%-4llu ", (u_llong) rec_id);
+               fprintf(stderr, "%-4llu ", (u_llong) rec_id);
 #endif
                switch (rec_buf->tr_rec_type_1 & XT_TAB_STATUS_MASK) {
                        case XT_TAB_STATUS_FREED:
 #ifdef DUMP_CHECK_TABLE
-                               printf("======== ");
+                               fprintf(stderr, "======== ");
 #endif
                                free_rec_count++;
                                break;
                        case XT_TAB_STATUS_DELETE:
 #ifdef DUMP_CHECK_TABLE
-                               printf("delete   ");
+                               fprintf(stderr, "delete   ");
 #endif
                                delete_rec_count++;
                                break;
                        case XT_TAB_STATUS_FIXED:
 #ifdef DUMP_CHECK_TABLE
-                               printf("record-F ");
+                               fprintf(stderr, "record-F ");
 #endif
                                alloc_rec_count++;
                                row_size = myxt_store_row_length(ot, (char *) 
ot->ot_row_rbuffer + XT_REC_FIX_HEADER_SIZE);
@@ -1859,7 +1859,7 @@ xtPublic void xt_check_table(XTThreadPtr
                                break;
                        case XT_TAB_STATUS_VARIABLE:
 #ifdef DUMP_CHECK_TABLE
-                               printf("record-V ");
+                               fprintf(stderr, "record-V ");
 #endif
                                alloc_rec_count++;
                                row_size = myxt_load_row_length(ot, 
tab->tab_dic.dic_rec_size, ot->ot_row_rbuffer + XT_REC_FIX_HEADER_SIZE, NULL);
@@ -1871,7 +1871,7 @@ xtPublic void xt_check_table(XTThreadPtr
                                break;
                        case XT_TAB_STATUS_EXT_DLOG:
 #ifdef DUMP_CHECK_TABLE
-                               printf("record-X ");
+                               fprintf(stderr, "record-X ");
 #endif
                                alloc_rec_count++;
                                ext_data_len += 
XT_GET_DISK_4(rec_buf->re_log_dat_siz_4);
@@ -1885,9 +1885,9 @@ xtPublic void xt_check_table(XTThreadPtr
                }
 #ifdef DUMP_CHECK_TABLE
                if (rec_buf->tr_rec_type_1 & XT_TAB_STATUS_CLEANED_BIT)
-                       printf("C");
+                       fprintf(stderr, "C");
                else
-                       printf(" ");
+                       fprintf(stderr, " ");
 #endif
                prev_rec_id = XT_GET_DISK_4(rec_buf->tr_prev_rec_id_4);
                xn_id = XT_GET_DISK_4(rec_buf->tr_xact_id_4);
@@ -1895,12 +1895,12 @@ xtPublic void xt_check_table(XTThreadPtr
                switch (rec_buf->tr_rec_type_1 & XT_TAB_STATUS_MASK) {
                        case XT_TAB_STATUS_FREED:
 #ifdef DUMP_CHECK_TABLE
-                               printf(" prev=%-3llu (xact=%-3llu row=%lu)\n", 
(u_llong) prev_rec_id, (u_llong) xn_id, (u_long) row_id);
+                               fprintf(stderr, " prev=%-3llu (xact=%-3llu 
row=%lu)\n", (u_llong) prev_rec_id, (u_llong) xn_id, (u_long) row_id);
 #endif
                                break;
                        case XT_TAB_STATUS_EXT_DLOG:
 #ifdef DUMP_CHECK_TABLE
-                               printf(" prev=%-3llu  xact=%-3llu row=%lu  
Xlog=%lu Xoff=%llu Xsiz=%lu\n", (u_llong) prev_rec_id, (u_llong) xn_id, 
(u_long) row_id, (u_long) XT_GET_DISK_2(rec_buf->re_log_id_2), (u_llong) 
XT_GET_DISK_6(rec_buf->re_log_offs_6), (u_long) 
XT_GET_DISK_4(rec_buf->re_log_dat_siz_4));
+                               fprintf(stderr, " prev=%-3llu  xact=%-3llu 
row=%lu  Xlog=%lu Xoff=%llu Xsiz=%lu\n", (u_llong) prev_rec_id, (u_llong) 
xn_id, (u_long) row_id, (u_long) XT_GET_DISK_2(rec_buf->re_log_id_2), (u_llong) 
XT_GET_DISK_6(rec_buf->re_log_offs_6), (u_long) 
XT_GET_DISK_4(rec_buf->re_log_dat_siz_4));
 #endif
 
                                log_size = 
XT_GET_DISK_4(rec_buf->re_log_dat_siz_4);
@@ -1922,7 +1922,7 @@ xtPublic void xt_check_table(XTThreadPtr
                                break;
                        default:
 #ifdef DUMP_CHECK_TABLE
-                               printf(" prev=%-3llu  xact=%-3llu row=%lu\n", 
(u_llong) prev_rec_id, (u_llong) xn_id, (u_long) row_id);
+                               fprintf(stderr, " prev=%-3llu  xact=%-3llu 
row=%lu\n", (u_llong) prev_rec_id, (u_llong) xn_id, (u_long) row_id);
 #endif
                                break;
                }
@@ -1931,16 +1931,16 @@ xtPublic void xt_check_table(XTThreadPtr
        
 #ifdef CHECK_TABLE_STATS
        if (!tab->tab_dic.dic_rec_fixed)
-               printf("Extendend data length   = %llu\n", ext_data_len);
+               fprintf(stderr, "Extendend data length   = %llu\n", 
ext_data_len);
        
        if (alloc_rec_count) {
-               printf("Minumum comp. rec. len. = %llu\n", (u_llong) 
min_comp_rec_len);
-               printf("Average comp. rec. len. = %llu\n", (u_llong) ((double) 
alloc_rec_bytes / (double) alloc_rec_count + (double) 0.5));
-               printf("Maximum comp. rec. len. = %llu\n", (u_llong) 
max_comp_rec_len);
-       }
-       printf("Free record count       = %llu\n", (u_llong) free_rec_count);
-       printf("Deleted record count    = %llu\n", (u_llong) delete_rec_count);
-       printf("Allocated record count  = %llu\n", (u_llong) alloc_rec_count);
+               fprintf(stderr, "Minumum comp. rec. len. = %llu\n", (u_llong) 
min_comp_rec_len);
+               fprintf(stderr, "Average comp. rec. len. = %llu\n", (u_llong) 
((double) alloc_rec_bytes / (double) alloc_rec_count + (double) 0.5));
+               fprintf(stderr, "Maximum comp. rec. len. = %llu\n", (u_llong) 
max_comp_rec_len);
+       }
+       fprintf(stderr, "Free record count       = %llu\n", (u_llong) 
free_rec_count);
+       fprintf(stderr, "Deleted record count    = %llu\n", (u_llong) 
delete_rec_count);
+       fprintf(stderr, "Allocated record count  = %llu\n", (u_llong) 
alloc_rec_count);
 #endif
        if (tab->tab_rec_fnum != free_rec_count)
                xt_logf(XT_INFO, "Table %s: incorrect number of free blocks, 
%llu, should be: %llu\n", tab->tab_name, (u_llong) free_rec_count, (u_llong) 
tab->tab_rec_fnum);
@@ -1978,9 +1978,9 @@ xtPublic void xt_check_table(XTThreadPtr
        pushr_(xt_unlock_mutex, &tab->tab_row_lock);
 
 #ifdef DUMP_CHECK_TABLE
-       printf("Rows:-\n");
-       printf("Free list: %llu (%llu)\n", (u_llong) tab->tab_row_free_id, 
(u_llong) tab->tab_row_fnum);
-       printf("EOF:       %llu\n", (u_llong) tab->tab_row_eof_id);
+       fprintf(stderr, "Rows:-\n");
+       fprintf(stderr, "Free list: %llu (%llu)\n", (u_llong) 
tab->tab_row_free_id, (u_llong) tab->tab_row_fnum);
+       fprintf(stderr, "EOF:       %llu\n", (u_llong) tab->tab_row_eof_id);
 #endif
 
        rec_id = 1;
@@ -1988,13 +1988,13 @@ xtPublic void xt_check_table(XTThreadPtr
                if (!tab->tab_rows.xt_tc_read_4(ot->ot_row_file, rec_id, 
&ref_id, self))
                        xt_throw(self);
 #ifdef DUMP_CHECK_TABLE
-               printf("%-3llu ", (u_llong) rec_id);
+               fprintf(stderr, "%-3llu ", (u_llong) rec_id);
 #endif
 #ifdef DUMP_CHECK_TABLE
                if (ref_id == 0)
-                       printf("====== 0\n");
+                       fprintf(stderr, "====== 0\n");
                else
-                       printf("in use %llu\n", (u_llong) ref_id);
+                       fprintf(stderr, "in use %llu\n", (u_llong) ref_id);
 #endif
                rec_id++;
        }
@@ -2026,7 +2026,7 @@ xtPublic void xt_rename_table(XTThreadPt
        memset(&dic, 0, sizeof(dic));
 
 #ifdef TRACE_CREATE_TABLES
-       printf("RENAME %s --> %s\n", old_name->ps_path, new_name->ps_path);
+       fprintf(stderr, "RENAME %s --> %s\n", old_name->ps_path, 
new_name->ps_path);
 #endif
        if (strlen(xt_last_name_of_path(new_name->ps_path)) > 
XT_TABLE_NAME_SIZE-1)
                xt_throw_taberr(XT_CONTEXT, XT_ERR_NAME_TOO_LONG, new_name);
@@ -2221,7 +2221,7 @@ xtPublic xtBool xt_flush_record_row(XTOp
        xt_tab_store_header(ot, &rec_head);
 
 #ifdef TRACE_FLUSH
-       printf("FLUSH rec/row %d %s\n", (int) tab->tab_bytes_to_flush, 
tab->tab_name->ps_path);
+       fprintf(stderr, "FLUSH rec/row %d %s\n", (int) tab->tab_bytes_to_flush, 
tab->tab_name->ps_path);
        fflush(stdout);
 #endif
        /* Write the table header: */
@@ -2276,7 +2276,7 @@ xtPublic xtBool xt_flush_record_row(XTOp
        xt_unlock_mutex_ns(&cp->cp_state_lock);
 
 #ifdef TRACE_FLUSH
-       printf("FLUSH --end-- %s\n", tab->tab_name->ps_path);
+       fprintf(stderr, "FLUSH --end-- %s\n", tab->tab_name->ps_path);
        fflush(stdout);
 #endif
        xt_unlock_mutex_ns(&tab->tab_rec_flush_lock);

=== modified file 'storage/pbxt/src/thread_xt.cc'
--- a/storage/pbxt/src/thread_xt.cc     2009-11-24 10:55:06 +0000
+++ b/storage/pbxt/src/thread_xt.cc     2009-12-22 10:33:20 +0000
@@ -96,7 +96,7 @@ xtPublic xtBool xt_init_logging(void)
 {
        int err;
 
-       log_file = stdout;
+       log_file = stderr;
        log_level = XT_LOG_TRACE;
        err = xt_p_mutex_init_with_autoname(&log_mutex, NULL);
        if (err) {

=== modified file 'storage/pbxt/src/trace_xt.cc'
--- a/storage/pbxt/src/trace_xt.cc      2009-08-17 11:12:36 +0000
+++ b/storage/pbxt/src/trace_xt.cc      2009-12-22 10:33:20 +0000
@@ -109,10 +109,10 @@ xtPublic void xt_print_trace(void)
                xt_lock_mutex_ns(&trace_mutex);
                if (trace_log_end > trace_log_offset+1) {
                        trace_log_buffer[trace_log_end] = 0;
-                       printf("%s", trace_log_buffer + trace_log_offset + 1);
+                       fprintf(stderr, "%s", trace_log_buffer + 
trace_log_offset + 1);
                }
                trace_log_buffer[trace_log_offset] = 0;
-               printf("%s", trace_log_buffer);
+               fprintf(stderr, "%s", trace_log_buffer);
                trace_log_offset = 0;
                trace_log_end = 0;
                xt_unlock_mutex_ns(&trace_mutex);
@@ -379,9 +379,9 @@ xtPublic void xt_dump_conn_tracking(void
        ptr = conn_info;
        for (int i=0; i<XT_TRACK_MAX_CONNS; i++) {
                if (ptr->ci_curr_xact_id || ptr->ci_prev_xact_id) {
-                       printf("%3d curr=%d prev=%d prev-time=%ld\n", (int) 
ptr->cu_t_id, (int) ptr->ci_curr_xact_id, (int) ptr->ci_prev_xact_id, (long) 
ptr->ci_prev_xact_time);
+                       fprintf(stderr, "%3d curr=%d prev=%d prev-time=%ld\n", 
(int) ptr->cu_t_id, (int) ptr->ci_curr_xact_id, (int) ptr->ci_prev_xact_id, 
(long) ptr->ci_prev_xact_time);
                        if (i+1<XT_TRACK_MAX_CONNS) {
-                               printf("    diff=%d\n", (int) 
(ptr+1)->ci_curr_xact_id - (int) ptr->ci_curr_xact_id);
+                               fprintf(stderr, "    diff=%d\n", (int) 
(ptr+1)->ci_curr_xact_id - (int) ptr->ci_curr_xact_id);
                        }
                }
                ptr++;


_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to