From: Date: March 12 2010 10:52am Subject: bzr push into mysql-trunk branch (Alexey.Kopytov:2986 to 2987) List-Archive: http://lists.mysql.org/commits/103058 Message-Id: <20100312095301.7EFA387A8@kaamos.local> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_0GykfYKbhRR/Z2NxO1AJfg)" --Boundary_(ID_0GykfYKbhRR/Z2NxO1AJfg) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline 2987 Alexey Kopytov 2010-03-12 [merge] Manual merge of mysql-5.1-bugteam to mysql-trunk-merge. Conflicts: Text conflict in client/mysqlbinlog.cc Text conflict in mysql-test/r/explain.result Text conflict in mysql-test/r/subselect.result Text conflict in mysql-test/r/subselect3.result Text conflict in mysql-test/r/type_datetime.result Text conflict in sql/share/Makefile.am added: mysql-test/include/view_alias.inc mysql-test/r/view_alias.result mysql-test/std_data/bug48265.frm mysql-test/t/view_alias.test modified: COPYING client/mysql.cc client/mysql_upgrade.c client/mysqlbinlog.cc client/mysqltest.cc mysql-test/Makefile.am mysql-test/r/compare.result mysql-test/r/explain.result mysql-test/r/gis-rtree.result mysql-test/r/group_by.result mysql-test/r/merge.result mysql-test/r/myisam.result mysql-test/r/ps.result mysql-test/r/subselect.result mysql-test/r/subselect3.result mysql-test/r/trigger.result mysql-test/r/type_datetime.result mysql-test/r/union.result mysql-test/r/update.result mysql-test/r/view.result mysql-test/r/xa.result mysql-test/suite/binlog/r/binlog_innodb_row.result mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result mysql-test/suite/binlog/r/binlog_tmp_table.result mysql-test/suite/binlog/t/binlog_innodb_row.test mysql-test/suite/binlog/t/binlog_tmp_table.test mysql-test/t/gis-rtree.test mysql-test/t/merge.test mysql-test/t/myisam.test mysql-test/t/trigger.test mysql-test/t/update.test mysql-test/t/xa.test scripts/Makefile.am sql/item.cc sql/log_event.cc sql/set_var.cc sql/share/Makefile.am sql/sql_base.cc sql/sql_delete.cc sql/sql_select.cc sql/sql_view.cc storage/myisam/ha_myisam.cc storage/myisam/rt_index.c storage/myisammrg/ha_myisammrg.cc storage/myisammrg/myrg_open.c storage/ndb/src/common/util/Makefile.am 2986 Alexey Kopytov 2010-03-07 [merge] Manual merge of mysql-5.1-bugteam into mysql-trunk-merge. Conflicts: Text conflict in .bzr-mysql/default.conf Text conflict in mysql-test/r/explain.result Text conflict in mysql-test/r/having.result Text conflict in mysql-test/suite/rpl/t/disabled.def Text conflict in mysql-test/suite/rpl/t/rpl_slave_skip.test Text conflict in storage/federated/ha_federated.cc added: mysql-test/r/log_tables_upgrade.result mysql-test/std_data/bug49823.CSM mysql-test/std_data/bug49823.CSV mysql-test/std_data/bug49823.frm mysql-test/suite/rpl/r/rpl_show_slave_running.result mysql-test/suite/rpl/t/rpl_show_slave_running.test mysql-test/t/log_tables_upgrade.test modified: include/my_sys.h libmysql/libmysql.c mysql-test/collections/default.daily mysql-test/collections/default.push mysql-test/r/explain.result mysql-test/r/func_str.result mysql-test/r/having.result mysql-test/r/innodb_mysql.result mysql-test/r/myisam.result mysql-test/r/select.result mysql-test/r/subselect.result mysql-test/r/union.result mysql-test/suite/federated/federated.result mysql-test/suite/federated/federated.test mysql-test/suite/rpl/r/rpl_row_create_table.result mysql-test/suite/rpl/t/disabled.def mysql-test/suite/rpl/t/rpl_row_create_table.test mysql-test/suite/rpl/t/rpl_slave_skip.test mysql-test/t/explain.test mysql-test/t/innodb_mysql.test mysql-test/t/myisam.test mysql-test/t/mysql_upgrade.test mysys/charset.c mysys/my_init.c scripts/mysql_system_tables_fix.sql sql/item.cc sql/mysqld.cc sql/slave.cc sql/sql_select.cc sql/sql_table.cc storage/federated/ha_federated.cc storage/federated/ha_federated.h === modified file 'COPYING' --- a/COPYING 2005-04-13 09:51:38 +0000 +++ b/COPYING 2010-03-04 13:26:27 +0000 @@ -1,352 +1,339 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -Preamble -======== - -The licenses for most software are designed to take away your freedom -to share and change it. By contrast, the GNU General Public License is -intended to guarantee your freedom to share and change free + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to +the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. -Our General Public Licenses are designed to make sure that you have -the freedom to distribute copies of free software (and charge for this -service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone -to deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis -or for a fee, you must give the recipients all the rights that you -have. You must make sure that they, too, receive or can get the source -code. And you must show them these terms so they know their rights. + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. -We protect your rights with two steps: (1) copyright the software, and + We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain + Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. -We wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program -proprietary. To prevent this, we have made it clear that any patent -must be licensed for everyone's free use or not licensed at all. + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. -The precise terms and conditions for copying, distribution and + The precise terms and conditions for copying, distribution and modification follow. - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - 0. This License applies to any program or other work which contains a - notice placed by the copyright holder saying it may be distributed - under the terms of this General Public License. The "Program", - below, refers to any such program or work, and a "work based on - the Program" means either the Program or any derivative work under - copyright law: that is to say, a work containing the Program or a - portion of it, either verbatim or with modifications and/or - translated into another language. (Hereinafter, translation is - included without limitation in the term "modification".) Each - licensee is addressed as "you". - - Activities other than copying, distribution and modification are - not covered by this License; they are outside its scope. The act - of running the Program is not restricted, and the output from the - Program is covered only if its contents constitute a work based on - the Program (independent of having been made by running the - Program). Whether that is true depends on what the Program does. + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's - source code as you receive it, in any medium, provided that you - conspicuously and appropriately publish on each copy an appropriate - copyright notice and disclaimer of warranty; keep intact all the - notices that refer to this License and to the absence of any - warranty; and give any other recipients of the Program a copy of - this License along with the Program. - - You may charge a fee for the physical act of transferring a copy, - and you may at your option offer warranty protection in exchange - for a fee. +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion - of it, thus forming a work based on the Program, and copy and - distribute such modifications or work under the terms of Section 1 - above, provided that you also meet all of these conditions: - - a. You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b. You must cause any work that you distribute or publish, that - in whole or in part contains or is derived from the Program - or any part thereof, to be licensed as a whole at no charge - to all third parties under the terms of this License. - - c. If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display - an announcement including an appropriate copyright notice and - a notice that there is no warranty (or else, saying that you - provide a warranty) and that users may redistribute the - program under these conditions, and telling the user how to - view a copy of this License. (Exception: if the Program - itself is interactive but does not normally print such an - announcement, your work based on the Program is not required - to print an announcement.) - - These requirements apply to the modified work as a whole. If - identifiable sections of that work are not derived from the - Program, and can be reasonably considered independent and separate - works in themselves, then this License, and its terms, do not - apply to those sections when you distribute them as separate - works. But when you distribute the same sections as part of a - whole which is a work based on the Program, the distribution of - the whole must be on the terms of this License, whose permissions - for other licensees extend to the entire whole, and thus to each - and every part regardless of who wrote it. - - Thus, it is not the intent of this section to claim rights or - contest your rights to work written entirely by you; rather, the - intent is to exercise the right to control the distribution of - derivative or collective works based on the Program. - - In addition, mere aggregation of another work not based on the - Program with the Program (or with a work based on the Program) on - a volume of a storage or distribution medium does not bring the - other work under the scope of this License. +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. 3. You may copy and distribute the Program (or a work based on it, - under Section 2) in object code or executable form under the terms - of Sections 1 and 2 above provided that you also do one of the - following: - - a. Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Sections 1 and 2 above on a medium customarily used for - software interchange; or, - - b. Accompany it with a written offer, valid for at least three - years, to give any third-party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a - medium customarily used for software interchange; or, - - c. Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with - such an offer, in accord with Subsection b above.) - - The source code for a work means the preferred form of the work for - making modifications to it. For an executable work, complete - source code means all the source code for all modules it contains, - plus any associated interface definition files, plus the scripts - used to control compilation and installation of the executable. - However, as a special exception, the source code distributed need - not include anything that is normally distributed (in either - source or binary form) with the major components (compiler, - kernel, and so on) of the operating system on which the executable - runs, unless that component itself accompanies the executable. - - If distribution of executable or object code is made by offering - access to copy from a designated place, then offering equivalent - access to copy the source code from the same place counts as - distribution of the source code, even though third parties are not - compelled to copy the source along with the object code. +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense or distribute the Program is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. 5. You are not required to accept this License, since you have not - signed it. However, nothing else grants you permission to modify - or distribute the Program or its derivative works. These actions - are prohibited by law if you do not accept this License. - Therefore, by modifying or distributing the Program (or any work - based on the Program), you indicate your acceptance of this - License to do so, and all its terms and conditions for copying, - distributing or modifying the Program or works based on it. +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the - Program), the recipient automatically receives a license from the - original licensor to copy, distribute or modify the Program - subject to these terms and conditions. You may not impose any - further restrictions on the recipients' exercise of the rights - granted herein. You are not responsible for enforcing compliance - by third parties to this License. +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. 7. If, as a consequence of a court judgment or allegation of patent - infringement or for any other reason (not limited to patent - issues), conditions are imposed on you (whether by court order, - agreement or otherwise) that contradict the conditions of this - License, they do not excuse you from the conditions of this - License. If you cannot distribute so as to satisfy simultaneously - your obligations under this License and any other pertinent - obligations, then as a consequence you may not distribute the - Program at all. For example, if a patent license would not permit - royalty-free redistribution of the Program by all those who - receive copies directly or indirectly through you, then the only - way you could satisfy both it and this License would be to refrain - entirely from distribution of the Program. - - If any portion of this section is held invalid or unenforceable - under any particular circumstance, the balance of the section is - intended to apply and the section as a whole is intended to apply - in other circumstances. - - It is not the purpose of this section to induce you to infringe any - patents or other property right claims or to contest validity of - any such claims; this section has the sole purpose of protecting - the integrity of the free software distribution system, which is - implemented by public license practices. Many people have made - generous contributions to the wide range of software distributed - through that system in reliance on consistent application of that - system; it is up to the author/donor to decide if he or she is - willing to distribute software through any other system and a - licensee cannot impose that choice. +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. - This section is intended to make thoroughly clear what is believed - to be a consequence of the rest of this License. +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in - certain countries either by patents or by copyrighted interfaces, - the original copyright holder who places the Program under this - License may add an explicit geographical distribution limitation - excluding those countries, so that distribution is permitted only - in or among countries not thus excluded. In such case, this - License incorporates the limitation as if written in the body of - this License. - - 9. The Free Software Foundation may publish revised and/or new - versions of the General Public License from time to time. Such - new versions will be similar in spirit to the present version, but - may differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the - Program specifies a version number of this License which applies - to it and "any later version", you have the option of following - the terms and conditions either of that version or of any later - version published by the Free Software Foundation. If the Program - does not specify a version number of this License, you may choose - any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free - programs whose distribution conditions are different, write to the - author to ask for permission. For software which is copyrighted - by the Free Software Foundation, write to the Free Software - Foundation; we sometimes make exceptions for this. Our decision - will be guided by the two goals of preserving the free status of - all derivatives of our free software and of promoting the sharing - and reuse of software generally. - - NO WARRANTY - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO - WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE - LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT - HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT - WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT - NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE - QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE - PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY - SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY - MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE - LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, - INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR - INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF - DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU - OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY - OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS -How to Apply These Terms to Your New Programs -============================================= +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS -If you develop a new program, and you want it to be of the greatest + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. +free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. - Copyright (C) YYYY NAME OF AUTHOR - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - SIGNATURE OF TY COON, 1 April 1989 - Ty Coon, President of Vice + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. -This General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, -you may consider it more useful to permit linking proprietary -applications with the library. If this is what you want to do, use the -GNU Library General Public License instead of this License. + , 1 April 1989 + Ty Coon, President of Vice +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. === modified file 'client/mysql.cc' --- a/client/mysql.cc 2010-02-09 07:59:38 +0000 +++ b/client/mysql.cc 2010-03-12 09:51:53 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2008 MySQL AB +/* Copyright 2000, 2010, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,6 +13,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#define COPYRIGHT_NOTICE "\ +Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.\n\ +This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n\ +and you are welcome to modify and redistribute it under the GPL v2 license\n" + /* mysql command tool * Commands compatible with mSQL by David J. Hughes * @@ -1167,6 +1172,8 @@ int main(int argc,char *argv[]) mysql_thread_id(&mysql), server_version_string(&mysql)); put_info((char*) glob_buffer.ptr(),INFO_INFO); + put_info(COPYRIGHT_NOTICE, INFO_INFO); + #ifdef HAVE_READLINE initialize_readline((char*) my_progname); if (!status.batch && !quick && !opt_html && !opt_xml) @@ -1209,13 +1216,11 @@ int main(int argc,char *argv[]) sprintf(histfile_tmp, "%s.TMP", histfile); } } + #endif + sprintf(buff, "%s", -#ifndef NOT_YET "Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.\n"); -#else - "Type 'help [[%]function name[%]]' to get help on usage of function.\n"); -#endif put_info(buff,INFO_INFO); status.exit_status= read_and_execute(!status.batch); if (opt_outfile) @@ -1573,10 +1578,7 @@ static void usage(int version) if (version) return; - printf("\ -Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.\n\ -This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n\ -and you are welcome to modify and redistribute it under the GPL license\n"); + printf("%s", COPYRIGHT_NOTICE); printf("Usage: %s [OPTIONS] [database]\n", my_progname); my_print_help(my_long_options); print_defaults("my", load_default_groups); === modified file 'client/mysql_upgrade.c' --- a/client/mysql_upgrade.c 2010-02-09 07:59:38 +0000 +++ b/client/mysql_upgrade.c 2010-03-12 09:51:53 +0000 @@ -45,7 +45,7 @@ static DYNAMIC_STRING conn_args; static char *opt_password= 0; static my_bool tty_password= 0; -static char opt_tmpdir[FN_REFLEN]; +static char opt_tmpdir[FN_REFLEN] = ""; #ifndef DBUG_OFF static char *default_dbug_option= (char*) "d:t:O,/tmp/mysql_upgrade.trace"; @@ -464,7 +464,8 @@ static int run_query(const char *query, DBUG_ENTER("run_query"); DBUG_PRINT("enter", ("query: %s", query)); - if ((fd= create_temp_file(query_file_path, opt_tmpdir, + if ((fd= create_temp_file(query_file_path, + opt_tmpdir[0] ? opt_tmpdir : NULL, "sql", O_CREAT | O_SHARE | O_RDWR, MYF(MY_WME))) < 0) die("Failed to create temporary file for defaults"); === modified file 'client/mysqlbinlog.cc' --- a/client/mysqlbinlog.cc 2010-02-09 07:59:38 +0000 +++ b/client/mysqlbinlog.cc 2010-03-12 09:51:53 +0000 @@ -832,7 +832,11 @@ Exit_status process_event(PRINT_EVENT_IN print_event_info->common_header_len= glob_description_event->common_header_len; ev->print(result_file, print_event_info); - ev->temp_buf= 0; // as the event ref is zeroed + if (!remote_opt) + ev->free_temp_buf(); // free memory allocated in dump_local_log_entries + else + // disassociate but not free dump_remote_log_entries time memory + ev->temp_buf= 0; /* We don't want this event to be deleted now, so let's hide it (I (Guilhem) should later see if this triggers a non-serious Valgrind @@ -2018,7 +2022,8 @@ int main(int argc, char** argv) my_init_time(); // for time functions - load_defaults("my", load_default_groups, &argc, &argv); + if (load_defaults("my", load_default_groups, &argc, &argv)) + exit(1); defaults_argv= argv; parse_args(&argc, (char***)&argv); === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-02-23 14:06:06 +0000 +++ b/client/mysqltest.cc 2010-03-12 09:51:53 +0000 @@ -1245,7 +1245,7 @@ void die(const char *fmt, ...) Help debugging by displaying any warnings that might have been produced prior to the error */ - if (cur_con) + if (cur_con && !cur_con->pending) show_warnings_before_error(&cur_con->mysql); cleanup_and_exit(1); === modified file 'mysql-test/Makefile.am' --- a/mysql-test/Makefile.am 2010-02-12 16:28:35 +0000 +++ b/mysql-test/Makefile.am 2010-03-09 15:51:31 +0000 @@ -130,12 +130,12 @@ uninstall-local: # mtr - a shortcut for executing mysql-test-run.pl mtr: $(RM) -f mtr - $(LN_S) $(srcdir)/mysql-test-run.pl mtr + $(LN_S) mysql-test-run.pl mtr # mysql-test-run - a shortcut for executing mysql-test-run.pl mysql-test-run: $(RM) -f mysql-test-run - $(LN_S) $(srcdir)/mysql-test-run.pl mysql-test-run + $(LN_S) mysql-test-run.pl mysql-test-run # Don't update the files from bitkeeper %::SCCS/s.% === added file 'mysql-test/include/view_alias.inc' --- a/mysql-test/include/view_alias.inc 1970-01-01 00:00:00 +0000 +++ b/mysql-test/include/view_alias.inc 2010-03-09 10:36:26 +0000 @@ -0,0 +1,25 @@ +# Routine to be called by t/view.inc +# +# The variable $after_select must be set before calling this routine. + +eval CREATE VIEW v1 AS SELECT $after_select; +SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'; +# +# Extract the VIEW's SELECT from INFORMATION_SCHEMA.VIEWS +let $query1 = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +# +# Extract the VIEW's SELECT from SHOW CREATE VIEW +# SHOW CREATE VIEW v1 +# View Create View character_set_client collation_connection +# v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select '<--- ..... +let $value= query_get_value(SHOW CREATE VIEW v1, Create View, 1); +let $query2 = `SELECT SUBSTR("$value",INSTR("$value",' as select ') + CHAR_LENGTH(' as '))`; +DROP VIEW v1; + +# Recreate the view based on SELECT from INFORMATION_SCHEMA.VIEWS +eval CREATE VIEW v1 AS $query1; +DROP VIEW v1; +# Recreate the view based on SHOW CREATE VIEW +eval CREATE VIEW v1 AS $query2; +DROP VIEW v1; + === modified file 'mysql-test/r/compare.result' --- a/mysql-test/r/compare.result 2009-10-15 12:23:43 +0000 +++ b/mysql-test/r/compare.result 2010-03-12 09:51:53 +0000 @@ -88,7 +88,7 @@ id select_type table type possible_keys Warnings: Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1 Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t2`.`a` AS `a`,(select count(0) AS `COUNT(*)` from `test`.`t1` where ((`test`.`t1`.`b` = `test`.`t2`.`a`) and (concat(`test`.`t1`.`b`,`test`.`t1`.`c`) = concat('0',`test`.`t2`.`a`,'01')))) AS `x` from `test`.`t2` order by `test`.`t2`.`a` +Note 1003 select `test`.`t2`.`a` AS `a`,(select count(0) from `test`.`t1` where ((`test`.`t1`.`b` = `test`.`t2`.`a`) and (concat(`test`.`t1`.`b`,`test`.`t1`.`c`) = concat('0',`test`.`t2`.`a`,'01')))) AS `x` from `test`.`t2` order by `test`.`t2`.`a` DROP TABLE t1,t2; CREATE TABLE t1 (a TIMESTAMP); INSERT INTO t1 VALUES (NOW()),(NOW()),(NOW()); === modified file 'mysql-test/r/explain.result' --- a/mysql-test/r/explain.result 2010-03-07 16:40:59 +0000 +++ b/mysql-test/r/explain.result 2010-03-12 09:51:53 +0000 @@ -224,7 +224,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 100.00 Using where Warnings: Note 1276 Field or reference 'test.t1.c' of SELECT #2 was resolved in SELECT #1 -Note 1003 select (select 1 AS `1` from `test`.`t2` where (`test`.`t2`.`d` = NULL)) AS `(SELECT 1 FROM t2 WHERE d = c)` from dual +Note 1003 select (select 1 from `test`.`t2` where (`test`.`t2`.`d` = NULL)) AS `(SELECT 1 FROM t2 WHERE d = c)` from dual DROP TABLE t1, t2; # # Bug#30302: Tables that were optimized away are printed in the === modified file 'mysql-test/r/gis-rtree.result' --- a/mysql-test/r/gis-rtree.result 2010-02-26 13:16:46 +0000 +++ b/mysql-test/r/gis-rtree.result 2010-03-10 10:22:08 +0000 @@ -1526,4 +1526,19 @@ SELECT 1 FROM t1 WHERE a >= GEOMFROMTEXT 1 1 DROP TABLE t1; +# +# Bug #51357: crash when using handler commands on spatial indexes +# +CREATE TABLE t1(a GEOMETRY NOT NULL,SPATIAL INDEX a(a)); +HANDLER t1 OPEN; +HANDLER t1 READ a FIRST; +a +HANDLER t1 READ a NEXT; +a +HANDLER t1 READ a PREV; +a +HANDLER t1 READ a LAST; +a +HANDLER t1 CLOSE; +DROP TABLE t1; End of 5.0 tests. === modified file 'mysql-test/r/group_by.result' --- a/mysql-test/r/group_by.result 2010-02-06 19:54:30 +0000 +++ b/mysql-test/r/group_by.result 2010-03-09 10:36:26 +0000 @@ -1742,7 +1742,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1 -Note 1003 select (select `test`.`t1`.`a` AS `a`) AS `aa`,count(distinct `test`.`t1`.`b`) AS `COUNT(DISTINCT b)` from `test`.`t1` group by ((select `test`.`t1`.`a` AS `a`) + 0) +Note 1003 select (select `test`.`t1`.`a`) AS `aa`,count(distinct `test`.`t1`.`b`) AS `COUNT(DISTINCT b)` from `test`.`t1` group by ((select `test`.`t1`.`a`) + 0) EXPLAIN EXTENDED SELECT (SELECT t1.a) aa, COUNT(DISTINCT b) FROM t1 GROUP BY -aa; id select_type table type possible_keys key key_len ref rows filtered Extra @@ -1750,7 +1750,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1 -Note 1003 select (select `test`.`t1`.`a` AS `a`) AS `aa`,count(distinct `test`.`t1`.`b`) AS `COUNT(DISTINCT b)` from `test`.`t1` group by -((select `test`.`t1`.`a` AS `a`)) +Note 1003 select (select `test`.`t1`.`a`) AS `aa`,count(distinct `test`.`t1`.`b`) AS `COUNT(DISTINCT b)` from `test`.`t1` group by -((select `test`.`t1`.`a`)) # should return only one record SELECT (SELECT tt.a FROM t1 tt LIMIT 1) aa, COUNT(DISTINCT b) FROM t1 GROUP BY aa; === modified file 'mysql-test/r/merge.result' --- a/mysql-test/r/merge.result 2009-11-02 11:10:04 +0000 +++ b/mysql-test/r/merge.result 2010-03-12 09:51:53 +0000 @@ -2219,6 +2219,73 @@ Trigger sql_mode SQL Original Statement tr1 CREATE DEFINER=`root`@`localhost` TRIGGER tr1 AFTER INSERT ON t3 FOR EACH ROW CALL foo() latin1 latin1_swedish_ci latin1_swedish_ci DROP TRIGGER tr1; DROP TABLE t1, t2, t3; +# +# BUG#48265 - MRG_MYISAM problem (works in 5.0.85, does't work in 5.1.40) +# +CREATE DATABASE `test/1`; +CREATE TABLE `test/1`.`t/1`(a INT); +CREATE TABLE m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM m1; +a +SHOW CREATE TABLE m1; +Table Create Table +m1 CREATE TABLE `m1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`test/1`.`t/1`) +DROP TABLE m1; +CREATE TABLE `test/1`.m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM `test/1`.m1; +a +SHOW CREATE TABLE `test/1`.m1; +Table Create Table +m1 CREATE TABLE `m1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t/1`) +DROP TABLE `test/1`.m1; +DROP TABLE `test/1`.`t/1`; +CREATE TEMPORARY TABLE `test/1`.`t/1`(a INT); +CREATE TEMPORARY TABLE m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM m1; +a +SHOW CREATE TABLE m1; +Table Create Table +m1 CREATE TEMPORARY TABLE `m1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`test/1`.`t/1`) +DROP TABLE m1; +CREATE TEMPORARY TABLE `test/1`.m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM `test/1`.m1; +a +SHOW CREATE TABLE `test/1`.m1; +Table Create Table +m1 CREATE TEMPORARY TABLE `m1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t/1`) +DROP TABLE `test/1`.m1; +DROP TABLE `test/1`.`t/1`; +DROP DATABASE `test/1`; +CREATE TABLE `t@1`(a INT); +SELECT * FROM m1; +a +SHOW CREATE TABLE m1; +Table Create Table +m1 CREATE TABLE `m1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t@1`) +DROP TABLE `t@1`; +CREATE DATABASE `test@1`; +CREATE TABLE `test@1`.`t@1`(a INT); +FLUSH TABLE m1; +SELECT * FROM m1; +a +SHOW CREATE TABLE m1; +Table Create Table +m1 CREATE TABLE `m1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`test@1`.`t@1`) +DROP TABLE m1; +DROP TABLE `test@1`.`t@1`; +DROP DATABASE `test@1`; End of 5.1 tests # # An additional test case for Bug#27430 Crash in subquery code === modified file 'mysql-test/r/myisam.result' --- a/mysql-test/r/myisam.result 2010-02-28 17:29:19 +0000 +++ b/mysql-test/r/myisam.result 2010-03-10 12:32:12 +0000 @@ -2356,4 +2356,37 @@ CHECKSUM TABLE t3 EXTENDED; Table Checksum test.t3 3775188275 DROP TABLE t1, t2, t3; +# +# BUG#51307 - widespread corruption with partitions and insert...select +# +CREATE TABLE t1(a CHAR(255), KEY(a)); +SELECT * FROM t1, t1 AS a1; +a a +SET myisam_sort_buffer_size=4; +INSERT INTO t1 VALUES +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'); +Warnings: +Error 1034 myisam_sort_buffer_size is too small +Error 1034 Number of rows changed from 0 to 157 +SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; +INSERT INTO t1 VALUES('1'); +SELECT * FROM t1, t1 AS a1 WHERE t1.a=1 AND a1.a=1; +a a +1 1 +DROP TABLE t1; End of 5.1 tests === modified file 'mysql-test/r/ps.result' --- a/mysql-test/r/ps.result 2010-03-01 09:02:15 +0000 +++ b/mysql-test/r/ps.result 2010-03-12 09:51:53 +0000 @@ -1786,7 +1786,7 @@ prepare stmt from "create view v1 (c,d,e execute stmt; show create view v1; View Create View character_set_client collation_connection -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) AS `a+2` from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` AS `a` from `t1`) AS `f` from `t1` latin1 latin1_swedish_ci +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` from `t1`) AS `f` from `t1` latin1 latin1_swedish_ci select * from v1; c d e f drop view v1; @@ -1794,7 +1794,7 @@ execute stmt; deallocate prepare stmt; show create view v1; View Create View character_set_client collation_connection -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) AS `a+2` from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` AS `a` from `t1`) AS `f` from `t1` latin1 latin1_swedish_ci +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` from `t1`) AS `f` from `t1` latin1 latin1_swedish_ci select * from v1; c d e f drop view v1; === modified file 'mysql-test/r/subselect.result' --- a/mysql-test/r/subselect.result 2010-03-07 16:40:59 +0000 +++ b/mysql-test/r/subselect.result 2010-03-12 09:51:53 +0000 @@ -32,7 +32,7 @@ id select_type table type possible_keys NULL UNION RESULT ALL NULL NULL NULL NULL NULL NULL Warnings: Note 1249 Select 2 was reduced during optimization -Note 1003 select (select 0 AS `0` union select 0 AS `0`) AS `(SELECT (SELECT 0 UNION SELECT 0))` +Note 1003 select (select 0 union select 0) AS `(SELECT (SELECT 0 UNION SELECT 0))` SELECT (SELECT 1 FROM (SELECT 1) as b HAVING a=1) as a; ERROR 42S22: Reference 'a' not supported (forward reference in item list) SELECT (SELECT 1 FROM (SELECT 1) as b HAVING b=1) as a,(SELECT 1 FROM (SELECT 1) as c HAVING a=1) as b; @@ -50,7 +50,7 @@ id select_type table type possible_keys Warnings: Note 1276 Field or reference 'b.a' of SELECT #3 was resolved in SELECT #1 Note 1276 Field or reference 'b.a' of SELECT #3 was resolved in SELECT #1 -Note 1003 select 1 AS `1` from dual having ((select '1' AS `a`) = 1) +Note 1003 select 1 AS `1` from dual having ((select '1') = 1) SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1; 1 1 @@ -187,7 +187,7 @@ id select_type table type possible_keys 4 SUBQUERY t2 ALL NULL NULL NULL NULL 2 100.00 NULL UNION RESULT ALL NULL NULL NULL NULL NULL NULL Warnings: -Note 1003 (select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where (`test`.`t2`.`b` = (select `test`.`t3`.`a` AS `a` from `test`.`t3` order by 1 desc limit 1))) union (select `test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t4` where (`test`.`t4`.`b` = (select (max(`test`.`t2`.`a`) * 4) AS `max(t2.a)*4` from `test`.`t2`)) order by `a`) +Note 1003 (select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where (`test`.`t2`.`b` = (select `test`.`t3`.`a` from `test`.`t3` order by 1 desc limit 1))) union (select `test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t4` where (`test`.`t4`.`b` = (select (max(`test`.`t2`.`a`) * 4) from `test`.`t2`)) order by `a`) select (select a from t3 where a= `test`.`t4`.`a`)))) AS `avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a))` from `test`.`t2`) AS `(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2)` from `test`.`t4` +Note 1003 select `test`.`t4`.`b` AS `b`,(select avg((`test`.`t2`.`a` + (select min(`test`.`t3`.`a`) from `test`.`t3` where (`test`.`t3`.`a` >= `test`.`t4`.`a`)))) from `test`.`t2`) AS `(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2)` from `test`.`t4` select * from t3 where exists (select * from t2 where t2.b=t3.a); a 7 @@ -314,7 +314,7 @@ NULL UNION RESULT ALL NULL NU Warnings: Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1 Note 1276 Field or reference 'test.t2.a' of SELECT #3 was resolved in SELECT #1 -Note 1003 select (select '2' AS `a` from dual where ('2' = `test`.`t2`.`a`) union select `test`.`t5`.`a` AS `a` from `test`.`t5` where (`test`.`t5`.`a` = `test`.`t2`.`a`)) AS `(select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a)`,`test`.`t2`.`a` AS `a` from `test`.`t2` +Note 1003 select (select '2' from dual where ('2' = `test`.`t2`.`a`) union select `test`.`t5`.`a` from `test`.`t5` where (`test`.`t5`.`a` = `test`.`t2`.`a`)) AS `(select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a)`,`test`.`t2`.`a` AS `a` from `test`.`t2` select (select a from t1 where t1.a=t2.a union all select a from t5 where t5.a=t2.a), a from t2; ERROR 21000: Subquery returns more than 1 row create table t6 (patient_uq int, clinic_uq int, index i1 (clinic_uq)); @@ -332,7 +332,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t7 eq_ref PRIMARY PRIMARY 4 test.t6.clinic_uq 1 100.00 Using index Warnings: Note 1276 Field or reference 'test.t6.clinic_uq' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t6`.`patient_uq` AS `patient_uq`,`test`.`t6`.`clinic_uq` AS `clinic_uq` from `test`.`t6` where exists(select 1 AS `Not_used` from `test`.`t7` where (`test`.`t7`.`uq` = `test`.`t6`.`clinic_uq`)) +Note 1003 select `test`.`t6`.`patient_uq` AS `patient_uq`,`test`.`t6`.`clinic_uq` AS `clinic_uq` from `test`.`t6` where exists(select 1 from `test`.`t7` where (`test`.`t7`.`uq` = `test`.`t6`.`clinic_uq`)) select * from t1 where a= (select a from t2,t4 where t2.b=t4.b); ERROR 23000: Column 'a' in field list is ambiguous drop table t1,t2,t3; @@ -367,7 +367,7 @@ id select_type table type possible_keys 2 SUBQUERY t8 const PRIMARY PRIMARY 37 const 1 100.00 3 SUBQUERY t8 const PRIMARY PRIMARY 37 1 100.00 Using index Warnings: -Note 1003 select 'joce' AS `pseudo`,(select 'test' AS `email` from `test`.`t8` where 1) AS `(SELECT email FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce'))` from `test`.`t8` where 1 +Note 1003 select 'joce' AS `pseudo`,(select 'test' from `test`.`t8` where 1) AS `(SELECT email FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce'))` from `test`.`t8` where 1 SELECT pseudo FROM t8 WHERE pseudo=(SELECT pseudo,email FROM t8 WHERE pseudo='joce'); ERROR 21000: Operand should contain 1 column(s) @@ -399,7 +399,7 @@ id select_type table type possible_keys 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used 2 SUBQUERY t1 index NULL PRIMARY 43 NULL 2 100.00 Using where; Using index Warnings: -Note 1003 select (select distinct `test`.`t1`.`date` AS `date` from `test`.`t1` where (`test`.`t1`.`date` = '2002-08-03')) AS `(SELECT DISTINCT date FROM t1 WHERE date='2002-08-03')` +Note 1003 select (select distinct `test`.`t1`.`date` from `test`.`t1` where (`test`.`t1`.`date` = '2002-08-03')) AS `(SELECT DISTINCT date FROM t1 WHERE date='2002-08-03')` SELECT DISTINCT date FROM t1 WHERE date='2002-08-03'; date 2002-08-03 @@ -743,7 +743,7 @@ id select_type table type possible_keys 3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL NULL No tables used NULL UNION RESULT ALL NULL NULL NULL NULL NULL NULL Warnings: -Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where (`test`.`t2`.`id`,(select 1 AS `1` having ((`test`.`t2`.`id`) = (1)) union select 3 AS `3` having ((`test`.`t2`.`id`) = (3)))) +Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where (`test`.`t2`.`id`,(select 1 having ((`test`.`t2`.`id`) = (1)) union select 3 having ((`test`.`t2`.`id`) = (3)))) SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3); id SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2); @@ -906,7 +906,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t2 ref_or_null a a 5 func 2 100.00 Using where; Using index 2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer Warnings: -Note 1003 select `test`.`t1`.`a` AS `a`,(`test`.`t1`.`a`,(select 1 AS `Not_used` from `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and (((`test`.`t1`.`a`) = `test`.`t2`.`a`) or isnull(`test`.`t2`.`a`))) having (`test`.`t2`.`a`))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from `test`.`t1` +Note 1003 select `test`.`t1`.`a` AS `a`,(`test`.`t1`.`a`,(select 1 from `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and (((`test`.`t1`.`a`) = `test`.`t2`.`a`) or isnull(`test`.`t2`.`a`))) having (`test`.`t2`.`a`))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from `test`.`t1` drop table t1,t2,t3; create table t1 (a float); select 10.5 IN (SELECT * from t1 LIMIT 1); @@ -1018,19 +1018,19 @@ id select_type table type possible_keys 1 PRIMARY t1 system NULL NULL NULL NULL 0 0.00 const row not found 2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 0.00 const row not found Warnings: -Note 1003 select (select rand() AS `RAND()` from `test`.`t1`) AS `(SELECT RAND() FROM t1)` from `test`.`t1` +Note 1003 select (select rand() from `test`.`t1`) AS `(SELECT RAND() FROM t1)` from `test`.`t1` EXPLAIN EXTENDED SELECT (SELECT ENCRYPT('test') FROM t1) FROM t1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t1 system NULL NULL NULL NULL 0 0.00 const row not found 2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 0.00 const row not found Warnings: -Note 1003 select (select encrypt('test') AS `ENCRYPT('test')` from `test`.`t1`) AS `(SELECT ENCRYPT('test') FROM t1)` from `test`.`t1` +Note 1003 select (select encrypt('test') from `test`.`t1`) AS `(SELECT ENCRYPT('test') FROM t1)` from `test`.`t1` EXPLAIN EXTENDED SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t1 system NULL NULL NULL NULL 0 0.00 const row not found 2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 0.00 const row not found Warnings: -Note 1003 select (select benchmark(1,1) AS `BENCHMARK(1,1)` from `test`.`t1`) AS `(SELECT BENCHMARK(1,1) FROM t1)` from `test`.`t1` +Note 1003 select (select benchmark(1,1) from `test`.`t1`) AS `(SELECT BENCHMARK(1,1) FROM t1)` from `test`.`t1` drop table t1; CREATE TABLE `t1` ( `mot` varchar(30) character set latin1 NOT NULL default '', @@ -1125,7 +1125,7 @@ id select_type table type possible_keys 2 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00 3 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00 Warnings: -Note 1003 select `test`.`t1`.`a` AS `a`,(select (select rand() AS `rand()` from `test`.`t1` limit 1) AS `(select rand() from t1 limit 1)` from `test`.`t1` limit 1) AS `(select (select rand() from t1 limit 1) from t1 limit 1)` from `test`.`t1` +Note 1003 select `test`.`t1`.`a` AS `a`,(select (select rand() from `test`.`t1` limit 1) from `test`.`t1` limit 1) AS `(select (select rand() from t1 limit 1) from t1 limit 1)` from `test`.`t1` drop table t1; select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent); ERROR 42S02: Table 'test.t1' doesn't exist @@ -1179,7 +1179,7 @@ id select_type table type possible_keys 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used 2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE Warnings: -Note 1003 select (0,(select 1 AS `Not_used` from `test`.`t1` `a` where 0)) AS `0 IN (SELECT 1 FROM t1 a)` +Note 1003 select (0,(select 1 from `test`.`t1` `a` where 0)) AS `0 IN (SELECT 1 FROM t1 a)` INSERT INTO t1 (pseudo) VALUES ('test1'); SELECT 0 IN (SELECT 1 FROM t1 a); 0 IN (SELECT 1 FROM t1 a) @@ -1189,7 +1189,7 @@ id select_type table type possible_keys 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used 2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE Warnings: -Note 1003 select (0,(select 1 AS `Not_used` from `test`.`t1` `a` where 0)) AS `0 IN (SELECT 1 FROM t1 a)` +Note 1003 select (0,(select 1 from `test`.`t1` `a` where 0)) AS `0 IN (SELECT 1 FROM t1 a)` drop table t1; CREATE TABLE `t1` ( `i` int(11) NOT NULL default '0', @@ -1234,7 +1234,7 @@ id select_type table type possible_keys 1 PRIMARY t1 ref salary salary 5 const 1 100.00 Using where 2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Select tables optimized away Warnings: -Note 1003 select `test`.`t1`.`id` AS `id` from `test`.`t1` where (`test`.`t1`.`salary` = (select max(`test`.`t1`.`salary`) AS `MAX(salary)` from `test`.`t1`)) +Note 1003 select `test`.`t1`.`id` AS `id` from `test`.`t1` where (`test`.`t1`.`salary` = (select max(`test`.`t1`.`salary`) from `test`.`t1`)) drop table t1; CREATE TABLE t1 ( ID int(10) unsigned NOT NULL auto_increment, @@ -1317,7 +1317,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 func 1 100.00 2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Using index Warnings: -Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where (`test`.`t2`.`a`,(select 1 AS `Not_used` from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t1`.`b`) and ((`test`.`t2`.`a`) = `test`.`t1`.`a`)))) +Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where (`test`.`t2`.`a`,(select 1 from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t1`.`b`) and ((`test`.`t2`.`a`) = `test`.`t1`.`a`)))) drop table t1, t2, t3; create table t1 (a int, b int, index a (a,b)); create table t2 (a int, index a (a)); @@ -1356,7 +1356,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t1 ref a a 5 func 1001 100.00 Using where; Using index 2 DEPENDENT SUBQUERY t3 index a a 5 NULL 3 100.00 Using where; Using index; Using join buffer Warnings: -Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where (`test`.`t2`.`a`,(select 1 AS `Not_used` from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t1`.`b`) and ((`test`.`t2`.`a`) = `test`.`t1`.`a`)))) +Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where (`test`.`t2`.`a`,(select 1 from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t1`.`b`) and ((`test`.`t2`.`a`) = `test`.`t1`.`a`)))) insert into t1 values (3,31); select * from t2 where t2.a in (select a from t1 where t1.b <> 30); a @@ -1515,7 +1515,7 @@ id select_type table type possible_keys 1 PRIMARY t3 ALL NULL NULL NULL NULL 3 100.00 Using where 2 SUBQUERY t2 system NULL NULL NULL NULL 0 0.00 const row not found Warnings: -Note 1003 select `test`.`t3`.`a` AS `a` from `test`.`t3` where ((`test`.`t3`.`a` < (select NULL AS `b` from `test`.`t2` group by 1))) +Note 1003 select `test`.`t3`.`a` AS `a` from `test`.`t3` where ((`test`.`t3`.`a` < (select NULL from `test`.`t2` group by 1))) select * from t3 where a >= some (select b from t2 group by 1); a explain extended select * from t3 where a >= some (select b from t2 group by 1); @@ -1523,7 +1523,7 @@ id select_type table type possible_keys 1 PRIMARY t3 ALL NULL NULL NULL NULL 3 100.00 Using where 2 SUBQUERY t2 system NULL NULL NULL NULL 0 0.00 const row not found Warnings: -Note 1003 select `test`.`t3`.`a` AS `a` from `test`.`t3` where ((`test`.`t3`.`a` >= (select NULL AS `b` from `test`.`t2` group by 1))) +Note 1003 select `test`.`t3`.`a` AS `a` from `test`.`t3` where ((`test`.`t3`.`a` >= (select NULL from `test`.`t2` group by 1))) select * from t3 where NULL >= any (select b from t2); a explain extended select * from t3 where NULL >= any (select b from t2); @@ -1566,7 +1566,7 @@ id select_type table type possible_keys 1 PRIMARY t3 ALL NULL NULL NULL NULL 3 100.00 Using where 2 SUBQUERY t2 ALL NULL NULL NULL NULL 4 100.00 Using temporary; Using filesort Warnings: -Note 1003 select `test`.`t3`.`a` AS `a` from `test`.`t3` where ((`test`.`t3`.`a` <= (select max(`test`.`t2`.`b`) AS `max(b)` from `test`.`t2` group by `test`.`t2`.`a`))) +Note 1003 select `test`.`t3`.`a` AS `a` from `test`.`t3` where ((`test`.`t3`.`a` <= (select max(`test`.`t2`.`b`) from `test`.`t2` group by `test`.`t2`.`a`))) drop table t2, t3; CREATE TABLE `t1` ( `id` mediumint(9) NOT NULL auto_increment, `taskid` bigint(20) NOT NULL default '0', `dbid` int(11) NOT NULL default '0', `create_date` datetime NOT NULL default '0000-00-00 00:00:00', `last_update` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`)) ENGINE=MyISAM CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `t1` (`id`, `taskid`, `dbid`, `create_date`,`last_update`) VALUES (1, 1, 15, '2003-09-29 10:31:36', '2003-09-29 10:31:36'), (2, 1, 21, now(), now()); @@ -1743,7 +1743,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 test.tt.id 1 100.00 Using where; Using index Warnings: Note 1276 Field or reference 'test.tt.id' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`tt`.`id` AS `id`,`test`.`tt`.`text` AS `text` from `test`.`t1` `tt` where (not(exists(select `test`.`t1`.`id` AS `id` from `test`.`t1` where ((`test`.`t1`.`id` < 8) and (`test`.`t1`.`id` = `test`.`tt`.`id`)) having (`test`.`t1`.`id` is not null)))) +Note 1003 select `test`.`tt`.`id` AS `id`,`test`.`tt`.`text` AS `text` from `test`.`t1` `tt` where (not(exists(select `test`.`t1`.`id` from `test`.`t1` where ((`test`.`t1`.`id` < 8) and (`test`.`t1`.`id` = `test`.`tt`.`id`)) having (`test`.`t1`.`id` is not null)))) insert into t1 (id, text) values (1000, 'text1000'), (1001, 'text1001'); create table t2 (id int not null, text varchar(20) not null default '', primary key (id)); insert into t2 (id, text) values (1, 'text1'), (2, 'text2'), (3, 'text3'), (4, 'text4'), (5, 'text5'), (6, 'text6'), (7, 'text7'), (8, 'text8'), (9, 'text9'), (10, 'text10'), (11, 'text1'), (12, 'text2'), (13, 'text3'), (14, 'text4'), (15, 'text5'), (16, 'text6'), (17, 'text7'), (18, 'text8'), (19, 'text9'), (20, 'text10'),(21, 'text1'), (22, 'text2'), (23, 'text3'), (24, 'text4'), (25, 'text5'), (26, 'text6'), (27, 'text7'), (28, 'text8'), (29, 'text9'), (30, 'text10'), (31, 'text1'), (32, 'text2'), (33, 'text3'), (34, 'text4'), (35, 'text5'), (36, 'text6'), (37, 'text7'), (38, 'text8'), (39, 'text9'), (40, 'text10'), (41, 'text1'), (42, 'text2'), (43, 'text3'), (44, 'text4'), (45, 'text5'), (46, 'text6'), (47, 'text7'), (48, 'text8'), (49, 'text9'), (50, 'text10'); @@ -2279,7 +2279,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using where Warnings: Note 1276 Field or reference 'test.up.a' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`up`.`a` AS `a`,`test`.`up`.`b` AS `b` from `test`.`t1` `up` where exists(select 1 AS `Not_used` from `test`.`t1` where (`test`.`t1`.`a` = `test`.`up`.`a`)) +Note 1003 select `test`.`up`.`a` AS `a`,`test`.`up`.`b` AS `b` from `test`.`t1` `up` where exists(select 1 from `test`.`t1` where (`test`.`t1`.`a` = `test`.`up`.`a`)) drop table t1; CREATE TABLE t1 (t1_a int); INSERT INTO t1 VALUES (1); @@ -2820,19 +2820,19 @@ id select_type table type possible_keys 1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 100.00 Using where Warnings: -Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,((`test`.`t1`.`one`,`test`.`t1`.`two`),(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = '0') and trigcond((((`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond((((`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)))) having (trigcond((`test`.`t2`.`one`)) and trigcond((`test`.`t2`.`two`))))) AS `test` from `test`.`t1` +Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,((`test`.`t1`.`one`,`test`.`t1`.`two`),(select `test`.`t2`.`one`,`test`.`t2`.`two` from `test`.`t2` where ((`test`.`t2`.`flag` = '0') and trigcond((((`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond((((`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)))) having (trigcond((`test`.`t2`.`one`)) and trigcond((`test`.`t2`.`two`))))) AS `test` from `test`.`t1` explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N'); id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00 Using where 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 100.00 Using where Warnings: -Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where ((`test`.`t1`.`one`,`test`.`t1`.`two`),(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = 'N') and ((`test`.`t1`.`one`) = `test`.`t2`.`one`) and ((`test`.`t1`.`two`) = `test`.`t2`.`two`)))) +Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where ((`test`.`t1`.`one`,`test`.`t1`.`two`),(select `test`.`t2`.`one`,`test`.`t2`.`two` from `test`.`t2` where ((`test`.`t2`.`flag` = 'N') and ((`test`.`t1`.`one`) = `test`.`t2`.`one`) and ((`test`.`t1`.`two`) = `test`.`t2`.`two`)))) explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 100.00 Using where; Using temporary; Using filesort Warnings: -Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,((`test`.`t1`.`one`,`test`.`t1`.`two`),(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = '0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having (trigcond((((`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond((((`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))) and trigcond((`test`.`t2`.`one`)) and trigcond((`test`.`t2`.`two`))))) AS `test` from `test`.`t1` +Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,((`test`.`t1`.`one`,`test`.`t1`.`two`),(select `test`.`t2`.`one`,`test`.`t2`.`two` from `test`.`t2` where (`test`.`t2`.`flag` = '0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having (trigcond((((`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond((((`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))) and trigcond((`test`.`t2`.`one`)) and trigcond((`test`.`t2`.`two`))))) AS `test` from `test`.`t1` DROP TABLE t1,t2; CREATE TABLE t1 (a char(5), b char(5)); INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa'); @@ -4275,7 +4275,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 100.00 Using where Warnings: Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1 -Note 1003 select 2 AS `2` from `test`.`t1` where exists(select 1 AS `1` from `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`a`)) +Note 1003 select 2 AS `2` from `test`.`t1` where exists(select 1 from `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`a`)) EXPLAIN EXTENDED SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a) UNION (SELECT 1 FROM t2 WHERE t1.a = t2.a)); @@ -4353,13 +4353,13 @@ id select_type table type possible_keys 1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort Warnings: -Note 1003 select 1 AS `1` from `test`.`t1` where (1,(select 1 AS `1` from `test`.`t1` group by `test`.`t1`.`a` having ((1) = (1)))) +Note 1003 select 1 AS `1` from `test`.`t1` where (1,(select 1 from `test`.`t1` group by `test`.`t1`.`a` having ((1) = (1)))) EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 WHERE a > 3 GROUP BY a); id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using temporary; Using filesort Warnings: -Note 1003 select 1 AS `1` from `test`.`t1` where (1,(select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` having ((1) = (1)))) +Note 1003 select 1 AS `1` from `test`.`t1` where (1,(select 1 from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` having ((1) = (1)))) DROP TABLE t1; # # Bug#45061: Incorrectly market field caused wrong result. === modified file 'mysql-test/r/subselect3.result' --- a/mysql-test/r/subselect3.result 2009-11-06 14:20:27 +0000 +++ b/mysql-test/r/subselect3.result 2010-03-12 09:51:53 +0000 @@ -30,7 +30,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 100.00 Using where; Using temporary; Using filesort Warnings: Note 1276 Field or reference 'test.t2.oref' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,(`test`.`t2`.`a`,(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having trigcond(((`test`.`t2`.`a`) = (max(`test`.`t1`.`ie`)))))) AS `Z` from `test`.`t2` +Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,(`test`.`t2`.`a`,(select max(`test`.`t1`.`ie`) from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having trigcond(((`test`.`t2`.`a`) = (max(`test`.`t1`.`ie`)))))) AS `Z` from `test`.`t2` explain extended select a, oref from t2 where a in (select max(ie) from t1 where oref=t2.oref group by grp); @@ -39,7 +39,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 100.00 Using where; Using temporary; Using filesort Warnings: Note 1276 Field or reference 'test.t2.oref' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref` from `test`.`t2` where (`test`.`t2`.`a`,(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having ((`test`.`t2`.`a`) = (max(`test`.`t1`.`ie`))))) +Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref` from `test`.`t2` where (`test`.`t2`.`a`,(select max(`test`.`t1`.`ie`) from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having ((`test`.`t2`.`a`) = (max(`test`.`t1`.`ie`))))) select a, oref, a in ( select max(ie) from t1 where oref=t2.oref group by grp union select max(ie) from t1 where oref=t2.oref group by grp @@ -68,7 +68,7 @@ id select_type table type possible_keys 1 PRIMARY t3 ALL NULL NULL NULL NULL 2 100.00 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 100.00 Using where; Using temporary; Using filesort Warnings: -Note 1003 select (`test`.`t3`.`a`,(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = 4) group by `test`.`t1`.`grp` having trigcond(((`test`.`t3`.`a`) = (max(`test`.`t1`.`ie`)))))) AS `a in (select max(ie) from t1 where oref=4 group by grp)` from `test`.`t3` +Note 1003 select (`test`.`t3`.`a`,(select max(`test`.`t1`.`ie`) from `test`.`t1` where (`test`.`t1`.`oref` = 4) group by `test`.`t1`.`grp` having trigcond(((`test`.`t3`.`a`) = (max(`test`.`t1`.`ie`)))))) AS `a in (select max(ie) from t1 where oref=4 group by grp)` from `test`.`t3` drop table t1, t2, t3; create table t1 (a int, oref int, key(a)); insert into t1 values @@ -157,7 +157,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t2 ref a a 5 test.t1.b 1 100.00 Using where Warnings: Note 1276 Field or reference 'test.t3.oref' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t3`.`oref` AS `oref`,(`test`.`t3`.`a`,(select 1 AS `Not_used` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`oref`) and trigcond((((`test`.`t3`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`)))) having trigcond((`test`.`t1`.`a`)))) AS `Z` from `test`.`t3` +Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t3`.`oref` AS `oref`,(`test`.`t3`.`a`,(select 1 from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`oref`) and trigcond((((`test`.`t3`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`)))) having trigcond((`test`.`t1`.`a`)))) AS `Z` from `test`.`t3` drop table t1, t2, t3; create table t1 (a int NOT NULL, b int NOT NULL, key(a)); insert into t1 values @@ -185,7 +185,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t2 ref a a 4 test.t1.b 1 100.00 Using where Warnings: Note 1276 Field or reference 'test.t3.oref' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t3`.`oref` AS `oref`,(`test`.`t3`.`a`,(select 1 AS `Not_used` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`oref`) and trigcond(((`test`.`t3`.`a`) = `test`.`t1`.`a`))))) AS `Z` from `test`.`t3` +Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t3`.`oref` AS `oref`,(`test`.`t3`.`a`,(select 1 from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`oref`) and trigcond(((`test`.`t3`.`a`) = `test`.`t1`.`a`))))) AS `Z` from `test`.`t3` drop table t1,t2,t3; create table t1 (oref int, grp int); insert into t1 (oref, grp) values @@ -209,7 +209,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort Warnings: Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,(`test`.`t2`.`a`,(select count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`grp` having ((`test`.`t1`.`grp` = `test`.`t2`.`oref`) and trigcond(((`test`.`t2`.`a`) = (count(0))))))) AS `Z` from `test`.`t2` +Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,(`test`.`t2`.`a`,(select count(0) from `test`.`t1` group by `test`.`t1`.`grp` having ((`test`.`t1`.`grp` = `test`.`t2`.`oref`) and trigcond(((`test`.`t2`.`a`) = (count(0))))))) AS `Z` from `test`.`t2` drop table t1, t2; create table t1 (a int, b int, primary key (a)); insert into t1 values (1,1), (3,1),(100,1); @@ -258,7 +258,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY t4 ALL NULL NULL NULL NULL 100 100.00 Using where; Using join buffer Warnings: Note 1276 Field or reference 'test.t2.oref' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`oref` AS `oref`,((`test`.`t2`.`a`,`test`.`t2`.`b`),(select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` join `test`.`t4` where ((`test`.`t1`.`c` = `test`.`t2`.`oref`) and trigcond((((`test`.`t2`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`))) and trigcond((((`test`.`t2`.`b`) = `test`.`t1`.`b`) or isnull(`test`.`t1`.`b`)))) having (trigcond((`test`.`t1`.`a`)) and trigcond((`test`.`t1`.`b`))))) AS `Z` from `test`.`t2` +Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`oref` AS `oref`,((`test`.`t2`.`a`,`test`.`t2`.`b`),(select `test`.`t1`.`a`,`test`.`t1`.`b` from `test`.`t1` join `test`.`t4` where ((`test`.`t1`.`c` = `test`.`t2`.`oref`) and trigcond((((`test`.`t2`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`))) and trigcond((((`test`.`t2`.`b`) = `test`.`t1`.`b`) or isnull(`test`.`t1`.`b`)))) having (trigcond((`test`.`t1`.`a`)) and trigcond((`test`.`t1`.`b`))))) AS `Z` from `test`.`t2` select a,b, oref, (a,b) in (select a,b from t1,t4 where c=t2.oref) Z from t2; @@ -703,7 +703,7 @@ id select_type table type possible_keys 1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using index 2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00 Using where Warnings: -Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`b` = `test`.`t1`.`a`) and (not((`test`.`t1`.`a`,(select 1 AS `Not_used` from `test`.`t1` where (((`test`.`t2`.`b`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`)) having (`test`.`t1`.`a`)))))) +Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`b` = `test`.`t1`.`a`) and (not((`test`.`t1`.`a`,(select 1 from `test`.`t1` where (((`test`.`t2`.`b`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`)) having (`test`.`t1`.`a`)))))) SELECT a FROM t1, t2 WHERE a=b AND (b NOT IN (SELECT a FROM t1)); a SELECT a FROM t1, t2 WHERE a=b AND (b NOT IN (SELECT a FROM t1 WHERE a > 4)); @@ -864,7 +864,7 @@ Level Code Message Note 1276 Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #2 Note 1276 Field or reference 'test.t1.c' of SELECT #3 was resolved in SELECT #2 Error 1054 Unknown column 'c' in 'field list' -Note 1003 select `c` AS `c` from (select (select count(`test`.`t1`.`a`) AS `COUNT(a)` from dual group by `c`) AS `(SELECT COUNT(a) FROM +Note 1003 select `c` AS `c` from (select (select count(`test`.`t1`.`a`) from dual group by `c`) AS `(SELECT COUNT(a) FROM (SELECT COUNT(b) FROM t1) AS x GROUP BY c )` from `test`.`t1` group by `test`.`t1`.`b`) `y` DROP TABLE t1; === modified file 'mysql-test/r/trigger.result' --- a/mysql-test/r/trigger.result 2010-02-23 13:26:45 +0000 +++ b/mysql-test/r/trigger.result 2010-03-12 09:51:53 +0000 @@ -2087,6 +2087,30 @@ ERROR 42S02: Table 'test.a_nonextisting_ SELECT * FROM t2; a b DROP TABLE t1, t2; +# +# Bug#51650 crash with user variables and triggers +# +DROP TRIGGER IF EXISTS trg1; +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 (b VARCHAR(50) NOT NULL); +CREATE TABLE t2 (a VARCHAR(10) NOT NULL DEFAULT ''); +CREATE TRIGGER trg1 AFTER INSERT ON t2 +FOR EACH ROW BEGIN +SELECT 1 FROM t1 c WHERE +(@bug51650 IS NULL OR @bug51650 != c.b) AND c.b = NEW.a LIMIT 1 INTO @foo; +END// +SET @bug51650 = 1; +INSERT IGNORE INTO t2 VALUES(); +Warnings: +Warning 1329 No data - zero rows fetched, selected, or processed +INSERT IGNORE INTO t1 SET b = '777'; +INSERT IGNORE INTO t2 SET a = '111'; +Warnings: +Warning 1329 No data - zero rows fetched, selected, or processed +SET @bug51650 = 1; +INSERT IGNORE INTO t2 SET a = '777'; +DROP TRIGGER trg1; +DROP TABLE t1, t2; End of 5.1 tests. # # Bug#34453 Can't change size of file (Errcode: 1224) === modified file 'mysql-test/r/type_datetime.result' --- a/mysql-test/r/type_datetime.result 2009-10-19 11:13:26 +0000 +++ b/mysql-test/r/type_datetime.result 2010-03-12 09:51:53 +0000 @@ -517,7 +517,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE Warnings: Note 1276 Field or reference 'test.t1.cur_date' of SELECT #2 was resolved in SELECT #1 -Note 1003 select '1' AS `id`,'2007-04-25 18:30:22' AS `cur_date` from dual where ('1',(select 1 AS `Not_used` from `test`.`t1` `x1` where 0)) +Note 1003 select '1' AS `id`,'2007-04-25 18:30:22' AS `cur_date` from dual where ('1',(select 1 from `test`.`t1` `x1` where 0)) select * from t1 where id in (select id from t1 as x1 where (t1.cur_date is null)); id cur_date @@ -529,7 +529,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE Warnings: Note 1276 Field or reference 'test.t2.cur_date' of SELECT #2 was resolved in SELECT #1 -Note 1003 select '1' AS `id`,'2007-04-25' AS `cur_date` from dual where ('1',(select 1 AS `Not_used` from `test`.`t2` `x1` where 0)) +Note 1003 select '1' AS `id`,'2007-04-25' AS `cur_date` from dual where ('1',(select 1 from `test`.`t2` `x1` where 0)) select * from t2 where id in (select id from t2 as x1 where (t2.cur_date is null)); id cur_date @@ -543,7 +543,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY x1 ALL NULL NULL NULL NULL 2 100.00 Using where Warnings: Note 1276 Field or reference 'test.t1.cur_date' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`cur_date` AS `cur_date` from `test`.`t1` where (`test`.`t1`.`id`,(select 1 AS `Not_used` from `test`.`t1` `x1` where ((`test`.`t1`.`cur_date` = 0) and ((`test`.`t1`.`id`) = `test`.`x1`.`id`)))) +Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`cur_date` AS `cur_date` from `test`.`t1` where (`test`.`t1`.`id`,(select 1 from `test`.`t1` `x1` where ((`test`.`t1`.`cur_date` = 0) and ((`test`.`t1`.`id`) = `test`.`x1`.`id`)))) select * from t1 where id in (select id from t1 as x1 where (t1.cur_date is null)); id cur_date @@ -555,7 +555,7 @@ id select_type table type possible_keys 2 DEPENDENT SUBQUERY x1 ALL NULL NULL NULL NULL 2 100.00 Using where Warnings: Note 1276 Field or reference 'test.t2.cur_date' of SELECT #2 was resolved in SELECT #1 -Note 1003 select `test`.`t2`.`id` AS `id`,`test`.`t2`.`cur_date` AS `cur_date` from `test`.`t2` where (`test`.`t2`.`id`,(select 1 AS `Not_used` from `test`.`t2` `x1` where ((`test`.`t2`.`cur_date` = 0) and ((`test`.`t2`.`id`) = `test`.`x1`.`id`)))) +Note 1003 select `test`.`t2`.`id` AS `id`,`test`.`t2`.`cur_date` AS `cur_date` from `test`.`t2` where (`test`.`t2`.`id`,(select 1 from `test`.`t2` `x1` where ((`test`.`t2`.`cur_date` = 0) and ((`test`.`t2`.`id`) = `test`.`x1`.`id`)))) select * from t2 where id in (select id from t2 as x1 where (t2.cur_date is null)); id cur_date === modified file 'mysql-test/r/union.result' --- a/mysql-test/r/union.result 2010-02-26 13:40:01 +0000 +++ b/mysql-test/r/union.result 2010-03-09 10:36:26 +0000 @@ -1636,7 +1636,7 @@ id select_type table type possible_keys NULL UNION RESULT ALL NULL NULL NULL NULL NULL NULL Using filesort Warnings: Note 1276 Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #2 -Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` union select `test`.`t1`.`a` AS `a` from `test`.`t1` order by (select `test`.`t1`.`a` AS `a` from `test`.`t2` where (`test`.`t2`.`b` = 12)) +Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` union select `test`.`t1`.`a` AS `a` from `test`.`t1` order by (select `test`.`t1`.`a` from `test`.`t2` where (`test`.`t2`.`b` = 12)) # Should not crash SELECT * FROM t1 UNION SELECT * FROM t1 ORDER BY (SELECT a FROM t2 WHERE b = 12); === modified file 'mysql-test/r/update.result' --- a/mysql-test/r/update.result 2009-10-23 13:09:14 +0000 +++ b/mysql-test/r/update.result 2010-03-10 16:10:05 +0000 @@ -514,3 +514,16 @@ ALTER TABLE t2 COMMENT = 'ABC'; UPDATE t2, t1 SET t2.f1 = 2, t1.f1 = 9; ALTER TABLE t2 COMMENT = 'DEF'; DROP TABLE t1, t2; +# +# Bug#50545: Single table UPDATE IGNORE crashes on join view in +# sql_safe_updates mode. +# +CREATE TABLE t1 ( a INT, KEY( a ) ); +INSERT INTO t1 VALUES (0), (1); +CREATE VIEW v1 AS SELECT t11.a, t12.a AS b FROM t1 t11, t1 t12; +SET SESSION sql_safe_updates = 1; +UPDATE IGNORE v1 SET a = 1; +ERROR HY000: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column +SET SESSION sql_safe_updates = DEFAULT; +DROP TABLE t1; +DROP VIEW v1; === modified file 'mysql-test/r/view.result' --- a/mysql-test/r/view.result 2010-02-21 21:33:11 +0000 +++ b/mysql-test/r/view.result 2010-03-12 09:51:53 +0000 @@ -717,7 +717,7 @@ create view v1 as select a from t1; create view v2 as select a from t2 where a in (select a from v1); show create view v2; View Create View character_set_client collation_connection -v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where `t2`.`a` in (select `v1`.`a` AS `a` from `v1`) latin1 latin1_swedish_ci +v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where `t2`.`a` in (select `v1`.`a` from `v1`) latin1 latin1_swedish_ci drop view v2, v1; drop table t1, t2; CREATE VIEW `v 1` AS select 5 AS `5`; @@ -2982,7 +2982,7 @@ SHOW WARNINGS; Level Code Message SHOW CREATE VIEW v1; View Create View character_set_client collation_connection -v1 CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`pk` AS `pk` from (`t1` join `t2` on(((`t2`.`fk` = `t1`.`pk`) and (`t2`.`ver` = (select max(`t`.`ver`) AS `MAX(t.ver)` from `t2` `t` where (`t`.`org` = `t2`.`org`)))))) latin1 latin1_swedish_ci +v1 CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`pk` AS `pk` from (`t1` join `t2` on(((`t2`.`fk` = `t1`.`pk`) and (`t2`.`ver` = (select max(`t`.`ver`) from `t2` `t` where (`t`.`org` = `t2`.`org`)))))) latin1 latin1_swedish_ci DROP VIEW v1; DROP TABLE t1, t2; DROP FUNCTION IF EXISTS f1; === added file 'mysql-test/r/view_alias.result' --- a/mysql-test/r/view_alias.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/view_alias.result 2010-03-09 10:36:26 +0000 @@ -0,0 +1,111 @@ +# +# Bug#40277 SHOW CREATE VIEW returns invalid SQL +# Bug#41999 SHOW CREATE VIEW returns invalid SQL if subquery is used in SELECT list +# +# 65 characters exceed the maximum length of a column identifier. The system cannot derive the name from statement. +# Constant with length = 65 . Expect to get the identifier 'Name_exp_1'. +CREATE VIEW v1 AS SELECT '<--- 65 char including the arrows --->'; +SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'; +COLUMN_NAME +Name_exp_1 +DROP VIEW v1; +CREATE VIEW v1 AS select '<--- 65 char including the arrows --->' AS `Name_exp_1`; +DROP VIEW v1; +CREATE VIEW v1 AS select '<--- 65 char including the arrows --->' AS `Name_exp_1`; +DROP VIEW v1; +# Subquery with length = 65 . Expect to get the identifier 'Name_exp_1'. +# Attention: Identifier for the column within the subquery will be not generated. +CREATE VIEW v1 AS SELECT (SELECT '<--- 54 char including the arrows (+ 11 outside) -->'); +SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'; +COLUMN_NAME +Name_exp_1 +DROP VIEW v1; +CREATE VIEW v1 AS select (select '<--- 54 char including the arrows (+ 11 outside) -->') AS `Name_exp_1`; +DROP VIEW v1; +CREATE VIEW v1 AS select (select '<--- 54 char including the arrows (+ 11 outside) -->') AS `Name_exp_1`; +DROP VIEW v1; +# ----------------------------------------------------------------------------------------------------------------- +# 64 characters are the maximum length of a column identifier. The system can derive the name from the statement. +CREATE VIEW v1 AS SELECT '<--- 64 char including the arrows --->'; +SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'; +COLUMN_NAME +<--- 64 char including the arrows ---> +DROP VIEW v1; +CREATE VIEW v1 AS select '<--- 64 char including the arrows --->' AS `<--- 64 char including the arrows --->`; +DROP VIEW v1; +CREATE VIEW v1 AS select '<--- 64 char including the arrows --->' AS `<--- 64 char including the arrows --->`; +DROP VIEW v1; +CREATE VIEW v1 AS SELECT (SELECT '<--- 53 char including the arrows (+ 11 outside) --->'); +SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'; +COLUMN_NAME +(SELECT '<--- 53 char including the arrows (+ 11 outside) --->') +DROP VIEW v1; +CREATE VIEW v1 AS select (select '<--- 53 char including the arrows (+ 11 outside) --->') AS `(SELECT '<--- 53 char including the arrows (+ 11 outside) --->')`; +DROP VIEW v1; +CREATE VIEW v1 AS select (select '<--- 53 char including the arrows (+ 11 outside) --->') AS `(SELECT '<--- 53 char including the arrows (+ 11 outside) --->')`; +DROP VIEW v1; +# ----------------------------------------------------------------------------------------------------------------- +# Identifiers must not have trailing spaces. The system cannot derive the name from a constant with trailing space. +# Generated identifiers have at their end the position within the select column list. +# 'c2 ' -> 'Name_exp_1' , ' c4 ' -> 'Name_exp_2' +CREATE VIEW v1 AS SELECT 'c1', 'c2 ', ' c3', ' c4 '; +SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'; +COLUMN_NAME +c1 +Name_exp_2 +c3 +Name_exp_4 +DROP VIEW v1; +CREATE VIEW v1 AS select 'c1' AS `c1`,'c2 ' AS `Name_exp_2`,' c3' AS `c3`,' c4 ' AS `Name_exp_4`; +DROP VIEW v1; +CREATE VIEW v1 AS select 'c1' AS `c1`,'c2 ' AS `Name_exp_2`,' c3' AS `c3`,' c4 ' AS `Name_exp_4`; +DROP VIEW v1; +# +# Bug#40277 SHOW CREATE VIEW returns invalid SQL +# +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1,t2; +# Column name exceeds the maximum length. +CREATE VIEW v1 AS SELECT '0000000000 1111111111 2222222222 3333333333 4444444444 5555555555'; +DROP VIEW v1; +CREATE VIEW v1 AS select '0000000000 1111111111 2222222222 3333333333 4444444444 5555555555' AS `Name_exp_1`; +DROP VIEW v1; +# Column names with leading trailing spaces. +CREATE VIEW v1 AS SELECT 'c1', 'c2 ', ' c3', ' c4 '; +DROP VIEW v1; +CREATE VIEW v1 AS select 'c1' AS `c1`,'c2 ' AS `Name_exp_2`,' c3' AS `c3`,' c4 ' AS `Name_exp_4`; +DROP VIEW v1; +# Column name conflicts with a auto-generated one. +CREATE VIEW v1 AS SELECT 'c1', 'c2 ', ' c3', ' c4 ', 'Name_exp_2'; +DROP VIEW v1; +CREATE VIEW v1 AS select 'c1' AS `c1`,'c2 ' AS `Name_exp_2`,' c3' AS `c3`,' c4 ' AS `Name_exp_4`,'Name_exp_2' AS `My_exp_Name_exp_2`; +DROP VIEW v1; +# Invalid conlumn name in subquery. +CREATE VIEW v1 AS SELECT (SELECT ' c1 '); +DROP VIEW v1; +CREATE VIEW v1 AS select (select ' c1 ') AS `(SELECT ' c1 ')`; +DROP VIEW v1; +CREATE TABLE t1(a INT); +CREATE TABLE t2 LIKE t1; +# Test alias in subquery +CREATE VIEW v1 AS SELECT a FROM t1 WHERE EXISTS (SELECT 1 FROM t2 AS b WHERE b.a = 0); +DROP VIEW v1; +CREATE VIEW v1 AS select `test`.`t1`.`a` AS `a` from `test`.`t1` where exists(select 1 from `test`.`t2` `b` where (`b`.`a` = 0)); +DROP VIEW v1; +# Test column alias in subquery +CREATE VIEW v1 AS SELECT a FROM t1 WHERE EXISTS (SELECT a AS alias FROM t1 GROUP BY alias); +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where exists(select `t1`.`a` AS `alias` from `t1` group by `t1`.`a`) latin1 latin1_swedish_ci +DROP VIEW v1; +CREATE VIEW v1 AS select `test`.`t1`.`a` AS `a` from `test`.`t1` where exists(select `test`.`t1`.`a` AS `alias` from `test`.`t1` group by `test`.`t1`.`a`); +DROP VIEW v1; +# Alias as the expression column name. +CREATE VIEW v1 AS SELECT a FROM t1 WHERE EXISTS (SELECT ' a ' AS alias FROM t1 GROUP BY alias); +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where exists(select ' a ' AS `alias` from `t1` group by ' a ') latin1 latin1_swedish_ci +DROP VIEW v1; +CREATE VIEW v1 AS select `test`.`t1`.`a` AS `a` from `test`.`t1` where exists(select ' a ' AS `alias` from `test`.`t1` group by ' a '); +DROP VIEW v1; +DROP TABLE t1, t2; === modified file 'mysql-test/r/xa.result' --- a/mysql-test/r/xa.result 2009-10-28 15:39:08 +0000 +++ b/mysql-test/r/xa.result 2010-03-10 15:31:22 +0000 @@ -74,6 +74,23 @@ ERROR XA102: XA_RBDEADLOCK: Transaction xa rollback 'a','c'; xa start 'a','c'; drop table t1; +# +# BUG#51342 - more xid crashing +# +CREATE TABLE t1(a INT) ENGINE=InnoDB; +XA START 'x'; +SET SESSION autocommit=0; +INSERT INTO t1 VALUES(1); +SET SESSION autocommit=1; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state +SELECT @@autocommit; +@@autocommit +0 +INSERT INTO t1 VALUES(1); +XA END 'x'; +XA COMMIT 'x' ONE PHASE; +DROP TABLE t1; +SET SESSION autocommit=1; End of 5.0 tests xa start 'a'; xa end 'a'; === added file 'mysql-test/std_data/bug48265.frm' Binary files a/mysql-test/std_data/bug48265.frm 1970-01-01 00:00:00 +0000 and b/mysql-test/std_data/bug48265.frm 2010-03-03 10:49:03 +0000 differ === modified file 'mysql-test/suite/binlog/r/binlog_innodb_row.result' --- a/mysql-test/suite/binlog/r/binlog_innodb_row.result 2009-05-31 05:44:41 +0000 +++ b/mysql-test/suite/binlog/r/binlog_innodb_row.result 2010-03-09 23:41:21 +0000 @@ -29,3 +29,32 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Xid # # COMMIT /* XID */ drop table t1; +RESET MASTER; +CREATE TABLE t1 ( c1 int , primary key (c1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1), (2), (3); +CREATE TEMPORARY TABLE IF NOT EXISTS t2 LIKE t1; +TRUNCATE TABLE t2; +DROP TABLE t1; +############################################### +### assertion: No event for 'TRUNCATE TABLE t2' +############################################### +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 ( c1 int , primary key (c1)) ENGINE=InnoDB +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # use `test`; DROP TABLE t1 +############################################### +RESET MASTER; +CREATE TEMPORARY TABLE t1 (c1 int) Engine=InnoDB; +INSERT INTO t1 VALUES (1), (2), (3); +TRUNCATE t1; +DROP TEMPORARY TABLE t1; +############################################### +### assertion: No event for 'TRUNCATE TABLE t1' +############################################### +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +############################################### === modified file 'mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result' --- a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2010-01-22 09:38:21 +0000 +++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2010-02-24 19:01:53 +0000 @@ -413,7 +413,6 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # use `test`; TRUNCATE table t2 master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F === modified file 'mysql-test/suite/binlog/r/binlog_tmp_table.result' --- a/mysql-test/suite/binlog/r/binlog_tmp_table.result 2009-10-22 22:30:28 +0000 +++ b/mysql-test/suite/binlog/r/binlog_tmp_table.result 2010-03-12 09:51:53 +0000 @@ -29,3 +29,14 @@ a 6 8 drop table foo; +RESET MASTER; +create database b51226; +use b51226; +create temporary table t1(i int); +use b51226; +create temporary table t1(i int); +create temporary table t1(i int); +ERROR 42S01: Table 't1' already exists +insert into t1 values(1); +DROP DATABASE b51226; +FLUSH LOGS; === modified file 'mysql-test/suite/binlog/t/binlog_innodb_row.test' --- a/mysql-test/suite/binlog/t/binlog_innodb_row.test 2008-12-08 15:07:08 +0000 +++ b/mysql-test/suite/binlog/t/binlog_innodb_row.test 2010-03-09 23:41:21 +0000 @@ -40,3 +40,40 @@ commit; source include/show_binlog_events.inc; drop table t1; + +# +# BUG#51251 +# +# The test case checks if truncating a temporary table created with +# engine InnoDB will not cause the truncate statement to be binlogged. + +# Before patch for BUG#51251, the TRUNCATE statements below would be +# binlogged, which would cause the slave to fail with "table does not +# exist". + +RESET MASTER; + +CREATE TABLE t1 ( c1 int , primary key (c1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1), (2), (3); +CREATE TEMPORARY TABLE IF NOT EXISTS t2 LIKE t1; +TRUNCATE TABLE t2; +DROP TABLE t1; + +-- echo ############################################### +-- echo ### assertion: No event for 'TRUNCATE TABLE t2' +-- echo ############################################### +-- source include/show_binlog_events.inc +-- echo ############################################### + +RESET MASTER; + +CREATE TEMPORARY TABLE t1 (c1 int) Engine=InnoDB; +INSERT INTO t1 VALUES (1), (2), (3); +TRUNCATE t1; +DROP TEMPORARY TABLE t1; + +-- echo ############################################### +-- echo ### assertion: No event for 'TRUNCATE TABLE t1' +-- echo ############################################### +-- source include/show_binlog_events.inc +-- echo ############################################### === modified file 'mysql-test/suite/binlog/t/binlog_tmp_table.test' --- a/mysql-test/suite/binlog/t/binlog_tmp_table.test 2009-10-22 22:30:28 +0000 +++ b/mysql-test/suite/binlog/t/binlog_tmp_table.test 2010-03-12 09:51:53 +0000 @@ -82,3 +82,69 @@ select * from foo; # clean up drop table foo; + +################################################################# +# BUG#51226 +################################################################# + +RESET MASTER; + +-- let $dbname=b51226 + +connect (con1,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); +connect (con2,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); + +# +# action: on con1 create the database and the tmp table +# +-- connection con1 +-- eval create database $dbname +-- eval use $dbname +create temporary table t1(i int); + +# +# action: on con1 create the tmp table +# +-- connection con2 +-- eval use $dbname +create temporary table t1(i int); + +# action: at this point, the last event binlogged contains the +# pseudo_thread_id from con2. So now we switch to con1, issue +# a statement that fails and close the connection (which logs +# implicitely a DROP TEMPORARY TABLE). +# +# Before the patch this would not log con1's pseudo_thread_id +# because the failing statement would reset THD context +# (unsetting the thread_specific_used flag, and consequently, +# causing the DROP event to be logged without pseudo_thread_id +# in its header). + +-- connection con1 +-- error 1050 +create temporary table t1(i int); +-- disconnect con1 + +-- connection default +-- let $wait_binlog_event= DROP +-- source include/wait_for_binlog_event.inc + +# action: insert in the t1. This would cause the the test to fail, +# because when replaying the binlog the previous implicit drop +# temp table would have been executed under the wrong +# pseudo_thread_id, dropping the tmp table on con2. +-- connection con2 +insert into t1 values(1); +-- disconnect con2 + +-- connection default +-- let $wait_binlog_event= DROP +-- source include/wait_for_binlog_event.inc + +-- eval DROP DATABASE $dbname +FLUSH LOGS; + +# assertion: assert that when replaying the binary log will succeed, +# instead of failing with "Table 'XXX.YYY' doesn't exist" +-- let $MYSQLD_DATADIR= `select @@datadir` +-- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 | $MYSQL === modified file 'mysql-test/t/gis-rtree.test' --- a/mysql-test/t/gis-rtree.test 2010-02-26 13:16:46 +0000 +++ b/mysql-test/t/gis-rtree.test 2010-03-10 10:22:08 +0000 @@ -902,4 +902,28 @@ SELECT 1 FROM t1 WHERE a >= GEOMFROMTEXT DROP TABLE t1; +--echo # +--echo # Bug #51357: crash when using handler commands on spatial indexes +--echo # + +CREATE TABLE t1(a GEOMETRY NOT NULL,SPATIAL INDEX a(a)); +HANDLER t1 OPEN; +HANDLER t1 READ a FIRST; +HANDLER t1 READ a NEXT; +HANDLER t1 READ a PREV; +HANDLER t1 READ a LAST; +HANDLER t1 CLOSE; + +#TODO: re-enable this test please when bug #51877 is solved +# second crash fixed when the tree has changed since the last search. +#HANDLER t1 OPEN; +#HANDLER t1 READ a FIRST; +#INSERT INTO t1 VALUES (GeomFromText('Polygon((40 40,60 40,60 60,40 60,40 40))')); +#HANDLER t1 READ a NEXT; +#HANDLER t1 CLOSE; +#TODO: end of the 51877 dependent section + +DROP TABLE t1; + + --echo End of 5.0 tests. === modified file 'mysql-test/t/merge.test' --- a/mysql-test/t/merge.test 2009-10-23 11:22:21 +0000 +++ b/mysql-test/t/merge.test 2010-03-12 09:51:53 +0000 @@ -7,6 +7,8 @@ drop table if exists t1,t2,t3,t4,t5,t6; drop database if exists mysqltest; --enable_warnings +let $MYSQLD_DATADIR= `select @@datadir`; + create table t1 (a int not null primary key auto_increment, message char(20)); create table t2 (a int not null primary key auto_increment, message char(20)); INSERT INTO t1 (message) VALUES ("Testing"),("table"),("t1"); @@ -1633,6 +1635,61 @@ SHOW CREATE TRIGGER tr1; DROP TRIGGER tr1; DROP TABLE t1, t2, t3; +--echo # +--echo # BUG#48265 - MRG_MYISAM problem (works in 5.0.85, does't work in 5.1.40) +--echo # +CREATE DATABASE `test/1`; + +CREATE TABLE `test/1`.`t/1`(a INT); +CREATE TABLE m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM m1; +SHOW CREATE TABLE m1; +DROP TABLE m1; + +CREATE TABLE `test/1`.m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM `test/1`.m1; +SHOW CREATE TABLE `test/1`.m1; +DROP TABLE `test/1`.m1; +DROP TABLE `test/1`.`t/1`; + +CREATE TEMPORARY TABLE `test/1`.`t/1`(a INT); +CREATE TEMPORARY TABLE m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM m1; +SHOW CREATE TABLE m1; +DROP TABLE m1; + +CREATE TEMPORARY TABLE `test/1`.m1(a INT) ENGINE=MERGE UNION=(`test/1`.`t/1`); +SELECT * FROM `test/1`.m1; +SHOW CREATE TABLE `test/1`.m1; +DROP TABLE `test/1`.m1; +DROP TABLE `test/1`.`t/1`; + +DROP DATABASE `test/1`; + +# Test compatibility. Use '@' instead of '/' (was not allowed in 5.0) + +CREATE TABLE `t@1`(a INT); +copy_file std_data/bug48265.frm $MYSQLD_DATADIR/test/m1.frm; +write_file $MYSQLD_DATADIR/test/m1.MRG; +t@1 +EOF +SELECT * FROM m1; +SHOW CREATE TABLE m1; +DROP TABLE `t@1`; + +CREATE DATABASE `test@1`; +CREATE TABLE `test@1`.`t@1`(a INT); +FLUSH TABLE m1; +remove_file $MYSQLD_DATADIR/test/m1.MRG; +write_file $MYSQLD_DATADIR/test/m1.MRG; +./test@1/t@1 +EOF +SELECT * FROM m1; +SHOW CREATE TABLE m1; +DROP TABLE m1; +DROP TABLE `test@1`.`t@1`; +DROP DATABASE `test@1`; + --echo End of 5.1 tests --echo # === modified file 'mysql-test/t/myisam.test' --- a/mysql-test/t/myisam.test 2010-02-28 17:29:19 +0000 +++ b/mysql-test/t/myisam.test 2010-03-10 12:32:12 +0000 @@ -1603,4 +1603,32 @@ CHECKSUM TABLE t2 EXTENDED; CHECKSUM TABLE t3 EXTENDED; DROP TABLE t1, t2, t3; +--echo # +--echo # BUG#51307 - widespread corruption with partitions and insert...select +--echo # +CREATE TABLE t1(a CHAR(255), KEY(a)); +SELECT * FROM t1, t1 AS a1; +SET myisam_sort_buffer_size=4; +INSERT INTO t1 VALUES +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'); +SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; +INSERT INTO t1 VALUES('1'); +SELECT * FROM t1, t1 AS a1 WHERE t1.a=1 AND a1.a=1; +DROP TABLE t1; + --echo End of 5.1 tests === modified file 'mysql-test/t/trigger.test' --- a/mysql-test/t/trigger.test 2010-02-23 13:26:45 +0000 +++ b/mysql-test/t/trigger.test 2010-03-12 09:51:53 +0000 @@ -2396,6 +2396,36 @@ SELECT * FROM t2; DROP TABLE t1, t2; +--echo # +--echo # Bug#51650 crash with user variables and triggers +--echo # + +--disable_warnings +DROP TRIGGER IF EXISTS trg1; +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +CREATE TABLE t1 (b VARCHAR(50) NOT NULL); +CREATE TABLE t2 (a VARCHAR(10) NOT NULL DEFAULT ''); + +delimiter //; +CREATE TRIGGER trg1 AFTER INSERT ON t2 +FOR EACH ROW BEGIN + SELECT 1 FROM t1 c WHERE + (@bug51650 IS NULL OR @bug51650 != c.b) AND c.b = NEW.a LIMIT 1 INTO @foo; +END// +delimiter ;// + +SET @bug51650 = 1; +INSERT IGNORE INTO t2 VALUES(); +INSERT IGNORE INTO t1 SET b = '777'; +INSERT IGNORE INTO t2 SET a = '111'; +SET @bug51650 = 1; +INSERT IGNORE INTO t2 SET a = '777'; + +DROP TRIGGER trg1; +DROP TABLE t1, t2; + --echo End of 5.1 tests. === modified file 'mysql-test/t/update.test' --- a/mysql-test/t/update.test 2009-10-23 13:09:14 +0000 +++ b/mysql-test/t/update.test 2010-03-10 16:10:05 +0000 @@ -467,3 +467,19 @@ UPDATE t2, t1 SET t2.f1 = 2, t1.f1 = 9; ALTER TABLE t2 COMMENT = 'DEF'; DROP TABLE t1, t2; + +--echo # +--echo # Bug#50545: Single table UPDATE IGNORE crashes on join view in +--echo # sql_safe_updates mode. +--echo # +CREATE TABLE t1 ( a INT, KEY( a ) ); +INSERT INTO t1 VALUES (0), (1); +CREATE VIEW v1 AS SELECT t11.a, t12.a AS b FROM t1 t11, t1 t12; +SET SESSION sql_safe_updates = 1; + +--error ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE +UPDATE IGNORE v1 SET a = 1; + +SET SESSION sql_safe_updates = DEFAULT; +DROP TABLE t1; +DROP VIEW v1; === added file 'mysql-test/t/view_alias.test' --- a/mysql-test/t/view_alias.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/view_alias.test 2010-03-09 10:36:26 +0000 @@ -0,0 +1,92 @@ +--echo # +--echo # Bug#40277 SHOW CREATE VIEW returns invalid SQL +--echo # Bug#41999 SHOW CREATE VIEW returns invalid SQL if subquery is used in SELECT list +--echo # + +--echo # 65 characters exceed the maximum length of a column identifier. The system cannot derive the name from statement. +--echo # Constant with length = 65 . Expect to get the identifier 'Name_exp_1'. +let $after_select= '<--- 65 char including the arrows --->'; +--source include/view_alias.inc +--echo # Subquery with length = 65 . Expect to get the identifier 'Name_exp_1'. +--echo # Attention: Identifier for the column within the subquery will be not generated. +let $after_select= (SELECT '<--- 54 char including the arrows (+ 11 outside) -->'); +--source include/view_alias.inc +--echo # ----------------------------------------------------------------------------------------------------------------- +# +--echo # 64 characters are the maximum length of a column identifier. The system can derive the name from the statement. +let $after_select= '<--- 64 char including the arrows --->'; +--source include/view_alias.inc +let $after_select= (SELECT '<--- 53 char including the arrows (+ 11 outside) --->'); +--source include/view_alias.inc +--echo # ----------------------------------------------------------------------------------------------------------------- +# +--echo # Identifiers must not have trailing spaces. The system cannot derive the name from a constant with trailing space. +--echo # Generated identifiers have at their end the position within the select column list. +--echo # 'c2 ' -> 'Name_exp_1' , ' c4 ' -> 'Name_exp_2' +let $after_select= 'c1', 'c2 ', ' c3', ' c4 '; +--source include/view_alias.inc + +--echo # +--echo # Bug#40277 SHOW CREATE VIEW returns invalid SQL +--echo # + +--disable_warnings +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1,t2; +--enable_warnings + +--echo # Column name exceeds the maximum length. +CREATE VIEW v1 AS SELECT '0000000000 1111111111 2222222222 3333333333 4444444444 5555555555'; +let $query = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +DROP VIEW v1; +eval CREATE VIEW v1 AS $query; +DROP VIEW v1; + +--echo # Column names with leading trailing spaces. +CREATE VIEW v1 AS SELECT 'c1', 'c2 ', ' c3', ' c4 '; +let $query = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +DROP VIEW v1; +eval CREATE VIEW v1 AS $query; +DROP VIEW v1; + +--echo # Column name conflicts with a auto-generated one. +CREATE VIEW v1 AS SELECT 'c1', 'c2 ', ' c3', ' c4 ', 'Name_exp_2'; +let $query = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +DROP VIEW v1; +eval CREATE VIEW v1 AS $query; +DROP VIEW v1; + +--echo # Invalid conlumn name in subquery. +CREATE VIEW v1 AS SELECT (SELECT ' c1 '); +let $query = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +DROP VIEW v1; +eval CREATE VIEW v1 AS $query; +DROP VIEW v1; + +CREATE TABLE t1(a INT); +CREATE TABLE t2 LIKE t1; + +--echo # Test alias in subquery +CREATE VIEW v1 AS SELECT a FROM t1 WHERE EXISTS (SELECT 1 FROM t2 AS b WHERE b.a = 0); +let $query = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +DROP VIEW v1; +eval CREATE VIEW v1 AS $query; +DROP VIEW v1; + +--echo # Test column alias in subquery +CREATE VIEW v1 AS SELECT a FROM t1 WHERE EXISTS (SELECT a AS alias FROM t1 GROUP BY alias); +SHOW CREATE VIEW v1; +let $query = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +DROP VIEW v1; +eval CREATE VIEW v1 AS $query; +DROP VIEW v1; + +--echo # Alias as the expression column name. +CREATE VIEW v1 AS SELECT a FROM t1 WHERE EXISTS (SELECT ' a ' AS alias FROM t1 GROUP BY alias); +SHOW CREATE VIEW v1; +let $query = `SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'`; +DROP VIEW v1; +eval CREATE VIEW v1 AS $query; +DROP VIEW v1; + +DROP TABLE t1, t2; === modified file 'mysql-test/t/xa.test' --- a/mysql-test/t/xa.test 2009-10-28 15:39:08 +0000 +++ b/mysql-test/t/xa.test 2010-03-10 15:31:22 +0000 @@ -122,6 +122,22 @@ xa start 'a','c'; --connection default drop table t1; +--echo # +--echo # BUG#51342 - more xid crashing +--echo # +CREATE TABLE t1(a INT) ENGINE=InnoDB; +XA START 'x'; +SET SESSION autocommit=0; +INSERT INTO t1 VALUES(1); +--error ER_XAER_RMFAIL +SET SESSION autocommit=1; +SELECT @@autocommit; +INSERT INTO t1 VALUES(1); +XA END 'x'; +XA COMMIT 'x' ONE PHASE; +DROP TABLE t1; +SET SESSION autocommit=1; + --echo End of 5.0 tests # === modified file 'scripts/Makefile.am' --- a/scripts/Makefile.am 2010-02-26 13:06:31 +0000 +++ b/scripts/Makefile.am 2010-03-12 09:51:53 +0000 @@ -112,8 +112,7 @@ mysqlbug: ${top_builddir}/config.status mysql_fix_privilege_tables.sql: mysql_system_tables.sql \ mysql_system_tables_fix.sql @echo "Building $@"; - @cat $(srcdir)/mysql_system_tables.sql \ - $(srcdir)/mysql_system_tables_fix.sql > $@ + @cat mysql_system_tables.sql mysql_system_tables_fix.sql > $@ # # Build mysql_fix_privilege_tables_sql.c from @@ -126,7 +125,7 @@ mysql_fix_privilege_tables_sql.c: comp_s sleep 2 $(top_builddir)/scripts/comp_sql$(EXEEXT) \ mysql_fix_privilege_tables \ - $(top_builddir)/scripts/mysql_fix_privilege_tables.sql $@ + $(top_srcdir)/scripts/mysql_fix_privilege_tables.sql $@ SUFFIXES = .sh === modified file 'sql/item.cc' --- a/sql/item.cc 2010-03-07 16:40:59 +0000 +++ b/sql/item.cc 2010-03-12 09:51:53 +0000 @@ -4642,6 +4642,7 @@ void Item_field::cleanup() I.e. we can drop 'field'. */ field= result_field= 0; + item_equal= NULL; null_value= FALSE; DBUG_VOID_RETURN; } === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2010-02-23 14:06:06 +0000 +++ b/sql/log_event.cc 2010-03-12 09:51:53 +0000 @@ -9484,7 +9484,7 @@ Incident_log_event::write_data_body(IO_C they will always be printed for the first event. */ st_print_event_info::st_print_event_info() - :flags2_inited(0), sql_mode_inited(0), + :flags2_inited(0), sql_mode_inited(0), sql_mode(0), auto_increment_increment(0),auto_increment_offset(0), charset_inited(0), lc_time_names_number(~0), charset_database_number(ILLEGAL_CHARSET_INFO_NUMBER), === modified file 'sql/set_var.cc' --- a/sql/set_var.cc 2010-01-23 21:09:23 +0000 +++ b/sql/set_var.cc 2010-03-12 09:51:53 +0000 @@ -3217,6 +3217,13 @@ static bool set_option_autocommit(THD *t if ((org_options & OPTION_NOT_AUTOCOMMIT)) { /* We changed to auto_commit mode */ + if (thd->transaction.xid_state.xa_state != XA_NOTR) + { + thd->options= org_options; + my_error(ER_XAER_RMFAIL, MYF(0), + xa_state_names[thd->transaction.xid_state.xa_state]); + return 1; + } thd->options&= ~(ulonglong) (OPTION_BEGIN | OPTION_KEEP_LOG); thd->transaction.all.modified_non_trans_table= FALSE; thd->server_status|= SERVER_STATUS_AUTOCOMMIT; === modified file 'sql/share/Makefile.am' --- a/sql/share/Makefile.am 2010-02-26 13:06:31 +0000 +++ b/sql/share/Makefile.am 2010-03-12 09:51:53 +0000 @@ -22,7 +22,7 @@ dist-hook: test -d $(distdir)/$$dir || mkdir $(distdir)/$$dir; \ $(INSTALL_DATA) $(srcdir)/$$dir/*.* $(distdir)/$$dir; \ done; \ - sleep 1 ; touch $(builddir)/*/errmsg.sys + sleep 1 ; touch $(srcdir)/*/errmsg.sys $(INSTALL_DATA) $(srcdir)/charsets/README $(distdir)/charsets $(INSTALL_DATA) $(srcdir)/charsets/Index.xml $(distdir)/charsets @@ -39,11 +39,11 @@ install-data-local: for lang in @AVAILABLE_LANGUAGES@; \ do \ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/$$lang; \ - $(INSTALL_DATA) $(builddir)/$$lang/errmsg.sys \ + $(INSTALL_DATA) $(srcdir)/$$lang/errmsg.sys \ $(DESTDIR)$(pkgdatadir)/$$lang/errmsg.sys; \ done $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/charsets - $(INSTALL_DATA) $(builddir)/errmsg-utf8.txt \ + $(INSTALL_DATA) $(srcdir)/errmsg-utf8.txt \ $(DESTDIR)$(pkgdatadir)/errmsg-utf8.txt; \ $(INSTALL_DATA) $(srcdir)/charsets/README $(DESTDIR)$(pkgdatadir)/charsets/README $(INSTALL_DATA) $(srcdir)/charsets/*.xml $(DESTDIR)$(pkgdatadir)/charsets @@ -53,7 +53,7 @@ uninstall-local: @RM@ -f -r $(DESTDIR)$(pkgdatadir) distclean-local: - @RM@ -f $(builddir)/*/errmsg.sys + @RM@ -f */errmsg.sys # Do nothing link_sources: === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2010-03-01 09:02:15 +0000 +++ b/sql/sql_base.cc 2010-03-12 09:51:53 +0000 @@ -1523,6 +1523,7 @@ void close_temporary_tables(THD *thd) { if (is_user_table(table)) { + bool save_thread_specific_used= thd->thread_specific_used; my_thread_id save_pseudo_thread_id= thd->variables.pseudo_thread_id; /* Set pseudo_thread_id to be that of the processed table */ thd->variables.pseudo_thread_id= tmpkeyval(thd, table); @@ -1552,6 +1553,7 @@ void close_temporary_tables(THD *thd) thd->clear_error(); CHARSET_INFO *cs_save= thd->variables.character_set_client; thd->variables.character_set_client= system_charset_info; + thd->thread_specific_used= TRUE; Query_log_event qinfo(thd, s_query.ptr(), s_query.length() - 1 /* to remove trailing ',' */, 0, FALSE, 0); @@ -1564,6 +1566,7 @@ void close_temporary_tables(THD *thd) "Failed to write the DROP statement for temporary tables to binary log"); } thd->variables.pseudo_thread_id= save_pseudo_thread_id; + thd->thread_specific_used= save_thread_specific_used; } else { === modified file 'sql/sql_delete.cc' --- a/sql/sql_delete.cc 2010-01-30 18:47:11 +0000 +++ b/sql/sql_delete.cc 2010-03-12 09:51:53 +0000 @@ -50,6 +50,7 @@ bool mysql_delete(THD *thd, TABLE_LIST * SELECT_LEX *select_lex= &thd->lex->select_lex; THD::killed_state killed_status= THD::NOT_KILLED; DBUG_ENTER("mysql_delete"); + bool save_binlog_row_based; THD::enum_binlog_query_type query_type= thd->lex->sql_command == SQLCOM_TRUNCATE ? @@ -147,12 +148,14 @@ bool mysql_delete(THD *thd, TABLE_LIST * query_type= THD::STMT_QUERY_TYPE; error= -1; // ok deleted= maybe_deleted; + save_binlog_row_based= thd->current_stmt_binlog_row_based; goto cleanup; } if (error != HA_ERR_WRONG_COMMAND) { table->file->print_error(error,MYF(0)); error=0; + save_binlog_row_based= thd->current_stmt_binlog_row_based; goto cleanup; } /* Handler didn't support fast delete; Delete rows one by one */ @@ -293,6 +296,11 @@ bool mysql_delete(THD *thd, TABLE_LIST * table->mark_columns_needed_for_delete(); + save_binlog_row_based= thd->current_stmt_binlog_row_based; + if (thd->lex->sql_command == SQLCOM_TRUNCATE && + thd->current_stmt_binlog_row_based) + thd->clear_current_stmt_binlog_row_based(); + while (!(error=info.read_record(&info)) && !thd->killed && ! thd->is_error()) { @@ -390,7 +398,10 @@ cleanup: /* See similar binlogging code in sql_update.cc, for comments */ if ((error < 0) || thd->transaction.stmt.modified_non_trans_table) { - if (mysql_bin_log.is_open()) + if (mysql_bin_log.is_open() && + !(thd->lex->sql_command == SQLCOM_TRUNCATE && + thd->current_stmt_binlog_row_based && + find_temporary_table(thd, table_list))) { bool const is_trans= thd->lex->sql_command == SQLCOM_TRUNCATE ? @@ -424,6 +435,7 @@ cleanup: if (thd->transaction.stmt.modified_non_trans_table) thd->transaction.all.modified_non_trans_table= TRUE; } + thd->current_stmt_binlog_row_based= save_binlog_row_based; DBUG_ASSERT(transactional_table || !deleted || thd->transaction.stmt.modified_non_trans_table); free_underlaid_joins(thd, select_lex); if (error < 0 || @@ -1059,15 +1071,13 @@ bool multi_delete::send_eof() static bool mysql_truncate_by_delete(THD *thd, TABLE_LIST *table_list) { - bool error, save_binlog_row_based= thd->current_stmt_binlog_row_based; + bool error; DBUG_ENTER("mysql_truncate_by_delete"); table_list->lock_type= TL_WRITE; mysql_init_select(thd->lex); - thd->clear_current_stmt_binlog_row_based(); error= mysql_delete(thd, table_list, NULL, NULL, HA_POS_ERROR, LL(0), TRUE); ha_autocommit_or_rollback(thd, error); end_trans(thd, error ? ROLLBACK : COMMIT); - thd->current_stmt_binlog_row_based= save_binlog_row_based; DBUG_RETURN(error); } === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-03-07 16:40:59 +0000 +++ b/sql/sql_select.cc 2010-03-12 09:51:53 +0000 @@ -17107,7 +17107,17 @@ void st_select_lex::print(THD *thd, Stri first= 0; else str->append(','); - item->print_item_w_name(str, query_type); + + if (master_unit()->item && item->is_autogenerated_name) + { + /* + Do not print auto-generated aliases in subqueries. It has no purpose + in a view definition or other contexts where the query is printed. + */ + item->print(str, query_type); + } + else + item->print_item_w_name(str, query_type); } /* === modified file 'sql/sql_view.cc' --- a/sql/sql_view.cc 2010-02-21 21:33:11 +0000 +++ b/sql/sql_view.cc 2010-03-12 09:51:53 +0000 @@ -155,6 +155,35 @@ err: DBUG_RETURN(TRUE); } + +/** + Check if auto generated column names are conforming and + possibly generate a conforming name for them if not. + + @param item_list List of Items which should be checked +*/ + +static void make_valid_column_names(List &item_list) +{ + Item *item; + uint name_len; + List_iterator_fast it(item_list); + char buff[NAME_LEN]; + DBUG_ENTER("make_valid_column_names"); + + for (uint column_no= 1; (item= it++); column_no++) + { + if (!item->is_autogenerated_name || !check_column_name(item->name)) + continue; + name_len= my_snprintf(buff, NAME_LEN, "Name_exp_%u", column_no); + item->orig_name= item->name; + item->set_name(buff, name_len, system_charset_info); + } + + DBUG_VOID_RETURN; +} + + /* Fill defined view parts @@ -548,6 +577,9 @@ bool mysql_create_view(THD *thd, TABLE_L } } + /* Check if the auto generated column names are conforming. */ + make_valid_column_names(select_lex->item_list); + if (check_duplicate_names(select_lex->item_list, 1)) { res= TRUE; === modified file 'storage/myisam/ha_myisam.cc' --- a/storage/myisam/ha_myisam.cc 2009-11-05 09:23:55 +0000 +++ b/storage/myisam/ha_myisam.cc 2010-03-12 09:51:53 +0000 @@ -1449,9 +1449,17 @@ int ha_myisam::enable_indexes(uint mode) { sql_print_warning("Warning: Enabling keys got errno %d on %s.%s, retrying", my_errno, param.db_name, param.table_name); - /* Repairing by sort failed. Now try standard repair method. */ - param.testflag&= ~(T_REP_BY_SORT | T_QUICK); - error= (repair(thd,param,0) != HA_ADMIN_OK); + /* + Repairing by sort failed. Now try standard repair method. + Still we want to fix only index file. If data file corruption + was detected (T_RETRY_WITHOUT_QUICK), we shouldn't do much here. + Let implicit repair do this job. + */ + if (!(param.testflag & T_RETRY_WITHOUT_QUICK)) + { + param.testflag&= ~T_REP_BY_SORT; + error= (repair(thd,param,0) != HA_ADMIN_OK); + } /* If the standard repair succeeded, clear all error messages which might have been set by the first repair. They can still be seen === modified file 'storage/myisam/rt_index.c' --- a/storage/myisam/rt_index.c 2009-02-13 16:41:47 +0000 +++ b/storage/myisam/rt_index.c 2010-03-08 10:42:01 +0000 @@ -404,10 +404,16 @@ int rtree_get_first(MI_INFO *info, uint int rtree_get_next(MI_INFO *info, uint keynr, uint key_length) { - my_off_t root; + my_off_t root= info->s->state.key_root[keynr]; MI_KEYDEF *keyinfo = info->s->keyinfo + keynr; - if (!info->buff_used) + if (root == HA_OFFSET_ERROR) + { + my_errno= HA_ERR_END_OF_FILE; + return -1; + } + + if (!info->buff_used && !info->page_changed) { uint k_len = keyinfo->keylength - info->s->base.rec_reflength; /* rt_PAGE_NEXT_KEY(info->int_keypos) */ @@ -428,16 +434,8 @@ int rtree_get_next(MI_INFO *info, uint k return 0; } - else - { - if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) - { - my_errno= HA_ERR_END_OF_FILE; - return -1; - } - - return rtree_get_req(info, keyinfo, key_length, root, 0); - } + + return rtree_get_req(info, keyinfo, key_length, root, 0); } === modified file 'storage/myisammrg/ha_myisammrg.cc' --- a/storage/myisammrg/ha_myisammrg.cc 2010-02-03 14:01:48 +0000 +++ b/storage/myisammrg/ha_myisammrg.cc 2010-03-12 09:51:53 +0000 @@ -215,36 +215,14 @@ const char *ha_myisammrg::index_type(uin static int myisammrg_parent_open_callback(void *callback_param, const char *filename) { - ha_myisammrg *ha_myrg; - TABLE *parent; + ha_myisammrg *ha_myrg= (ha_myisammrg*) callback_param; + TABLE *parent= ha_myrg->table_ptr(); TABLE_LIST *child_l; - const char *db; - const char *table_name; size_t dirlen; char dir_path[FN_REFLEN]; + char name_buf[NAME_LEN]; DBUG_ENTER("myisammrg_parent_open_callback"); - /* Extract child table name and database name from filename. */ - dirlen= dirname_length(filename); - if (dirlen >= FN_REFLEN) - { - /* purecov: begin inspected */ - DBUG_PRINT("error", ("name too long: '%.64s'", filename)); - my_errno= ENAMETOOLONG; - DBUG_RETURN(1); - /* purecov: end */ - } - table_name= filename + dirlen; - dirlen--; /* Strip off trailing '/'. */ - memcpy(dir_path, filename, dirlen); - dir_path[dirlen]= '\0'; - db= base_name(dir_path); - dirlen-= db - dir_path; /* This is now the length of 'db'. */ - DBUG_PRINT("myrg", ("open: '%s'.'%s'", db, table_name)); - - ha_myrg= (ha_myisammrg*) callback_param; - parent= ha_myrg->table_ptr(); - /* Get a TABLE_LIST object. */ if (!(child_l= (TABLE_LIST*) alloc_root(&parent->mem_root, sizeof(TABLE_LIST)))) @@ -256,13 +234,69 @@ static int myisammrg_parent_open_callbac } bzero((char*) child_l, sizeof(TABLE_LIST)); - /* Set database (schema) name. */ - child_l->db_length= dirlen; - child_l->db= strmake_root(&parent->mem_root, db, dirlen); - /* Set table name. */ - child_l->table_name_length= strlen(table_name); - child_l->table_name= strmake_root(&parent->mem_root, table_name, - child_l->table_name_length); + /* + Depending on MySQL version, filename may be encoded by table name to + file name encoding or not. Always encoded if parent table is created + by 5.1.46+. Encoded if parent is created by 5.1.6+ and child table is + in different database. + */ + if (!has_path(filename)) + { + /* Child is in the same database as parent. */ + child_l->db_length= parent->s->db.length; + child_l->db= strmake_root(&parent->mem_root, parent->s->db.str, + child_l->db_length); + /* Child table name is encoded in parent dot-MRG starting with 5.1.46. */ + if (parent->s->mysql_version >= 50146) + { + child_l->table_name_length= filename_to_tablename(filename, name_buf, + sizeof(name_buf)); + child_l->table_name= strmake_root(&parent->mem_root, name_buf, + child_l->table_name_length); + } + else + { + child_l->table_name_length= strlen(filename); + child_l->table_name= strmake_root(&parent->mem_root, filename, + child_l->table_name_length); + } + } + else + { + DBUG_ASSERT(strlen(filename) < sizeof(dir_path)); + fn_format(dir_path, filename, "", "", 0); + /* Extract child table name and database name from filename. */ + dirlen= dirname_length(dir_path); + /* Child db/table name is encoded in parent dot-MRG starting with 5.1.6. */ + if (parent->s->mysql_version >= 50106) + { + child_l->table_name_length= filename_to_tablename(dir_path + dirlen, + name_buf, + sizeof(name_buf)); + child_l->table_name= strmake_root(&parent->mem_root, name_buf, + child_l->table_name_length); + dir_path[dirlen - 1]= 0; + dirlen= dirname_length(dir_path); + child_l->db_length= filename_to_tablename(dir_path + dirlen, name_buf, + sizeof(name_buf)); + child_l->db= strmake_root(&parent->mem_root, name_buf, child_l->db_length); + } + else + { + child_l->table_name_length= strlen(dir_path + dirlen); + child_l->table_name= strmake_root(&parent->mem_root, dir_path + dirlen, + child_l->table_name_length); + dir_path[dirlen - 1]= 0; + dirlen= dirname_length(dir_path); + child_l->db_length= strlen(dir_path + dirlen); + child_l->db= strmake_root(&parent->mem_root, dir_path + dirlen, + child_l->db_length); + } + } + + DBUG_PRINT("myrg", ("open: '%.*s'.'%.*s'", child_l->db_length, child_l->db, + child_l->table_name_length, child_l->table_name)); + /* Convert to lowercase if required. */ if (lower_case_table_names && child_l->table_name_length) child_l->table_name_length= my_casedn_str(files_charset_info, @@ -1155,7 +1189,7 @@ int ha_myisammrg::create(const char *nam /* Create child path names. */ for (pos= table_names; tables; tables= tables->next_local) { - const char *table_name; + const char *table_name= buff; /* Construct the path to the MyISAM table. Try to meet two conditions: @@ -1181,10 +1215,12 @@ int ha_myisammrg::create(const char *nam as the MyISAM tables are from the same database as the MERGE table. */ if ((dirname_length(buff) == dirlgt) && ! memcmp(buff, name, dirlgt)) - table_name= tables->table_name; - else - if (! (table_name= thd->strmake(buff, length))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); /* purecov: inspected */ + { + table_name+= dirlgt; + length-= dirlgt; + } + if (!(table_name= thd->strmake(table_name, length))) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); /* purecov: inspected */ *pos++= table_name; } @@ -1205,7 +1241,7 @@ void ha_myisammrg::append_create_info(St const char *current_db; size_t db_length; THD *thd= current_thd; - MYRG_TABLE *open_table, *first; + TABLE_LIST *open_table, *first; if (file->merge_insert_method != MERGE_INSERT_DISABLED) { @@ -1223,14 +1259,11 @@ void ha_myisammrg::append_create_info(St current_db= table->s->db.str; db_length= table->s->db.length; - for (first=open_table=file->open_tables ; - open_table != file->end_table ; - open_table++) + for (first= open_table= table->child_l;; + open_table= open_table->next_global) { - LEX_STRING db, name; - LINT_INIT(db.str); + LEX_STRING db= { open_table->db, open_table->db_length }; - split_file_name(open_table->table->filename, &db, &name); if (open_table != first) packet->append(','); /* Report database for mapped table if it isn't in current database */ @@ -1241,7 +1274,10 @@ void ha_myisammrg::append_create_info(St append_identifier(thd, packet, db.str, db.length); packet->append('.'); } - append_identifier(thd, packet, name.str, name.length); + append_identifier(thd, packet, open_table->table_name, + open_table->table_name_length); + if (&open_table->next_global == table->child_last_l) + break; } packet->append(')'); } === modified file 'storage/myisammrg/myrg_open.c' --- a/storage/myisammrg/myrg_open.c 2009-09-23 13:21:29 +0000 +++ b/storage/myisammrg/myrg_open.c 2010-03-03 10:49:03 +0000 @@ -311,14 +311,6 @@ MYRG_INFO *myrg_parent_open(const char * if (!child_name_buff[0] || (child_name_buff[0] == '#')) continue; - if (!has_path(child_name_buff)) - { - VOID(strmake(parent_name_buff + dir_length, child_name_buff, - sizeof(parent_name_buff) - 1 - dir_length)); - VOID(cleanup_dirname(child_name_buff, parent_name_buff)); - } - else - fn_format(child_name_buff, child_name_buff, "", "", 0); DBUG_PRINT("info", ("child: '%s'", child_name_buff)); /* Callback registers child with handler table. */ === modified file 'storage/ndb/src/common/util/Makefile.am' --- a/storage/ndb/src/common/util/Makefile.am 2010-02-12 16:28:35 +0000 +++ b/storage/ndb/src/common/util/Makefile.am 2010-03-09 15:51:31 +0000 @@ -37,7 +37,7 @@ testBitmask_LDFLAGS = @ndb_bin_am_ldflag testBitmask.cpp : Bitmask.cpp rm -f testBitmask.cpp - @LN_CP_F@ $(srcdir)/Bitmask.cpp testBitmask.cpp + @LN_CP_F@ Bitmask.cpp testBitmask.cpp testBitmask.o: $(testBitmask_SOURCES) $(CXXCOMPILE) -c $(INCLUDES) -D__TEST_BITMASK__ $< --Boundary_(ID_0GykfYKbhRR/Z2NxO1AJfg) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/alexey.kopytov@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/alexey.kopytov@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexey.kopytov@stripped # target_branch: file:///data/src/bzr/mysql-trunk-merge/ # testament_sha1: df1bc34d4eff0fdd6648714bb2e664576aa37f05 # timestamp: 2010-03-12 12:53:01 +0300 # source_branch: file:///data/src/bzr/bugteam/mysql-5.1-bugteam/ # base_revision_id: alexey.kopytov@stripped\ # cri8typa32cypq0l # # Begin bundle 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 rME0Cif0X/8wA2/s3zv/8XckU4UJAapyXrA= --Boundary_(ID_0GykfYKbhRR/Z2NxO1AJfg)--