Bug #56537 parse error in sql_yacc.cc in next-mr (compile-pentium-debug, configure+make)
Submitted: 3 Sep 2010 13:14 Modified: 14 Nov 2010 3:01
Reporter: Sven Sandberg Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Compiling Severity:S1 (Critical)
Version:next-mr, next-mr-bugfixing OS:Linux
Assigned to: Mattias Jonsson CPU Architecture:Any

[3 Sep 2010 13:14] Sven Sandberg
Description:
next-rm fails to build. Error message:

ccache gcc -DMYSQL_SERVER -DDEFAULT_MYSQL_HOME="\"/usr/local/mysql\"" -DMYSQL_DATADIR="\"/usr/local/mysql/var\"" -DSHAREDIR="\"/usr/local/mysql/share/mysql\"" -DPLUGINDIR="\"/usr/local/mysql/lib/mysql/plugin\"" -DHAVE_EVENT_SCHEDULER -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I../regex -I.     -g  -DSAFE_MUTEX -Wall -Wextra -Wunused -Wwrite-strings -Wno-unused-parameter -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -mtune=native -DUNIV_MUST_NOT_INLINE -DEXTRA_DEBUG -DFORCE_INIT_OF_VARS  -DSAFE_MUTEX -O0 -g3 -gdwarf-2   -fno-implicit-templates -fno-exceptions -fno-rtti -MT sql_yacc.o -MD -MP -MF .deps/sql_yacc.Tpo -c -o sql_yacc.o sql_yacc.cc
sql_yacc.yy: In function ‘int MYSQLparse(void*)’:
sql_yacc.yy:6516: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_optimize_partition’
sql_partition_admin.h:76: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_optimize_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6530: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_analyze_partition’
sql_partition_admin.h:52: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_analyze_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6541: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_check_partition’
sql_partition_admin.h:64: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_check_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6555: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_repair_partition’
sql_partition_admin.h:88: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_repair_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6574: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_truncate_partition’
sql_partition_admin.h:100: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_truncate_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6600: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_exchange_partition’
sql_partition_admin.h:40: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_exchange_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
make[3]: *** [sql_yacc.o] Error 1

I'm building using ./BUILD/compile-pentium-debug and using normal configure+make.

$ autoconf  --version
autoconf (GNU Autoconf) 2.64
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv2+: GNU GPL version 2 or later
<http://gnu.org/licenses/old-licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David J. MacKenzie and Akim Demaille.

$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i486-pc-linux-gnu

$ uname -a
Linux riska 2.6.31-22-generic #61-Ubuntu SMP Wed Jul 28 01:57:06 UTC 2010 i686 GNU/Linux

How to repeat:
$ bzr branch my:next-mr

$ cd next-mr

$ bzr log --show-ids -l1
------------------------------------------------------------
revno: 3192 [merge]
revision-id: alik@sun.com-20100901130614-pgop3m80rmutewxn
parent: alik@sun.com-20100901130033-8k19cjn6n2blm3py
parent: alik@sun.com-20100901130501-4g2k86dub29auj8y
committer: Alexander Nozdrin <alik@sun.com>
branch nick: mysql-next-mr
timestamp: Wed 2010-09-01 17:06:14 +0400
message:
  Auto-merge from mysql-trunk.
------------------------------------------------------------

$ ./BUILD/compile-pentium-debug
[3 Sep 2010 15:27] Valeriy Kravchuk
I do not see this problem on Mac OS X:

...
make[1]: warning: -jN forced in submake: disabling jobserver mode.
make[1]: Nothing to be done for `all'.
Making all in packaging
make[1]: warning: -jN forced in submake: disabling jobserver mode.
make[1]: Nothing to be done for `all'.
Making all in cmake
make[1]: warning: -jN forced in submake: disabling jobserver mode.
make[1]: Nothing to be done for `all'.

real	12m21.294s
user	13m6.725s
sys	3m13.630s
macbook-pro:mysql-next-mr-work openxs$ bzr log --show-ids -l1
------------------------------------------------------------
revno: 3192 [merge]
revision-id: alik@sun.com-20100901130614-pgop3m80rmutewxn
parent: alik@sun.com-20100901130033-8k19cjn6n2blm3py
parent: alik@sun.com-20100901130501-4g2k86dub29auj8y
committer: Alexander Nozdrin <alik@sun.com>
branch nick: mysql-next-mr
timestamp: Wed 2010-09-01 17:06:14 +0400

It builds successfully with BUILD/compile-pentium-debug-max.

What gcc version do you have?
[3 Sep 2010 15:35] Sven Sandberg
$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.1-4ubuntu9' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
[6 Sep 2010 9:07] Valeriy Kravchuk
I've just build next-mr on Ubuntu 10.04 using:

openxs@ubuntu:/home2/openxs/bzr2/mysql-5.1$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

openxs@ubuntu:/home2/openxs/bzr2/mysql-next-mr$ uname -a
Linux ubuntu 2.6.32-24-generic #42-Ubuntu SMP Fri Aug 20 14:24:04 UTC 2010 i686 GNU/Linux
openxs@ubuntu:/home2/openxs/bzr2/mysql-next-mr$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i486-pc-linux-gnu

and BUILD/compile-pentium-debug-max --prefix=/home2/openxs/dbs/next-mr. This is revno:

openxs@ubuntu:/home2/openxs/bzr2/mysql-next-mr$ bzr log --show-ids -l1
------------------------------------------------------------
revno: 3192 [merge]
revision-id: alik@sun.com-20100901130614-pgop3m80rmutewxn
parent: alik@sun.com-20100901130033-8k19cjn6n2blm3py
parent: alik@sun.com-20100901130501-4g2k86dub29auj8y
committer: Alexander Nozdrin <alik@sun.com>
branch nick: mysql-next-mr
timestamp: Wed 2010-09-01 17:06:14 +0400
message:
  Auto-merge from mysql-trunk.
------------------------------------------------------------
Use --include-merges or -n0 to see merged revisions.
[6 Sep 2010 9:43] Mattias Jonsson
I can verify this on a ubuntu box:
Linux diske 2.6.32-24-server #41-Ubuntu SMP Thu Aug 19 02:47:08 UTC 2010 x86_64 GNU/Linux

on the latest mysql-next-mr (revid:alik@sun.com-20100901130614-pgop3m80rmutewxn)

compiled with:
mkdir b ; cd b
cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=Debug -DFEATURE_SET=large -DWITH_EXAMPLE_STORAGE_ENGINE=ON -DWITH_DEBUG=ON ..
make -j5

The fix is this:
=== modified file 'sql/sql_partition_admin.h'
--- sql/sql_partition_admin.h	2010-08-24 10:52:32 +0000
+++ sql/sql_partition_admin.h	2010-09-06 09:39:53 +0000
@@ -44,6 +44,11 @@
 
   ~Sql_cmd_alter_table_exchange_partition()
   {}
+
+  virtual enum_sql_command sql_command_code() const
+  {
+    return SQLCOM_ALTER_TABLE;
+  }
 };
 
 
@@ -56,6 +61,11 @@
 
   ~Sql_cmd_alter_table_analyze_partition()
   {}
+
+  virtual enum_sql_command sql_command_code() const
+  {
+    return SQLCOM_ALTER_TABLE;
+  }
 };
 
 
@@ -68,6 +78,11 @@
 
   ~Sql_cmd_alter_table_check_partition()
   {}
+
+  virtual enum_sql_command sql_command_code() const
+  {
+    return SQLCOM_ALTER_TABLE;
+  }
 };
 
 
@@ -80,6 +95,11 @@
 
   ~Sql_cmd_alter_table_optimize_partition()
   {}
+
+  virtual enum_sql_command sql_command_code() const
+  {
+    return SQLCOM_ALTER_TABLE;
+  }
 };
 
 
@@ -92,6 +112,11 @@
 
   ~Sql_cmd_alter_table_repair_partition()
   {}
+
+  virtual enum_sql_command sql_command_code() const
+  {
+    return SQLCOM_ALTER_TABLE;
+  }
 };
 
 
@@ -104,6 +129,11 @@
 
   ~Sql_cmd_alter_table_truncate_partition()
   {}
+
+  virtual enum_sql_command sql_command_code() const
+  {
+    return SQLCOM_ALTER_TABLE;
+  }
 };
 
 #else
[6 Sep 2010 11:57] Valeriy Kravchuk
Indeed, with compile-pentium-debug I've got an error:

gcc -DMYSQL_SERVER -DDEFAULT_MYSQL_HOME="\"/home/openxs/dbs/next-mr\"" -DMYSQL_DATADIR="\"/home/openxs/dbs/next-mr/var\"" -DSHAREDIR="\"/home/openxs/dbs/next-mr/share/mysql\"" -DPLUGINDIR="\"/home/openxs/dbs/next-mr/lib/mysql/plugin\"" -DHAVE_EVENT_SCHEDULER -DHAVE_CONFIG_H -I. -I../include -I../zlib -I../include -I../include -I../regex -I.     -g  -DSAFE_MUTEX -Wall -Wextra -Wunused -Wwrite-strings -Wno-unused-parameter -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -mtune=native -DUNIV_MUST_NOT_INLINE -DEXTRA_DEBUG -DFORCE_INIT_OF_VARS  -DSAFE_MUTEX -O0 -g3 -gdwarf-2   -fno-implicit-templates -fno-exceptions -fno-rtti -MT table.o -MD -MP -MF .deps/table.Tpo -c -o table.o table.cc
sql_yacc.yy: In function ‘int MYSQLparse(void*)’:
sql_yacc.yy:6516: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_optimize_partition’
sql_partition_admin.h:76: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_optimize_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6530: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_analyze_partition’
sql_partition_admin.h:52: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_analyze_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6541: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_check_partition’
sql_partition_admin.h:64: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_check_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6555: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_repair_partition’
sql_partition_admin.h:88: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_repair_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6574: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_truncate_partition’
sql_partition_admin.h:100: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_truncate_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
sql_yacc.yy:6600: error: cannot allocate an object of abstract type ‘Sql_cmd_alter_table_exchange_partition’
sql_partition_admin.h:40: note:   because the following virtual functions are pure within ‘Sql_cmd_alter_table_exchange_partition’:
sql_cmd.h:132: note: 	virtual enum_sql_command Sql_cmd::sql_command_code() const
make[3]: *** [sql_yacc.o] Error 1
[5 Oct 2010 8:57] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/119962

3313 Mattias Jonsson	2010-10-05
      Bug#56537: parse error in sql_yacc.cc in next-mr (compile-pentium-debug, configure+make)
      
      Sql_cmd changed in mysql-next-mr, requiring a sql_command_code function
      that was missing when compiling without support for partitioning.
      
      Added it also when compiling without partitioning
     @ mysql-test/r/not_partition.result
        Updated result
     @ sql/sql_partition_admin.h
        Added sql_command_code() also if compiling without
        partitioning support
[5 Oct 2010 10:59] Mattias Jonsson
pushed into mysql-next-mr-bugfixing
[13 Nov 2010 16:05] Bugs System
Pushed into mysql-trunk 5.6.99-m5 (revid:alexander.nozdrin@oracle.com-20101113155825-czmva9kg4n31anmu) (version source revid:vasil.dimov@oracle.com-20100629074804-359l9m9gniauxr94) (merge vers: 5.6.99-m4) (pib:21)
[13 Nov 2010 16:33] Bugs System
Pushed into mysql-next-mr (revid:alexander.nozdrin@oracle.com-20101113160336-atmtmfb3mzm4pz4i) (version source revid:jimmy.yang@oracle.com-20100804103744-vbpeghipkz6pyc9z) (pib:21)
[14 Nov 2010 3:01] Paul DuBois
Does not appear in any released version. No changelog entry needed.