diff --git a/Docs/manual.texi b/Docs/manual.texi index a4e40f865d8..b01a8a95b04 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -1,8 +1,20 @@ \input texinfo @c -*-texinfo-*- @c Copyright 1997-2001 TcX AB, Detron HB and MySQL Finland AB @c +@c This manual is NOT distributed under a GPL style license. +@c Use of the manual is subject to the following terms: +@c - Conversion to other formats is allowed, but the actual +@c content may not be altered or edited in any way. +@c - You may create a printed copy for your own personal use. +@c - For all other uses, such as selling printed copies or +@c using (parts of) the manual in another publication, +@c prior written agreement from MySQL AB is required. +@c +@c Please e-mail docs@mysql.com for more information or if +@c you are interested in doing a translation. +@c @c ********************************************************* -@c Note that @node names are used on our website. +@c Note that @node names are used on our web site. @c So do not change node names without checking @c Makefile.am and SitePages first. @c ********************************************************* @@ -113,8 +125,6 @@ distribution for that version. * Clients:: MySQL client tools and APIs * Extending MySQL:: Extending MySQL * Problems:: Problems -* Users:: MySQL Users -* MySQL Testimonials:: MySQL Testimonials * Contrib:: Contributed programs * Credits:: Contributors to MySQL * News:: MySQL change history @@ -147,7 +157,7 @@ You can also purchase commercial MySQL licenses from @code{MySQL AB} if you do not wish to be bound by the terms of the GPL. @xref{Licensing and Support}. -The MySQL website (@uref{http://www.mysql.com/}) provides the latest +The MySQL web site (@uref{http://www.mysql.com/}) provides the latest information about MySQL. The following list describes some useful sections of the manual: @@ -222,7 +232,6 @@ security bug in MySQL, you should send an e-mail to * MySQL 4.0 In A Nutshell:: MySQL 4.0 In A Nutshell * MySQL Information Sources:: MySQL Information Sources * Compatibility:: How Standards-compatible Is MySQL? -* Comparisons:: How MySQL Compares to Other Databases * TODO:: MySQL and the future (The TODO) @end menu @@ -264,7 +273,7 @@ Widenius, Jeremy Cole, Arjen Lentz, and Paul DuBois. For other contributors, see @ref{Credits}. The copyright (2001) to this manual is owned by the Swedish company -@code{MySQL AB}. @xref{What is MySQL AB}. +@code{MySQL AB}. @xref{Copyright}. @menu * Manual conventions:: Conventions Used in This Manual @@ -406,7 +415,7 @@ and provided by @code{MySQL AB}. MySQL AB is a commercial company that builds its business providing services around the MySQL database. @xref{What is MySQL AB}. -The MySQL website (@uref{http://www.mysql.com/}) +The MySQL web site (@uref{http://www.mysql.com/}) provides the latest information about MySQL and MySQL AB. @table @asis @@ -446,7 +455,7 @@ feel uncomfortable with the GPL or need to embed MySQL into a commercial application you can buy a commercially licensed version from us. @xref{MySQL server licenses}. -@cindex open source, defined +@cindex Open Source, defined @cindex General Public License @item Why use MySQL? @@ -758,7 +767,8 @@ handler that checks if the table was closed properly on open and executes an automatic check/repair of the table if it wasn't. @item Bulk-insert -- Alpha -New feature in MyISAM in MySQL 4.0 for faster insert of many rows. +New feature in @code{MyISAM} tables in MySQL 4.0 for faster insert +of many rows. @item Locking -- Gamma This is very system-dependent. On some systems there are big problems @@ -785,8 +795,8 @@ there is almost always a new release. @cindex files, size limits MySQL Version 3.22 has a 4G limit on table size. With the new -@code{MyISAM} in MySQL Version 3.23 the maximum table size is -pushed up to 8 million terabytes (2 ^ 63 bytes). +@code{MyISAM} table type in MySQL Version 3.23, the maximum table size +is pushed up to 8 million terabytes (2 ^ 63 bytes). Note, however, that operating systems have their own file size limits. Here are some examples: @@ -990,7 +1000,7 @@ Are a virtual company, networking with others. Work against software patents. @end itemize -The MySQL website (@uref{http://www.mysql.com/}) +The MySQL web site (@uref{http://www.mysql.com/}) provides the latest information about MySQL and MySQL AB. @@ -1099,7 +1109,7 @@ MySQL, but extends into programming and scripting languages such as PHP, Perl and more. If you are interested in our consulting services or want to become a -consulting partner, please visit the consulting section of our website +consulting partner, please visit the consulting section of our web site at @uref{http://www.mysql.com/consulting/}. If you have restricted access to the Internet, please contact our consulting staff at @email{consulting@@mysql.com}. @@ -1132,7 +1142,7 @@ crash recovery, multiversioning, foreign key support, and more. MySQL AB has a worldwide partner program that covers training courses, support, consulting, solutions, publications plus reselling and distributing MySQL and related products. Partners get visibility on the -@uref{http://www.mysql.com/} website and the right to use special +@uref{http://www.mysql.com/} web site and the right to use special versions of the MySQL trademarks to identify their products and promote their business. @@ -1147,7 +1157,7 @@ founders have built over the years. @node Business Services Advertising, , Business Services Partnering, MySQL AB business model and services @subsubsection Advertising -The MySQL website (@uref{http://www.mysql.com/}) is immensely popular among +The MySQL web site (@uref{http://www.mysql.com/}) is immensely popular among developers and users. In October 2001, we served 10 million page views. Our visitors represent a group that makes purchase decisions and recommendations for both software and hardware. Twelve per cent of our @@ -1156,7 +1166,7 @@ involved in purchase decisions at all. More than 65% have made one or more online business purchase within the last half-year, and 70% plan to make one in the next months. -If you are interested in placing banner ads on our website +If you are interested in placing banner ads on our web site @uref{http://www.mysql.com/}, please send an email to @email{advertising@@mysql.com}. @@ -1171,7 +1181,7 @@ If you are interested in placing banner ads on our website @cindex employment with MySQL @cindex jobs at MySQL -The MySQL website (@uref{http://www.mysql.com/}) +The MySQL web site (@uref{http://www.mysql.com/}) provides the latest information about MySQL and MySQL AB. For press service and inquiries not covered in our News releases @@ -1207,7 +1217,7 @@ Commercial licenses may be purchased online at @uref{https://order.mysql.com/}. There you will also find information on how to fax your purchase order to MySQL AB. If you have questions regarding licensing or you want a quote for a high-volume license -deal, please fill in the contact form on our website +deal, please fill in the contact form on our web site (@uref{http://www.mysql.com/}) or send an email to @email{licensing@@mysql.com} (for licensing questions) or to @email{sales@@mysql.com} (for sales inquiries). @@ -1218,7 +1228,7 @@ MySQL AB, please send e-mail to @email{partner@@mysql.com}. @xref{Business Services Partnering}. If you are interested in placing a banner advertisement on the MySQL -website (@uref{http://www.mysql.com/}), please send e-mail to +web site (@uref{http://www.mysql.com/}), please send e-mail to @email{advertising@@mysql.com}. @xref{Business Services Advertising}. @@ -1246,15 +1256,17 @@ security bug in MySQL, you should send an e-mail to If you have benchmark results that we can publish, please contact us at @email{benchmarks@@mysql.com}. -@xref{Comparisons}. If you have any suggestions concerning additions or corrections to this manual, please send them to the manual team at @email{docs@@mysql.com}. For questions or comments about the workings or content of the -MySQL website (@uref{http://www.mysql.com/}), +MySQL web site (@uref{http://www.mysql.com/}), please send e-mail to @email{webmaster@@mysql.com}. +Questions about the MySQL Portals (@uref{http://www.mysql.com/portal/}) +may be sent to @email{portals@@mysql.com}. + MySQL AB has a privacy policy, which can be read at @uref{http://www.mysql.com/company/privacy.html}. For any queries regarding this policy, please e-mail @@ -1283,7 +1295,7 @@ This section describes MySQL support and licensing arrangements: @subsection Support Offered by MySQL AB @cindex support, types -@cindex types, of support +@cindex types of support @cindex commercial support, types @cindex costs, support @cindex licensing costs @@ -1361,7 +1373,7 @@ strict license See the documentation of the specific version for information. @item -The manual is not distributed under a GPL/LGPL license. +The manual is @emph{not} distributed under a GPL style license. Use of the manual is subject to the following terms: @itemize @bullet @item @@ -1390,6 +1402,7 @@ Also see @ref{MySQL AB Logos and Trademarks}. @cindex technical support, licensing @cindex support, licensing @cindex General Public License, MySQL +@cindex GPL, MySQL @cindex licensing, examples @cindex selling products @cindex products, selling @@ -1460,7 +1473,7 @@ no artificial limit on the number of clients that connect to the server in any way. To purchase commercial licenses and support, please visit the order section -of our website at @uref{https://order.mysql.com/}. If you have restricted +of our web site at @uref{https://order.mysql.com/}. If you have restricted access to the Internet, please contact our sales staff at @email{sales@@mysql.com}. @@ -1518,7 +1531,7 @@ that it is patched correctly. @item @cindex web server, running -@cindex running, a web server +@cindex running a web server When you use MySQL in conjunction with a Web server, you do not need a commercial license. This is true even if you run a commercial Web server that uses MySQL, because you are not selling an embedded MySQL @@ -1543,8 +1556,11 @@ us to provide free support, too.) @node MySQL AB Logos and Trademarks, , MySQL server licenses, Licensing and Support @subsection MySQL AB Logos and Trademarks +@cindex logos +@cindex trademarks + Many users of the MySQL database want to display the MySQL AB dolphin logo -on their websites, on their books or boxed products. We welcome and +on their web sites, on their books or boxed products. We welcome and encourage this although it should be noted that the word @code{MySQL} and the MySQL dolphin logo are trademarks of MySQL AB and may only be used as stated in our trademark policy at @@ -1580,12 +1596,12 @@ and by those having a written agreement allowing them to do so. @c FIX: pictures: powered by, works with, included - logos We have designed a set of special @emph{Conditional Use} logos that may be -downloaded from our website at +downloaded from our web site at @uref{http://www.mysql.com/downloads/logos.html} -and used on third party websites without written permission from MySQL AB. +and used on third party web sites without written permission from MySQL AB. The use of these logos is not entirely unrestricted but as the name implies subject to our trademark policy that is also available on our -website. You should read through the trademark policy if you plan to use +web site. You should read through the trademark policy if you plan to use them. The requirements are basically: @itemize @bullet @@ -1604,7 +1620,7 @@ value of MySQL AB trademarks. We reserve the right to revoke the right to use the MySQL AB trademark. @item -If you use the trademark on a website, make it clickable, leading directly +If you use the trademark on a web site, make it clickable, leading directly to @uref{http://www.mysql.com/}. @item @@ -1632,11 +1648,11 @@ using MySQL logos: @itemize @bullet @item -When displaying any MySQL AB logo anywhere except on your website. +When displaying any MySQL AB logo anywhere except on your web site. @item When displaying any MySQL AB logo except the @emph{Conditional Use} logos -above on websites or elsewhere. +above on web sites or elsewhere. @end itemize Out of legal and commercial reasons we have to monitor the use of MySQL @@ -1860,28 +1876,92 @@ checklist of very demanding buyers. @node MySQL Information Sources, Compatibility, MySQL 4.0 In A Nutshell, Introduction @section MySQL Information Sources -@cindex manuals, about MySQL -@cindex books, about MySQL - @menu +* Portals:: MySQL Portals * Questions:: MySQL Mailing Lists -* MySQL-Books:: Books About MySQL -* General-SQL:: General SQL Information and Tutorials -* Useful Links:: Useful MySQL-related Links @end menu -@node Questions, MySQL-Books, MySQL Information Sources, MySQL Information Sources +@node Portals, Questions, MySQL Information Sources, MySQL Information Sources +@subsection MySQL Portals + +@cindex MySQL Portals +@cindex manuals, about MySQL +@cindex books, about MySQL +@cindex MySQL Testimonials +@cindex users, of MySQL +@cindex news sites +@cindex search engines, web +@cindex web search engines +@cindex online magazines +@cindex magazines, online +@cindex web sites +@cindex services +@cindex PHP, web sites +@cindex consultants, list of +@cindex web pages, miscellaneous +@cindex @code{Contrib} directory +@cindex URLs to MySQL information +@cindex MySQL related information URLs + +The MySQL Portals (@uref{http://www.mysql.com/portal/}) on our +web site feature a diverse range of MySQL related information and +links, designed to make it easy to find the things your need. + +You may register as a user, which will allow you to comment and +rate any items in the portals as well as submit your own +contributions. By registering you may also choose to receive news +letters from categories that you select. + +Some of the current MySQL Portal categories: + +@itemize @bullet +@item Books +From here you can find any MySQL or computer related books, +comment on, rate, or buy them. +While this manual (particularly the online version) is still +the right place for up to date technical information, its +primary goal is to contain everything there is to know about +MySQL. It's sometimes nice to have a bound book to read in +bed or while you travel. +By purchasing a book through the hyperlinks provided, you +will contribute to the development of MySQL. + +@item Development +This portal has links to sites that are using MySQL for various +purposes, with a description of each site. This information can +give you an idea of who uses MySQL and how MySQL can fulfill +their requirements. +Do let us know about @emph{your} site or success story too! + +@item Software +Here you can find and download a multitude of applications and +wrappers that make use of MySQL. + +@item Distributions +From here you can find the various Linux distributions and other +software packages that contain MySQL. + +@item Consultants +Here you can find information about MySQL Consultants. + +@item Partners +Here you can find all MySQL Partners. +@end itemize + + +@node Questions, , Portals, MySQL Information Sources @subsection MySQL Mailing Lists @cindex reporting, errors +@cindex errors, reporting @cindex MySQL mailing lists @menu -* Mailing-list:: The MySQL mailing lists -* Asking questions:: Asking questions or reporting bugs -* Bug reports:: How to report bugs or problems -* Answering questions:: Guidelines for answering questions on the mailing list +* Mailing-list:: The MySQL Mailing Lists +* Asking questions:: Asking Questions or Reporting Bugs +* Bug reports:: How to Report Bugs or Problems +* Answering questions:: Guidelines for Answering Questions on the Mailing List @end menu This section introduces you to the MySQL mailing lists, and gives @@ -1917,7 +1997,7 @@ address replaced by a @samp{=}. For example, to subscribe Mail to @email{mysql-subscribe@@lists.mysql.com} or @email{mysql-unsubscribe@@lists.mysql.com} is handled automatically by the ezmlm mailing list processor. Information about ezmlm is available at -the ezmlm website (@uref{http://www.ezmlm.org/}). +the ezmlm web site (@uref{http://www.ezmlm.org/}). To post a message to the list itself, send your message to @code{mysql@@lists.mysql.com}. However, please @emph{do not} send mail about @@ -2041,7 +2121,7 @@ Email @code{subscribe mysql your@@e-mail.address} to this list. @cindex net etiquette @cindex mailing lists, archive location -@cindex searching, MySQL webpages +@cindex searching, MySQL web pages Before posting a bug report or question, please do the following: @@ -2049,7 +2129,7 @@ Before posting a bug report or question, please do the following: @item Start by searching the MySQL online manual at: @* -@uref{http://www.mysql.com/documentation/manual.php} +@uref{http://www.mysql.com/doc/} @* We try to keep the manual up to date by updating it frequently with solutions to newly found problems! @@ -2057,7 +2137,7 @@ solutions to newly found problems! @item Search the MySQL mailing list archives: @* -@uref{http://www.mysql.com/documentation/} +@uref{http://lists.mysql.com/} @* @item You can also use @uref{http://www.mysql.com/search.html} to search all the @@ -2328,7 +2408,7 @@ If you get a @code{parse error}, please check your syntax closely! If you can't find something wrong with it, it's extremely likely that your current version of MySQL doesn't support the query you are using. If you are using the current version and the manual at -@uref{http://www.mysql.com/documentation/manual.php} doesn't cover the +@uref{http://www.mysql.com/doc/} doesn't cover the syntax you are using, MySQL doesn't support your query. In this case, your only options are to implement the syntax yourself or e-mail @email{mysql-licensing@@mysql.com} and ask for an offer to implement it! @@ -2383,7 +2463,7 @@ responses you received that helped you solve your problem! @node Answering questions, , Bug reports, Questions -@subsubsection Guidelines for Answering Question on the Mailing List +@subsubsection Guidelines for Answering Questions on the Mailing List @cindex net etiquette @cindex questions, answering @@ -2403,889 +2483,7 @@ Please don't post mail messages from your browser with HTML mode turned on! Many users don't read mail with a browser! -@node MySQL-Books, General-SQL, Questions, MySQL Information Sources -@subsection Books About MySQL - -For the latest book information, with user comments, please visit -@uref{http://www.mysql.com/portal/books/html/}. - -While this manual is still the right place for up to date technical -information, its primary goal is to contain everything there is to know -about MySQL. It is sometimes nice to have a bound book to read -in bed or while you travel. Here is a list of books about MySQL and -related subjects (in English). - -By purchasing a book through these hyperlinks provided herein, you are -contributing to the development of MySQL. - -@emph{MySQL} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0735709211&bfmtype=book} (Barnes and Noble) -@item Publisher @tab New Riders -@item Author @tab Paul DuBois -@item Pub Date @tab 1st Edition December 1999 -@item ISBN @tab 0735709211 -@item Pages @tab 800 -@item Price @tab $49.99 US -@item Downloadable examples @tab - @uref{http://www.kitebird.com/mysql-book/} (@code{samp_db} distribution) -@item Errata @tab -@uref{http://www.kitebird.com/mysql-book/errata.html} -@end multitable - -Foreword by Michael ``Monty'' Widenius, MySQL Moderator. -@* - -In @emph{MySQL}, Paul DuBois provides you with a comprehensive guide to -one of the most popular relational database systems. Paul has -contributed to the online documentation for MySQL and is an -active member of the MySQL community. The principal MySQL -developer, Monty Widenius, and a network of his fellow developers -reviewed the manuscript, and provided Paul with the kind of insight -no one else could supply. -@* - -Instead of merely giving you a general overview of MySQL, Paul -teaches you how to make the most of its capabilities. Through two -sample database applications that run throughout the book, he -gives you solutions to problems you're sure to face. He helps you -integrate MySQL efficiently with third-party tools, such as PHP -and Perl, enabling you to generate dynamic Web pages through -database queries. He teaches you to write programs that access -MySQL databases, and also provides a comprehensive set of -references to column types, operators, functions, SQL syntax, -MySQL programming, C API, Perl @code{DBI}, and PHP API. -@emph{MySQL} simply gives you the kind of information you won't find -anywhere else. -@* - -If you use MySQL, this book provides you with: -@itemize @bullet -@item -An introduction to MySQL and SQL. -@item -Coverage of MySQL's data types and how to use them. -@item -Thorough treatment of how to write client programs in C. -@item -A guide to using the Perl @code{DBI} and PHP APIs for developing -command-line and Web-based applications. -@item -Tips on administrative issues such as user accounts, backup, -crash recovery, and security. -@item -Help in choosing an ISP for MySQL access. -@item -A comprehensive reference for MySQL's data types, operators, -functions, and SQL statements and utilities. -@item -Complete reference guides for MySQL's C API, the Perl @code{DBI} API, -and PHP's MySQL-related functions. -@end itemize -@* - -@emph{MySQL & mSQL} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565924347&bfmtype=book} (Barnes and Noble) -@item Publisher @tab O'Reilly -@item Authors @tab Randy Jay Yarger, George Reese & Tim King -@item Pub Date @tab 1st Edition July 1999 -@item ISBN @tab 1-56592-434-7, Order Number: 4347 -@item Pages @tab 506 -@item Price @tab $34.95 -@end multitable - -This book teaches you how to use MySQL and @code{mSQL}, two popular -and robust database products that support key subsets of SQL on both Linux -and Unix systems. Anyone who knows basic C, Java, Perl, or Python can -write a program to interact with a database, either as a stand-alone -application or through a Web page. This book takes you through the -whole process, from installation and configuration to programming -interfaces and basic administration. Includes plenty of tutorial -material. -@* - -@emph{Sams' Teach Yourself MySQL in 21 Days} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672319144&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Sams -@item Authors @tab Mark Maslakowski and Tony Butcher -@item Pub Date @tab June 2000 -@item ISBN @tab 0672319144 -@item Pages @tab 650 -@item Price @tab $39.99 -@end multitable - -Sams' @emph{Teach Yourself MySQL in 21 Days} is for intermediate Linux users -who want to move into databases. A large share of the audience is Web -developers who need a database to store large amounts of information that -can be retrieved via the Web. - -Sams' @emph{Teach Yourself MySQL in 21 Days} is a practical, step-by-step -tutorial. The reader will learn to design and employ this open source -database technology into his or her website using practical, hands-on -examples to follow. -@* - -@emph{E-Commerce Solutions with MySQL} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0761524452&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Prima Communications, Inc. -@item Authors @tab N/A -@item Pub Date @tab January 2000 -@item ISBN @tab 0761524452 -@item Pages @tab 500 -@item Price @tab $39.99 -@end multitable - -No description available. -@* - -@emph{MySQL and PHP from Scratch} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0789724405&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Que -@item Authors @tab N/A -@item Pub Date @tab September 2000 -@item ISBN @tab 0789724405 -@item Pages @tab 550 -@item Price @tab $34.99 -@end multitable - -This book puts together information on installing, setting up, and -troubleshooting Apache, MySQL, PHP3, and IMP into one complete -volume. You also learn how each piece is part of a whole by learning, -step-by-step, how to create a web-based e-mail system. Learn to run -the equivalent of Active Server Pages (ASP) using PHP3, set up an -e-commerce site using a database and the Apache web server, and create -a data entry system (such as sales, product quality tracking, customer -preferences, etc) that no installation in the PC. -@* - -@emph{Professional MySQL Programming} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=1861005164} (Barnes and Noble) -@item Publisher @tab Wrox Press, Inc. -@item Authors @tab N/A -@item Pub Date @tab Late 2001 -@item ISBN @tab 1861005164 -@item Pages @tab 1000 -@item Price @tab $49.99 -@end multitable - -No description available. -@* - -@emph{Professional Linux Programming} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1861003013&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Wrox Press, Inc. -@item Authors @tab N/A -@item Pub Date @tab September 2000 -@item ISBN @tab 1861003013 -@item Pages @tab 1155 -@item Price @tab $47.99 -@end multitable - -In this follow-up to the best-selling @emph{Beginning Linux Programming}, -you will learn from the authors' real-world knowledge and experience of -developing software for Linux; you'll be taken through the development -of a sample 'DVD Store' application, with 'theme' chapters addressing -different aspects of its implementation. Meanwhile, individual -``take-a-break'' chapters cover important topics that go beyond the -bounds of the central theme. All focus on the practical aspects of -programming, showing how crucial it is to choose the right tools for -the job, use them as they should be used, and get things right first -time. -@* - -@emph{PHP and MySQL Web Development} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672317842&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Sams -@item Authors @tab Luke Welling, Laura Thomson -@item Pub Date @tab March 2001 -@item ISBN @tab 0672317842 -@item Pages @tab 700 -@item Price @tab $49.99 -@end multitable - -@emph{PHP and MySQL Web Development} introduces you to the advantages -of implementing both MySQL and PHP. These advantages are detailed -through the provision of both statistics and several case studies. A -practical web application is developed throughout the book, providing -you with the tools necessary to implement a functional online -database. Each function is developed separately, allowing you the -choice to incorporate only those parts that you would like to -implement. Programming concepts of the PHP language are highlighted, -including functions which tie MySQL support into a PHP script and -advanced topics regarding table manipulation. -@* - -@strong{Books recommended by the MySQL Developers} - -@emph{SQL-99 Complete, Really} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0879305681&bfmtype=book} (Barnes and Noble) -@item Publisher @tab CMP Books -@item Authors @tab Peter Gulutzan, Trudy Pelzer -@item Pub Date @tab April 1999 -@item ISBN @tab 0879305681 -@item Pages @tab 1104 -@item Price @tab $55.96 -@end multitable - -This book contains complete descriptions of the new standards for -syntax, data structures, and retrieval processes of SQL databases. As -an example-based reference manual, it includes all of the CLI -functions, information, schema tables, and status codes, as well as a -working SQL database provided on the companion disk. -@* - -@emph{C, A reference manual} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0133262243&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Prentice Hall -@item Authors @tab Samuel P. Harbison, Guy L. Steele -@item Pub Date @tab September 1994 -@item ISBN @tab 0133262243 -@item Pages @tab 480 -@item Price @tab $35.99 -@end multitable - -A new and improved revision of the bestselling C language -reference. This manual introduces the notion of "Clean C", writing C -code that can be compiled as a C++ program, C programming style that -emphasizes correctness, portability, maintainability, and -incorporates the ISO C Amendment 1 (1994) which specifies new -facilities for writing portable, international programs in C. -@* - -@emph{C++ for Real Programmers} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0120499428&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Academic Press, Incorporated -@item Authors @tab Jeff Alger, Jim Keogh -@item Pub Date @tab February 1998 -@item ISBN @tab 0120499428 -@item Pages @tab 388 -@item Price @tab $39.95 -@end multitable - -@emph{C++ For Real Programmers} bridges the gap between C++ as described -in beginner and intermediate-level books and C++ as it is practiced by -experts. Numerous valuable techniques are described, organised into -three simple themes: indirection, class hierarchies, and memory -management. It also provides in-depth coverage of template creation, -exception handling, pointers and optimisation techniques. The focus of -the book is on ANSI C++ and, as such, is compiler independent. - -@emph{C++ For Real Programmers} is a revision of -@emph{Secrets of the C++ Masters} and includes a new appendix comparing C++ -with Java. The book comes with a 3.5" disk for Windows with source code. -@* - -@emph{Algorithms in C} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0201514257&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Addison Wesley Longman, Inc. -@item Authors @tab Robert Sedgewick -@item Pub Date @tab April 1990 -@item ISBN @tab 0201514257 -@item Pages @tab 648 -@item Price @tab $45.75 -@end multitable - -@emph{Algorithms in C} describes a variety of algorithms in a number of -areas of interest, including: sorting, searching, string-processing, and -geometric, graph and mathematical algorithms. The book emphasizes -fundamental techniques, providing readers with the tools to confidently -implement, run, and debug useful algorithms. -@* - -@emph{Multithreaded Programming with Pthreads} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0136807291&bfmtype=book} (Barnes and Noble) -@item Publisher @tab Prentice Hall -@item Authors @tab Bil Lewis, Daniel J. Berg -@item Pub Date @tab October 1997 -@item ISBN @tab 0136807291 -@item Pages @tab 432 -@item Price @tab $34.95 -@end multitable - -Based on the best-selling @emph{Threads Primer}, -@emph{Multithreaded Programming with Pthreads} gives you a solid -understanding of Posix threads: what they are, how they work, when to use -them, and how to optimise them. It retains the clarity and humor of -@emph{Threads Primer}, but includes expanded comparisons to Win32 and OS/2 -implementations. Code examples tested on all of the major UNIX platforms -are featured along with detailed explanations of how and why they use threads. -@* - -@emph{Programming the PERL DBI: Database Programming with PERL} -@multitable @columnfractions .3 .7 -@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565926994&bfmtype=book} (Barnes and Noble) -@item Publisher @tab O'Reilly & Associates, Incorporated -@item Authors @tab Alligator Descartes, Tim Bunce -@item Pub Date @tab February 2000 -@item ISBN @tab 1565926994 -@item Pages @tab 400 -@item Price @tab $27.96 -@end multitable - -@emph{Programming the Perl DBI} is coauthored by Alligator Descartes, one -of the most active members of the DBI community, and by Tim Bunce, the -inventor of DBI. For the uninitiated, the book explains the architecture -of DBI and shows you how to write DBI-based programs. For the experienced -DBI dabbler, this book explains DBI's nuances and the peculiarities of each -individual DBD. - -The book includes: -@itemize @bullet -@item -An introduction to DBI and its design. -@item -How to construct queries and bind parameters. -@item -Working with database, driver, and statement handles. -@item -Debugging techniques. -@item -Coverage of each existing DBD. -@item -A complete reference to DBI. -@end itemize -@* - - -@node General-SQL, Useful Links, MySQL-Books, MySQL Information Sources -@subsection General SQL Information and Tutorials - -The MySQL book portal is split into different sections to make it easy -to locate books for various purposes. -@uref{http://www.mysql.com/portal/books/html/} - -Tutorials can be found at: -@uref{http://www.mysql.com/portal/development/html/development-61-1.html} - -@node Useful Links, , General-SQL, MySQL Information Sources -@subsection Useful MySQL-related Links - -The MySQL development portal is the ultimate source of MySQL related -links. @uref{http://www.mysql.com/portal/development/html/} - -Apart from the following links, you can find and download a lot of -MySQL programs, tools and APIs in the Contrib directory -(@uref{http://www.mysql.com/Downloads/Contrib/}). -@cindex @code{Contrib} directory - -@cindex URLs to MySQL information -@cindex MySQL related information URLs -@subheading Tutorials and Manuals - -@table @asis -@item @uref{http://michael.bacarella.com/research/mysqlmyths.html} (MySQL Myths Debunked) -MySQL used in the real world. - -@item @uref{http://www.4t2.com/mysql/} -Information about the German MySQL mailing list. - -@item @uref{http://www2.rent-a-database.de/mysql/} -MySQL handbook in German. - -@item @uref{http://www.bitmover.com:8888/home/bk/mysql/} -Web access to the MySQL BitKeeper repository. - -@item @uref{http://www.analysisandsolutions.com/code/mybasic.htm} -Beginners MySQL Tutorial on how to install and set up -MySQL on a Windows machine. - -@item @uref{http://www.devshed.com/Server_Side/MySQL/} -A lot of MySQL tutorials. - -@item @uref{http://mysql.hitstar.com/} -MySQL manual in Chinese. - -@item @uref{http://www.linuxplanet.com/linuxplanet/tutorials/1046/1/} -Setting Up a MySQL-based website. - -@item @uref{http://www.hotwired.com/webmonkey/backend/tutorials/tutorial1.html} -MySQL-Perl tutorial. - -@item @uref{http://www.iserver.com/support/contrib/perl5/modules.html} -Installing new Perl modules that require locally installed modules. - -@item @uref{http://www.hotwired.com/webmonkey/databases/tutorials/tutorial4.html} -PHP/MySQL Tutorial. - -@item @uref{http://www.useractive.com/} -Hands on tutorial for MySQL. -@end table - -@subheading MySQL Discussion Forums - -@table @asis -@item @uref{http://www.weberdev.com/} -Examples using MySQL; (check Top 20) - -@item @uref{http://futurerealm.com/forum/futureforum.htm} -FutureForum Web Discussion Software. -@end table - -@subheading Porting MySQL/Using MySQL on Different Systems - -@table @asis -@item @uref{http://www.entropy.ch/software/macosx/mysql/} -Binary of MySQL for Mac OS X Client. Includes information of how to -build and use MySQL on Mac OS X. - -@item @uref{http://xclave.macnn.com/MySQL/} -The Mac OS Xclave. Running MySQL on Mac OS X. - -@item @uref{http://www.prnet.de/RegEx/mysql.html} -MySQL for Mac OS X Server. - -@item @uref{http://www.latencyzero.com/macosx/mysql.html} -Building MySQL for Mac OS X. - -@item @uref{http://www.essencesw.com/Software/mysqllib.html} -New Client libraries for the Mac OS Classic (Macintosh). - -@item @uref{http://www.lilback.com/macsql/} -Client libraries for Mac OS Classic (Macintosh). - -@item @uref{http://sixk.maniasys.com/index_en.html} -MySQL for Amiga -@end table - -@subheading Perl-related Links - -@table @asis -@item @uref{http://dbimysql.photoflux.com/} -Perl DBI with MySQL FAQ. -@end table - -@c FIX We should get longer descriptions for things in this category! -@subheading Commercial Applications that Support MySQL - -@table @asis -@item @uref{http://www.supportwizard.com/} -SupportWizard; Interactive helpdesk on the Web. This product includes a -licensed copy of MySQL. - -@item @uref{http://www.sonork.com/} -Sonork, Instant Messenger that is not only Internet oriented. It's -focused on private networks and on small to medium companies. Client -is free, server is free for up to 5 seats. - -@item @uref{http://www.stweb.org/} -StWeb - Stratos Web and Application server - An easy-to-use, cross -platform, Internet/Intranet development and deployment system for -development of web-enabled applications. The standard version of StWeb -has a native interface to MySQL database. - -@item @uref{http://www.rightnowtech.com/} -Right Now Web; Web automation for customer service. - -@item @uref{http://www.icaap.org/Bazaar/} -Bazaar; Interactive Discussion Forums with Web interface. - -@cindex PhoneSweep -@item @uref{http://www.phonesweep.com/} -PhoneSweepT is the world's first commercial Telephone Scanner. Many break-ins -in recent years have come not through the Internet, but through unauthorised -dial-up modems. PhoneSweep lets you find these modems by repeatedly placing -phone calls to every phone number that your organisation -controls. PhoneSweep has a built-in expert system that can recognise -more than 250 different kinds of remote-access programs, including -Carbon Copy(TM), pcANYWHERE(TM), and Windows NT RAS. All information is stored -in the SQL database. It then generates a comprehensive report detailing -which services were discovered on which dial-up numbers in your organisation. -@end table - -@subheading SQL Clients and Report Writers - -@table @asis -@item @uref{http://www.urbanresearch.com/software/utils/urbsql/} (urSQL) -SQL Editor and Query Utility. Custom syntax highlighting, editable -results grid, exportable result-sets, basic MySQL admin functions, -Etc.. For Windows. - -@item @uref{http://www.edatanew.com/} (MySQL Data Manager) -MySQL Data Manager * is platform independent web client -(written in perl) for MySQL server over TCP/IP. - -@item @uref{http://ksql.sourceforge.net/} -KDE MySQL client. - -@item @uref{http://www.ecker-software.de/} -A Windows GUI client by David Ecker. - -@item @uref{http://www.icaap.org/software/kiosk/} -Kiosk; a MySQL client for database management. Written in Perl. -Will be a part of Bazaar. - -@item @uref{http://www.casestudio.com/} -Db design tool that supports MySQL 3.23. - -@item @uref{http://home.skif.net/~voland/zeos/eng/} -Zeos - A client that supports MySQL, Interbase and PostgreSQL. - -@item @uref{http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWriter/grwhome.html} -A free report writer in Java - -@item @uref{http://www.javaframework.de/} -MySQLExport - Export of MySQL create statements and data in a lot of -different formats (SQL, HTML, CVS, text, ZIP, GZIP...). - -@item @uref{http://dlabs.4t2.com/} -M2D, a MySQL Administration client for Windows. M2D supports -administration of MySQL databases, creation of new databases and -tables, editing, and more. - -@item @uref{http://dlabs.4t2.com/} -Dexter, a small server written in Perl which can be used as a proxy server for -MySQL or as a database extender. - -@item @uref{http://www.scibit.com/Products/Software/Utils/Mascon.asp} -Mascon is a powerful Win32 GUI for administering MySQL databases. - -@item @uref{http://www.rtlabs.com/} -MacSQL Monitor. GUI for MySQL, ODBC, and JDBC databases for the Mac OS. -@end table - -@subheading Distributions that Include MySQL - -@c FIX add the rest (at least a couple more Linuxes) - -@table @asis -@item @uref{http://www.suse.com/} -SuSE Linux (6.1 and above) - -@item @uref{http://www.redhat.com/} -RedHat Linux (7.0 and above) - -@item @uref{http://distro.conectiva.com.br/} -Conectiva Linux (4.0 and above) -@end table - -@subheading Web Development Tools that Support MySQL - -@table @asis -@item @uref{http://www.php.net/} -PHP: A server-side HTML-embedded scripting language. - -@item @uref{http://www.midgard-project.org/} -The Midgard Application Server; a powerful Web development environment -based on MySQL and PHP. - -@cindex dbServ -@item @uref{http://www.dbServ.de/} -dbServ is an extension to a web server to integrate database output into -your HTML code. You may use any HTML function in your output. Only the -client will stop you. It works as standalone server or as Java servlet. - -@item @uref{http://www.chilisoft.com/} -Platform independent ASP from Chili!Soft - -@item @uref{http://www.voicenet.com/~zellert/tjFM/} -A JDBC driver for MySQL. - -@item @uref{http://www.wernhart.priv.at/php/} -MySQL + PHP demos. - -@item @uref{http://www.dbwww.com/} -ForwardSQL: HTML interface to manipulate MySQL databases. - -@item @uref{http://www.daa.com.au/~james/www-sql/} -WWW-SQL: Display database information. - -@item @uref{http://www.heitml.com/} -HeiTML: A server-side extension of HTML and a 4GL language at the same time. - -@item @uref{http://hawkeye.net/} -Hawkeye Internet Server Suite. - -@item @uref{http://www.webgroove.com/} -WebGroove Script: HTML compiler and server-side scripting language. - -@item @uref{http://www.ihtml.com/} -A server-side website scripting language. - -@item @uref{ftp://ftp.igc.apc.org/pub/myodbc/README} -How to use MySQL with ColdFusion on Solaris. - -@item @uref{http://calistra.com/MySQL/} -Calistra's ODBC MySQL Administrator. - -@item @uref{http://phpclub.net/} -PHPclub - Tips and tricks for PHP. - -@item @uref{http://www.widgetchuck.com/} -The Widgetchuck; Website Tools and Gadgets - -@item @uref{http://www.adcycle.com/} -AdCycle - advertising management software. - -@cindex pwPage -@item @uref{http://sourceforge.net/projects/pwpage/} -pwPage - provides an extremely fast and simple approach to the creation -of database forms. That is, if a database table exists and an HTML page -has been constructed using a few simple guidelines, pwPage can be -immediately used for table data selections, insertions, updates, deletions -and selectable table content reviewing. - -@item @uref{http://www.omnis-software.com/products/studio/studio.html} -OMNIS Studio is a rapid application development (RAD) tool. -@end table - -@subheading Database Design Tools with MySQL Support - -@table @asis -@item @uref{http://www.mysql.com/documentation/dezign/} -"DeZign for databases" is a database development tool that uses an -entity relationship diagram (ERD). -@end table - -@subheading Web Servers with MySQL Tools - -@table @asis -@item @uref{ftp://ftp.kcilink.com/pub/} -mod_auth_mysql, An Apache authentication module. - -@item @uref{http://www.roxen.com/} -The Roxen Challenger Web server. -@end table - -@subheading Extensions for Other Programs - -@table @asis -@item @uref{http://www.seawood.org/msql_bind/} -MySQL support for BIND (The Internet Domain Name Server). - -@item @uref{http://www.inet-interactive.com/sendmail/} -MySQL support for Sendmail and Procmail. -@end table - -@subheading Using MySQL with Other Programs - -@table @asis -@item @uref{http://www.iserver.com/support/addonhelp/database/mysql/msaccess.html} -Using MySQL with Access. - -@item @uref{http://www.iserver.com/support/contrib/perl5/modules.html} -Installing new Perl modules that require locally installed modules. -@end table - -@subheading ODBC-related Links - -@table @asis -@item @uref{http://www.iodbc.org/} -Popular iODBC Driver Manager (libiodbc) now available as Open Source. - -@item @uref{http://users.ids.net/~bjepson/freeODBC/} -The FreeODBC Pages. - -@item @uref{http://genix.net/unixODBC/} -The unixODBC Project goals are to develop and promote unixODBC to be the -definitive standard for ODBC on the Linux platform. This is to include GUI -support for KDE. - -@item @uref{http://www.sw-soft.com/products/BtrieveODBC/} -A MySQL-based ODBC driver for Btrieve. -@end table - -@subheading @strong{API}-related Links - -@table @asis -@item @uref{http://www.jppp.com/} -Partially implemented TDataset-compatible components for MySQL. - -@item @uref{http://www.riverstyx.net/qpopmysql/} -qpopmysql - A patch to allow POP3 authentication from a MySQL -database. There's also a link to Paul Khavkine's patch for Procmail to -allow any MTA to deliver to users in a MySQL database. - -@item @uref{http://www.essencesw.com/Software/mysqllib.html} -New Client libraries for the Mac OS Classic (Macintosh). - -@item @uref{http://www.lilback.com/macsql/} -Client libraries for the Macintosh. - -@item @uref{http://www.essencesw.com/Plugins/mysqlplug.html} -Plugin for REALbasic (for Macintosh) - -@item @uref{http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html} -A library that emulates BSD sockets and pthreads on Macintosh. This can -be used if you want to compile the MySQL client library on Mac. -It could probably even be sued to port MySQL to Macintosh, but we -don't know of anyone that has tried that. - -@cindex SCMDB -@item @uref{http://www.dedecker.net/jessie/scmdb/} -SCMDB - an add-on for SCM that ports the MySQL C library to scheme -(SCM). With this library scheme developers can make connections to a -MySQL database and use embedded SQL in their programs. -@end table - -@subheading Other MySQL-related Links - -@table @asis -@item @uref{http://www.satisoft.com/} (SAT) -The Small Application Toolkit (SAT) is a collection of utilities -intended to simplify the development of small, multi-user, GUI based -applications in a (Microsoft -or- X) Windows Client / Unix Server -environment. - -@item @uref{http://www.wix.com/mysql-hosting/} -Registry of Web providers who support MySQL. - -@item @uref{http://www.softagency.co.jp/mysql/index.en.html} -Links about using MySQL in Japan/Asia. - -@item @uref{http://abattoir.cc.ndsu.nodak.edu/~nem/mysql/udf/} -MySQL UDF Registry. - -@item @uref{http://www.open.com.au/products.html} -Commercial Web defect tracking system. - -@item @uref{http://www.stonekeep.com/pts/} -PTS: Project Tracking System. - -@item @uref{http://tomato.nvgc.vt.edu/~hroberts/mot/} -Job and software tracking system. - -@item @uref{http://www.cynergi.net/exportsql/} -ExportSQL: A script to export data from Access95+. - -@item @uref{http://SAL.KachinaTech.COM/H/1/MYSQL.html} -SAL (Scientific Applications on Linux) MySQL entry. - -@item @uref{http://www.infotech-nj.com/itech/index.shtml} -A consulting company which mentions MySQL in the right company. - -@item @uref{http://www.pmpcs.com/} -PMP Computer Solutions. Database developers using MySQL and -@code{mSQL}. - -@item @uref{http://www.dedserius.com/y2kmatrix/} -Y2K tester. -@end table - -@subheading SQL and Database Interfaces - -@table @asis -@item @uref{http://java.sun.com/products/jdbc/} -The JDBC database access API. - -@item @uref{http://www.gagme.com/mysql/} -Patch for @code{mSQL} Tcl. - -@item @uref{http://www.amsoft.ru/easysql/} -EasySQL: An ODBC-like driver manager. - -@item @uref{http://www.lightlink.com/hessling/rexxsql.html} -A REXX interface to SQL databases. - -@c @item @uref{http://www.mytcl.cx/} -@c Tcl interface based on tcl-sql with many bugfixes. - -@item @uref{http://www.binevolve.com/~tdarugar/tcl-sql/} -Tcl interface for MySQL. - -@item @uref{http://www.contrib.andrew.cmu.edu/~shadow/sql.html} -SQL Reference Page with a lot of interesting links. - -@end table - -@subheading Examples of MySQL Use - -@table @asis -@c Added 990601 -@c EMAIL: thuss@little6.com (Todd Huss) -@item @uref{http://www.little6.com/about/linux/} -Little6 Inc., An online contract and job finding site that is powered by -MySQL, PHP3, and Linux. - -@c Added 990521 -@c EMAIL: info@worldrecords.com (Jim Rota) -@item @uref{http://www.worldrecords.com/} -World Records - A search engine for information about music that uses -MySQL and PHP. - -@item @uref{http://www.webtechniques.com/archives/1998/01/note/} -A Contact Database using MySQL and PHP. - -@item @uref{http://modems.rosenet.net/mysql/} -Web based interface and Community Calendar with PHP. - -@item @uref{http://www.odbsoft.com/cook/sources.htm} -Perl package to generate html from a SQL table structure and for generating -SQL statements from an html form. - -@item @uref{http://www.gusnet.cx/proj/telsql/} -Basic telephone database using @code{DBI}/@code{DBD}. - -@item @uref{http://tecfa.unige.ch/guides/java/staf2x/ex/jdbc/coffee-break/} -JDBC examples by Daniel K. Schneider. - -@item @uref{http://www.ooc.com/} -Object Oriented Concepts Inc; CORBA applications with examples in source. - -@c EMAIL: paul@sword.damocles.com (Paul Bannister) -@item @uref{http://www.stopbit.com/} -Stopbit - A technology news site using MySQL and PHP. - -@item @uref{http://www.penguinservices.com/scripts/} -Online shopping cart system. - -@c Added 990928 from editor@city-gallery.com -@cindex Old Photo Album -@item @uref{http://www.city-gallery.com/album/} -Old Photo Album - The album is a collaborative popular history of photography -project that generates all pages from data stored in a MySQL -database. Pages are dynamically generated through a php3 interface to the -database content. Users contribute images and descriptions. Contributed -images are stored on the web server to avoid storing them in the database -as BLOBs. All other information is stored on the shared MySQL server. -@end table - -@subheading General Database Links - -@table @asis -@item @uref{http://black.hole-in-the.net/guy/webdb/} -Homepage of the webdb-l (Web Databases) mailing list. - -@item @uref{http://www.symbolstone.org/technology/perl/DBI/} -Perl @code{DBI}/@code{DBD} modules homepage. - -@item @uref{http://www.student.uni-koeln.de/cygwin/} -Cygwin tools. Unix on top of Windows. - -@cindex Tek-Tips forums -@cindex forums, Tek-Tips -@item @uref{http://www.tek-tips.com/} -Tek-Tips Forums are 800+ independent peer-to-peer non-commercial support -forums for Computer Professionals. Features include automatic e-mail -notification of responses, a links library, and member confidentiality -guaranteed. - -@item @uref{http://www.public.asu.edu/~peterjn/btree/} -B-Trees: Balanced Tree Data Structures. - -@item @uref{http://www.fit.qut.edu.au/~maire/baobab/lecture/sld001.htm} -A lecture about B-Trees. -@end table - -There are also many Web pages that use MySQL. @xref{Users}. -Send any additions to this list to @email{webmaster@@mysql.com}. We now -require that you show a MySQL logo somewhere if you wish your -site to be added. It is okay to have it on a ``used tools'' page or -something similar. - - -@node Compatibility, Comparisons, MySQL Information Sources, Introduction +@node Compatibility, TODO, MySQL Information Sources, Introduction @section How Standards-compatible Is MySQL? @cindex compatibility, with ANSI SQL @@ -3315,10 +2513,10 @@ We will continue to support transactional and not transactional databases to satisfy both heavy web/logging usage and mission critical 24/7 usage. -MySQL was from the start designed to work with medium large databases +MySQL was designed from the start to work with medium large databases (10-100 million rows / about 100 MB per table) on small computer systems. We will continue to extend MySQL to both work even better -with terrabyte size data but we are also doing work to make it possible +with terabyte size databases, but we are also doing work to make it possible to compile a reduced MySQL version that is more suitable for hand held devices and embedded usage. The compact design of MySQL makes both of these directions possible without any conflicts in the source tree. @@ -3329,10 +2527,10 @@ services). We don't believe that one should have native XML support in the database, but will instead add the XML support our users request from -us on the client side. We think its better to keep the main server -code as 'lean and clean' possible and instead develop libraries to -solve the complexity on the client side. This is part of the above -mentioned strategy of not sacrificing speed or reliability in the +us on the client side. We think it's better to keep the main server +code as ``lean and clean'' as possible and instead develop libraries to +deal with the complexity on the client side. This is part of the strategy +mentioned above of not sacrificing speed or reliability in the server. @menu @@ -3624,7 +2822,7 @@ Use of @code{REPLACE} instead of @code{DELETE} + @code{INSERT}. The @code{FLUSH flush_option} statement. @item -The possibility to set variables in a statement with @code{:=}: +The ability to set variables in a statement with @code{:=}: @example SELECT @@a:=SUM(total),@@b=COUNT(*),@@a/@@b AS avg FROM test_table; SELECT @@t1:=(@@t2:=1)+@@t3:=4,@@t1,@@t2,@@t3; @@ -3637,7 +2835,7 @@ SELECT @@t1:=(@@t2:=1)+@@t3:=4,@@t1,@@t2,@@t3; @subsection MySQL Differences Compared to ANSI SQL92 We try to make MySQL follow the ANSI SQL standard and the -ODBC SQL standard, but in some cases MySQL does some things +ODBC SQL standard, but in some cases MySQL does things differently: @itemize @bullet @@ -3739,7 +2937,7 @@ the @code{mysql} command-line interpreter, piping its output back to a second instance of the interpreter: @example -prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydb +shell> mysql --skip-column-names mydb < myscript.sql | mysql mydb @end example MySQL 4.0 supports multi-table deletes that can be used to efficiently @@ -3940,6 +3138,7 @@ This can be handled much more efficiently by using an @xref{mysql_insert_id, , @code{mysql_insert_id()}}. @cindex rows, locking +@cindex locking, row-level Generally, you can code around row-level locking. Some cases really need it, but they are very few. For instance, you can use a flag column in the table and do something like this: @@ -4432,1120 +3631,7 @@ decimals. For platform-specific bugs, see the sections about compiling and porting. -@node Comparisons, TODO, Compatibility, Introduction -@section How MySQL Compares to Other Databases - -@cindex databases, MySQL vs. others -@cindex comparisons, MySQL vs. others - -@menu -* Compare mSQL:: How MySQL compares to @code{mSQL} -* Compare PostgreSQL:: How MySQL compares with PostgreSQL -@end menu - -Our users have successfully run their own benchmarks against a number -of @code{Open Source} and traditional database servers. We are aware of -tests against @code{Oracle}, @code{DB/2}, @code{Microsoft SQL Server} -and other commercial products. Due to legal reasons we are restricted -from publishing some of those benchmarks in our reference manual. - -This section includes a comparison with @code{mSQL} for historical -reasons and with @code{PostgreSQL} as it is also an Open Source -database. If you have benchmark results that we can publish, please -contact us at @email{benchmarks@@mysql.com}. - -For comparative lists of all supported functions and types as well -as measured operational limits of many different database systems, -see the @code{crash-me} web page at -@uref{http://www.mysql.com/information/crash-me.php}. - - -@node Compare mSQL, Compare PostgreSQL, Comparisons, Comparisons -@subsection How MySQL Compares to @code{mSQL} - -@table @strong -@item Performance - -For a true comparison of speed, consult the growing MySQL benchmark -suite. @xref{MySQL Benchmarks}. - -Because there is no thread creation overhead, a small parser, few features, and -simple security, @code{mSQL} should be quicker at: - -@itemize @bullet -@item -Tests that perform repeated connects and disconnects, running a very simple -query during each connection. - -@item -@code{INSERT} operations into very simple tables with few columns and keys. - -@item -@code{CREATE TABLE} and @code{DROP TABLE}. - -@item -@code{SELECT} on something that isn't an index. (A table scan is very -easy.) -@end itemize - -Because these operations are so simple, it is hard to be better at them when -you have a higher startup overhead. After the connection is established, -MySQL should perform much better. - -On the other hand, MySQL is much faster than @code{mSQL} (and -most other SQL implementations) on the following: - -@itemize @bullet -@item -Complex @code{SELECT} operations. - -@item -Retrieving large results (MySQL has a better, faster, and safer -protocol). - -@item -Tables with variable-length strings, because MySQL has more efficient -handling and can have indexes on @code{VARCHAR} columns. - -@item -Handling tables with many columns. - -@item -Handling tables with large record lengths. - -@item -@code{SELECT} with many expressions. - -@item -@code{SELECT} on large tables. - -@item -Handling many connections at the same time. MySQL is fully -multi-threaded. Each connection has its own thread, which means that -no thread has to wait for another (unless a thread is modifying -a table another thread wants to access). In @code{mSQL}, once one connection -is established, all others must wait until the first has finished, regardless -of whether the connection is running a query that is short or long. When the -first connection terminates, the next can be served, while all the others wait -again, etc. - -@item -Joins. -@code{mSQL} can become pathologically slow if you change the order of tables -in a @code{SELECT}. In the benchmark suite, a time more than 15000 times -slower than MySQL was seen. This is due to @code{mSQL}'s lack of a -join optimiser to order tables in the optimal order. However, if you put the -tables in exactly the right order in @code{mSQL}2 and the @code{WHERE} is -simple and uses index columns, the join will be relatively fast! -@xref{MySQL Benchmarks}. - -@item -@code{ORDER BY} and @code{GROUP BY}. - -@item -@code{DISTINCT}. - -@item -Using @code{TEXT} or @code{BLOB} columns. -@end itemize - -@item SQL Features - -@itemize @bullet -@item @code{GROUP BY} and @code{HAVING}. -@code{mSQL} does not support @code{GROUP BY} at all. -MySQL supports a full @code{GROUP BY} with both @code{HAVING} and -the following functions: @code{COUNT()}, @code{AVG()}, @code{MIN()}, -@code{MAX()}, @code{SUM()}, and @code{STD()}. @code{COUNT(*)} is optimised to -return very quickly if the @code{SELECT} retrieves from one table, no other -columns are retrieved, and there is no @code{WHERE} clause. @code{MIN()} and -@code{MAX()} may take string arguments. - -@item @code{INSERT} and @code{UPDATE} with calculations. -MySQL can do calculations in an @code{INSERT} or @code{UPDATE}. -For example: - -@example -mysql> UPDATE SET x=x*10+y WHERE x<20; -@end example - -@item Aliasing. -MySQL has column aliasing. - -@item Qualifying column names. -In MySQL, if a column name is unique among the tables used in a -query, you do not have to use the full qualifier. - -@item @code{SELECT} with functions. -MySQL has many functions (too many to list here; see @ref{Functions}). - -@end itemize - -@item Disk Space Efficiency -That is, how small can you make your tables? - -MySQL has very precise types, so you can create tables that take -very little space. An example of a useful MySQL datatype is the -@code{MEDIUMINT} that is 3 bytes long. If you have 100,000,000 records, -saving even one byte per record is very important. - -@code{mSQL2} has a more limited set of column types, so it is -more difficult to get small tables. - -@item Stability -This is harder to judge objectively. For a discussion of MySQL -stability, see @ref{Stability}. - -We have no experience with @code{mSQL} stability, so we cannot say -anything about that. - -@item Price -Another important issue is the license. MySQL has a -more flexible license than @code{mSQL}, and is also less expensive than -@code{mSQL}. Whichever product you choose to use, remember to at least -consider paying for a license or e-mail support. (You are required to get -a license if you include MySQL with a product that you sell, -of course.) - -@item Perl Interfaces -MySQL has basically the same interfaces to Perl as @code{mSQL} with -some added features. - -@item JDBC (Java) -MySQL currently has a lot of different JDBC drivers: - -@itemize @bullet -@item -The mm driver: A type 4 JDBC driver by Mark Matthews -@email{mmatthew@@ecn.purdue.edu}. This is released under the LGPL. - -@item -The Resin driver. This is a commercial JDBC driver released under open -source. @uref{http://www.caucho.com/projects/jdbc-mysql/index.xtp} - -@item -The gwe driver: A Java interface by GWE technologies (not supported anymore). - -@item -The jms driver: An improved gwe driver by Xiaokun Kelvin ZHU -@email{X.Zhu@@brad.ac.uk} (not supported anymore). - -@item -The twz driver: A type 4 JDBC driver by Terrence W. Zellers -@email{zellert@@voicenet.com}. This is commercial but is free for private -and educational use (not supported anymore). -@end itemize - -The recommended driver is the mm driver. The Resin driver may also be -good (at least the benchmarks looks good), but we haven't received that much -information about this yet. - -We know that @code{mSQL} has a JDBC driver, but we have too little experience -with it to compare. - -@item Rate of Development -MySQL has a small core team of developers, but we are quite -used to coding C and C++ very rapidly. Because threads, functions, -@code{GROUP BY}, and so on are still not implemented in @code{mSQL}, it -has a lot of catching up to do. To get some perspective on this, you -can view the @code{mSQL} @file{HISTORY} file for the last year and -compare it with the News section of the MySQL Reference Manual -(@pxref{News}). It should be pretty obvious which one has developed -most rapidly. - -@item Utility Programs -Both @code{mSQL} and MySQL have many interesting third-party -tools. Because it is very easy to port upward (from @code{mSQL} to -MySQL), almost all the interesting applications that are available for -@code{mSQL} are also available for MySQL. - -MySQL comes with a simple @code{msql2mysql} program that fixes -differences in spelling between @code{mSQL} and MySQL for the -most-used C API functions. -For example, it changes instances of @code{msqlConnect()} to -@code{mysql_connect()}. Converting a client program from @code{mSQL} to -MySQL usually requires only minor effort. -@end table - -@menu -* Using mSQL tools:: How to convert @code{mSQL} tools for MySQL -* Protocol differences:: How @code{mSQL} and MySQL Client/Server Communications Protocols Differ -* Syntax differences:: How @code{mSQL} 2.0 SQL Syntax Differs from MySQL -@end menu - - -@node Using mSQL tools, Protocol differences, Compare mSQL, Compare mSQL -@subsubsection How to Convert @code{mSQL} Tools for MySQL - -@cindex MySQL tools, conversion -@cindex converting, tools -@cindex tools, converting - -According to our experience, it doesn't take long to convert tools -such as @code{msql-tcl} and @code{msqljava} that use the -@code{mSQL} C API so that they work with the MySQL C API. - -The conversion procedure is: - -@enumerate -@item -Run the shell script @code{msql2mysql} on the source. This requires the -@code{replace} program, which is distributed with MySQL. - -@item -Compile. - -@item -Fix all compiler errors. -@end enumerate - -Differences between the @code{mSQL} C API and the MySQL C API are: - -@itemize @bullet -@item -MySQL uses a @code{MYSQL} structure as a connection type (@code{mSQL} -uses an @code{int}). - -@item -@code{mysql_connect()} takes a pointer to a @code{MYSQL} structure as a -parameter. It is easy to define one globally or to use @code{malloc()} to get -one. @code{mysql_connect()} also takes two parameters for specifying the -user and password. You may set these to @code{NULL, NULL} for default use. - -@item -@code{mysql_error()} takes the @code{MYSQL} structure as a parameter. Just add -the parameter to your old @code{msql_error()} code if you are porting old code. - -@item -MySQL returns an error number and a text error message for all -errors. @code{mSQL} returns only a text error message. - -@item -Some incompatibilities exist as a result of MySQL supporting -multiple connections to the server from the same process. -@end itemize - - -@node Protocol differences, Syntax differences, Using mSQL tools, Compare mSQL -@subsubsection How @code{mSQL} and MySQL Client/Server Communications Protocols Differ - -@cindex communications protocols -@cindex mSQL vs. MySQL - -There are enough differences that it is impossible (or at least not easy) -to support both. - -The most significant ways in which the MySQL protocol differs -from the @code{mSQL} protocol are listed below: - -@itemize @bullet -@item -A message buffer may contain many result rows. - -@item -The message buffers are dynamically enlarged if the query or the -result is bigger than the current buffer, up to a configurable server and -client limit. - -@item -All packets are numbered to catch duplicated or missing packets. - -@item -All column values are sent in ASCII. The lengths of columns and rows are sent -in packed binary coding (1, 2, or 3 bytes). - -@item -MySQL can read in the result unbuffered (without having to store the -full set in the client). - -@item -If a single read/write takes more than 30 seconds, the server closes -the connection. - -@item -If a connection is idle for 8 hours, the server closes the connection. -@end itemize - -@menu -* Syntax differences:: How @code{mSQL} 2.0 SQL Syntax Differs from MySQL -@end menu - - -@node Syntax differences, , Protocol differences, Compare mSQL -@subsubsection How @code{mSQL} 2.0 SQL Syntax Differs from MySQL - -@noindent -@strong{Column types} - -@table @code -@item MySQL -Has the following additional types (among others; -@pxref{CREATE TABLE, , @code{CREATE TABLE}}): -@itemize @bullet -@item -@c FIX bad lingo, needs rephrasing -@code{ENUM} type for one of a set of strings. -@item -@c FIX bad lingo, needs rephrasing -@code{SET} type for many of a set of strings. -@item -@code{BIGINT} type for 64-bit integers. -@end itemize -@item -MySQL also supports -the following additional type attributes: -@itemize @bullet -@item -@code{UNSIGNED} option for integer columns. -@item -@code{ZEROFILL} option for integer columns. -@item -@code{AUTO_INCREMENT} option for integer columns that are a -@code{PRIMARY KEY}. -@xref{mysql_insert_id, , @code{mysql_insert_id()}}. -@item -@code{DEFAULT} value for all columns. -@end itemize -@item mSQL2 -@code{mSQL} column types correspond to the MySQL types shown below: -@multitable @columnfractions .15 .85 -@item @code{mSQL} @strong{type} @tab @strong{Corresponding MySQL type} -@item @code{CHAR(len)} @tab @code{CHAR(len)} -@item @code{TEXT(len)} @tab @code{TEXT(len)}. @code{len} is the maximal length. -And @code{LIKE} works. -@item @code{INT} @tab @code{INT}. With many more options! -@item @code{REAL} @tab @code{REAL}. Or @code{FLOAT}. Both 4- and 8-byte versions are available. -@item @code{UINT} @tab @code{INT UNSIGNED} -@item @code{DATE} @tab @code{DATE}. Uses ANSI SQL format rather than @code{mSQL}'s own format. -@item @code{TIME} @tab @code{TIME} -@item @code{MONEY} @tab @code{DECIMAL(12,2)}. A fixed-point value with two decimals. -@end multitable -@end table - -@noindent -@strong{Index Creation} - -@table @code -@item MySQL -Indexes may be specified at table creation time with the @code{CREATE TABLE} -statement. -@item mSQL -Indexes must be created after the table has been created, with separate -@code{CREATE INDEX} statements. -@end table - -@noindent -@strong{To Insert a Unique Identifier into a Table} - -@table @code -@item MySQL -Use @code{AUTO_INCREMENT} as a column type -specifier. -@xref{mysql_insert_id, , @code{mysql_insert_id()}}. -@item mSQL -Create a @code{SEQUENCE} on a table and select the @code{_seq} column. -@end table - -@noindent -@strong{To Obtain a Unique Identifier for a Row} - -@table @code -@item MySQL -Add a @code{PRIMARY KEY} or @code{UNIQUE} key to the table and use this. -New in Version 3.23.11: If the @code{PRIMARY} or @code{UNIQUE} key consists of only one -column and this is of type integer, one can also refer to it as -@code{_rowid}. -@item mSQL -Use the @code{_rowid} column. Observe that @code{_rowid} may change over time -depending on many factors. -@end table - -@noindent -@strong{To Get the Time a Column Was Last Modified} - -@table @code -@item MySQL -Add a @code{TIMESTAMP} column to the table. This column is automatically set -to the current date and time for @code{INSERT} or @code{UPDATE} statements if -you don't give the column a value or if you give it a @code{NULL} value. - -@item mSQL -Use the @code{_timestamp} column. -@end table - -@noindent -@strong{@code{NULL} Value Comparisons} - -@table @code -@item MySQL -MySQL follows -ANSI SQL, and a comparison with @code{NULL} is always @code{NULL}. -@item mSQL -In @code{mSQL}, @code{NULL = NULL} is TRUE. You -must change @code{=NULL} to @code{IS NULL} and @code{<>NULL} to -@code{IS NOT NULL} when porting old code from @code{mSQL} to MySQL. -@end table - -@noindent -@strong{String Comparisons} - -@table @code -@item MySQL -Normally, string comparisons are performed in case-independent fashion with -the sort order determined by the current character set (ISO-8859-1 Latin1 by -default). If you don't like this, declare your columns with the -@code{BINARY} attribute, which causes comparisons to be done according to the -ASCII order used on the MySQL server host. -@item mSQL -All string comparisons are performed in case-sensitive fashion with -sorting in ASCII order. -@end table - -@noindent -@strong{Case-insensitive Searching} - -@table @code -@item MySQL -@code{LIKE} is a case-insensitive or case-sensitive operator, depending on -the columns involved. If possible, MySQL uses indexes if the -@code{LIKE} argument doesn't start with a wild-card character. -@item mSQL -Use @code{CLIKE}. -@end table - -@noindent -@strong{Handling of Trailing Spaces} - -@table @code -@item MySQL -Strips all spaces at the end of @code{CHAR} and @code{VARCHAR} -columns. Use a @code{TEXT} column if this behavior is not desired. -@item mSQL -Retains trailing space. -@end table - -@noindent -@strong{@code{WHERE} Clauses} - -@table @code -@item MySQL -MySQL correctly prioritises everything (@code{AND} is evaluated -before @code{OR}). To get @code{mSQL} behavior in MySQL, use -parentheses (as shown in an example below). -@item mSQL -Evaluates everything from left to right. This means that some logical -calculations with more than three arguments cannot be expressed in any -way. It also means you must change some queries when you upgrade to -MySQL. You do this easily by adding parentheses. Suppose you -have the following @code{mSQL} query: -@example -mysql> SELECT * FROM table WHERE a=1 AND b=2 OR a=3 AND b=4; -@end example -To make MySQL evaluate this the way that @code{mSQL} would, -you must add parentheses: -@example -mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4)))); -@end example -@end table - -@noindent -@strong{Access Control} - -@table @code -@item MySQL -Has tables to store grant (permission) options per user, host, and -database. @xref{Privileges}. -@item mSQL -Has a file @file{mSQL.acl} in which you can grant read/write privileges for -users. -@end table - - -@node Compare PostgreSQL, , Compare mSQL, Comparisons -@subsection How MySQL Compares to PostgreSQL - -@cindex PostgreSQL vs. MySQL, overview - -When reading the following, please note that both products are continually -evolving. We at MySQL AB and the PostgreSQL developers are both working -on making our respective database as good as possible, so we are both a -serious choice to any commercial database. - -The following comparison is made by us at MySQL AB. We have tried to be -as accurate and fair as possible, but because we don't have a full -knowledge of all PostgreSQL features while we know MySQL througly, we -may have got some things wrong. We will however correct these when they -come to our attention. - -We would first like to note that PostgreSQL and MySQL are both widely used -products, but with different design goals, even if we are both striving to -be ANSI SQL compatible. This means that for some applications MySQL is -more suited, while for others PostgreSQL is more suited. When choosing -which database to use, you should first check if the database's feature set -satisfies your application. If you need raw speed, MySQL is probably your -best choice. If you need some of the extra features that only PostgreSQL -can offer, you should use @code{PostgreSQL}. - -@cindex PostgreSQL/MySQL, strategies -@menu -* MySQL-PostgreSQL goals:: MySQL and PostgreSQL development strategies -* MySQL-PostgreSQL features:: Featurewise Comparison of MySQL and PostgreSQL -* MySQL-PostgreSQL benchmarks:: Benchmarking MySQL and PostgreSQL -@end menu - - -@node MySQL-PostgreSQL goals, MySQL-PostgreSQL features, Compare PostgreSQL, Compare PostgreSQL -@subsubsection MySQL and PostgreSQL development strategies - -When adding things to MySQL we take pride to do an optimal, definite -solution. The code should be so good that we shouldn't have any need to -change it in the foreseeable future. We also do not like to sacrifice -speed for features but instead will do our utmost to find a solution -that will give maximal throughput. This means that development will take -a little longer, but the end result will be well worth this. This kind -of development is only possible because all server code are checked by -one of a few (currently two) persons before it's included in the -MySQL server. - -We at MySQL AB believe in frequent releases to be able to push out new -features quickly to our users. Because of this we do a new small release -about every three weeks, and a major branch every year. All releases are -throughly tested with our testing tools on a lot of different platforms. - -PostgreSQL is based on a kernel with lots of contributors. In this setup -it makes sense to prioritise adding a lot of new features, instead of -implementing them optimally, because one can always optimise things -later if there arises a need for this. - -Another big difference between MySQL and PostgreSQL is that -nearly all of the code in the MySQL server are coded by developers that -are employed by MySQL AB and are still working on the server code. The -exceptions are the transaction engines, and the regexp library. - -This is in sharp contrast to the PostgreSQL code where the majority of -the code is coded by a big group of people with different backgrounds. -It was only recently that the PostgreSQL developers announced that their -current developer group had finally had time to take a look at all -the code in the current PostgreSQL release. - -Both of the above development methods has it's own merits and drawbacks. -We here at MySQL AB think of course that our model is better because our -model gives better code consistency, more optimal and reusable code, and -in our opinion, fewer bugs. Because we are the authors of the MySQL server -code, we are better able to coordinate new features and releases. - - -@node MySQL-PostgreSQL features, MySQL-PostgreSQL benchmarks, MySQL-PostgreSQL goals, Compare PostgreSQL -@subsubsection Featurewise Comparison of MySQL and PostgreSQL - -@cindex PostgreSQL/MySQL, features - -On the crash-me page -(@uref{http://www.mysql.com/information/crash-me.php}) -you can find a list of those database constructs and limits that -one can detect automatically with a program. Note however that a lot of -the numerical limits may be changed with startup options for respective -database. The above web page is however extremely useful when you want to -ensure that your applications works with many different databases or -when you want to convert your application from one datbase to another. - -MySQL offers the following advantages over PostgreSQL: - -@itemize @bullet -@item -@code{MySQL} is generally much faster than PostgreSQL. -@xref{MySQL-PostgreSQL benchmarks}. - -@item -MySQL has a much larger user base than PostgreSQL, therefor the -code is more tested and has historically been more stable than -PostgreSQL. MySQL is the much more used in production -environments than PostgreSQL, mostly thanks to that MySQL AB, -formerly TCX DataKonsult AB, has provided top quality commercial support -for MySQL from the day it was released, whereas until recently -PostgreSQL was unsupported. - -@item -MySQL works better on Windows than PostgreSQL does. MySQL runs as a -native Windows application (a service on NT/Win2000/WinXP), while -PostgreSQL is run under the cygwin emulation. We have heard that -PostgreSQL is not yet that stable on Windows but we haven't been able to -verify this ourselves. - -@item -MySQL has more APIs to other languages and is supported by more -existing programs than PostgreSQL. @xref{Contrib}. - -@item -MySQL works on 24/7 heavy duty systems. In most circumstances -you never have to run any cleanups on MySQL. PostgreSQL doesn't -yet support 24/7 systems because you have to run @code{VACUUM()} -once in a while to reclaim space from @code{UPDATE} and @code{DELETE} -commands and to perform statistics analyses that are critical to get -good performance with PostgreSQL. @code{VACUUM()} is also needed after -adding a lot of new rows to a table. On a busy system with lots of changes, -@code{VACUUM()} must be run very frequently, in the worst cases even -many times a day. During the @code{VACUUM()} run, which may take hours -if the database is big, the database is from a production standpoint, -practically dead. The PostgreSQL team has fixing this on their TODO, -but we assume that this is not an easy thing to fix permanently. - -@item -A working, tested replication feature used by sites like: -@itemize @minus -@item Yahoo Finance (@uref{http://finance.yahoo.com/}) -@item Mobile.de (@uref{http://www.mobile.de/}) -@item Slashdot (@uref{http://www.slashdot.org/}) -@end itemize - -@item -Included in the MySQL distribution are two different testing suites, -@file{mysql-test-run} and crash-me -(@uref{http://www.mysql.com/information/crash-me.php}), as well -as a benchmark suite. The test system is actively updated with code to -test each new feature and almost all reproduceable bugs that have come to -our attention. We test MySQL with these on a lot of platforms before -every release. These tests are more sophisticated than anything we have -seen from PostgreSQL, and they ensures that the MySQL is kept to a high -standard. - -@item -There are far more books in print about MySQL than about PostgreSQL. -O'Reilly, Sams, Que, and New Riders are all major publishers with books -about MySQL. All MySQL features are also documented in the MySQL on-line -manual, because when a new feature is implemented, the MySQL developers -are required to document it before it's included in the source. - -@item -MySQL supports more of the standard ODBC functions than @code{PostgreSQL}. - -@item -MySQL has a much more sophisticated @code{ALTER TABLE}. - -@item -MySQL has support for tables without transactions for applications that -need all speed they can get. The tables may be memory based, @code{HEAP} -tables or disk based @code{MyISAM}. @xref{Table types}. - -@item -MySQL has support for two different table handlers that support -transactions, @code{InnoDB} and @code{BerkeleyDB}. Because every -transaction engine performs differently under different conditions, this -gives the application writer more options to find an optimal solution for -his or her setup. @xref{Table types}. - -@item -@code{MERGE} tables gives you a unique way to instantly make a view over -a set of identical tables and use these as one. This is perfect for -systems where you have log files that you order for example by month. -@xref{MERGE}. - -@item -The option to compress read-only tables, but still have direct access to -the rows in the table, gives you better performance by minimising disk -reads. This is very useful when you are archiving things. -@xref{myisampack}. - -@item -MySQL has internal support for fulltext search. @xref{Fulltext Search}. - -@item -You can access many databases from the same connection (depending of course -on your privileges). - -@item -MySQL is coded from the start to be multi-threaded while PostgreSQL uses -processes. Context switching and access to common storage areas is much -faster between threads than between separate processes, this gives MySQL -a big speed advantage in multi-user applications and also makes it easier -for MySQL to take full advantage of symmetric multiprocessor (SMP) systems. - -@item -MySQL has a much more sophisticated privilege system than PostgreSQL. -While PostgreSQL only supports @code{INSERT}, @code{SELECT}, and -@code{UPDATE/DELETE} grants per user on a database or a table, MySQL allows -you to define a full set of different privileges on database, table and -column level. MySQL also allows you to specify the privilege on host and -user combinations. @xref{GRANT}. - -@item -MySQL supports a compressed client/server protocol which improves -performance over slow links. - -@item -MySQL employs a ``table handler'' concept, and is the only relational -database we know of built around this concept. This allows different -low-level table types to be swapped into the SQL engine, and each table -type can be optimised for different performance characteristics. - -@item -All MySQL table types (except @strong{InnoDB}) are implemented as files -(one table per file), which makes it really easy to backup, move, delete -and even symlink databases and tables, even when the server is down. - -@item -Tools to repair and optimise @strong{MyISAM} tables (the most common -MySQL table type). A repair tool is only needed when a physical corruption -of a data file happens, usually from a hardware failure. It allows a -majority of the data to be recovered. - -@item -Upgrading MySQL is painless. When you are upgrading MySQL, you don't need -to dump/restore your data, as you have to do with most PostgreSQL upgrades. -@end itemize - -Drawbacks with MySQL compared to PostgreSQL: - -@itemize @bullet -@item -The transaction support in MySQL is not yet as well tested as PostgreSQL's -system. - -@item -Because MySQL uses threads, which are not yet flawless on many OSes, one -must either use binaries from @uref{http://www.mysql.com/downloads/}, or -carefully follow our instructions on -@uref{http://www.mysql.com/doc/I/n/Installing_source.html} to get an -optimal binary that works in all cases. - -@item -Table locking, as used by the non-transactional @code{MyISAM} tables, is -in many cases faster than page locks, row locks or versioning. The -drawback however is that if one doesn't take into account how table -locks work, a single long-running query can block a table for updates -for a long time. This can usually be avoided when designing the -application. If not, one can always switch the trouble table to use one -of the transactional table types. @xref{Table locking}. - -@item -With UDF (user defined functions) one can extend MySQL with both normal -SQL functions and aggregates, but this is not yet as easy or as flexible -as in PostgreSQL. @xref{Adding functions}. - -@item -Updates that run over multiple tables is harder to do in MySQL. -This will, however, be fixed in MySQL 4.0 with multi-table @code{UPDATE} -and in MySQL 4.1 with subselects. -In MySQL 4.0 one can use multi-table deletes to delete from many tables -at the same time. @xref{DELETE}. -@end itemize - -PostgreSQL currently offers the following advantages over MySQL: - -Note that because we know the MySQL road map, we have included in the -following table the version when MySQL should support this feature. -Unfortunately we couldn't do this for previous comparison, because we -don't know the PostgreSQL roadmap. - -@multitable @columnfractions .70 .30 -@item @strong{Feature} @tab @strong{MySQL version} -@item Subselects @tab 4.1 -@item Foreign keys @tab 4.0 and 4.1 -@item Views @tab 4.2 -@item Stored procedures @tab 4.1 -@item Extensible type system @tab Not planned -@item Unions @tab 4.0 -@item Full join @tab 4.0 or 4.1 -@item Triggers @tab 4.1 -@item Constraints @tab 4.1 -@item Cursors @tab 4.1 or 4.2 -@item Extensible index types like R-trees @tab R-trees are planned for 4.2 -@item Inherited tables @tab Not planned -@end multitable - -Other reasons to use PostgreSQL: - -@itemize @bullet -@item -Standard usage in PostgreSQL is closer to ANSI SQL in some cases. - -@item -One can speed up PostgreSQL by coding things as stored procedures. - -@item -For geographical data, R-TREES makes PostgreSQL better than MySQL. - -@item -The PostgreSQL optimiser can do some optimisation that the current MySQL -optimiser can't do. Most notable is doing joins when you don't have the -proper keys in place and doing a join where you are using different keys -combined with OR. The MySQL benchmark suite at -@uref{http://www.mysql.com/information/benchmarks.html} shows you what -kind of constructs you should watch out for when using different -databases. - -@item -PostgreSQL has a bigger team of developers that contribute to the server. -@end itemize - -Drawbacks with PostgreSQL compared to MySQL: - -@itemize @bullet -@item -@code{VACUUM()} makes PostgreSQL hard to use in a 24/7 environment. - -@item -Only transactional tables. - -@item -Much slower @code{INSERT}, @code{DELETE}, and @code{UPDATE}. -@end itemize - -For a complete list of drawbacks, you should also examine the first table -in this section. - -@menu -* MySQL-PostgreSQL benchmarks:: Benchmarking MySQL and PostgreSQL -@end menu - - -@node MySQL-PostgreSQL benchmarks, , MySQL-PostgreSQL features, Compare PostgreSQL -@subsubsection Benchmarking MySQL and PostgreSQL - -@cindex PostgreSQL vs. MySQL, benchmarks - -The only open source benchmark that we know of that can be used to -benchmark MySQL and PostgreSQL (and other databases) is our own. It can -be found at @uref{http://www.mysql.com/information/benchmarks.html}. - -We have many times asked the PostgreSQL developers and some PostgreSQL -users to help us extend this benchmark to make it the definitive benchmark -for databases, but unfortunately we haven't gotten any feedback for this. - -We the MySQL developers have, because of this, spent a lot of hours to get -maximum performance from PostgreSQL for the benchmarks, but because we -don't know PostgreSQL intimately, we are sure that there are things that -we have missed. We have on the benchmark page documented exactly how we -did run the benchmark so that it should be easy for anyone to repeat and -verify our results. - -The benchmarks are usually run with and without the @code{--fast} option. -When run with @code{--fast} we are trying to use every trick the server can -do to get the code to execute as fast as possible. The idea is that the -normal run should show how the server would work in a default setup and -the @code{--fast} run shows how the server would do if the application -developer would use extensions in the server to make his application run -faster. - -When running with PostgreSQL and @code{--fast} we do a @code{VACUUM()} -after every major table @code{UPDATE} and @code{DROP TABLE} to make the -database in perfect shape for the following @code{SELECT}s. The time for -@code{VACUUM()} is measured separately. - -When running with PostgreSQL 7.1.1 we could, however, not run with -@code{--fast} because during the @code{INSERT} test, the postmaster (the -PostgreSQL deamon) died and the database was so corrupted that it was -impossible to restart postmaster. After this happened twice, we decided -to postpone the @code{--fast} test until next PostgreSQL release. The -details about the machine we run the benchmark can be found on the -benchmark page. - -Before going to the other benchmarks we know of, we would like to give -some background on benchmarks: - -It's very easy to write a test that shows @strong{any} database to be the best -database in the world, by just restricting the test to something the -database is very good at and not testing anything that the database is -not good at. If one, after doing this, summarises the result with as -a single figure, things are even easier. - -This would be like us measuring the speed of MySQL compared to PostgreSQL -by looking at the summary time of the MySQL benchmarks on our web page. -Based on this MySQL would be more than 40 times faster than PostgreSQL, -something that is of course not true. We could make things even worse -by just taking the test where PostgreSQL performs worst and claim that -MySQL is more than 2000 times faster than PostgreSQL. - -The case is that MySQL does a lot of optimisations that PostgreSQL -doesn't do. This is of course also true the other way around. An SQL -optimiser is a very complex thing, and a company could spend years on -just making the optimiser faster and faster. - -When looking at the benchmark results you should look for things that -you do in your application and just use these results to decide which -database would be best suited for your application. The benchmark -results also shows things a particular database is not good at and should -give you a notion about things to avoid and what you may have to do in -other ways. - -We know of two benchmark tests that claims that PostgreSQL performs better -than MySQL. These both where multi-user tests, a test that we here at -MySQL AB haven't had time to write and include in the benchmark suite, -mainly because it's a big task to do this in a manner that is fair against -all databases. - -One is the benchmark paid for by Great Bridge, the company that for 16 months -attempted to build a business based on PostgreSQL but now has ceased -operations. This is the probably worst benchmark we have ever seen anyone -conduct. This was not only tuned to only test what PostgreSQL is absolutely -best at, it was also totally unfair against every other database involved in -the test. - -@strong{Note}: We know that even some of the main PostgreSQL -developers did not like the way Great Bridge conducted the benchmark, so we -don't blame the PostgreSQL team for the way the benchmark was done. - -This benchmark has been condemned in a lot of postings and newsgroups so -we will here just shortly repeat some things that were wrong with it. - -@itemize @bullet -@item -The tests were run with an expensive commercial tool, that makes it -impossible for an open source company like us to verify the benchmarks, -or even check how the benchmarks were really done. The tool is not even -a true benchmark tool, but an application/setup testing tool. To refer -this as a ``standard'' benchmark tool is to stretch the truth a long way. - -@item -Great Bridge admitted that they had optimised the PostgreSQL database -(with @code{VACUUM()} before the test) and tuned the startup for the tests, -something they hadn't done for any of the other databases involved. To -say ``This process optimises indexes and frees up disk space a bit. The -optimised indexes boost performance by some margin.'' Our benchmarks -clearly indicate that the difference in running a lot of selects on a -database with and without @code{VACUUM()} can easily differ by a factor -of ten. - -@item -The test results were also strange. The AS3AP test documentation -mentions that the test does ``selections, simple joins, projections, -aggregates, one-tuple updates, and bulk updates''. - -PostgreSQL is good at doing @code{SELECT}s and @code{JOIN}s (especially -after a @code{VACUUM()}), but doesn't perform as well on @code{INSERT}s or -@code{UPDATE}s. The benchmarks seem to indicate that only @code{SELECT}s -were done (or very few updates). This could easily explain they good results -for PostgreSQL in this test. The bad results for MySQL will be obvious a -bit down in this document. - -@item -They did run the so-called benchmark from a Windows machine against a -Linux machine over ODBC, a setup that no normal database user would ever -do when running a heavy multi-user application. This tested more the -ODBC driver and the Windows protocol used between the clients than the -database itself. - -@item -When running the database against Oracle and MS-SQL (Great Bridge has -indirectly indicated that the databases they used in the test), they -didn't use the native protocol but instead ODBC. Anyone that has ever -used Oracle knows that all real application uses the native interface -instead of ODBC. Doing a test through ODBC and claiming that the results -had anything to do with using the database in a real-world situation can't -be regarded as fair. They should have done two tests with and without ODBC -to provide the right facts (after having got experts to tune all involved -databases of course). - -@item -They refer to the TPC-C tests, but they don't mention anywhere that the -test they did was not a true TPC-C test and they were not even allowed to -call it a TPC-C test. A TPC-C test can only be conducted by the rules -approved by the TPC Council (@uref{http://www.tpc.org/}). Great Bridge -didn't do that. By doing this they have both violated the TPC trademark -and miscredited their own benchmarks. The rules set by the TPC Council -are very strict to ensure that no one can produce false results or make -unprovable statements. Apparently Great Bridge wasn't interested in -doing this. - -@item -After the first test, we contacted Great Bridge and mentioned to them -some of the obvious mistakes they had done with MySQL: - -@itemize @minus -@item -Running with a debug version of our ODBC driver - -@item -Running on a Linux system that wasn't optimised for threads - -@item -Using an old MySQL version when there was a recommended newer one available - -@item -Not starting MySQL with the right options for heavy multi-user use (the -default installation of MySQL is tuned for minimal resource use). -@end itemize - -Great Bridge did run a new test, with our optimised ODBC driver and with -better startup options for MySQL, but refused to either use our updated -glibc library or our standard binary (used by 80% of our users), which was -statically linked with a fixed glibc library. - -According to what we know, Great Bridge did nothing to ensure that the -other databases were set up correctly to run well in their test -environment. We are sure however that they didn't contact Oracle or -Microsoft to ask for their advice in this matter ;) - -@item -The benchmark was paid for by Great Bridge, and they decided to publish -only partial, chosen results (instead of publishing it all). -@end itemize - -Tim Perdue, a long time PostgreSQL fan and a reluctant MySQL user -published a comparison on PHPbuilder -(@uref{http://www.phpbuilder.com/columns/tim20001112.php3}). - -When we became aware of the comparison, we phoned Tim Perdue about this -because there were a lot of strange things in his results. For example, -he claimed that MySQL had a problem with five users in his tests, when we -know that there are users with similar machines as his that are using -MySQL with 2000 simultaneous connections doing 400 queries per second. -(In this case the limit was the web bandwidth, not the database.) - -It sounded like he was using a Linux kernel that either had some -problems with many threads, such as kernels before 2.4, which had a problem -with many threads on multi-CPU machines. We have documented in this manual -how to fix this and Tim should be aware of this problem. - -The other possible problem could have been an old glibc library and -that Tim didn't use a MySQL binary from our site, which is linked with -a corrected glibc library, but had compiled a version of his own with. -In any of the above cases, the symptom would have been exactly what Tim -had measured. - -We asked Tim if we could get access to his data so that we could repeat -the benchmark and if he could check the MySQL version on the machine to -find out what was wrong and he promised to come back to us about this. -He has not done that yet. - -Because of this we can't put any trust in this benchmark either :( - -Over time things also changes and the above benchmarks are not that -relevant anymore. MySQL now have a couple of different table handlers -with different speed/concurrency tradeoffs. @xref{Table types}. It -would be interesting to see how the above tests would run with the -different transactional table types in MySQL. PostgreSQL has of course -also got new features since the test was made. As the above test are -not publicly available there is no way for us to know how the -database would preform in the same tests today. - - -Conclusion: - -The only benchmarks that exist today that anyone can download and run -against MySQL and PostgreSQL is the MySQL benchmarks. We here at MySQL -believe that open source databases should be tested with open source tools! -This is the only way to ensure that no one does tests that nobody can -reproduce and use this to claim that a database is better than another. -Without knowing all the facts it's impossible to answer the claims of the -tester. - -The thing we find strange is that every test we have seen about -PostgreSQL, that is impossible to reproduce, claims that PostgreSQL is -better in most cases while our tests, which anyone can reproduce, -clearly shows otherwise. With this we don't want to say that PostgreSQL -isn't good at many things (it is!) or that it isn't faster than MySQL -under certain conditions. We would just like to see a fair test where -they are very good so that we could get some friendly competition going! - -For more information about our benchmarks suite @xref{MySQL Benchmarks}. - -We are working on an even better benchmark suite, including multi user -tests, and a better documentation of what the individual tests really -do and how to add more tests to the suite. - - -@node TODO, , Comparisons, Introduction +@node TODO, , Compatibility, Introduction @section MySQL and The Future (The TODO) @cindex ToDo list for MySQL @@ -5583,7 +3669,7 @@ This section lists features not yet implemented in the current version of MySQL 4.0, which will however be implemented in later versions of MySQL 4.0. This being very volatile information, please consider this list valid only if you are reading it from -the MySQL website (@uref{http://www.mysql.com/}). +the MySQL web site (@uref{http://www.mysql.com/}). @itemize @bullet @item @@ -7377,7 +5463,7 @@ ReiserFS (or any similar Linux distribution) and Sparc with Solaris 2.7 or 2.8. FreeBSD comes third, but we really hope it will join the top club once the thread library is improved. We also hope that at some point we will be able to include all other platforms on which -MySQL compiles, runs ok, but not quite with the same level of +MySQL compiles, runs okay, but not quite with the same level of stability and performance, into the top category. This will require some effort on our part in cooperation with the developers of the OS/library components MySQL depends upon. If you are interested in making @@ -8250,7 +6336,7 @@ running. @xref{Multiple servers}. @cindex applying, patches Sometimes patches appear on the mailing list or are placed in the -patches area of the MySQL website +patches area of the MySQL web site (@uref{http://www.mysql.com/Downloads/Patches/}). To apply a patch from the mailing list, save the message in which the patch @@ -8430,7 +6516,7 @@ following for all recent gcc versions: CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static @end example -The binaries we provide on the MySQL website at +The binaries we provide on the MySQL web site at @uref{http://www.mysql.com/} are all compiled with full optimisation and should be perfect for most users. @xref{MySQL binaries}. There are some things you can tweak to make an even faster binary, but this is only for @@ -8970,7 +7056,7 @@ From the @code{Build} menu, select the @code{Set Active Configuration} menu. @item Click over the screen selecting @code{mysqld - Win32 Debug} -and click Ok. +and click OK. @item Press @code{F7} to begin the build of the debug server, libs and some client applications. @@ -9377,7 +7463,7 @@ If you are running RedHat Version 5.0 with a version of @code{glibc} older than 2.0.7-5, you should make sure you have installed all @code{glibc} patches! There is a lot of information about this in the MySQL mail archives. Links to the mail archives are available online at -@uref{http://www.mysql.com/documentation/}. +@uref{http://lists.mysql.com/}. Also, see @ref{Linux}. You can also start @code{mysqld} manually using the @code{--skip-grant-tables} @@ -9499,7 +7585,7 @@ Can't start server : Bind on unix socket... Use @code{ps} to make sure that you don't have another @code{mysqld} server running. If you can't find another server running, you can try to execute the command @code{telnet your-host-name tcp-ip-port-number} and press -@code{RETURN} a couple of times. If you don't get an error message like +Enter a couple of times. If you don't get an error message like @code{telnet: Unable to connect to remote host: Connection refused}, something is using the TCP/IP port @code{mysqld} is trying to use. See @ref{mysql_install_db} and @ref{Multiple servers}. @@ -9686,6 +7772,10 @@ version 4.0; @itemize @bullet @item +@code{INSERT INTO ... SELECT} had in 3.23 always @code{IGNORE} enabled. +In 4.0.1 MySQL will stop (and possible rollback) in case of an error if you +don't specify @code{IGNORE}. +@item @file{safe_mysqld} is renamed to @file{mysqld_safe}. @item The old C API functions @code{mysql_drop_db}, @code{mysql_create_db} and @@ -11678,7 +9768,7 @@ before running make. Note that the above means that you can't symbolic link a database directories to another database directory or symbolic link a table to another database -on BSDI! (Making a symbolic link to another disk is ok). +on BSDI! (Making a symbolic link to another disk is okay). @node Mac OS X, Other Unix Notes, BSD Notes, Operating System Specific Notes @@ -13024,7 +11114,7 @@ familiarise yourself with how @code{mysql} works. Here's a simple command that asks the server to tell you its version number and the current date. Type it in as shown below following the @code{mysql>} -prompt and hit the RETURN key: +prompt and press Enter: @example mysql> SELECT VERSION(), CURRENT_DATE; @@ -13204,7 +11294,7 @@ mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30; "> @end example -If you enter this @code{SELECT} statement, then hit RETURN and wait for the +If you enter this @code{SELECT} statement, then press Enter and wait for the result, nothing will happen. Instead of wondering why this query takes so long, notice the clue provided by the @code{">} prompt. It tells you that @code{mysql} expects to see the rest of an unterminated @@ -13274,7 +11364,7 @@ to think of real-world situations in which a similar type of database might be used. For example, a database like this could be used by a farmer to keep track of livestock, or by a veterinarian to keep track of patient records. A menagerie distribution containing some of the queries and sample data used -in the following sections can be obtained from the MySQL website. +in the following sections can be obtained from the MySQL web site. It's available in either compressed @code{tar} format (@uref{http://www.mysql.com/Downloads/Contrib/Examples/menagerie.tar.gz}) or Zip format @@ -15409,9 +13499,9 @@ group by @cindex Apache -The Contrib section includes programs that let you authenticate your -users from a MySQL database and also let you log your log files -into a MySQL table. @xref{Contrib}. +There are programs that let you authenticate your users from a MySQL +database and also let you log your log files into a MySQL table. +@xref{Portals}. You can change the Apache logging format to be easily readable by MySQL by putting the following into the Apache configuration file: @@ -16355,7 +14445,7 @@ All other information is transferred as text that can be read by anyone who is able to watch the connection. If you are concerned about this, you can use the compressed protocol (in MySQL Version 3.22 and above) to make things much harder. To make things even more secure you should use -@code{ssh}. You can find an open source @code{ssh} client at +@code{ssh}. You can find an Open Source @code{ssh} client at @uref{http://www.openssh.org/}, and a commercial @code{ssh} client at @uref{http://www.ssh.com/}. With this, you can get an encrypted TCP/IP connection between a MySQL server and a MySQL client. @@ -16408,8 +14498,7 @@ user=mysql This will cause the server to start as the designated user whether you start it manually or by using @code{safe_mysqld} or @code{mysql.server}. -For more details, see @ref{Changing MySQL user, , Changing MySQL -user}. +For more details, see @ref{Changing MySQL user}. @item Don't support symlinks to tables (this can be disabled with the @@ -18190,8 +16279,8 @@ or by manipulating the MySQL grant tables directly. The preferred method is to use @code{GRANT} statements, because they are more concise and less error-prone. @xref{GRANT}. -There is also a lot of contributed programs like @code{phpmyadmin} that -can be used to create and administrate users. @xref{Contrib}. +There are also a lot of contributed programs like @code{phpmyadmin} +that can be used to create and administrate users. @xref{Portals}. The examples below show how to use the @code{mysql} client to set up new users. These examples assume that privileges are set up according to the @@ -18366,7 +16455,7 @@ mysql> FLUSH PRIVILEGES; You can also use @code{xmysqladmin}, @code{mysql_webadmin}, and even @code{xmysql} to insert, change, and update values in the grant tables. You can find these utilities in the Contrib directory of the -MySQL website (@uref{http://www.mysql.com/Downloads/Contrib/}). +MySQL web site (@uref{http://www.mysql.com/Downloads/Contrib/}). @node Passwords, Password security, Adding users, User Account Management @@ -18929,7 +17018,7 @@ The different check types stand for the following: @item @code{QUICK} @tab Don't scan the rows to check for wrong links. @item @code{FAST} @tab Only check tables which haven't been closed properly. @item @code{CHANGED} @tab Only check tables which have been changed since last check or haven't been closed properly. -@item @code{MEDIUM} @tab Scan rows to verify that deleted links are ok. This also calculates a key checksum for the rows and verifies this with a calcualted checksum for the keys. +@item @code{MEDIUM} @tab Scan rows to verify that deleted links are okay. This also calculates a key checksum for the rows and verifies this with a calcualted checksum for the keys. @item @code{EXTENDED} @tab Do a full key lookup for all keys for each row. This ensures that the table is 100 % consistent, but will take a long time! @end multitable @@ -18948,13 +17037,13 @@ Which only would do a quick check on the table if it wasn't closed properly. @strong{Note:} that in some case @code{CHECK TABLE} will change the table! This happens if the table is marked as 'corrupted' or 'not closed properly' but @code{CHECK TABLE} didn't find any problems in the -table. In this case @code{CHECK TABLE} will mark the table as ok. +table. In this case @code{CHECK TABLE} will mark the table as okay. If a table is corrupted, then it's most likely that the problem is in the indexes and not in the data part. All of the above check types checks the indexes throughly and should thus find most errors. -If you just want to check a table that you assume is ok, you should use +If you just want to check a table that you assume is okay, you should use no check options or the @code{QUICK} option. The latter should be used when you are in a hurry and can take the very small risk that @code{QUICK} didn't find an error in the data file. (In most cases @@ -21750,7 +19839,7 @@ This can be fixed by using the @code{--character-sets-dir} option to the program in question. @item The character set is a multi-byte-character set that can't be loaded -dynamicly. In this case you have to recompiled the program with the +dynamically. In this case you have to recompile the program with the support for the character set. @item The character set is a dynamic character set, but you don't have a @@ -22866,7 +20955,7 @@ retrieve the result set. Using @code{mysql} is very easy. Just start it as follows: @code{mysql database} or @code{mysql --user=user_name --password=your_password database}. Type a SQL statement, end it with @samp{;}, @samp{\g}, or @samp{\G} -and press RETURN/ENTER. +and press Enter. @cindex @code{mysql} command line options @cindex command line options, @code{mysql} @@ -25261,7 +23350,7 @@ If the slave is running, did it establish connection with the master? Do @code{State} column. If it says @code{connecting to master}, verify the privileges for the replication user on the master, master host name, your DNS setup, whether the master is actually running, whether it is reachable -from the slave, and if all that seems ok, read the error logs. +from the slave, and if all that seems okay, read the error logs. @item If the slave was running, but then stopped, look at SHOW SLAVE STATUS output and check the error logs. It usually @@ -37136,7 +35225,7 @@ If you get the following warning from @code{CHECK TABLE} or @code{myisamchk}: this means that this counter has come out of sync. This doesn't mean that the table is corrupted, but means that you should at least do a -check on the table to verify that it's ok. +check on the table to verify that it's okay. The counter works as follows: @@ -37151,7 +35240,7 @@ When the last instance of a table is closed (because of a @code{FLUSH} or because there isn't room in the table cache) the counter is decremented if the table has been updated at any point. @item -When you repair the table or check the table and it was ok, +When you repair the table or check the table and it was okay, the counter is reset to 0. @item To avoid problems with interaction with other processes that may do a @@ -37166,7 +35255,7 @@ The @code{MyISAM} tables are copied without a @code{LOCK} and @code{FLUSH TABLES}. @item MySQL has crashed between an update and the final close. -(Note that the table may still be ok, as MySQL always issues writes +(Note that the table may still be okay, as MySQL always issues writes for everything between each statement.) @item Someone has done a @code{myisamchk --repair} or @code{myisamchk @@ -37260,7 +35349,7 @@ The disadvantages with @code{MERGE} tables are: @item You can only use identical @code{MyISAM} tables for a @code{MERGE} table. @item -@code{AUTO_INCREMENT} columns are not automaticly updated on @code{INSERT}. +@code{AUTO_INCREMENT} columns are not automatically updated on @code{INSERT}. @item @code{REPLACE} doesn't work. @item @@ -39134,7 +37223,7 @@ the maximum size for a table. The minimum tablespace size is 10 MB. @subsection InnoDB Contact Information Contact information of Innobase Oy, producer of the InnoDB engine. -Website: @uref{http://www.innodb.com/}. +Web site: @uref{http://www.innodb.com/}. Email: @email{Heikki.Tuuri@@innodb.com} @example @@ -39482,7 +37571,7 @@ create dynamic Web pages. It contains support for accessing several databases, including MySQL. PHP may be run as a separate program or compiled as a module for use with the Apache Web server. -The distribution and documentation are available at the PHP website +The distribution and documentation are available at the PHP web site (@uref{http://www.php.net/}). @menu @@ -40094,8 +38183,7 @@ and on most Unix platforms. version at @uref{http://www.mysql.com/downloads/api-myodbc.html}. If you have problem with @strong{MyODBC} and your program also works -with OLEDB, you should try the OLEDB driver that you can find in the -Contrib section. @xref{Contrib}. +with OLEDB, you should try the OLEDB driver. Normally you only need to install @strong{MyODBC} on Windows machines. You only need @strong{MyODBC} for Unix if you have a program like @@ -40104,9 +38192,7 @@ to the databases. If you want to install @strong{MyODBC} on a Unix box, you will also need an @strong{ODBC} manager. @strong{MyODBC} is known to work with -most of the Unix ODBC managers. You can find a list at these in the -@strong{ODBC}-related links section on the MySQL useful links page. -@xref{Useful Links}. +most of the Unix ODBC managers. @xref{Portals}. To install @strong{MyODBC} on Windows, you should download the appropriate @strong{MyODBC} .zip file (for Windows or NT/Win2000), @@ -41436,7 +39522,7 @@ this case the user and database are not changed The @code{db} parameter may be set to @code{NULL} if you don't want to have a default database. -@subsubheading Return values +@subsubheading Return Values Zero for success. Non-zero if an error occurred. @@ -41646,7 +39732,7 @@ if(mysql_drop_db(&mysql, "my_database")) Instructs the server to write some debug information to the log. The connected user must have the @strong{process} privilege for this to work. -@subsubheading Return values +@subsubheading Return Values Zero if the command was successful. Non-zero if an error occurred. @@ -43560,7 +41646,7 @@ int main(void) @{ @subsubheading Return Values -0 if ok, 1 if an error occurred. +0 if okay, 1 if an error occurred. @node mysql_server_end, , mysql_server_init, C Embedded Server func @subsubsection @code{mysql_server_end()} @@ -43765,7 +41851,7 @@ have your own alarm that can break a long read to a server. If you install interrupt handlers for the @code{SIGPIPE} interrupt, the socket handling should be thread safe. -In the older binaries we distribute on our website +In the older binaries we distribute on our web site (@uref{http://www.mysql.com/}), the client libraries are not normally compiled with the thread-safe option (the Windows binaries are by default compiled to be thread safe). Newer binary distributions should @@ -44677,10 +42763,10 @@ is not the case, you should run the script @cindex functions, user-definable, adding @menu -* UDF calling sequences:: UDF calling sequences -* UDF arguments:: Argument processing -* UDF return values:: Return values and error handling -* UDF compiling:: Compiling and installing user-definable functions +* UDF calling sequences:: UDF Calling Sequences +* UDF arguments:: Argument Processing +* UDF return values:: Return Values and Error Handling +* UDF compiling:: Compiling and Installing User-definable Functions @end menu @@ -45235,8 +43321,9 @@ can be done on row-by-row or @code{GROUP BY} level. We have created an example procedure in MySQL Version 3.23 to show you what can be done. -Additionally we recommend you to take a look at 'mylua', which you can find in the Contrib directory. @xref{Contrib}. Which this you can use the LUA -language to load a procedure at runtime into @code{mysqld}. +Additionally we recommend you to take a look at @code{mylua}. +With this you can use the LUA language to load a procedure at +runtime into @code{mysqld}. @menu * procedure analyse:: Procedure analyse @@ -45283,7 +43370,7 @@ You can find all information about procedures by examining the following files: @end itemize -@node Problems, Users, Extending MySQL, Top +@node Problems, Contrib, Extending MySQL, Top @appendix Problems and Common Errors @cindex problems, common errors @@ -45581,7 +43668,7 @@ problem is : @itemize @bullet @item Check if the server is up by doing @code{telnet your-host-name -tcp-ip-port-number} and press @code{RETURN} a couple of times. If there +tcp-ip-port-number} and press Enter a couple of times. If there is a MySQL server running on this port you should get a responses that includes the version number of the running MySQL server. If you get an error like @code{telnet: Unable to connect to @@ -47068,452 +45155,7 @@ We plan to fix the above in 4.0. -@node Users, MySQL Testimonials, Problems, Top -@appendix MySQL Users - -@cindex users, of MySQL -@cindex news sites - -This appendix lists users of MySQL that have given us permission -to list them in our documentation. It is by far not a complete list, but -should give you a general idea of who uses MySQL and what it can -be used for. - -@appendixsec General News Sites - -@itemize @bullet - -@item @uref{http://www.yahoo.com/} (Yahoo!) - -@item @uref{http://slashdot.org/} (Slashdot: A pro-Linux/tech news and comment/discussion site) - -@item @uref{http://www.linux.com/} (All about Linux) - -@item @uref{http://www.linuxtoday.com/} (Linuxtoday) - -@item @uref{http://www.32bitsonline.com/} (32Bits Online: because there's -more than one way to compute) - -@item @uref{http://www.freshmeat.net/} (Freshmeat: News about new versions of computer-related stuff) - -@end itemize - -@cindex search engines, web -@cindex web search engines -@appendixsec Web Search Engines - -@itemize @bullet - -@item @uref{http://www.aaa.com.au/} (AAA Matilda Web Search) -@item @uref{http://www.whatsnu.com/} (What's New) -@item @uref{http://www.aladin.de/} (Aladin) -@item @uref{http://www.columbus-finder.de/} (Columbus Finder) -@item @uref{http://www.spider.de/} (Spider) -@item @uref{http://www.blitzsuche.de/} (Blitzsuche) -@item @uref{http://www.indoseek.co.id/} (Indoseek Indonesia) -@item @uref{http://www.yaboo.dk/} (Yaboo - Yet Another BOOkmarker) -@item @uref{http://www.ozsearch.com.au/} (OzSearch Internet Guide) -@item @uref{http://www.splatsearch.com/} (Splat! Search) -@item @uref{http://osdls.library.arizona.edu/} (The Open Source Digital Library System Project) -@end itemize - -@appendixsec Information Search Engines Specialising in a Particular Area - -@itemize @bullet - -@item @uref{http://www.spylog.ru/} (SpyLOG ; A very popular Web counter site) - -@item @uref{http://www.tucows.com/} (TuCows Network; Free Software archive) - -@item @uref{http://www.jobvertise.com/} (Jobvertise: Post and search for jobs) - -@item @uref{http://www.musicdatabase.com/} (The Music Database) - -@item @uref{http://www.soccersearch.com/} (Football -Soccer- search page) - -@item @uref{http://www.headrush.net/takedown} (TAKEDOWN - wrestling) - -@item @uref{http://www.lyrics.net/} (The International Lyrics Network) - -@item @uref{http://TheMatrix.com/~matrix/band_search.phtml} (Musicians looking for other musicians; free service) - -@item @uref{http://www.addall.com/AddBooks/Stores.html} (AddALL books searching and price comparison) - -@item @uref{http://www.herbaria.harvard.edu/Data/Gray/gray.html} (Harvard's Gray Herbarium Index of Plant Names) - -@item @uref{http://www.game-developer.com/} (The Game Development Search Engine) - -@item @uref{http://www.theinnkeeper.com/} (The Innkeeper Vacation Guides) - -@item @uref{http://www.macgamedatabase.com/} (The Mac Game Database uses PHP and MySQL) -@c From: Marc Antony Vose - -@item @uref{http://www.csse.monash.edu.au/publications/} (Research -Publications at Monash University in Australia) - -@item @uref{http://www.ipielle.emr.it/bts/} -(Occupational Health & Safety Website database; a project for the ECC) -@c c.presutti@ipielle.emr.it - -@item @uref{http://data.mch.mcgill.ca/} (Bioinformatics databases at the -Montreal Children's Hospital using MySQL) -@c saeed@www.debelle.mcgill.ca -@end itemize - -@cindex online magazines -@cindex magazines, online -@appendixsec Online Magazines - -@itemize @bullet -@item @uref{http://www.spoiler.com/} (Spoiler Webzine) -An online magazine featuring music, literature, arts, and design content. -@item @uref{http://www.linux-magazin.de/newsflash/} (Daily news about Linux in German language) -@item @uref{http://www.betazine.com/} (Betazine - The Ultimate Online Beta Tester's Magazine) -@item @uref{http://www.currents.net/ccinfo/aboutcc.html} (Computer Currents Magazine) -@end itemize - -@cindex websites -@appendixsec Websites that Use MySQL as a Backend - -@itemize @bullet - -@item @uref{http://liftoff.msfc.nasa.gov/} (NASA) -@item @uref{http://kids.msfc.nasa.gov/} (NASA KIDS) -@item @uref{http://science.nasa.gov/} (Sience@@NASA) - -@item @uref{http://www.handy.de/} (handy.de) - -@item @uref{http://lindev.jmc.tju.edu/qwor/} (Qt Widget and Object Repository) - -@item @uref{http://www.samba-choro.com.br/} (Brazilian samba site; in Portuguese) - -@item @uref{http://pgss.iss.uw.edu.pl/en_index.ISS} (Polish General Social Survey) - -@item @uref{http://www.expo2000.com/} Expo2000 - world-wide distribution of -tickets for this event is implemented using MySQL and Tcl/Tk. More than -5000 travel agencies all over the world have access to it. - -@item @uref{http://www.freevote.com/} FreeVote.com is a free voting -service with millions of users. - -@item @uref{http://f1.tauzero.se/} (Forza Motorsport) - -@item @uref{http://www.dreamhost.com/} (DreamHost Web Hosting) - -@end itemize - -@cindex services -@appendixsec Domain/Internet/Web and Related Services - -@itemize @bullet - -@item @uref{http://www.wix.com/mysql-hosting/} (Registry of Web providers that -support MySQL) - -@item @uref{http://www.yi.org/} (Dynamic DNS Services) - -@item @uref{http://www.dynodns.net/} (Dynamic domain name service) - -@item @uref{http://www.ods.org/} (Open DNS Project; free dynamic DNS service) - -@c @item @uref{http://dynodns.net/} (Free dynamic DNS implementation) -@c EMAIL: A Moore - -@item @uref{http://www.hn.org/} (Hammernode; Public DNS Servers) - -@item @uref{http://www.fdns.net/} (Free 3rd level domains) - -@item @uref{http://worldcommunity.com/} (Online Database) - -@item @uref{http://www.bigbiz.com/} (BigBiz Internet Services) - -@item @uref{http://virt.circle.net/} (The Virt Gazette) - -@item @uref{http://www.california.com/} (Global InfoNet Inc) - -@item @uref{http://www.webhosters.com/} (WebHosters - A Guide to WWW Providers) - -@item @uref{http://online.dn.ru/} (Internet information server) - -@item @uref{http://www.worldnetla.net/} (WorldNet Communications - An Internet Services Provider) - -@item @uref{http://www.netizen.com.au/} (Netizen: Australian-based Web consultancy) - -@item @uref{http://www.trainingpages.co.uk/} (Search site for training courses in the UK) - -@item @uref{http://chat.nitco.com/} (Gannon Chat; GPL. Written in Perl and Javascript) - -@item @uref{http://www.addurls.com/} (A general links directory) - -@item @uref{http://www.bookmarktracker.com/} (A Web-based bookmark management service) - -@item @uref{http://www.cdrom.com/} (Walnut Creek CDROM) - -@item @uref{http://www.wwwthreads.org/} (WWWThreads; Interactive discussion Forums) - -@item @uref{http://pvmon.portici.enea.it/Meteo/} (In Italian; Storage data from meteo station) - -@item @uref{http://www.buysell.net/} (Online "Person To Person" Auction) - -@item @uref{http://tips.pair.com/} (Tips on Web development) - -@item @uref{http://www.mailfriends.com/} (Mailfriends.com is a FREE service for -everybody who wants to find friends over the internet) - -@item @uref{http://www.uninova.com/cgi-bin/wctelnets?list} (Web Page Telnet BBS List) - -@item @uref{http://www.uninova.com/cnc.html} (UniNova Digital Postcards) - -@c @item @uref{http://cabinboy.powersurfr.com/} (An Internet RFC search engine) - -@item @uref{http://www.dslreports.com/} (DSL-provider search with reviews) -Made with MySQL and Modperl, all pages are generated dynamically out of -the MySQL database -@end itemize - -@cindex PHP, websites -@appendixsec Websites that Use @code{PHP} and MySQL - -@itemize @bullet -@c @item @uref{http://www.wh200th.com/} (White House 200th Anniversary site) - -@item @uref{http://support.jgaa.com/} (Jgaa's Internet - Official Support Site) - -@item @uref{http://io.incluso.com/} (Ionline - online publication) MySQL, -PHP, Java, Web programming, DB development - -@item @uref{http://www.baboo.com/} (BaBoo - Browse and Bookmark. Free Web-based bookmark manager and Calendar) - -@item @uref{http://www.courses.pjc.cc.fl.us/Schedule/} -(Course Schedule System at Pensacola Junior College) - -@item @uref{http://www.fccj.org/} (Florida Community College at Jacksonville) - -@item @uref{http://www.32bit.com/} (32bit.com; An extensive shareware / freeware archive) - -@item @uref{http://www.jokes2000.com/} (Jokes 2000) -@c Added 990604; EMAIL: ah@dybdahl.dk - -@item @uref{http://www.burken.nu/} -Burken is a webhotel that provides scripts, among other things, -for remote users, like counters, guestbooks etc. -@c Added 990608; EMAIL: spacedmp@SpaceDump.Burken.NU (Anders Olausson) - -@item @uref{http://tips.pair.com/} -Contains tips on html, javascript, 2d/3d graphics, and PHP3/MySQL. -All pages are generated from a database. -@c Added 990614; EMAIL: downey@image.dk (Rune Madsen) - -@item @uref{http://www.softwarezrus.com/} -Ecommerce site that is selling computers. -@end itemize - -@cindex consultants, list of -@appendixsec MySQL Consultants - -@itemize @bullet - -@item @uref{http://www.ayni.com/} (Ayni AG) - -@item @uref{http://worldcommunity.com/} (Online Database) - -@item @uref{http://www2.dataguard.no/} (DataGuard; Uses MySQL and PHP) - -@item @uref{http://wwits.net/programs/mysql.phtml} (WWITS; uses MySQL and PHP) - -@item @uref{http://www.worldcommunity.com/} (WCN - The World Community Network) - -@item @uref{http://www.chipcastle.com/} (Chip Castle Dot Com Inc) -@c Added 990603 EMAIL: chip@chipcastle.com (Chip Castle) - -@item @uref{http://www.cyber.com.au/} (Cybersource Pty. Ltd) - -@item @uref{http://www.spring.de/} (Spring infotainment gmbh & co. kg) -@c added 990905 "Oliver Pischke" - -@item @uref{http://www.wamdesign.com/} (Wam Design develops websites using MySQL) -@c Added 990905; max@wamdesign.com - -@item @uref{http://www.berkeleyconsultants.com/} (Berkeley Consultants Group) - -@item @uref{http://www.jammconsulting.com/} (JAMM Consulting Inc) - -@end itemize - -@c Commented out by Arjen 011018, section is empty! -@c appendixsec Programming - -@cindex web pages, miscellaneous -@appendixsec Uncategorised Pages - -@itemize @bullet - -@item @uref{http://www.feature-showcase.com/htmls/demo_mysql.sql} (AZC.COM's Feature Showcase) - -@item @uref{http://www.teach.org.uk/subjects/trainingcourse/g.html} (Course Search) - -@item @uref{http://www.northerbys.com/} (Northerbys Online Auctions) - -@item @uref{http://www.schiphol.nl/flights/home.htm} (Amsterdam Airport Schiphol) - -@item @uref{http://TheMatrix.com/seventhsin/query.phtml} (CD database) - -@item @uref{http://TheMatrix.com/~flmm/GEAR.html} (Used Audio Gear Database) - -@item @uref{http://www.kiss.de/musik-mueller/} (Musical note-sheets) - -@item @uref{http://www.bagism.com/} (Bagism; A John Lennon fan page) - -@item @uref{http://www.selftaught.com/} (US Folk art broker) - -@item @uref{http://organizer.net/} (Mail reading on the Web) - -@item @uref{http://www.mypage.org/} (Free home pages on www.somecoolname.mypage.org) - -@item @uref{http://www.schulweb.de/} (Der Server f@"ur Schulen im Web - in German) - -@item @uref{http://www.ald.net/} (Auldhaefen Online Services) - -@item @uref{http://www.cary.net/} (CaryNET Information Center) - -@item @uref{http://www.dataden.com/} (Dataden Computer Systems) - -@item @uref{http://andree.grm.se/} (Andr@'emuseet; in Swedish) - -@item @uref{http://www.him.net/} (HOMESITE Internet Marketing) - -@item @uref{http://www.jade-v.com/techinfo.html} (Jade-V Network Services) - -@item @uref{http://ww2010.atmos.uiuc.edu/(Gl)/abt/aknw/tech.rxml} -Weather World 2010 Technical Credits - -@item @uref{http://gimp.foebud.org/registry/doc/} -About The Gimp plugin registry - -@item @uref{http://www.fast-inc.com/Products/Archiver/database.html} -Java tool; archiver technical detail (Slightly optimistic about MySQL -ANSI-92 compliance) - -@item @uref{http://www.gamesdomain.com/cheats/usrcheat.phtml} (Games Domain Cheats Database) - -@item @uref{http://www.kcilink.com/poweredby/} (The "Powered By" Page; Kcilink) - -@item @uref{http://www.netcasting.net/index.whtml} (Netcasting) - -@item @uref{http://homepages.tig.com.au/~mjj/nbltips} (NBL: Australian National Basketball League; tipping) - -@item @uref{http://www.cgishop.com/} (CGI shop) - -@item @uref{http://www.whirlycott.com/} (Whirlycott: Website Design) - -@item @uref{http://www.mtp.dk/} (Museum Tusculanum Press) - -@item @uref{http://csdgi.historie.ku.dk/biblio/} (Centro Siciliano di Documentazione) - -@item @uref{http://caribou.dyn.ml.org:8000/} (Quake statistics database) - -@item @uref{http://www.astroforum.ch/} (Astroforum: Astrologie and related things; in German) - -@item @uref{http://www.opendebate.com/} (OpenDebate - Interactive Polls & Open Discussion) - -@item @uref{http://vermeer.organik.uni-erlangen.de/dissertationen/} (Online chemical dissertation server) - -@item @uref{http://www.freschinfo.com/} (FreSch! The Free Scholarship Search Service) - -@item @uref{http://www.nada.kth.se/~staffanu/pinball/} (Stockholm Pinball Locator) - -@item @uref{http://www.hek.com/} (HEK - a construction company) - -@item @uref{http://www.ebi.nl/} (Elsevier Business Information) - -@item @uref{http://vaccination.medicallink.se/} (Medical Links; using ColdFusion and MySQL) - -@item @uref{http://www.joblink-usa.com/} (Search for jobs & people at JobLink-USA) - -@item @uref{http://www.skydive.net/competfs/} (Competition Formation Skydiving) - -@item @uref{http://www.galaxy-net.net/} (Galaxy-NET Telecommunications; E-commerce and internal accounting) - -@item @uref{http://www.borsen.dk/} (Denmark's leading business daily newspaper B@o{}rsen) - -@item @uref{http://tmmm.simplenet.com/indb/} (The Internet NES Database) - -@item @uref{http://www.russia.cz/} (Travel agency in Prague in 3 languages) - -@item @uref{http://www.linkstation.de/} (Linkstation) - -@item @uref{http://www.peoplestaff.com/} (Searchable online database at Peoplestaff) - -@item @uref{http://www.dreamhorse.com/} (A searchable database system for horse classified ads) - -@item @uref{http://pootpoot.com/} (The Poot site) - -@item @uref{http://grateful.net/hw_html/} ("Playin' in the LAN"; a network monitoring suite) - -@c Update from Christopher Milton 1999-12-21 -@item @uref{http://www.usapa.army.mil/} (U.S. Army Publishing Agency) - -@item @uref{http://www.nekretnine.co.yu/} (Realestate handling in Yugoslavia) - -@item @uref{http://demo.cpsoft.com/pims/devFAQ.html} (PIMS; a Patient Information Management System) - -@item @uref{http://cpsoft.com/} (Pilkington Software Inc) - -@item @uref{http://www.no-quarter.org/} (A Vietnam Veteran's Memorial - The Wall - database) - -@item @uref{http://www.gamers-union.com/} (Gamer's Union specializes in auctions of used & out-of-print gaming material) - -@item @uref{http://www.montereyhigh.com/office/dbul.php3} (A daily bulletin at Monterey High school) - -@item @uref{http://www.myEastside.com/} (Community-owned site serving Lake -Washington's Eastside residents and businesses) - -@item @uref{http://bowling-france.net/} (French bowling site) -@end itemize - -Send any additions to this list to @email{webmaster@@mysql.com}. - -@page - - - - -@node MySQL Testimonials, Contrib, Users, Top -@appendix MySQL Testimonials - -@cindex MySQL Testimonials - -The section 'MySQL Users' contains a lot of different links to -MySQL users but doesn't provide that much information about how -they are using MySQL. @xref{Users}. This section gives you an idea -of how other MySQL users are using MySQL to solve their problems. - -Please note that all new stories are added on the MySQL website, -@uref{http://www.mysql.com/}. -Do let us know about @emph{your} success story too! - -@itemize @bullet -@item -@strong{Peter Zaitsev of Spylog.ru} writes: -I think you might be interested in my database size. The whole database -is currently on 15 servers and I think it's about 60.000 of tables -containing about 5.000.000.000 of rows. My mostly loaded server -currently holds about 10.000 of tables with 1.000.000.000 of rows in it. -Hugest tables have about 50.000.000 of rows, and this value will raise -as soon as I'll move to 2.4 kernel with large files. Currently I have to -delete much of logs for large sites to hold table sizes in 2Gb. - -@item -@strong{Texas Instruments} is using MySQL for handling tables -that contain up to 2,000 million rows in a validation regression database. -@end itemize - -@page - - - - -@node Contrib, Credits, MySQL Testimonials, Top +@node Contrib, Credits, Problems, Top @appendix Contributed Programs @cindex contributed programs @@ -47589,7 +45231,7 @@ license. Please check @uref{http://www.worldserver.com/mm.mysql/} for the latest drivers (and other JDBC information) because these drivers may be out of date. @item @uref{http://www.caucho.com/projects/jdbc-mysql/index.xtp} -The Resin commercial JDBC driver, which is released under open source. +The Resin commercial JDBC driver, which is released under Open Source. It claims to be faster than the mm driver, but we haven't received that much information about this yet. @@ -47881,7 +45523,7 @@ The xmysql homepage is at @uref{http://web.wt.net/~dblhack/} Requires @uref{http://bragg.phys.uwm.edu/xforms/} (xforms 0.88) to work. @item @uref{http://www.tamos.net/sw/dbMetrix/} -dbMatrix is an open source client for exploring databases and executing +dbMatrix is an Open Source client for exploring databases and executing SQL. Supports MySQL, Oracle, PostgreSQL, and mSQL. @item @uref{http://www.multimania.com/bbrox/GtkSQL/} @@ -47977,7 +45619,7 @@ This cgi scripts in Perl enables you to edit content of Mysql database. By Tomas Zeman. @item @uref{http://worldcommunity.com/opensource/futuresql/} -FutureSQL by Peter F. Brown, is a free, open source rapid application +FutureSQL by Peter F. Brown, is a free, Open Source rapid application development Web database administration tool, written in Perl, using MySQL. It uses @code{DBI:DBD} and @code{CGI.pm}. @@ -48409,7 +46051,7 @@ Most of crash-me and the foundation for the MySQL benchmarks. Coordinator and initial main writer of the @strong{Reference Manual}, including enhancements to @code{texi2html}. @item -Automatic website updating from the manual. +Automatic web site updating from the manual. @item Initial Autoconf, Automake, and Libtool support. @item @@ -48806,7 +46448,7 @@ Funded replication. @item NuSphere Editing of the MySQL manual. @item Stork Design studio -The MySQL website in use between 1998-2000. +The MySQL web site in use between 1998-2000. @item Intel Contributed to development on Windows and Linux platforms. @item Compaq @@ -48867,6 +46509,10 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}. @itemize @bullet @item +Fixed core dump bug in @code{UPDATE ... ORDER BY }. +@item +Changed @code{INSERT INTO .. SELECT} to by default stop on errors. +@item Ignore @code{DATA DIRECTORY} and @code{INDEX DIRECTORY} directives on windows. @item Added boolean fulltext search code. It should be considered early alpha. @@ -54590,7 +52236,7 @@ This appendix will help you port MySQL to other operationg systems. Do check the list of currently supported operating systems first. @xref{Which OS}. If you have created a new port of MySQL, please let us know so that -we can list it here and on our website (@uref{http://www.mysql.com/}), +we can list it here and on our web site (@uref{http://www.mysql.com/}), recommending it to other users. Note: If you create a new port of MySQL, you are free to copy and @@ -54608,7 +52254,7 @@ thread support is probably to port MIT-pthreads. See (@uref{http://www.humanfactor.com/pthreads/}). The MySQL distribution includes a patched version of -Provenzano's Pthreads from MIT (see the MIT Pthreads webpage at +Provenzano's Pthreads from MIT (see the MIT Pthreads web page at @uref{http://www.mit.edu:8001/people/proven/pthreads.html}). This can be used for some operating systems that do not have POSIX threads. @@ -55004,8 +52650,7 @@ work. If you find such a query, try first upgrading to the newest MySQL version. If this doesn't help and you can't find anything in the @code{mysql} mail archive, you should report the bug to @email{mysql@@lists.mysql.com}. Links to mail archives are available -online at the @uref{http://www.mysql.com/documentation/, MySQL -documentation page}. +online at @uref{http://lists.mysql.com/}. If you have started @code{mysqld} with @code{myisam-recover}, MySQL will automatically check and try to repair @code{MyISAM} diff --git a/Docs/section.Comparisons.texi b/Docs/section.Comparisons.texi new file mode 100644 index 00000000000..3d62d452b8d --- /dev/null +++ b/Docs/section.Comparisons.texi @@ -0,0 +1,1118 @@ +@c FIX AGL 20011108 Extracted from manual.texi. +@c Contains comparison section, mSQL and PostgreSQL. +@c Also some mSQL to MySQL migration info but that is probably outdated. + + +@node Comparisons, TODO, Compatibility, Introduction +@section How MySQL Compares to Other Databases + +@cindex databases, MySQL vs. others +@cindex comparisons, MySQL vs. others + +@menu +* Compare mSQL:: How MySQL compares to @code{mSQL} +* Compare PostgreSQL:: How MySQL compares with PostgreSQL +@end menu + +Our users have successfully run their own benchmarks against a number +of @code{Open Source} and traditional database servers. We are aware of +tests against @code{Oracle}, @code{DB/2}, @code{Microsoft SQL Server} +and other commercial products. Due to legal reasons we are restricted +from publishing some of those benchmarks in our reference manual. + +This section includes a comparison with @code{mSQL} for historical +reasons and with @code{PostgreSQL} as it is also an Open Source +database. If you have benchmark results that we can publish, please +contact us at @email{benchmarks@@mysql.com}. + +For comparative lists of all supported functions and types as well +as measured operational limits of many different database systems, +see the @code{crash-me} web page at +@uref{http://www.mysql.com/information/crash-me.php}. + + +@node Compare mSQL, Compare PostgreSQL, Comparisons, Comparisons +@subsection How MySQL Compares to @code{mSQL} + +@table @strong +@item Performance + +For a true comparison of speed, consult the growing MySQL benchmark +suite. @xref{MySQL Benchmarks}. + +Because there is no thread creation overhead, a small parser, few features, and +simple security, @code{mSQL} should be quicker at: + +@itemize @bullet +@item +Tests that perform repeated connects and disconnects, running a very simple +query during each connection. + +@item +@code{INSERT} operations into very simple tables with few columns and keys. + +@item +@code{CREATE TABLE} and @code{DROP TABLE}. + +@item +@code{SELECT} on something that isn't an index. (A table scan is very +easy.) +@end itemize + +Because these operations are so simple, it is hard to be better at them when +you have a higher startup overhead. After the connection is established, +MySQL should perform much better. + +On the other hand, MySQL is much faster than @code{mSQL} (and +most other SQL implementations) on the following: + +@itemize @bullet +@item +Complex @code{SELECT} operations. + +@item +Retrieving large results (MySQL has a better, faster, and safer +protocol). + +@item +Tables with variable-length strings, because MySQL has more efficient +handling and can have indexes on @code{VARCHAR} columns. + +@item +Handling tables with many columns. + +@item +Handling tables with large record lengths. + +@item +@code{SELECT} with many expressions. + +@item +@code{SELECT} on large tables. + +@item +Handling many connections at the same time. MySQL is fully +multi-threaded. Each connection has its own thread, which means that +no thread has to wait for another (unless a thread is modifying +a table another thread wants to access). In @code{mSQL}, once one connection +is established, all others must wait until the first has finished, regardless +of whether the connection is running a query that is short or long. When the +first connection terminates, the next can be served, while all the others wait +again, etc. + +@item +Joins. +@code{mSQL} can become pathologically slow if you change the order of tables +in a @code{SELECT}. In the benchmark suite, a time more than 15000 times +slower than MySQL was seen. This is due to @code{mSQL}'s lack of a +join optimiser to order tables in the optimal order. However, if you put the +tables in exactly the right order in @code{mSQL}2 and the @code{WHERE} is +simple and uses index columns, the join will be relatively fast! +@xref{MySQL Benchmarks}. + +@item +@code{ORDER BY} and @code{GROUP BY}. + +@item +@code{DISTINCT}. + +@item +Using @code{TEXT} or @code{BLOB} columns. +@end itemize + +@item SQL Features + +@itemize @bullet +@item @code{GROUP BY} and @code{HAVING}. +@code{mSQL} does not support @code{GROUP BY} at all. +MySQL supports a full @code{GROUP BY} with both @code{HAVING} and +the following functions: @code{COUNT()}, @code{AVG()}, @code{MIN()}, +@code{MAX()}, @code{SUM()}, and @code{STD()}. @code{COUNT(*)} is optimised to +return very quickly if the @code{SELECT} retrieves from one table, no other +columns are retrieved, and there is no @code{WHERE} clause. @code{MIN()} and +@code{MAX()} may take string arguments. + +@item @code{INSERT} and @code{UPDATE} with calculations. +MySQL can do calculations in an @code{INSERT} or @code{UPDATE}. +For example: + +@example +mysql> UPDATE SET x=x*10+y WHERE x<20; +@end example + +@item Aliasing. +MySQL has column aliasing. + +@item Qualifying column names. +In MySQL, if a column name is unique among the tables used in a +query, you do not have to use the full qualifier. + +@item @code{SELECT} with functions. +MySQL has many functions (too many to list here; see @ref{Functions}). + +@end itemize + +@item Disk Space Efficiency +That is, how small can you make your tables? + +MySQL has very precise types, so you can create tables that take +very little space. An example of a useful MySQL datatype is the +@code{MEDIUMINT} that is 3 bytes long. If you have 100,000,000 records, +saving even one byte per record is very important. + +@code{mSQL2} has a more limited set of column types, so it is +more difficult to get small tables. + +@item Stability +This is harder to judge objectively. For a discussion of MySQL +stability, see @ref{Stability}. + +We have no experience with @code{mSQL} stability, so we cannot say +anything about that. + +@item Price +Another important issue is the license. MySQL has a +more flexible license than @code{mSQL}, and is also less expensive than +@code{mSQL}. Whichever product you choose to use, remember to at least +consider paying for a license or e-mail support. (You are required to get +a license if you include MySQL with a product that you sell, +of course.) + +@item Perl Interfaces +MySQL has basically the same interfaces to Perl as @code{mSQL} with +some added features. + +@item JDBC (Java) +MySQL currently has a lot of different JDBC drivers: + +@itemize @bullet +@item +The mm driver: A type 4 JDBC driver by Mark Matthews +@email{mmatthew@@ecn.purdue.edu}. This is released under the LGPL. + +@item +The Resin driver. This is a commercial JDBC driver released under open +source. @uref{http://www.caucho.com/projects/jdbc-mysql/index.xtp} + +@item +The gwe driver: A Java interface by GWE technologies (not supported anymore). + +@item +The jms driver: An improved gwe driver by Xiaokun Kelvin ZHU +@email{X.Zhu@@brad.ac.uk} (not supported anymore). + +@item +The twz driver: A type 4 JDBC driver by Terrence W. Zellers +@email{zellert@@voicenet.com}. This is commercial but is free for private +and educational use (not supported anymore). +@end itemize + +The recommended driver is the mm driver. The Resin driver may also be +good (at least the benchmarks looks good), but we haven't received that much +information about this yet. + +We know that @code{mSQL} has a JDBC driver, but we have too little experience +with it to compare. + +@item Rate of Development +MySQL has a small core team of developers, but we are quite +used to coding C and C++ very rapidly. Because threads, functions, +@code{GROUP BY}, and so on are still not implemented in @code{mSQL}, it +has a lot of catching up to do. To get some perspective on this, you +can view the @code{mSQL} @file{HISTORY} file for the last year and +compare it with the News section of the MySQL Reference Manual +(@pxref{News}). It should be pretty obvious which one has developed +most rapidly. + +@item Utility Programs +Both @code{mSQL} and MySQL have many interesting third-party +tools. Because it is very easy to port upward (from @code{mSQL} to +MySQL), almost all the interesting applications that are available for +@code{mSQL} are also available for MySQL. + +MySQL comes with a simple @code{msql2mysql} program that fixes +differences in spelling between @code{mSQL} and MySQL for the +most-used C API functions. +For example, it changes instances of @code{msqlConnect()} to +@code{mysql_connect()}. Converting a client program from @code{mSQL} to +MySQL usually requires only minor effort. +@end table + +@menu +* Using mSQL tools:: How to convert @code{mSQL} tools for MySQL +* Protocol differences:: How @code{mSQL} and MySQL Client/Server Communications Protocols Differ +* Syntax differences:: How @code{mSQL} 2.0 SQL Syntax Differs from MySQL +@end menu + + +@node Using mSQL tools, Protocol differences, Compare mSQL, Compare mSQL +@subsubsection How to Convert @code{mSQL} Tools for MySQL + +@cindex MySQL tools, conversion +@cindex converting, tools +@cindex tools, converting + +According to our experience, it doesn't take long to convert tools +such as @code{msql-tcl} and @code{msqljava} that use the +@code{mSQL} C API so that they work with the MySQL C API. + +The conversion procedure is: + +@enumerate +@item +Run the shell script @code{msql2mysql} on the source. This requires the +@code{replace} program, which is distributed with MySQL. + +@item +Compile. + +@item +Fix all compiler errors. +@end enumerate + +Differences between the @code{mSQL} C API and the MySQL C API are: + +@itemize @bullet +@item +MySQL uses a @code{MYSQL} structure as a connection type (@code{mSQL} +uses an @code{int}). + +@item +@code{mysql_connect()} takes a pointer to a @code{MYSQL} structure as a +parameter. It is easy to define one globally or to use @code{malloc()} to get +one. @code{mysql_connect()} also takes two parameters for specifying the +user and password. You may set these to @code{NULL, NULL} for default use. + +@item +@code{mysql_error()} takes the @code{MYSQL} structure as a parameter. Just add +the parameter to your old @code{msql_error()} code if you are porting old code. + +@item +MySQL returns an error number and a text error message for all +errors. @code{mSQL} returns only a text error message. + +@item +Some incompatibilities exist as a result of MySQL supporting +multiple connections to the server from the same process. +@end itemize + + +@node Protocol differences, Syntax differences, Using mSQL tools, Compare mSQL +@subsubsection How @code{mSQL} and MySQL Client/Server Communications Protocols Differ + +@cindex communications protocols +@cindex mSQL vs. MySQL + +There are enough differences that it is impossible (or at least not easy) +to support both. + +The most significant ways in which the MySQL protocol differs +from the @code{mSQL} protocol are listed below: + +@itemize @bullet +@item +A message buffer may contain many result rows. + +@item +The message buffers are dynamically enlarged if the query or the +result is bigger than the current buffer, up to a configurable server and +client limit. + +@item +All packets are numbered to catch duplicated or missing packets. + +@item +All column values are sent in ASCII. The lengths of columns and rows are sent +in packed binary coding (1, 2, or 3 bytes). + +@item +MySQL can read in the result unbuffered (without having to store the +full set in the client). + +@item +If a single read/write takes more than 30 seconds, the server closes +the connection. + +@item +If a connection is idle for 8 hours, the server closes the connection. +@end itemize + +@menu +* Syntax differences:: How @code{mSQL} 2.0 SQL Syntax Differs from MySQL +@end menu + + +@node Syntax differences, , Protocol differences, Compare mSQL +@subsubsection How @code{mSQL} 2.0 SQL Syntax Differs from MySQL + +@noindent +@strong{Column types} + +@table @code +@item MySQL +Has the following additional types (among others; +@pxref{CREATE TABLE, , @code{CREATE TABLE}}): +@itemize @bullet +@item +@c FIX bad lingo, needs rephrasing +@code{ENUM} type for one of a set of strings. +@item +@c FIX bad lingo, needs rephrasing +@code{SET} type for many of a set of strings. +@item +@code{BIGINT} type for 64-bit integers. +@end itemize +@item +MySQL also supports +the following additional type attributes: +@itemize @bullet +@item +@code{UNSIGNED} option for integer columns. +@item +@code{ZEROFILL} option for integer columns. +@item +@code{AUTO_INCREMENT} option for integer columns that are a +@code{PRIMARY KEY}. +@xref{mysql_insert_id, , @code{mysql_insert_id()}}. +@item +@code{DEFAULT} value for all columns. +@end itemize +@item mSQL2 +@code{mSQL} column types correspond to the MySQL types shown below: +@multitable @columnfractions .15 .85 +@item @code{mSQL} @strong{type} @tab @strong{Corresponding MySQL type} +@item @code{CHAR(len)} @tab @code{CHAR(len)} +@item @code{TEXT(len)} @tab @code{TEXT(len)}. @code{len} is the maximal length. +And @code{LIKE} works. +@item @code{INT} @tab @code{INT}. With many more options! +@item @code{REAL} @tab @code{REAL}. Or @code{FLOAT}. Both 4- and 8-byte versions are available. +@item @code{UINT} @tab @code{INT UNSIGNED} +@item @code{DATE} @tab @code{DATE}. Uses ANSI SQL format rather than @code{mSQL}'s own format. +@item @code{TIME} @tab @code{TIME} +@item @code{MONEY} @tab @code{DECIMAL(12,2)}. A fixed-point value with two decimals. +@end multitable +@end table + +@noindent +@strong{Index Creation} + +@table @code +@item MySQL +Indexes may be specified at table creation time with the @code{CREATE TABLE} +statement. +@item mSQL +Indexes must be created after the table has been created, with separate +@code{CREATE INDEX} statements. +@end table + +@noindent +@strong{To Insert a Unique Identifier into a Table} + +@table @code +@item MySQL +Use @code{AUTO_INCREMENT} as a column type +specifier. +@xref{mysql_insert_id, , @code{mysql_insert_id()}}. +@item mSQL +Create a @code{SEQUENCE} on a table and select the @code{_seq} column. +@end table + +@noindent +@strong{To Obtain a Unique Identifier for a Row} + +@table @code +@item MySQL +Add a @code{PRIMARY KEY} or @code{UNIQUE} key to the table and use this. +New in Version 3.23.11: If the @code{PRIMARY} or @code{UNIQUE} key consists of only one +column and this is of type integer, one can also refer to it as +@code{_rowid}. +@item mSQL +Use the @code{_rowid} column. Observe that @code{_rowid} may change over time +depending on many factors. +@end table + +@noindent +@strong{To Get the Time a Column Was Last Modified} + +@table @code +@item MySQL +Add a @code{TIMESTAMP} column to the table. This column is automatically set +to the current date and time for @code{INSERT} or @code{UPDATE} statements if +you don't give the column a value or if you give it a @code{NULL} value. + +@item mSQL +Use the @code{_timestamp} column. +@end table + +@noindent +@strong{@code{NULL} Value Comparisons} + +@table @code +@item MySQL +MySQL follows +ANSI SQL, and a comparison with @code{NULL} is always @code{NULL}. +@item mSQL +In @code{mSQL}, @code{NULL = NULL} is TRUE. You +must change @code{=NULL} to @code{IS NULL} and @code{<>NULL} to +@code{IS NOT NULL} when porting old code from @code{mSQL} to MySQL. +@end table + +@noindent +@strong{String Comparisons} + +@table @code +@item MySQL +Normally, string comparisons are performed in case-independent fashion with +the sort order determined by the current character set (ISO-8859-1 Latin1 by +default). If you don't like this, declare your columns with the +@code{BINARY} attribute, which causes comparisons to be done according to the +ASCII order used on the MySQL server host. +@item mSQL +All string comparisons are performed in case-sensitive fashion with +sorting in ASCII order. +@end table + +@noindent +@strong{Case-insensitive Searching} + +@table @code +@item MySQL +@code{LIKE} is a case-insensitive or case-sensitive operator, depending on +the columns involved. If possible, MySQL uses indexes if the +@code{LIKE} argument doesn't start with a wild-card character. +@item mSQL +Use @code{CLIKE}. +@end table + +@noindent +@strong{Handling of Trailing Spaces} + +@table @code +@item MySQL +Strips all spaces at the end of @code{CHAR} and @code{VARCHAR} +columns. Use a @code{TEXT} column if this behavior is not desired. +@item mSQL +Retains trailing space. +@end table + +@noindent +@strong{@code{WHERE} Clauses} + +@table @code +@item MySQL +MySQL correctly prioritises everything (@code{AND} is evaluated +before @code{OR}). To get @code{mSQL} behavior in MySQL, use +parentheses (as shown in an example below). +@item mSQL +Evaluates everything from left to right. This means that some logical +calculations with more than three arguments cannot be expressed in any +way. It also means you must change some queries when you upgrade to +MySQL. You do this easily by adding parentheses. Suppose you +have the following @code{mSQL} query: +@example +mysql> SELECT * FROM table WHERE a=1 AND b=2 OR a=3 AND b=4; +@end example +To make MySQL evaluate this the way that @code{mSQL} would, +you must add parentheses: +@example +mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4)))); +@end example +@end table + +@noindent +@strong{Access Control} + +@table @code +@item MySQL +Has tables to store grant (permission) options per user, host, and +database. @xref{Privileges}. +@item mSQL +Has a file @file{mSQL.acl} in which you can grant read/write privileges for +users. +@end table + + +@node Compare PostgreSQL, , Compare mSQL, Comparisons +@subsection How MySQL Compares to PostgreSQL + +@cindex PostgreSQL vs. MySQL, overview + +When reading the following, please note that both products are continually +evolving. We at MySQL AB and the PostgreSQL developers are both working +on making our respective database as good as possible, so we are both a +serious choice to any commercial database. + +The following comparison is made by us at MySQL AB. We have tried to be +as accurate and fair as possible, but because we don't have a full +knowledge of all PostgreSQL features while we know MySQL througly, we +may have got some things wrong. We will however correct these when they +come to our attention. + +We would first like to note that PostgreSQL and MySQL are both widely used +products, but with different design goals, even if we are both striving to +be ANSI SQL compatible. This means that for some applications MySQL is +more suited, while for others PostgreSQL is more suited. When choosing +which database to use, you should first check if the database's feature set +satisfies your application. If you need raw speed, MySQL is probably your +best choice. If you need some of the extra features that only PostgreSQL +can offer, you should use @code{PostgreSQL}. + +@cindex PostgreSQL/MySQL, strategies +@menu +* MySQL-PostgreSQL goals:: MySQL and PostgreSQL development strategies +* MySQL-PostgreSQL features:: Featurewise Comparison of MySQL and PostgreSQL +* MySQL-PostgreSQL benchmarks:: Benchmarking MySQL and PostgreSQL +@end menu + + +@node MySQL-PostgreSQL goals, MySQL-PostgreSQL features, Compare PostgreSQL, Compare PostgreSQL +@subsubsection MySQL and PostgreSQL development strategies + +When adding things to MySQL we take pride to do an optimal, definite +solution. The code should be so good that we shouldn't have any need to +change it in the foreseeable future. We also do not like to sacrifice +speed for features but instead will do our utmost to find a solution +that will give maximal throughput. This means that development will take +a little longer, but the end result will be well worth this. This kind +of development is only possible because all server code are checked by +one of a few (currently two) persons before it's included in the +MySQL server. + +We at MySQL AB believe in frequent releases to be able to push out new +features quickly to our users. Because of this we do a new small release +about every three weeks, and a major branch every year. All releases are +throughly tested with our testing tools on a lot of different platforms. + +PostgreSQL is based on a kernel with lots of contributors. In this setup +it makes sense to prioritise adding a lot of new features, instead of +implementing them optimally, because one can always optimise things +later if there arises a need for this. + +Another big difference between MySQL and PostgreSQL is that +nearly all of the code in the MySQL server are coded by developers that +are employed by MySQL AB and are still working on the server code. The +exceptions are the transaction engines, and the regexp library. + +This is in sharp contrast to the PostgreSQL code where the majority of +the code is coded by a big group of people with different backgrounds. +It was only recently that the PostgreSQL developers announced that their +current developer group had finally had time to take a look at all +the code in the current PostgreSQL release. + +Both of the above development methods has it's own merits and drawbacks. +We here at MySQL AB think of course that our model is better because our +model gives better code consistency, more optimal and reusable code, and +in our opinion, fewer bugs. Because we are the authors of the MySQL server +code, we are better able to coordinate new features and releases. + + +@node MySQL-PostgreSQL features, MySQL-PostgreSQL benchmarks, MySQL-PostgreSQL goals, Compare PostgreSQL +@subsubsection Featurewise Comparison of MySQL and PostgreSQL + +@cindex PostgreSQL/MySQL, features + +On the crash-me page +(@uref{http://www.mysql.com/information/crash-me.php}) +you can find a list of those database constructs and limits that +one can detect automatically with a program. Note however that a lot of +the numerical limits may be changed with startup options for respective +database. The above web page is however extremely useful when you want to +ensure that your applications works with many different databases or +when you want to convert your application from one datbase to another. + +MySQL offers the following advantages over PostgreSQL: + +@itemize @bullet +@item +@code{MySQL} is generally much faster than PostgreSQL. +@xref{MySQL-PostgreSQL benchmarks}. + +@item +MySQL has a much larger user base than PostgreSQL, therefor the +code is more tested and has historically been more stable than +PostgreSQL. MySQL is the much more used in production +environments than PostgreSQL, mostly thanks to that MySQL AB, +formerly TCX DataKonsult AB, has provided top quality commercial support +for MySQL from the day it was released, whereas until recently +PostgreSQL was unsupported. + +@item +MySQL works better on Windows than PostgreSQL does. MySQL runs as a +native Windows application (a service on NT/Win2000/WinXP), while +PostgreSQL is run under the cygwin emulation. We have heard that +PostgreSQL is not yet that stable on Windows but we haven't been able to +verify this ourselves. + +@item +MySQL has more APIs to other languages and is supported by more +existing programs than PostgreSQL. @xref{Contrib}. + +@item +MySQL works on 24/7 heavy duty systems. In most circumstances +you never have to run any cleanups on MySQL. PostgreSQL doesn't +yet support 24/7 systems because you have to run @code{VACUUM()} +once in a while to reclaim space from @code{UPDATE} and @code{DELETE} +commands and to perform statistics analyses that are critical to get +good performance with PostgreSQL. @code{VACUUM()} is also needed after +adding a lot of new rows to a table. On a busy system with lots of changes, +@code{VACUUM()} must be run very frequently, in the worst cases even +many times a day. During the @code{VACUUM()} run, which may take hours +if the database is big, the database is from a production standpoint, +practically dead. The PostgreSQL team has fixing this on their TODO, +but we assume that this is not an easy thing to fix permanently. + +@item +A working, tested replication feature used by sites like: +@itemize @minus +@item Yahoo Finance (@uref{http://finance.yahoo.com/}) +@item Mobile.de (@uref{http://www.mobile.de/}) +@item Slashdot (@uref{http://www.slashdot.org/}) +@end itemize + +@item +Included in the MySQL distribution are two different testing suites, +@file{mysql-test-run} and crash-me +(@uref{http://www.mysql.com/information/crash-me.php}), as well +as a benchmark suite. The test system is actively updated with code to +test each new feature and almost all reproduceable bugs that have come to +our attention. We test MySQL with these on a lot of platforms before +every release. These tests are more sophisticated than anything we have +seen from PostgreSQL, and they ensures that the MySQL is kept to a high +standard. + +@item +There are far more books in print about MySQL than about PostgreSQL. +O'Reilly, Sams, Que, and New Riders are all major publishers with books +about MySQL. All MySQL features are also documented in the MySQL on-line +manual, because when a new feature is implemented, the MySQL developers +are required to document it before it's included in the source. + +@item +MySQL supports more of the standard ODBC functions than @code{PostgreSQL}. + +@item +MySQL has a much more sophisticated @code{ALTER TABLE}. + +@item +MySQL has support for tables without transactions for applications that +need all speed they can get. The tables may be memory based, @code{HEAP} +tables or disk based @code{MyISAM}. @xref{Table types}. + +@item +MySQL has support for two different table handlers that support +transactions, @code{InnoDB} and @code{BerkeleyDB}. Because every +transaction engine performs differently under different conditions, this +gives the application writer more options to find an optimal solution for +his or her setup. @xref{Table types}. + +@item +@code{MERGE} tables gives you a unique way to instantly make a view over +a set of identical tables and use these as one. This is perfect for +systems where you have log files that you order for example by month. +@xref{MERGE}. + +@item +The option to compress read-only tables, but still have direct access to +the rows in the table, gives you better performance by minimising disk +reads. This is very useful when you are archiving things. +@xref{myisampack}. + +@item +MySQL has internal support for fulltext search. @xref{Fulltext Search}. + +@item +You can access many databases from the same connection (depending of course +on your privileges). + +@item +MySQL is coded from the start to be multi-threaded while PostgreSQL uses +processes. Context switching and access to common storage areas is much +faster between threads than between separate processes, this gives MySQL +a big speed advantage in multi-user applications and also makes it easier +for MySQL to take full advantage of symmetric multiprocessor (SMP) systems. + +@item +MySQL has a much more sophisticated privilege system than PostgreSQL. +While PostgreSQL only supports @code{INSERT}, @code{SELECT}, and +@code{UPDATE/DELETE} grants per user on a database or a table, MySQL allows +you to define a full set of different privileges on database, table and +column level. MySQL also allows you to specify the privilege on host and +user combinations. @xref{GRANT}. + +@item +MySQL supports a compressed client/server protocol which improves +performance over slow links. + +@item +MySQL employs a ``table handler'' concept, and is the only relational +database we know of built around this concept. This allows different +low-level table types to be swapped into the SQL engine, and each table +type can be optimised for different performance characteristics. + +@item +All MySQL table types (except @strong{InnoDB}) are implemented as files +(one table per file), which makes it really easy to backup, move, delete +and even symlink databases and tables, even when the server is down. + +@item +Tools to repair and optimise @strong{MyISAM} tables (the most common +MySQL table type). A repair tool is only needed when a physical corruption +of a data file happens, usually from a hardware failure. It allows a +majority of the data to be recovered. + +@item +Upgrading MySQL is painless. When you are upgrading MySQL, you don't need +to dump/restore your data, as you have to do with most PostgreSQL upgrades. +@end itemize + +Drawbacks with MySQL compared to PostgreSQL: + +@itemize @bullet +@item +The transaction support in MySQL is not yet as well tested as PostgreSQL's +system. + +@item +Because MySQL uses threads, which are not yet flawless on many OSes, one +must either use binaries from @uref{http://www.mysql.com/downloads/}, or +carefully follow our instructions on +@uref{http://www.mysql.com/doc/I/n/Installing_source.html} to get an +optimal binary that works in all cases. + +@item +Table locking, as used by the non-transactional @code{MyISAM} tables, is +in many cases faster than page locks, row locks or versioning. The +drawback however is that if one doesn't take into account how table +locks work, a single long-running query can block a table for updates +for a long time. This can usually be avoided when designing the +application. If not, one can always switch the trouble table to use one +of the transactional table types. @xref{Table locking}. + +@item +With UDF (user defined functions) one can extend MySQL with both normal +SQL functions and aggregates, but this is not yet as easy or as flexible +as in PostgreSQL. @xref{Adding functions}. + +@item +Updates that run over multiple tables is harder to do in MySQL. +This will, however, be fixed in MySQL 4.0 with multi-table @code{UPDATE} +and in MySQL 4.1 with subselects. +In MySQL 4.0 one can use multi-table deletes to delete from many tables +at the same time. @xref{DELETE}. +@end itemize + +PostgreSQL currently offers the following advantages over MySQL: + +Note that because we know the MySQL road map, we have included in the +following table the version when MySQL should support this feature. +Unfortunately we couldn't do this for previous comparison, because we +don't know the PostgreSQL roadmap. + +@multitable @columnfractions .70 .30 +@item @strong{Feature} @tab @strong{MySQL version} +@item Subselects @tab 4.1 +@item Foreign keys @tab 4.0 and 4.1 +@item Views @tab 4.2 +@item Stored procedures @tab 4.1 +@item Extensible type system @tab Not planned +@item Unions @tab 4.0 +@item Full join @tab 4.0 or 4.1 +@item Triggers @tab 4.1 +@item Constraints @tab 4.1 +@item Cursors @tab 4.1 or 4.2 +@item Extensible index types like R-trees @tab R-trees are planned for 4.2 +@item Inherited tables @tab Not planned +@end multitable + +Other reasons to use PostgreSQL: + +@itemize @bullet +@item +Standard usage in PostgreSQL is closer to ANSI SQL in some cases. + +@item +One can speed up PostgreSQL by coding things as stored procedures. + +@item +For geographical data, R-TREES makes PostgreSQL better than MySQL. + +@item +The PostgreSQL optimiser can do some optimisation that the current MySQL +optimiser can't do. Most notable is doing joins when you don't have the +proper keys in place and doing a join where you are using different keys +combined with OR. The MySQL benchmark suite at +@uref{http://www.mysql.com/information/benchmarks.html} shows you what +kind of constructs you should watch out for when using different +databases. + +@item +PostgreSQL has a bigger team of developers that contribute to the server. +@end itemize + +Drawbacks with PostgreSQL compared to MySQL: + +@itemize @bullet +@item +@code{VACUUM()} makes PostgreSQL hard to use in a 24/7 environment. + +@item +Only transactional tables. + +@item +Much slower @code{INSERT}, @code{DELETE}, and @code{UPDATE}. +@end itemize + +For a complete list of drawbacks, you should also examine the first table +in this section. + +@menu +* MySQL-PostgreSQL benchmarks:: Benchmarking MySQL and PostgreSQL +@end menu + + +@node MySQL-PostgreSQL benchmarks, , MySQL-PostgreSQL features, Compare PostgreSQL +@subsubsection Benchmarking MySQL and PostgreSQL + +@cindex PostgreSQL vs. MySQL, benchmarks + +The only open source benchmark that we know of that can be used to +benchmark MySQL and PostgreSQL (and other databases) is our own. It can +be found at @uref{http://www.mysql.com/information/benchmarks.html}. + +We have many times asked the PostgreSQL developers and some PostgreSQL +users to help us extend this benchmark to make it the definitive benchmark +for databases, but unfortunately we haven't gotten any feedback for this. + +We the MySQL developers have, because of this, spent a lot of hours to get +maximum performance from PostgreSQL for the benchmarks, but because we +don't know PostgreSQL intimately, we are sure that there are things that +we have missed. We have on the benchmark page documented exactly how we +did run the benchmark so that it should be easy for anyone to repeat and +verify our results. + +The benchmarks are usually run with and without the @code{--fast} option. +When run with @code{--fast} we are trying to use every trick the server can +do to get the code to execute as fast as possible. The idea is that the +normal run should show how the server would work in a default setup and +the @code{--fast} run shows how the server would do if the application +developer would use extensions in the server to make his application run +faster. + +When running with PostgreSQL and @code{--fast} we do a @code{VACUUM()} +after every major table @code{UPDATE} and @code{DROP TABLE} to make the +database in perfect shape for the following @code{SELECT}s. The time for +@code{VACUUM()} is measured separately. + +When running with PostgreSQL 7.1.1 we could, however, not run with +@code{--fast} because during the @code{INSERT} test, the postmaster (the +PostgreSQL deamon) died and the database was so corrupted that it was +impossible to restart postmaster. After this happened twice, we decided +to postpone the @code{--fast} test until next PostgreSQL release. The +details about the machine we run the benchmark can be found on the +benchmark page. + +Before going to the other benchmarks we know of, we would like to give +some background on benchmarks: + +It's very easy to write a test that shows @strong{any} database to be the best +database in the world, by just restricting the test to something the +database is very good at and not testing anything that the database is +not good at. If one, after doing this, summarises the result with as +a single figure, things are even easier. + +This would be like us measuring the speed of MySQL compared to PostgreSQL +by looking at the summary time of the MySQL benchmarks on our web page. +Based on this MySQL would be more than 40 times faster than PostgreSQL, +something that is of course not true. We could make things even worse +by just taking the test where PostgreSQL performs worst and claim that +MySQL is more than 2000 times faster than PostgreSQL. + +The case is that MySQL does a lot of optimisations that PostgreSQL +doesn't do. This is of course also true the other way around. An SQL +optimiser is a very complex thing, and a company could spend years on +just making the optimiser faster and faster. + +When looking at the benchmark results you should look for things that +you do in your application and just use these results to decide which +database would be best suited for your application. The benchmark +results also shows things a particular database is not good at and should +give you a notion about things to avoid and what you may have to do in +other ways. + +We know of two benchmark tests that claims that PostgreSQL performs better +than MySQL. These both where multi-user tests, a test that we here at +MySQL AB haven't had time to write and include in the benchmark suite, +mainly because it's a big task to do this in a manner that is fair against +all databases. + +One is the benchmark paid for by Great Bridge, the company that for 16 months +attempted to build a business based on PostgreSQL but now has ceased +operations. This is the probably worst benchmark we have ever seen anyone +conduct. This was not only tuned to only test what PostgreSQL is absolutely +best at, it was also totally unfair against every other database involved in +the test. + +@strong{Note}: We know that even some of the main PostgreSQL +developers did not like the way Great Bridge conducted the benchmark, so we +don't blame the PostgreSQL team for the way the benchmark was done. + +This benchmark has been condemned in a lot of postings and newsgroups so +we will here just shortly repeat some things that were wrong with it. + +@itemize @bullet +@item +The tests were run with an expensive commercial tool, that makes it +impossible for an open source company like us to verify the benchmarks, +or even check how the benchmarks were really done. The tool is not even +a true benchmark tool, but an application/setup testing tool. To refer +this as a ``standard'' benchmark tool is to stretch the truth a long way. + +@item +Great Bridge admitted that they had optimised the PostgreSQL database +(with @code{VACUUM()} before the test) and tuned the startup for the tests, +something they hadn't done for any of the other databases involved. To +say ``This process optimises indexes and frees up disk space a bit. The +optimised indexes boost performance by some margin.'' Our benchmarks +clearly indicate that the difference in running a lot of selects on a +database with and without @code{VACUUM()} can easily differ by a factor +of ten. + +@item +The test results were also strange. The AS3AP test documentation +mentions that the test does ``selections, simple joins, projections, +aggregates, one-tuple updates, and bulk updates''. + +PostgreSQL is good at doing @code{SELECT}s and @code{JOIN}s (especially +after a @code{VACUUM()}), but doesn't perform as well on @code{INSERT}s or +@code{UPDATE}s. The benchmarks seem to indicate that only @code{SELECT}s +were done (or very few updates). This could easily explain they good results +for PostgreSQL in this test. The bad results for MySQL will be obvious a +bit down in this document. + +@item +They did run the so-called benchmark from a Windows machine against a +Linux machine over ODBC, a setup that no normal database user would ever +do when running a heavy multi-user application. This tested more the +ODBC driver and the Windows protocol used between the clients than the +database itself. + +@item +When running the database against Oracle and MS-SQL (Great Bridge has +indirectly indicated that the databases they used in the test), they +didn't use the native protocol but instead ODBC. Anyone that has ever +used Oracle knows that all real application uses the native interface +instead of ODBC. Doing a test through ODBC and claiming that the results +had anything to do with using the database in a real-world situation can't +be regarded as fair. They should have done two tests with and without ODBC +to provide the right facts (after having got experts to tune all involved +databases of course). + +@item +They refer to the TPC-C tests, but they don't mention anywhere that the +test they did was not a true TPC-C test and they were not even allowed to +call it a TPC-C test. A TPC-C test can only be conducted by the rules +approved by the TPC Council (@uref{http://www.tpc.org/}). Great Bridge +didn't do that. By doing this they have both violated the TPC trademark +and miscredited their own benchmarks. The rules set by the TPC Council +are very strict to ensure that no one can produce false results or make +unprovable statements. Apparently Great Bridge wasn't interested in +doing this. + +@item +After the first test, we contacted Great Bridge and mentioned to them +some of the obvious mistakes they had done with MySQL: + +@itemize @minus +@item +Running with a debug version of our ODBC driver + +@item +Running on a Linux system that wasn't optimised for threads + +@item +Using an old MySQL version when there was a recommended newer one available + +@item +Not starting MySQL with the right options for heavy multi-user use (the +default installation of MySQL is tuned for minimal resource use). +@end itemize + +Great Bridge did run a new test, with our optimised ODBC driver and with +better startup options for MySQL, but refused to either use our updated +glibc library or our standard binary (used by 80% of our users), which was +statically linked with a fixed glibc library. + +According to what we know, Great Bridge did nothing to ensure that the +other databases were set up correctly to run well in their test +environment. We are sure however that they didn't contact Oracle or +Microsoft to ask for their advice in this matter ;) + +@item +The benchmark was paid for by Great Bridge, and they decided to publish +only partial, chosen results (instead of publishing it all). +@end itemize + +Tim Perdue, a long time PostgreSQL fan and a reluctant MySQL user +published a comparison on PHPbuilder +(@uref{http://www.phpbuilder.com/columns/tim20001112.php3}). + +When we became aware of the comparison, we phoned Tim Perdue about this +because there were a lot of strange things in his results. For example, +he claimed that MySQL had a problem with five users in his tests, when we +know that there are users with similar machines as his that are using +MySQL with 2000 simultaneous connections doing 400 queries per second. +(In this case the limit was the web bandwidth, not the database.) + +It sounded like he was using a Linux kernel that either had some +problems with many threads, such as kernels before 2.4, which had a problem +with many threads on multi-CPU machines. We have documented in this manual +how to fix this and Tim should be aware of this problem. + +The other possible problem could have been an old glibc library and +that Tim didn't use a MySQL binary from our site, which is linked with +a corrected glibc library, but had compiled a version of his own with. +In any of the above cases, the symptom would have been exactly what Tim +had measured. + +We asked Tim if we could get access to his data so that we could repeat +the benchmark and if he could check the MySQL version on the machine to +find out what was wrong and he promised to come back to us about this. +He has not done that yet. + +Because of this we can't put any trust in this benchmark either :( + +Over time things also changes and the above benchmarks are not that +relevant anymore. MySQL now have a couple of different table handlers +with different speed/concurrency tradeoffs. @xref{Table types}. It +would be interesting to see how the above tests would run with the +different transactional table types in MySQL. PostgreSQL has of course +also got new features since the test was made. As the above test are +not publicly available there is no way for us to know how the +database would preform in the same tests today. + + +Conclusion: + +The only benchmarks that exist today that anyone can download and run +against MySQL and PostgreSQL is the MySQL benchmarks. We here at MySQL +believe that open source databases should be tested with open source tools! +This is the only way to ensure that no one does tests that nobody can +reproduce and use this to claim that a database is better than another. +Without knowing all the facts it's impossible to answer the claims of the +tester. + +The thing we find strange is that every test we have seen about +PostgreSQL, that is impossible to reproduce, claims that PostgreSQL is +better in most cases while our tests, which anyone can reproduce, +clearly shows otherwise. With this we don't want to say that PostgreSQL +isn't good at many things (it is!) or that it isn't faster than MySQL +under certain conditions. We would just like to see a fair test where +they are very good so that we could get some friendly competition going! + +For more information about our benchmarks suite @xref{MySQL Benchmarks}. + +We are working on an even better benchmark suite, including multi user +tests, and a better documentation of what the individual tests really +do and how to add more tests to the suite. + + diff --git a/Docs/section.Infolinks.texi b/Docs/section.Infolinks.texi new file mode 100644 index 00000000000..828722e0e56 --- /dev/null +++ b/Docs/section.Infolinks.texi @@ -0,0 +1,880 @@ +@c FIX AGL 20011108 Extracted from manual.texi. +@c Contains links to MySQL related info (books, articles). To web portals! + + +@node MySQL-Books, General-SQL, Questions, MySQL Information Sources +@subsection Books About MySQL + +For the latest book information, with user comments, please visit +@uref{http://www.mysql.com/portal/books/html/}. + +While this manual is still the right place for up to date technical +information, its primary goal is to contain everything there is to know +about MySQL. It is sometimes nice to have a bound book to read +in bed or while you travel. Here is a list of books about MySQL and +related subjects (in English). + +By purchasing a book through these hyperlinks provided herein, you are +contributing to the development of MySQL. + +@emph{MySQL} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0735709211&bfmtype=book} (Barnes and Noble) +@item Publisher @tab New Riders +@item Author @tab Paul DuBois +@item Pub Date @tab 1st Edition December 1999 +@item ISBN @tab 0735709211 +@item Pages @tab 800 +@item Price @tab $49.99 US +@item Downloadable examples @tab + @uref{http://www.kitebird.com/mysql-book/} (@code{samp_db} distribution) +@item Errata @tab +@uref{http://www.kitebird.com/mysql-book/errata.html} +@end multitable + +Foreword by Michael ``Monty'' Widenius, MySQL Moderator. +@* + +In @emph{MySQL}, Paul DuBois provides you with a comprehensive guide to +one of the most popular relational database systems. Paul has +contributed to the online documentation for MySQL and is an +active member of the MySQL community. The principal MySQL +developer, Monty Widenius, and a network of his fellow developers +reviewed the manuscript, and provided Paul with the kind of insight +no one else could supply. +@* + +Instead of merely giving you a general overview of MySQL, Paul +teaches you how to make the most of its capabilities. Through two +sample database applications that run throughout the book, he +gives you solutions to problems you're sure to face. He helps you +integrate MySQL efficiently with third-party tools, such as PHP +and Perl, enabling you to generate dynamic Web pages through +database queries. He teaches you to write programs that access +MySQL databases, and also provides a comprehensive set of +references to column types, operators, functions, SQL syntax, +MySQL programming, C API, Perl @code{DBI}, and PHP API. +@emph{MySQL} simply gives you the kind of information you won't find +anywhere else. +@* + +If you use MySQL, this book provides you with: +@itemize @bullet +@item +An introduction to MySQL and SQL. +@item +Coverage of MySQL's data types and how to use them. +@item +Thorough treatment of how to write client programs in C. +@item +A guide to using the Perl @code{DBI} and PHP APIs for developing +command-line and Web-based applications. +@item +Tips on administrative issues such as user accounts, backup, +crash recovery, and security. +@item +Help in choosing an ISP for MySQL access. +@item +A comprehensive reference for MySQL's data types, operators, +functions, and SQL statements and utilities. +@item +Complete reference guides for MySQL's C API, the Perl @code{DBI} API, +and PHP's MySQL-related functions. +@end itemize +@* + +@emph{MySQL & mSQL} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565924347&bfmtype=book} (Barnes and Noble) +@item Publisher @tab O'Reilly +@item Authors @tab Randy Jay Yarger, George Reese & Tim King +@item Pub Date @tab 1st Edition July 1999 +@item ISBN @tab 1-56592-434-7, Order Number: 4347 +@item Pages @tab 506 +@item Price @tab $34.95 +@end multitable + +This book teaches you how to use MySQL and @code{mSQL}, two popular +and robust database products that support key subsets of SQL on both Linux +and Unix systems. Anyone who knows basic C, Java, Perl, or Python can +write a program to interact with a database, either as a stand-alone +application or through a Web page. This book takes you through the +whole process, from installation and configuration to programming +interfaces and basic administration. Includes plenty of tutorial +material. +@* + +@emph{Sams' Teach Yourself MySQL in 21 Days} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672319144&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Sams +@item Authors @tab Mark Maslakowski and Tony Butcher +@item Pub Date @tab June 2000 +@item ISBN @tab 0672319144 +@item Pages @tab 650 +@item Price @tab $39.99 +@end multitable + +Sams' @emph{Teach Yourself MySQL in 21 Days} is for intermediate Linux users +who want to move into databases. A large share of the audience is Web +developers who need a database to store large amounts of information that +can be retrieved via the Web. + +Sams' @emph{Teach Yourself MySQL in 21 Days} is a practical, step-by-step +tutorial. The reader will learn to design and employ this open source +database technology into his or her website using practical, hands-on +examples to follow. +@* + +@emph{E-Commerce Solutions with MySQL} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0761524452&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Prima Communications, Inc. +@item Authors @tab N/A +@item Pub Date @tab January 2000 +@item ISBN @tab 0761524452 +@item Pages @tab 500 +@item Price @tab $39.99 +@end multitable + +No description available. +@* + +@emph{MySQL and PHP from Scratch} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0789724405&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Que +@item Authors @tab N/A +@item Pub Date @tab September 2000 +@item ISBN @tab 0789724405 +@item Pages @tab 550 +@item Price @tab $34.99 +@end multitable + +This book puts together information on installing, setting up, and +troubleshooting Apache, MySQL, PHP3, and IMP into one complete +volume. You also learn how each piece is part of a whole by learning, +step-by-step, how to create a web-based e-mail system. Learn to run +the equivalent of Active Server Pages (ASP) using PHP3, set up an +e-commerce site using a database and the Apache web server, and create +a data entry system (such as sales, product quality tracking, customer +preferences, etc) that no installation in the PC. +@* + +@emph{Professional MySQL Programming} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=1861005164} (Barnes and Noble) +@item Publisher @tab Wrox Press, Inc. +@item Authors @tab N/A +@item Pub Date @tab Late 2001 +@item ISBN @tab 1861005164 +@item Pages @tab 1000 +@item Price @tab $49.99 +@end multitable + +No description available. +@* + +@emph{Professional Linux Programming} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1861003013&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Wrox Press, Inc. +@item Authors @tab N/A +@item Pub Date @tab September 2000 +@item ISBN @tab 1861003013 +@item Pages @tab 1155 +@item Price @tab $47.99 +@end multitable + +In this follow-up to the best-selling @emph{Beginning Linux Programming}, +you will learn from the authors' real-world knowledge and experience of +developing software for Linux; you'll be taken through the development +of a sample 'DVD Store' application, with 'theme' chapters addressing +different aspects of its implementation. Meanwhile, individual +``take-a-break'' chapters cover important topics that go beyond the +bounds of the central theme. All focus on the practical aspects of +programming, showing how crucial it is to choose the right tools for +the job, use them as they should be used, and get things right first +time. +@* + +@emph{PHP and MySQL Web Development} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672317842&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Sams +@item Authors @tab Luke Welling, Laura Thomson +@item Pub Date @tab March 2001 +@item ISBN @tab 0672317842 +@item Pages @tab 700 +@item Price @tab $49.99 +@end multitable + +@emph{PHP and MySQL Web Development} introduces you to the advantages +of implementing both MySQL and PHP. These advantages are detailed +through the provision of both statistics and several case studies. A +practical web application is developed throughout the book, providing +you with the tools necessary to implement a functional online +database. Each function is developed separately, allowing you the +choice to incorporate only those parts that you would like to +implement. Programming concepts of the PHP language are highlighted, +including functions which tie MySQL support into a PHP script and +advanced topics regarding table manipulation. +@* + +@strong{Books recommended by the MySQL Developers} + +@emph{SQL-99 Complete, Really} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0879305681&bfmtype=book} (Barnes and Noble) +@item Publisher @tab CMP Books +@item Authors @tab Peter Gulutzan, Trudy Pelzer +@item Pub Date @tab April 1999 +@item ISBN @tab 0879305681 +@item Pages @tab 1104 +@item Price @tab $55.96 +@end multitable + +This book contains complete descriptions of the new standards for +syntax, data structures, and retrieval processes of SQL databases. As +an example-based reference manual, it includes all of the CLI +functions, information, schema tables, and status codes, as well as a +working SQL database provided on the companion disk. +@* + +@emph{C, A reference manual} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0133262243&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Prentice Hall +@item Authors @tab Samuel P. Harbison, Guy L. Steele +@item Pub Date @tab September 1994 +@item ISBN @tab 0133262243 +@item Pages @tab 480 +@item Price @tab $35.99 +@end multitable + +A new and improved revision of the bestselling C language +reference. This manual introduces the notion of "Clean C", writing C +code that can be compiled as a C++ program, C programming style that +emphasizes correctness, portability, maintainability, and +incorporates the ISO C Amendment 1 (1994) which specifies new +facilities for writing portable, international programs in C. +@* + +@emph{C++ for Real Programmers} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0120499428&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Academic Press, Incorporated +@item Authors @tab Jeff Alger, Jim Keogh +@item Pub Date @tab February 1998 +@item ISBN @tab 0120499428 +@item Pages @tab 388 +@item Price @tab $39.95 +@end multitable + +@emph{C++ For Real Programmers} bridges the gap between C++ as described +in beginner and intermediate-level books and C++ as it is practiced by +experts. Numerous valuable techniques are described, organised into +three simple themes: indirection, class hierarchies, and memory +management. It also provides in-depth coverage of template creation, +exception handling, pointers and optimisation techniques. The focus of +the book is on ANSI C++ and, as such, is compiler independent. + +@emph{C++ For Real Programmers} is a revision of +@emph{Secrets of the C++ Masters} and includes a new appendix comparing C++ +with Java. The book comes with a 3.5" disk for Windows with source code. +@* + +@emph{Algorithms in C} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0201514257&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Addison Wesley Longman, Inc. +@item Authors @tab Robert Sedgewick +@item Pub Date @tab April 1990 +@item ISBN @tab 0201514257 +@item Pages @tab 648 +@item Price @tab $45.75 +@end multitable + +@emph{Algorithms in C} describes a variety of algorithms in a number of +areas of interest, including: sorting, searching, string-processing, and +geometric, graph and mathematical algorithms. The book emphasizes +fundamental techniques, providing readers with the tools to confidently +implement, run, and debug useful algorithms. +@* + +@emph{Multithreaded Programming with Pthreads} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0136807291&bfmtype=book} (Barnes and Noble) +@item Publisher @tab Prentice Hall +@item Authors @tab Bil Lewis, Daniel J. Berg +@item Pub Date @tab October 1997 +@item ISBN @tab 0136807291 +@item Pages @tab 432 +@item Price @tab $34.95 +@end multitable + +Based on the best-selling @emph{Threads Primer}, +@emph{Multithreaded Programming with Pthreads} gives you a solid +understanding of Posix threads: what they are, how they work, when to use +them, and how to optimise them. It retains the clarity and humor of +@emph{Threads Primer}, but includes expanded comparisons to Win32 and OS/2 +implementations. Code examples tested on all of the major UNIX platforms +are featured along with detailed explanations of how and why they use threads. +@* + +@emph{Programming the PERL DBI: Database Programming with PERL} +@multitable @columnfractions .3 .7 +@item Available @tab @uref{http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565926994&bfmtype=book} (Barnes and Noble) +@item Publisher @tab O'Reilly & Associates, Incorporated +@item Authors @tab Alligator Descartes, Tim Bunce +@item Pub Date @tab February 2000 +@item ISBN @tab 1565926994 +@item Pages @tab 400 +@item Price @tab $27.96 +@end multitable + +@emph{Programming the Perl DBI} is coauthored by Alligator Descartes, one +of the most active members of the DBI community, and by Tim Bunce, the +inventor of DBI. For the uninitiated, the book explains the architecture +of DBI and shows you how to write DBI-based programs. For the experienced +DBI dabbler, this book explains DBI's nuances and the peculiarities of each +individual DBD. + +The book includes: +@itemize @bullet +@item +An introduction to DBI and its design. +@item +How to construct queries and bind parameters. +@item +Working with database, driver, and statement handles. +@item +Debugging techniques. +@item +Coverage of each existing DBD. +@item +A complete reference to DBI. +@end itemize +@* + + +@node General-SQL, Useful Links, MySQL-Books, MySQL Information Sources +@subsection General SQL Information and Tutorials + +The MySQL book portal is split into different sections to make it easy +to locate books for various purposes. +@uref{http://www.mysql.com/portal/books/html/} + +Tutorials can be found at: +@uref{http://www.mysql.com/portal/development/html/development-61-1.html} + +@node Useful Links, , General-SQL, MySQL Information Sources +@subsection Useful MySQL-related Links + +The MySQL development portal is the ultimate source of MySQL related +links. @uref{http://www.mysql.com/portal/development/html/} + +Apart from the following links, you can find and download a lot of +MySQL programs, tools and APIs in the Contrib directory +(@uref{http://www.mysql.com/Downloads/Contrib/}). +@cindex @code{Contrib} directory + +@cindex URLs to MySQL information +@cindex MySQL related information URLs +@subheading Tutorials and Manuals + +@table @asis +@item @uref{http://michael.bacarella.com/research/mysqlmyths.html} (MySQL Myths Debunked) +MySQL used in the real world. + +@item @uref{http://www.4t2.com/mysql/} +Information about the German MySQL mailing list. + +@item @uref{http://www2.rent-a-database.de/mysql/} +MySQL handbook in German. + +@item @uref{http://www.bitmover.com:8888/home/bk/mysql/} +Web access to the MySQL BitKeeper repository. + +@item @uref{http://www.analysisandsolutions.com/code/mybasic.htm} +Beginners MySQL Tutorial on how to install and set up +MySQL on a Windows machine. + +@item @uref{http://www.devshed.com/Server_Side/MySQL/} +A lot of MySQL tutorials. + +@item @uref{http://mysql.hitstar.com/} +MySQL manual in Chinese. + +@item @uref{http://www.linuxplanet.com/linuxplanet/tutorials/1046/1/} +Setting Up a MySQL-based website. + +@item @uref{http://www.hotwired.com/webmonkey/backend/tutorials/tutorial1.html} +MySQL-Perl tutorial. + +@item @uref{http://www.iserver.com/support/contrib/perl5/modules.html} +Installing new Perl modules that require locally installed modules. + +@item @uref{http://www.hotwired.com/webmonkey/databases/tutorials/tutorial4.html} +PHP/MySQL Tutorial. + +@item @uref{http://www.useractive.com/} +Hands on tutorial for MySQL. +@end table + +@subheading MySQL Discussion Forums + +@table @asis +@item @uref{http://www.weberdev.com/} +Examples using MySQL; (check Top 20) + +@item @uref{http://futurerealm.com/forum/futureforum.htm} +FutureForum Web Discussion Software. +@end table + +@subheading Porting MySQL/Using MySQL on Different Systems + +@table @asis +@item @uref{http://www.entropy.ch/software/macosx/mysql/} +Binary of MySQL for Mac OS X Client. Includes information of how to +build and use MySQL on Mac OS X. + +@item @uref{http://xclave.macnn.com/MySQL/} +The Mac OS Xclave. Running MySQL on Mac OS X. + +@item @uref{http://www.prnet.de/RegEx/mysql.html} +MySQL for Mac OS X Server. + +@item @uref{http://www.latencyzero.com/macosx/mysql.html} +Building MySQL for Mac OS X. + +@item @uref{http://www.essencesw.com/Software/mysqllib.html} +New Client libraries for the Mac OS Classic (Macintosh). + +@item @uref{http://www.lilback.com/macsql/} +Client libraries for Mac OS Classic (Macintosh). + +@item @uref{http://sixk.maniasys.com/index_en.html} +MySQL for Amiga +@end table + +@subheading Perl-related Links + +@table @asis +@item @uref{http://dbimysql.photoflux.com/} +Perl DBI with MySQL FAQ. +@end table + +@c FIX We should get longer descriptions for things in this category! +@subheading Commercial Applications that Support MySQL + +@table @asis +@item @uref{http://www.supportwizard.com/} +SupportWizard; Interactive helpdesk on the Web. This product includes a +licensed copy of MySQL. + +@item @uref{http://www.sonork.com/} +Sonork, Instant Messenger that is not only Internet oriented. It's +focused on private networks and on small to medium companies. Client +is free, server is free for up to 5 seats. + +@item @uref{http://www.stweb.org/} +StWeb - Stratos Web and Application server - An easy-to-use, cross +platform, Internet/Intranet development and deployment system for +development of web-enabled applications. The standard version of StWeb +has a native interface to MySQL database. + +@item @uref{http://www.rightnowtech.com/} +Right Now Web; Web automation for customer service. + +@item @uref{http://www.icaap.org/Bazaar/} +Bazaar; Interactive Discussion Forums with Web interface. + +@cindex PhoneSweep +@item @uref{http://www.phonesweep.com/} +PhoneSweepT is the world's first commercial Telephone Scanner. Many break-ins +in recent years have come not through the Internet, but through unauthorised +dial-up modems. PhoneSweep lets you find these modems by repeatedly placing +phone calls to every phone number that your organisation +controls. PhoneSweep has a built-in expert system that can recognise +more than 250 different kinds of remote-access programs, including +Carbon Copy(TM), pcANYWHERE(TM), and Windows NT RAS. All information is stored +in the SQL database. It then generates a comprehensive report detailing +which services were discovered on which dial-up numbers in your organisation. +@end table + +@subheading SQL Clients and Report Writers + +@table @asis +@item @uref{http://www.urbanresearch.com/software/utils/urbsql/} (urSQL) +SQL Editor and Query Utility. Custom syntax highlighting, editable +results grid, exportable result-sets, basic MySQL admin functions, +Etc.. For Windows. + +@item @uref{http://www.edatanew.com/} (MySQL Data Manager) +MySQL Data Manager * is platform independent web client +(written in perl) for MySQL server over TCP/IP. + +@item @uref{http://ksql.sourceforge.net/} +KDE MySQL client. + +@item @uref{http://www.ecker-software.de/} +A Windows GUI client by David Ecker. + +@item @uref{http://www.icaap.org/software/kiosk/} +Kiosk; a MySQL client for database management. Written in Perl. +Will be a part of Bazaar. + +@item @uref{http://www.casestudio.com/} +Db design tool that supports MySQL 3.23. + +@item @uref{http://home.skif.net/~voland/zeos/eng/} +Zeos - A client that supports MySQL, Interbase and PostgreSQL. + +@item @uref{http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWriter/grwhome.html} +A free report writer in Java + +@item @uref{http://www.javaframework.de/} +MySQLExport - Export of MySQL create statements and data in a lot of +different formats (SQL, HTML, CVS, text, ZIP, GZIP...). + +@item @uref{http://dlabs.4t2.com/} +M2D, a MySQL Administration client for Windows. M2D supports +administration of MySQL databases, creation of new databases and +tables, editing, and more. + +@item @uref{http://dlabs.4t2.com/} +Dexter, a small server written in Perl which can be used as a proxy server for +MySQL or as a database extender. + +@item @uref{http://www.scibit.com/Products/Software/Utils/Mascon.asp} +Mascon is a powerful Win32 GUI for administering MySQL databases. + +@item @uref{http://www.rtlabs.com/} +MacSQL Monitor. GUI for MySQL, ODBC, and JDBC databases for the Mac OS. +@end table + +@subheading Distributions that Include MySQL + +@c FIX add the rest (at least a couple more Linuxes) + +@table @asis +@item @uref{http://www.suse.com/} +SuSE Linux (6.1 and above) + +@item @uref{http://www.redhat.com/} +RedHat Linux (7.0 and above) + +@item @uref{http://distro.conectiva.com.br/} +Conectiva Linux (4.0 and above) +@end table + +@subheading Web Development Tools that Support MySQL + +@table @asis +@item @uref{http://www.php.net/} +PHP: A server-side HTML-embedded scripting language. + +@item @uref{http://www.midgard-project.org/} +The Midgard Application Server; a powerful Web development environment +based on MySQL and PHP. + +@cindex dbServ +@item @uref{http://www.dbServ.de/} +dbServ is an extension to a web server to integrate database output into +your HTML code. You may use any HTML function in your output. Only the +client will stop you. It works as standalone server or as Java servlet. + +@item @uref{http://www.chilisoft.com/} +Platform independent ASP from Chili!Soft + +@item @uref{http://www.voicenet.com/~zellert/tjFM/} +A JDBC driver for MySQL. + +@item @uref{http://www.wernhart.priv.at/php/} +MySQL + PHP demos. + +@item @uref{http://www.dbwww.com/} +ForwardSQL: HTML interface to manipulate MySQL databases. + +@item @uref{http://www.daa.com.au/~james/www-sql/} +WWW-SQL: Display database information. + +@item @uref{http://www.heitml.com/} +HeiTML: A server-side extension of HTML and a 4GL language at the same time. + +@item @uref{http://hawkeye.net/} +Hawkeye Internet Server Suite. + +@item @uref{http://www.webgroove.com/} +WebGroove Script: HTML compiler and server-side scripting language. + +@item @uref{http://www.ihtml.com/} +A server-side website scripting language. + +@item @uref{ftp://ftp.igc.apc.org/pub/myodbc/README} +How to use MySQL with ColdFusion on Solaris. + +@item @uref{http://calistra.com/MySQL/} +Calistra's ODBC MySQL Administrator. + +@item @uref{http://phpclub.net/} +PHPclub - Tips and tricks for PHP. + +@item @uref{http://www.widgetchuck.com/} +The Widgetchuck; Website Tools and Gadgets + +@item @uref{http://www.adcycle.com/} +AdCycle - advertising management software. + +@cindex pwPage +@item @uref{http://sourceforge.net/projects/pwpage/} +pwPage - provides an extremely fast and simple approach to the creation +of database forms. That is, if a database table exists and an HTML page +has been constructed using a few simple guidelines, pwPage can be +immediately used for table data selections, insertions, updates, deletions +and selectable table content reviewing. + +@item @uref{http://www.omnis-software.com/products/studio/studio.html} +OMNIS Studio is a rapid application development (RAD) tool. +@end table + +@subheading Database Design Tools with MySQL Support + +@table @asis +@item @uref{http://www.mysql.com/documentation/dezign/} +"DeZign for databases" is a database development tool that uses an +entity relationship diagram (ERD). +@end table + +@subheading Web Servers with MySQL Tools + +@table @asis +@item @uref{ftp://ftp.kcilink.com/pub/} +mod_auth_mysql, An Apache authentication module. + +@item @uref{http://www.roxen.com/} +The Roxen Challenger Web server. +@end table + +@subheading Extensions for Other Programs + +@table @asis +@item @uref{http://www.seawood.org/msql_bind/} +MySQL support for BIND (The Internet Domain Name Server). + +@item @uref{http://www.inet-interactive.com/sendmail/} +MySQL support for Sendmail and Procmail. +@end table + +@subheading Using MySQL with Other Programs + +@table @asis +@item @uref{http://www.iserver.com/support/addonhelp/database/mysql/msaccess.html} +Using MySQL with Access. + +@item @uref{http://www.iserver.com/support/contrib/perl5/modules.html} +Installing new Perl modules that require locally installed modules. +@end table + +@subheading ODBC-related Links + +@table @asis +@item @uref{http://www.iodbc.org/} +Popular iODBC Driver Manager (libiodbc) now available as Open Source. + +@item @uref{http://users.ids.net/~bjepson/freeODBC/} +The FreeODBC Pages. + +@item @uref{http://genix.net/unixODBC/} +The unixODBC Project goals are to develop and promote unixODBC to be the +definitive standard for ODBC on the Linux platform. This is to include GUI +support for KDE. + +@item @uref{http://www.sw-soft.com/products/BtrieveODBC/} +A MySQL-based ODBC driver for Btrieve. +@end table + +@subheading @strong{API}-related Links + +@table @asis +@item @uref{http://www.jppp.com/} +Partially implemented TDataset-compatible components for MySQL. + +@item @uref{http://www.riverstyx.net/qpopmysql/} +qpopmysql - A patch to allow POP3 authentication from a MySQL +database. There's also a link to Paul Khavkine's patch for Procmail to +allow any MTA to deliver to users in a MySQL database. + +@item @uref{http://www.essencesw.com/Software/mysqllib.html} +New Client libraries for the Mac OS Classic (Macintosh). + +@item @uref{http://www.lilback.com/macsql/} +Client libraries for the Macintosh. + +@item @uref{http://www.essencesw.com/Plugins/mysqlplug.html} +Plugin for REALbasic (for Macintosh) + +@item @uref{http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html} +A library that emulates BSD sockets and pthreads on Macintosh. This can +be used if you want to compile the MySQL client library on Mac. +It could probably even be sued to port MySQL to Macintosh, but we +don't know of anyone that has tried that. + +@cindex SCMDB +@item @uref{http://www.dedecker.net/jessie/scmdb/} +SCMDB - an add-on for SCM that ports the MySQL C library to scheme +(SCM). With this library scheme developers can make connections to a +MySQL database and use embedded SQL in their programs. +@end table + +@subheading Other MySQL-related Links + +@table @asis +@item @uref{http://www.satisoft.com/} (SAT) +The Small Application Toolkit (SAT) is a collection of utilities +intended to simplify the development of small, multi-user, GUI based +applications in a (Microsoft -or- X) Windows Client / Unix Server +environment. + +@item @uref{http://www.wix.com/mysql-hosting/} +Registry of Web providers who support MySQL. + +@item @uref{http://www.softagency.co.jp/mysql/index.en.html} +Links about using MySQL in Japan/Asia. + +@item @uref{http://abattoir.cc.ndsu.nodak.edu/~nem/mysql/udf/} +MySQL UDF Registry. + +@item @uref{http://www.open.com.au/products.html} +Commercial Web defect tracking system. + +@item @uref{http://www.stonekeep.com/pts/} +PTS: Project Tracking System. + +@item @uref{http://tomato.nvgc.vt.edu/~hroberts/mot/} +Job and software tracking system. + +@item @uref{http://www.cynergi.net/exportsql/} +ExportSQL: A script to export data from Access95+. + +@item @uref{http://SAL.KachinaTech.COM/H/1/MYSQL.html} +SAL (Scientific Applications on Linux) MySQL entry. + +@item @uref{http://www.infotech-nj.com/itech/index.shtml} +A consulting company which mentions MySQL in the right company. + +@item @uref{http://www.pmpcs.com/} +PMP Computer Solutions. Database developers using MySQL and +@code{mSQL}. + +@item @uref{http://www.dedserius.com/y2kmatrix/} +Y2K tester. +@end table + +@subheading SQL and Database Interfaces + +@table @asis +@item @uref{http://java.sun.com/products/jdbc/} +The JDBC database access API. + +@item @uref{http://www.gagme.com/mysql/} +Patch for @code{mSQL} Tcl. + +@item @uref{http://www.amsoft.ru/easysql/} +EasySQL: An ODBC-like driver manager. + +@item @uref{http://www.lightlink.com/hessling/rexxsql.html} +A REXX interface to SQL databases. + +@c @item @uref{http://www.mytcl.cx/} +@c Tcl interface based on tcl-sql with many bugfixes. + +@item @uref{http://www.binevolve.com/~tdarugar/tcl-sql/} +Tcl interface for MySQL. + +@item @uref{http://www.contrib.andrew.cmu.edu/~shadow/sql.html} +SQL Reference Page with a lot of interesting links. + +@end table + +@subheading Examples of MySQL Use + +@table @asis +@c Added 990601 +@c EMAIL: thuss@little6.com (Todd Huss) +@item @uref{http://www.little6.com/about/linux/} +Little6 Inc., An online contract and job finding site that is powered by +MySQL, PHP3, and Linux. + +@c Added 990521 +@c EMAIL: info@worldrecords.com (Jim Rota) +@item @uref{http://www.worldrecords.com/} +World Records - A search engine for information about music that uses +MySQL and PHP. + +@item @uref{http://www.webtechniques.com/archives/1998/01/note/} +A Contact Database using MySQL and PHP. + +@item @uref{http://modems.rosenet.net/mysql/} +Web based interface and Community Calendar with PHP. + +@item @uref{http://www.odbsoft.com/cook/sources.htm} +Perl package to generate html from a SQL table structure and for generating +SQL statements from an html form. + +@item @uref{http://www.gusnet.cx/proj/telsql/} +Basic telephone database using @code{DBI}/@code{DBD}. + +@item @uref{http://tecfa.unige.ch/guides/java/staf2x/ex/jdbc/coffee-break/} +JDBC examples by Daniel K. Schneider. + +@item @uref{http://www.ooc.com/} +Object Oriented Concepts Inc; CORBA applications with examples in source. + +@c EMAIL: paul@sword.damocles.com (Paul Bannister) +@item @uref{http://www.stopbit.com/} +Stopbit - A technology news site using MySQL and PHP. + +@item @uref{http://www.penguinservices.com/scripts/} +Online shopping cart system. + +@c Added 990928 from editor@city-gallery.com +@cindex Old Photo Album +@item @uref{http://www.city-gallery.com/album/} +Old Photo Album - The album is a collaborative popular history of photography +project that generates all pages from data stored in a MySQL +database. Pages are dynamically generated through a php3 interface to the +database content. Users contribute images and descriptions. Contributed +images are stored on the web server to avoid storing them in the database +as BLOBs. All other information is stored on the shared MySQL server. +@end table + +@subheading General Database Links + +@table @asis +@item @uref{http://black.hole-in-the.net/guy/webdb/} +Homepage of the webdb-l (Web Databases) mailing list. + +@item @uref{http://www.symbolstone.org/technology/perl/DBI/} +Perl @code{DBI}/@code{DBD} modules homepage. + +@item @uref{http://www.student.uni-koeln.de/cygwin/} +Cygwin tools. Unix on top of Windows. + +@cindex Tek-Tips forums +@cindex forums, Tek-Tips +@item @uref{http://www.tek-tips.com/} +Tek-Tips Forums are 800+ independent peer-to-peer non-commercial support +forums for Computer Professionals. Features include automatic e-mail +notification of responses, a links library, and member confidentiality +guaranteed. + +@item @uref{http://www.public.asu.edu/~peterjn/btree/} +B-Trees: Balanced Tree Data Structures. + +@item @uref{http://www.fit.qut.edu.au/~maire/baobab/lecture/sld001.htm} +A lecture about B-Trees. +@end table + + diff --git a/Docs/section.Testimonials.texi b/Docs/section.Testimonials.texi new file mode 100644 index 00000000000..e757a6a92d0 --- /dev/null +++ b/Docs/section.Testimonials.texi @@ -0,0 +1,31 @@ +@c FIX AGL 20011108 Extracted from manual.texi. +@c Should only be on website with new submits by webform. + + +@node MySQL Testimonials, Contrib, Users, Top +@appendix MySQL Testimonials + +@cindex MySQL Testimonials + +The section 'MySQL Users' contains a lot of different links to +MySQL users but doesn't provide that much information about how +they are using MySQL. @xref{Users}. This section gives you an idea +of how other MySQL users are using MySQL to solve their problems. + +Please note that all new stories are added on the MySQL website, +@uref{http://www.mysql.com/}. +Do let us know about @emph{your} success story too! + +@itemize @bullet +@item +@strong{Peter Zaitsev of Spylog.ru} writes: +I think you might be interested in my database size. The whole database +is currently on 15 servers and I think it's about 60.000 of tables +containing about 5.000.000.000 of rows. My mostly loaded server +currently holds about 10.000 of tables with 1.000.000.000 of rows in it. +Hugest tables have about 50.000.000 of rows, and this value will raise +as soon as I'll move to 2.4 kernel with large files. Currently I have to +delete much of logs for large sites to hold table sizes in 2Gb. + +@item + diff --git a/Docs/section.Users.texi b/Docs/section.Users.texi new file mode 100644 index 00000000000..3c8d219fa16 --- /dev/null +++ b/Docs/section.Users.texi @@ -0,0 +1,414 @@ +@c FIX AGL 20011108 Extracted from manual.texi. +@c Should only be on website. + + +@node Users, Contrib, Problems, Top +@appendix MySQL Users + +@cindex users, of MySQL +@cindex news sites + +This appendix lists users of MySQL that have given us permission +to list them in our documentation. It is by far not a complete list, but +should give you a general idea of who uses MySQL and what it can +be used for. + +@appendixsec General News Sites + +@itemize @bullet + +@item @uref{http://www.yahoo.com/} (Yahoo!) + +@item @uref{http://slashdot.org/} (Slashdot: A pro-Linux/tech news and comment/discussion site) + +@item @uref{http://www.linux.com/} (All about Linux) + +@item @uref{http://www.linuxtoday.com/} (Linuxtoday) + +@item @uref{http://www.32bitsonline.com/} (32Bits Online: because there's +more than one way to compute) + +@item @uref{http://www.freshmeat.net/} (Freshmeat: News about new versions of computer-related stuff) + +@end itemize + +@cindex search engines, web +@cindex web search engines +@appendixsec Web Search Engines + +@itemize @bullet + +@item @uref{http://www.aaa.com.au/} (AAA Matilda Web Search) +@item @uref{http://www.whatsnu.com/} (What's New) +@item @uref{http://www.aladin.de/} (Aladin) +@item @uref{http://www.columbus-finder.de/} (Columbus Finder) +@item @uref{http://www.spider.de/} (Spider) +@item @uref{http://www.blitzsuche.de/} (Blitzsuche) +@item @uref{http://www.indoseek.co.id/} (Indoseek Indonesia) +@item @uref{http://www.yaboo.dk/} (Yaboo - Yet Another BOOkmarker) +@item @uref{http://www.ozsearch.com.au/} (OzSearch Internet Guide) +@item @uref{http://www.splatsearch.com/} (Splat! Search) +@item @uref{http://osdls.library.arizona.edu/} (The Open Source Digital Library System Project) +@end itemize + +@appendixsec Information Search Engines Specialising in a Particular Area + +@itemize @bullet + +@item @uref{http://www.spylog.ru/} (SpyLOG ; A very popular Web counter site) + +@item @uref{http://www.tucows.com/} (TuCows Network; Free Software archive) + +@item @uref{http://www.jobvertise.com/} (Jobvertise: Post and search for jobs) + +@item @uref{http://www.musicdatabase.com/} (The Music Database) + +@item @uref{http://www.soccersearch.com/} (Football -Soccer- search page) + +@item @uref{http://www.headrush.net/takedown} (TAKEDOWN - wrestling) + +@item @uref{http://www.lyrics.net/} (The International Lyrics Network) + +@item @uref{http://TheMatrix.com/~matrix/band_search.phtml} (Musicians looking for other musicians; free service) + +@item @uref{http://www.addall.com/AddBooks/Stores.html} (AddALL books searching and price comparison) + +@item @uref{http://www.herbaria.harvard.edu/Data/Gray/gray.html} (Harvard's Gray Herbarium Index of Plant Names) + +@item @uref{http://www.game-developer.com/} (The Game Development Search Engine) + +@item @uref{http://www.theinnkeeper.com/} (The Innkeeper Vacation Guides) + +@item @uref{http://www.macgamedatabase.com/} (The Mac Game Database uses PHP and MySQL) +@c From: Marc Antony Vose + +@item @uref{http://www.csse.monash.edu.au/publications/} (Research +Publications at Monash University in Australia) + +@item @uref{http://www.ipielle.emr.it/bts/} +(Occupational Health & Safety Website database; a project for the ECC) +@c c.presutti@ipielle.emr.it + +@item @uref{http://data.mch.mcgill.ca/} (Bioinformatics databases at the +Montreal Children's Hospital using MySQL) +@c saeed@www.debelle.mcgill.ca +@end itemize + +@cindex online magazines +@cindex magazines, online +@appendixsec Online Magazines + +@itemize @bullet +@item @uref{http://www.spoiler.com/} (Spoiler Webzine) +An online magazine featuring music, literature, arts, and design content. +@item @uref{http://www.linux-magazin.de/newsflash/} (Daily news about Linux in German language) +@item @uref{http://www.betazine.com/} (Betazine - The Ultimate Online Beta Tester's Magazine) +@item @uref{http://www.currents.net/ccinfo/aboutcc.html} (Computer Currents Magazine) +@end itemize + +@cindex websites +@appendixsec Websites that Use MySQL as a Backend + +@itemize @bullet + +@item @uref{http://liftoff.msfc.nasa.gov/} (NASA) +@item @uref{http://kids.msfc.nasa.gov/} (NASA KIDS) +@item @uref{http://science.nasa.gov/} (Sience@@NASA) + +@item @uref{http://www.handy.de/} (handy.de) + +@item @uref{http://lindev.jmc.tju.edu/qwor/} (Qt Widget and Object Repository) + +@item @uref{http://www.samba-choro.com.br/} (Brazilian samba site; in Portuguese) + +@item @uref{http://pgss.iss.uw.edu.pl/en_index.ISS} (Polish General Social Survey) + +@item @uref{http://www.expo2000.com/} Expo2000 - world-wide distribution of +tickets for this event is implemented using MySQL and Tcl/Tk. More than +5000 travel agencies all over the world have access to it. + +@item @uref{http://www.freevote.com/} FreeVote.com is a free voting +service with millions of users. + +@item @uref{http://f1.tauzero.se/} (Forza Motorsport) + +@item @uref{http://www.dreamhost.com/} (DreamHost Web Hosting) + +@end itemize + +@cindex services +@appendixsec Domain/Internet/Web and Related Services + +@itemize @bullet + +@item @uref{http://www.wix.com/mysql-hosting/} (Registry of Web providers that +support MySQL) + +@item @uref{http://www.yi.org/} (Dynamic DNS Services) + +@item @uref{http://www.dynodns.net/} (Dynamic domain name service) + +@item @uref{http://www.ods.org/} (Open DNS Project; free dynamic DNS service) + +@c @item @uref{http://dynodns.net/} (Free dynamic DNS implementation) +@c EMAIL: A Moore + +@item @uref{http://www.hn.org/} (Hammernode; Public DNS Servers) + +@item @uref{http://www.fdns.net/} (Free 3rd level domains) + +@item @uref{http://worldcommunity.com/} (Online Database) + +@item @uref{http://www.bigbiz.com/} (BigBiz Internet Services) + +@item @uref{http://virt.circle.net/} (The Virt Gazette) + +@item @uref{http://www.california.com/} (Global InfoNet Inc) + +@item @uref{http://www.webhosters.com/} (WebHosters - A Guide to WWW Providers) + +@item @uref{http://online.dn.ru/} (Internet information server) + +@item @uref{http://www.worldnetla.net/} (WorldNet Communications - An Internet Services Provider) + +@item @uref{http://www.netizen.com.au/} (Netizen: Australian-based Web consultancy) + +@item @uref{http://www.trainingpages.co.uk/} (Search site for training courses in the UK) + +@item @uref{http://chat.nitco.com/} (Gannon Chat; GPL. Written in Perl and Javascript) + +@item @uref{http://www.addurls.com/} (A general links directory) + +@item @uref{http://www.bookmarktracker.com/} (A Web-based bookmark management service) + +@item @uref{http://www.cdrom.com/} (Walnut Creek CDROM) + +@item @uref{http://www.wwwthreads.org/} (WWWThreads; Interactive discussion Forums) + +@item @uref{http://pvmon.portici.enea.it/Meteo/} (In Italian; Storage data from meteo station) + +@item @uref{http://www.buysell.net/} (Online "Person To Person" Auction) + +@item @uref{http://tips.pair.com/} (Tips on Web development) + +@item @uref{http://www.mailfriends.com/} (Mailfriends.com is a FREE service for +everybody who wants to find friends over the internet) + +@item @uref{http://www.uninova.com/cgi-bin/wctelnets?list} (Web Page Telnet BBS List) + +@item @uref{http://www.uninova.com/cnc.html} (UniNova Digital Postcards) + +@c @item @uref{http://cabinboy.powersurfr.com/} (An Internet RFC search engine) + +@item @uref{http://www.dslreports.com/} (DSL-provider search with reviews) +Made with MySQL and Modperl, all pages are generated dynamically out of +the MySQL database +@end itemize + +@cindex PHP, websites +@appendixsec Websites that Use @code{PHP} and MySQL + +@itemize @bullet +@c @item @uref{http://www.wh200th.com/} (White House 200th Anniversary site) + +@item @uref{http://support.jgaa.com/} (Jgaa's Internet - Official Support Site) + +@item @uref{http://io.incluso.com/} (Ionline - online publication) MySQL, +PHP, Java, Web programming, DB development + +@item @uref{http://www.baboo.com/} (BaBoo - Browse and Bookmark. Free Web-based bookmark manager and Calendar) + +@item @uref{http://www.courses.pjc.cc.fl.us/Schedule/} +(Course Schedule System at Pensacola Junior College) + +@item @uref{http://www.fccj.org/} (Florida Community College at Jacksonville) + +@item @uref{http://www.32bit.com/} (32bit.com; An extensive shareware / freeware archive) + +@item @uref{http://www.jokes2000.com/} (Jokes 2000) +@c Added 990604; EMAIL: ah@dybdahl.dk + +@item @uref{http://www.burken.nu/} +Burken is a webhotel that provides scripts, among other things, +for remote users, like counters, guestbooks etc. +@c Added 990608; EMAIL: spacedmp@SpaceDump.Burken.NU (Anders Olausson) + +@item @uref{http://tips.pair.com/} +Contains tips on html, javascript, 2d/3d graphics, and PHP3/MySQL. +All pages are generated from a database. +@c Added 990614; EMAIL: downey@image.dk (Rune Madsen) + +@item @uref{http://www.softwarezrus.com/} +Ecommerce site that is selling computers. +@end itemize + +@cindex consultants, list of +@appendixsec MySQL Consultants + +@itemize @bullet + +@item @uref{http://www.ayni.com/} (Ayni AG) + +@item @uref{http://worldcommunity.com/} (Online Database) + +@item @uref{http://www2.dataguard.no/} (DataGuard; Uses MySQL and PHP) + +@item @uref{http://wwits.net/programs/mysql.phtml} (WWITS; uses MySQL and PHP) + +@item @uref{http://www.worldcommunity.com/} (WCN - The World Community Network) + +@item @uref{http://www.chipcastle.com/} (Chip Castle Dot Com Inc) +@c Added 990603 EMAIL: chip@chipcastle.com (Chip Castle) + +@item @uref{http://www.cyber.com.au/} (Cybersource Pty. Ltd) + +@item @uref{http://www.spring.de/} (Spring infotainment gmbh & co. kg) +@c added 990905 "Oliver Pischke" + +@item @uref{http://www.wamdesign.com/} (Wam Design develops websites using MySQL) +@c Added 990905; max@wamdesign.com + +@item @uref{http://www.berkeleyconsultants.com/} (Berkeley Consultants Group) + +@item @uref{http://www.jammconsulting.com/} (JAMM Consulting Inc) + +@end itemize + +@c Commented out by Arjen 011018, section is empty! +@c appendixsec Programming + +@cindex web pages, miscellaneous +@appendixsec Uncategorised Pages + +@itemize @bullet + +@item @uref{http://www.feature-showcase.com/htmls/demo_mysql.sql} (AZC.COM's Feature Showcase) + +@item @uref{http://www.teach.org.uk/subjects/trainingcourse/g.html} (Course Search) + +@item @uref{http://www.northerbys.com/} (Northerbys Online Auctions) + +@item @uref{http://www.schiphol.nl/flights/home.htm} (Amsterdam Airport Schiphol) + +@item @uref{http://TheMatrix.com/seventhsin/query.phtml} (CD database) + +@item @uref{http://TheMatrix.com/~flmm/GEAR.html} (Used Audio Gear Database) + +@item @uref{http://www.kiss.de/musik-mueller/} (Musical note-sheets) + +@item @uref{http://www.bagism.com/} (Bagism; A John Lennon fan page) + +@item @uref{http://www.selftaught.com/} (US Folk art broker) + +@item @uref{http://organizer.net/} (Mail reading on the Web) + +@item @uref{http://www.mypage.org/} (Free home pages on www.somecoolname.mypage.org) + +@item @uref{http://www.schulweb.de/} (Der Server f@"ur Schulen im Web - in German) + +@item @uref{http://www.ald.net/} (Auldhaefen Online Services) + +@item @uref{http://www.cary.net/} (CaryNET Information Center) + +@item @uref{http://www.dataden.com/} (Dataden Computer Systems) + +@item @uref{http://andree.grm.se/} (Andr@'emuseet; in Swedish) + +@item @uref{http://www.him.net/} (HOMESITE Internet Marketing) + +@item @uref{http://www.jade-v.com/techinfo.html} (Jade-V Network Services) + +@item @uref{http://ww2010.atmos.uiuc.edu/(Gl)/abt/aknw/tech.rxml} +Weather World 2010 Technical Credits + +@item @uref{http://gimp.foebud.org/registry/doc/} +About The Gimp plugin registry + +@item @uref{http://www.fast-inc.com/Products/Archiver/database.html} +Java tool; archiver technical detail (Slightly optimistic about MySQL +ANSI-92 compliance) + +@item @uref{http://www.gamesdomain.com/cheats/usrcheat.phtml} (Games Domain Cheats Database) + +@item @uref{http://www.kcilink.com/poweredby/} (The "Powered By" Page; Kcilink) + +@item @uref{http://www.netcasting.net/index.whtml} (Netcasting) + +@item @uref{http://homepages.tig.com.au/~mjj/nbltips} (NBL: Australian National Basketball League; tipping) + +@item @uref{http://www.cgishop.com/} (CGI shop) + +@item @uref{http://www.whirlycott.com/} (Whirlycott: Website Design) + +@item @uref{http://www.mtp.dk/} (Museum Tusculanum Press) + +@item @uref{http://csdgi.historie.ku.dk/biblio/} (Centro Siciliano di Documentazione) + +@item @uref{http://caribou.dyn.ml.org:8000/} (Quake statistics database) + +@item @uref{http://www.astroforum.ch/} (Astroforum: Astrologie and related things; in German) + +@item @uref{http://www.opendebate.com/} (OpenDebate - Interactive Polls & Open Discussion) + +@item @uref{http://vermeer.organik.uni-erlangen.de/dissertationen/} (Online chemical dissertation server) + +@item @uref{http://www.freschinfo.com/} (FreSch! The Free Scholarship Search Service) + +@item @uref{http://www.nada.kth.se/~staffanu/pinball/} (Stockholm Pinball Locator) + +@item @uref{http://www.hek.com/} (HEK - a construction company) + +@item @uref{http://www.ebi.nl/} (Elsevier Business Information) + +@item @uref{http://vaccination.medicallink.se/} (Medical Links; using ColdFusion and MySQL) + +@item @uref{http://www.joblink-usa.com/} (Search for jobs & people at JobLink-USA) + +@item @uref{http://www.skydive.net/competfs/} (Competition Formation Skydiving) + +@item @uref{http://www.galaxy-net.net/} (Galaxy-NET Telecommunications; E-commerce and internal accounting) + +@item @uref{http://www.borsen.dk/} (Denmark's leading business daily newspaper B@o{}rsen) + +@item @uref{http://tmmm.simplenet.com/indb/} (The Internet NES Database) + +@item @uref{http://www.russia.cz/} (Travel agency in Prague in 3 languages) + +@item @uref{http://www.linkstation.de/} (Linkstation) + +@item @uref{http://www.peoplestaff.com/} (Searchable online database at Peoplestaff) + +@item @uref{http://www.dreamhorse.com/} (A searchable database system for horse classified ads) + +@item @uref{http://pootpoot.com/} (The Poot site) + +@item @uref{http://grateful.net/hw_html/} ("Playin' in the LAN"; a network monitoring suite) + +@c Update from Christopher Milton 1999-12-21 +@item @uref{http://www.usapa.army.mil/} (U.S. Army Publishing Agency) + +@item @uref{http://www.nekretnine.co.yu/} (Realestate handling in Yugoslavia) + +@item @uref{http://demo.cpsoft.com/pims/devFAQ.html} (PIMS; a Patient Information Management System) + +@item @uref{http://cpsoft.com/} (Pilkington Software Inc) + +@item @uref{http://www.no-quarter.org/} (A Vietnam Veteran's Memorial - The Wall - database) + +@item @uref{http://www.gamers-union.com/} (Gamer's Union specializes in auctions of used & out-of-print gaming material) + +@item @uref{http://www.montereyhigh.com/office/dbul.php3} (A daily bulletin at Monterey High school) + +@item @uref{http://www.myEastside.com/} (Community-owned site serving Lake +Washington's Eastside residents and businesses) + +@item @uref{http://bowling-france.net/} (French bowling site) +@end itemize + +Send any additions to this list to @email{webmaster@@mysql.com}. + +@page + + + + diff --git a/mysql-test/r/insert_select.result b/mysql-test/r/insert_select.result index 682e711a6e8..d61b6c67030 100644 --- a/mysql-test/r/insert_select.result +++ b/mysql-test/r/insert_select.result @@ -4,6 +4,8 @@ insert into t1 (bandID,payoutID) VALUES (1,6),(2,6),(3,4),(4,9),(5,10),(6,1),(7, create table t2 (payoutID SMALLINT UNSIGNED NOT NULL PRIMARY KEY); insert into t2 (payoutID) SELECT DISTINCT payoutID FROM t1; insert into t2 (payoutID) SELECT payoutID+10 FROM t1; +Duplicate entry '16' for key 1 +insert ignore into t2 (payoutID) SELECT payoutID+10 FROM t1; select * from t2; payoutID 1 diff --git a/mysql-test/r/update.result b/mysql-test/r/update.result index 4fa1f3513b2..436f837ab68 100644 --- a/mysql-test/r/update.result +++ b/mysql-test/r/update.result @@ -102,3 +102,13 @@ select status from t1; status 1 drop table t1; +create table t1 (a int not null, b int not null); +insert into t1 values (1,1),(1,2),(1,3); +update t1 set b=4 where a=1 order by b asc limit 1; +update t1 set b=4 where a=1 order by b desc limit 1; +select * from t1; +a b +1 4 +1 4 +1 2 +drop table t1; diff --git a/mysql-test/t/insert_select.test b/mysql-test/t/insert_select.test index 30d3e31188c..42f65858d77 100644 --- a/mysql-test/t/insert_select.test +++ b/mysql-test/t/insert_select.test @@ -7,7 +7,9 @@ create table t1 (bandID MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY, payoutID SMALLI insert into t1 (bandID,payoutID) VALUES (1,6),(2,6),(3,4),(4,9),(5,10),(6,1),(7,12),(8,12); create table t2 (payoutID SMALLINT UNSIGNED NOT NULL PRIMARY KEY); insert into t2 (payoutID) SELECT DISTINCT payoutID FROM t1; +--error 1062 insert into t2 (payoutID) SELECT payoutID+10 FROM t1; +insert ignore into t2 (payoutID) SELECT payoutID+10 FROM t1; select * from t2; drop table t1,t2; # diff --git a/mysql-test/t/update.test b/mysql-test/t/update.test index 6f446a11521..5cbbd2a350e 100644 --- a/mysql-test/t/update.test +++ b/mysql-test/t/update.test @@ -76,3 +76,14 @@ alter table t1 change lfdnr lfdnr int(10) unsigned default 0 not null auto_incre update t1 set status=1 where type='Open'; select status from t1; drop table t1; + +# +# Test of ORDER BY +# + +create table t1 (a int not null, b int not null); +insert into t1 values (1,1),(1,2),(1,3); +update t1 set b=4 where a=1 order by b asc limit 1; +update t1 set b=4 where a=1 order by b desc limit 1; +select * from t1; +drop table t1; diff --git a/mysys/my_lib.c b/mysys/my_lib.c index 55bd42381da..5e9093d0124 100644 --- a/mysys/my_lib.c +++ b/mysys/my_lib.c @@ -112,6 +112,10 @@ MY_DIR *my_dir(const char *path, myf MyFlags) dirp = opendir(directory_file_name(tmp_path,(my_string) path)); size = STARTSIZE; +#if defined(__amiga__) + if ((dirp->dd_fd) < 0) /* Directory doesn't exists */ + goto error; +#endif if (dirp == NULL || ! (buffer = (char *) my_malloc(size, MyFlags))) goto error; diff --git a/sql-bench/Comments/interbase b/sql-bench/Comments/interbase new file mode 100644 index 00000000000..addaf74b63f --- /dev/null +++ b/sql-bench/Comments/interbase @@ -0,0 +1,18 @@ +Running crash-me on Interbase: +I +- got opensource version of interbase 6.0.1 + (both mode, classic and superserver), +- set up DBD::InterBase from cpan, +- created database "test" and set sql_dialect for that database to 3 +- executed crash-me for both interbase's models (classic and superserver). + +There were some problems during the execution: +1) Sometimes client side got SIGSEGV , At that moment server side + writes + gds__alloc: non-positive size allocation request + to log file. + This problem has both models. I am not shure if it's interbase or + DBD:InterBase problem (though DBD::InterBase made all nesessary + tests during the installation without any problem) + +2) In "superserver" mode ibserver several times died (and ibguard restarted it) diff --git a/sql-bench/crash-me.sh b/sql-bench/crash-me.sh index f6985adc5c0..434599a1ac4 100644 --- a/sql-bench/crash-me.sh +++ b/sql-bench/crash-me.sh @@ -2524,21 +2524,21 @@ sub report_trans if ($rc) { $dbh->{AutoCommit} = 1; if (safe_query_result($check,"","")) { - save_config_data($limit,"yes",$prompt); + save_config_data($limit,"yes",$limit); } safe_query($clear); } else { $dbh->{AutoCommit} = 1; - save_config_data($limit,"error",$prompt); + save_config_data($limit,"error",$limit); } } else { - save_config_data($limit,"error",$prompt); + save_config_data($limit,"error",$limit); } $dbh->{AutoCommit} = 1; } else { - save_config_data($limit,"no",$prompt); + save_config_data($limit,"no",$limit); } safe_query($clear); } diff --git a/sql-bench/limits/interbase-dialect1.cfg b/sql-bench/limits/interbase-dialect1.cfg new file mode 100644 index 00000000000..046627be513 --- /dev/null +++ b/sql-bench/limits/interbase-dialect1.cfg @@ -0,0 +1,514 @@ +#This file is automaticly generated by crash-me 1.57 + +NEG=no # update of column= -column +Need_cast_for_null=no # Need to cast NULL for arithmetic +alter_add_col=yes # Alter table add column +alter_add_constraint=yes # Alter table add constraint +alter_add_foreign_key=yes # Alter table add foreign key +alter_add_multi_col=with add # Alter table add many columns +alter_add_primary_key=with constraint # Alter table add primary key +alter_add_unique=no # Alter table add unique +alter_alter_col=no # Alter table alter column default +alter_change_col=no # Alter table change column +alter_drop_col=no # Alter table drop column +alter_drop_constraint=yes # Alter table drop constraint +alter_drop_foreign_key=with drop constraint # Alter table drop foreign key +alter_drop_primary_key=no # Alter table drop primary key +alter_drop_unique=no # Alter table drop unique +alter_modify_col=no # Alter table modify column +alter_rename_table=no # Alter table rename table +atomic_updates=no # atomic updates +automatic_rowid=no # Automatic row id +binary_numbers=yes # binary numbers (0b1001) +binary_strings=no # binary strings (b'0110') +case_insensitive_strings=no # Case insensitive compare +char_is_space_filled=yes # char are space filled +column_alias=yes # Column alias +columns_in_order_by=37 # number of columns in order by +comment_#=no # # as comment +comment_--=no # -- as comment (ANSI) +comment_/**/=yes # /* */ as comment +comment_//=no # // as comment +compute=no # Compute +connections=1000 # Simultaneous connections (installation default) +constraint_check=no # Column constraints +constraint_check_table=no # Table constraints +constraint_null=no # NULL constraint (SyBase style) +crash_me_safe=yes # crash me safe +crash_me_version=1.57 # crash me version +create_default=yes # default value for column +create_default_func=no # default value function for column +create_if_not_exists=no # create table if not exists +create_index=yes # create index +create_schema=no # Create SCHEMA +create_table_select=no # create table from select +cross_join=no # cross join (same as from a,b) +date_infinity=no # Supports 'infinity dates +date_last=no # Supports 9999-12-31 dates +date_one=no # Supports 0001-01-01 dates +date_with_YY=no # Supports YY-MM-DD dates +date_zero=no # Supports 0000-00-00 dates +domains=no # Domains (ANSI SQL) +double_quotes=yes # Double '' as ' in strings +drop_if_exists=no # drop table if exists +drop_index=yes # drop index +drop_requires_cascade=no # drop table require cascade/restrict +drop_restrict=no # drop table with cascade/restrict +end_colon=yes # allows end ';' +except=no # except +except_all=no # except all +except_all_incompat=no # except all (incompatible lists) +except_incompat=no # except (incompatible lists) +float_int_expr=yes # mixing of integer and float in expression +foreign_key_syntax=no # foreign key syntax +full_outer_join=yes # full outer join +func_extra_!=no # Function NOT as '!' in SELECT +func_extra_%=no # Function MOD as % +func_extra_&=no # Function & (bitwise and) +func_extra_&&=no # Function AND as '&&' +func_extra_<>=no # Function <> in SELECT +func_extra_==no # Function = +func_extra_add_months=no # Function ADD_MONTHS +func_extra_and_or=no # Function AND and OR in SELECT +func_extra_ascii_char=no # Function ASCII_CHAR +func_extra_ascii_code=no # Function ASCII_CODE +func_extra_atn2=no # Function ATN2 +func_extra_auto_num2string=no # Function automatic num->string convert +func_extra_auto_string2num=no # Function automatic string->num convert +func_extra_between=no # Function BETWEEN in SELECT +func_extra_binary_shifts=no # Function << and >> (bitwise shifts) +func_extra_bit_count=no # Function BIT_COUNT +func_extra_ceil=no # Function CEIL +func_extra_charindex=no # Function CHARINDEX +func_extra_chr=no # Function CHR +func_extra_concat_as_+=no # Function concatenation with + +func_extra_concat_list=no # Function CONCAT(list) +func_extra_convert=no # Function CONVERT +func_extra_cosh=no # Function COSH +func_extra_date_format=no # Function DATE_FORMAT +func_extra_dateadd=no # Function DATEADD +func_extra_datediff=no # Function DATEDIFF +func_extra_datename=no # Function DATENAME +func_extra_datepart=no # Function DATEPART +func_extra_elt=no # Function ELT +func_extra_encrypt=no # Function ENCRYPT +func_extra_field=no # Function FIELD +func_extra_format=no # Function FORMAT +func_extra_from_days=no # Function FROM_DAYS +func_extra_from_unixtime=no # Function FROM_UNIXTIME +func_extra_getdate=no # Function GETDATE +func_extra_greatest=no # Function GREATEST +func_extra_if=no # Function IF +func_extra_in_num=no # Function IN on numbers in SELECT +func_extra_in_str=no # Function IN on strings in SELECT +func_extra_initcap=no # Function INITCAP +func_extra_instr=no # Function LOCATE as INSTR +func_extra_instr_oracle=no # Function INSTR (Oracle syntax) +func_extra_instrb=no # Function INSTRB +func_extra_interval=no # Function INTERVAL +func_extra_last_day=no # Function LAST_DAY +func_extra_last_insert_id=no # Function LAST_INSERT_ID +func_extra_least=no # Function LEAST +func_extra_lengthb=no # Function LENGTHB +func_extra_like=no # Function LIKE in SELECT +func_extra_like_escape=no # Function LIKE ESCAPE in SELECT +func_extra_ln=no # Function LN +func_extra_log(m_n)=no # Function LOG(m,n) +func_extra_logn=no # Function LOGN +func_extra_lpad=no # Function LPAD +func_extra_mdy=no # Function MDY +func_extra_mid=no # Function SUBSTRING as MID +func_extra_months_between=no # Function MONTHS_BETWEEN +func_extra_not=no # Function NOT in SELECT +func_extra_not_between=no # Function NOT BETWEEN in SELECT +func_extra_not_like=no # Function NOT LIKE in SELECT +func_extra_odbc_convert=no # Function ODBC CONVERT +func_extra_password=no # Function PASSWORD +func_extra_paste=no # Function PASTE +func_extra_patindex=no # Function PATINDEX +func_extra_period_add=no # Function PERIOD_ADD +func_extra_period_diff=no # Function PERIOD_DIFF +func_extra_pow=no # Function POW +func_extra_range=no # Function RANGE +func_extra_regexp=no # Function REGEXP in SELECT +func_extra_replicate=no # Function REPLICATE +func_extra_reverse=no # Function REVERSE +func_extra_root=no # Function ROOT +func_extra_round1=no # Function ROUND(1 arg) +func_extra_rpad=no # Function RPAD +func_extra_sec_to_time=no # Function SEC_TO_TIME +func_extra_sinh=no # Function SINH +func_extra_str=no # Function STR +func_extra_strcmp=no # Function STRCMP +func_extra_stuff=no # Function STUFF +func_extra_substrb=no # Function SUBSTRB +func_extra_substring_index=no # Function SUBSTRING_INDEX +func_extra_sysdate=no # Function SYSDATE +func_extra_tail=no # Function TAIL +func_extra_tanh=no # Function TANH +func_extra_time_to_sec=no # Function TIME_TO_SEC +func_extra_to_days=no # Function TO_DAYS +func_extra_translate=no # Function TRANSLATE +func_extra_trim_many_char=no # Function TRIM; Many char extension +func_extra_trim_substring=no # Function TRIM; Substring extension +func_extra_trunc=no # Function TRUNC +func_extra_uid=no # Function UID +func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP +func_extra_userenv=no # Function USERENV +func_extra_version=no # Function VERSION +func_extra_weekday=no # Function WEEKDAY +func_extra_|=no # Function | (bitwise or) +func_extra_||=no # Function OR as '||' +func_extra_~*=no # Function ~* (case insensitive compare) +func_odbc_abs=no # Function ABS +func_odbc_acos=no # Function ACOS +func_odbc_ascii=no # Function ASCII +func_odbc_asin=no # Function ASIN +func_odbc_atan=no # Function ATAN +func_odbc_atan2=no # Function ATAN2 +func_odbc_ceiling=no # Function CEILING +func_odbc_char=no # Function CHAR +func_odbc_concat=no # Function CONCAT(2 arg) +func_odbc_cos=no # Function COS +func_odbc_cot=no # Function COT +func_odbc_curdate=no # Function CURDATE +func_odbc_curtime=no # Function CURTIME +func_odbc_database=no # Function DATABASE +func_odbc_dayname=no # Function DAYNAME +func_odbc_dayofmonth=no # Function DAYOFMONTH +func_odbc_dayofweek=no # Function DAYOFWEEK +func_odbc_dayofyear=no # Function DAYOFYEAR +func_odbc_degrees=no # Function DEGREES +func_odbc_difference=no # Function DIFFERENCE() +func_odbc_exp=no # Function EXP +func_odbc_floor=no # Function FLOOR +func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT +func_odbc_hour=no # Function HOUR +func_odbc_hour_time=no # Function ANSI HOUR +func_odbc_ifnull=no # Function IFNULL +func_odbc_insert=no # Function INSERT +func_odbc_lcase=no # Function LCASE +func_odbc_left=no # Function LEFT +func_odbc_length=no # Function REAL LENGTH +func_odbc_length_without_space=no # Function ODBC LENGTH +func_odbc_locate_2=no # Function LOCATE(2 arg) +func_odbc_locate_3=no # Function LOCATE(3 arg) +func_odbc_log=no # Function LOG +func_odbc_log10=no # Function LOG10 +func_odbc_ltrim=no # Function LTRIM +func_odbc_minute=no # Function MINUTE +func_odbc_mod=no # Function MOD +func_odbc_month=no # Function MONTH +func_odbc_monthname=no # Function MONTHNAME +func_odbc_now=no # Function NOW +func_odbc_pi=no # Function PI +func_odbc_power=no # Function POWER +func_odbc_quarter=no # Function QUARTER +func_odbc_radians=no # Function RADIANS +func_odbc_rand=no # Function RAND +func_odbc_repeat=no # Function REPEAT +func_odbc_replace=no # Function REPLACE +func_odbc_right=no # Function RIGHT +func_odbc_round=no # Function ROUND(2 arg) +func_odbc_rtrim=no # Function RTRIM +func_odbc_second=no # Function SECOND +func_odbc_sign=no # Function SIGN +func_odbc_sin=no # Function SIN +func_odbc_soundex=no # Function SOUNDEX +func_odbc_space=no # Function SPACE +func_odbc_sqrt=no # Function SQRT +func_odbc_substring=no # Function ODBC SUBSTRING +func_odbc_tan=no # Function TAN +func_odbc_timestampadd=no # Function TIMESTAMPADD +func_odbc_timestampdiff=no # Function TIMESTAMPDIFF +func_odbc_truncate=no # Function TRUNCATE +func_odbc_ucase=no # Function UCASE +func_odbc_user()=no # Function USER() +func_odbc_week=no # Function WEEK +func_odbc_year=no # Function YEAR +func_sql_+=yes # Function +, -, * and / +func_sql_bit_length=no # Function BIT_LENGTH +func_sql_cast=yes # Function CAST +func_sql_char_length=no # Function CHAR_LENGTH +func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) +func_sql_character_length=no # Function CHARACTER_LENGTH +func_sql_coalesce=no # Function COALESCE +func_sql_concat_as_||=yes # Function concatenation with || +func_sql_current_date=no # Function CURRENT_DATE +func_sql_current_time=no # Function CURRENT_TIME +func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP +func_sql_current_user=no # Function CURRENT_USER +func_sql_extract_sql=yes # Function EXTRACT +func_sql_localtime=no # Function LOCALTIME +func_sql_localtimestamp=no # Function LOCALTIMESTAMP +func_sql_lower=no # Function LOWER +func_sql_nullif_num=no # Function NULLIF with numbers +func_sql_nullif_string=no # Function NULLIF with strings +func_sql_octet_length=no # Function OCTET_LENGTH +func_sql_position=no # Function POSITION +func_sql_searched_case=no # Function searched CASE +func_sql_session_user=no # Function SESSION_USER +func_sql_simple_case=no # Function simple CASE +func_sql_substring=no # Function ANSI SQL SUBSTRING +func_sql_system_user=no # Function SYSTEM_USER +func_sql_trim=no # Function TRIM +func_sql_upper=yes # Function UPPER +func_sql_user=yes # Function USER +func_where_between=yes # Function BETWEEN +func_where_eq_all=yes # Function = ALL +func_where_eq_any=yes # Function = ANY +func_where_eq_some=yes # Function = SOME +func_where_exists=yes # Function EXISTS +func_where_in_num=yes # Function IN on numbers +func_where_like=yes # Function LIKE +func_where_like_escape=yes # Function LIKE ESCAPE +func_where_match=no # Function MATCH +func_where_match_unique=no # Function MATCH UNIQUE +func_where_matches=no # Function MATCHES +func_where_not_between=yes # Function NOT BETWEEN +func_where_not_exists=yes # Function NOT EXISTS +func_where_not_like=yes # Function NOT LIKE +func_where_not_unique=no # Function NOT UNIQUE +func_where_unique=no # Function UNIQUE +functions=yes # Functions +group_by=yes # Group by +group_by_alias=no # Group by alias +group_by_null=yes # Group on column with null values +group_by_position=no # Group by position +group_distinct_functions=yes # Group functions with distinct +group_func_extra_bit_and=no # Group function BIT_AND +group_func_extra_bit_or=no # Group function BIT_OR +group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) +group_func_extra_std=no # Group function STD +group_func_extra_stddev=no # Group function STDDEV +group_func_extra_variance=no # Group function VARIANCE +group_func_sql_any=no # Group function ANY +group_func_sql_avg=yes # Group function AVG +group_func_sql_count_*=yes # Group function COUNT (*) +group_func_sql_count_column=yes # Group function COUNT column name +group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) +group_func_sql_every=no # Group function EVERY +group_func_sql_max=yes # Group function MAX on numbers +group_func_sql_max_str=yes # Group function MAX on strings +group_func_sql_min=yes # Group function MIN on numbers +group_func_sql_min_str=yes # Group function MIN on strings +group_func_sql_some=no # Group function SOME +group_func_sql_sum=yes # Group function SUM +group_functions=yes # Group functions +group_on_unused=yes # Group on unused column +has_true_false=no # TRUE and FALSE +having=yes # Having +having_with_alias=no # Having on alias +having_with_group=yes # Having with group function +hex_numbers=yes # hex numbers (0x41) +hex_strings=no # hex strings (x'1ace') +ignore_end_space=yes # Ignore end space in compare +index_in_create=no # index in create table +index_namespace=no # different namespace for index +index_parts=no # index on column part (extension) +inner_join=yes # inner join +insert_empty_string=no # insert empty string +insert_multi_value=no # INSERT with Value lists +insert_select=no # insert INTO ... SELECT ... +insert_with_set=no # INSERT with set syntax +intersect=no # intersect +intersect_all=no # intersect all +intersect_all_incompat=no # intersect all (incompatible lists) +intersect_incompat=no # intersect (incompatible lists) +join_tables=+64 # tables in join +left_outer_join=yes # left outer join +left_outer_join_using=no # left outer join using +like_with_column=no # column LIKE column +like_with_number=no # LIKE on numbers +lock_tables=no # lock table +logical_value=not supported # Value of logical operation (1=1) +max_big_expressions=1 # big expressions +max_char_size=32767 # max char() size +max_column_name=18 # column name length +max_columns=4759 # Columns in table +max_conditions=2944 # OR and AND in WHERE +max_expressions=+10000 # simple expressions +max_index=+64 # max index +max_index_name=31 # index name length +max_index_parts=16 # index parts +max_index_varchar_part_length=249 # index varchar part length +max_row_length=64744 # max table row length (without blobs) +max_row_length_with_null=64744 # table row length with nulls (without blobs) +max_select_alias_name=132 # select alias name length +max_stack_expression=165 # stacked expressions +max_table_alias_name=255 # table alias name length +max_table_name=31 # table name length +max_unique_index=+64 # unique indexes +max_varchar_size=10923 # max varchar() size +minus=no # minus +minus_incompat=no # minus (incompatible lists) +minus_neg=yes # Calculate 1--1 +multi_drop=no # many tables to drop table +multi_strings=no # Multiple line strings +multi_table_delete=no # DELETE FROM table1,table2... +multi_table_update=no # Update with many tables +natural_join=no # natural join +natural_join_incompat=no # natural join (incompatible lists) +natural_left_outer_join=no # natural left outer join +no_primary_key=yes # Tables without primary key +null_concat_expr=no # Is 'a' || NULL = NULL +null_in_index=yes # null in index +null_in_unique=no # null in unique index +null_num_expr=no # Is 1+NULL = NULL +nulls_in_unique=no # null combination in unique index +odbc_left_outer_join=no # left outer join odbc style +operating_system=Linux 2.4.4-64GB-SMP i686 # crash-me tested on +order_by=yes # Order by +order_by_alias=no # Order by alias +order_by_function=no # Order by function +order_by_position=yes # Order by position +order_by_remember_desc=no # Order by DESC is remembered +order_on_unused=yes # Order by on unused column +primary_key_in_create=yes # primary key in create table +psm_functions=no # PSM functions (ANSI SQL) +psm_modules=no # PSM modules (ANSI SQL) +psm_procedures=no # PSM procedures (ANSI SQL) +psm_trigger=no # Triggers (ANSI SQL) +query_size=65535 # query size +quote_ident_with_"=yes # " as identifier quote (ANSI SQL) +quote_ident_with_[=no # [] as identifier quote +quote_ident_with_`=no # ` as identifier quote +quote_with_"=no # Allows ' and " as string markers +recursive_subqueries=61 # recursive subqueries +remember_end_space=no # Remembers end space in char() +remember_end_space_varchar=yes # Remembers end space in varchar() +rename_table=no # rename table +right_outer_join=yes # right outer join +rowid=no # Type for row id +select_constants=yes # Select constants +select_limit=no # LIMIT number of rows +select_limit2=no # SELECT with LIMIT #,# +select_string_size=32767 # constant string size in SELECT +select_table_update=yes # Update with sub select +select_without_from=no # SELECT without FROM +server_version=6.0.1 # server version +simple_joins=yes # ANSI SQL simple joins +storage_of_float=round # Storage of float values +subqueries=yes # subqueries +table_alias=no # Table alias +table_name_case=yes # case independent table names +table_wildcard=yes # Select table_name.* +temporary_table=no # temporary tables +transactions=error # constant string size in where +truncate_table=no # truncate +type_extra_abstime=no # Type abstime +type_extra_bfile=no # Type bfile +type_extra_blob=yes # Type blob +type_extra_bool=no # Type bool +type_extra_box=no # Type box +type_extra_byte=no # Type byte +type_extra_char(1_arg)_binary=no # Type char(1 arg) binary +type_extra_cidr=no # Type cidr +type_extra_circle=no # Type circle +type_extra_clob=no # Type clob +type_extra_datetime=no # Type datetime +type_extra_double=no # Type double +type_extra_enum(1_arg)=no # Type enum(1 arg) +type_extra_float(2_arg)=no # Type float(2 arg) +type_extra_float4=no # Type float4 +type_extra_float8=no # Type float8 +type_extra_image=no # Type image +type_extra_inet=no # Type inet +type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill +type_extra_int1=no # Type int1 +type_extra_int2=no # Type int2 +type_extra_int3=no # Type int3 +type_extra_int4=no # Type int4 +type_extra_int8=no # Type int8 +type_extra_int_auto_increment=no # Type int not null auto_increment +type_extra_int_identity=no # Type int not null identity +type_extra_int_unsigned=no # Type int unsigned +type_extra_interval=no # Type interval +type_extra_line=no # Type line +type_extra_long=no # Type long +type_extra_long_raw=no # Type long raw +type_extra_long_varbinary=no # Type long varbinary +type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) +type_extra_lseg=no # Type lseg +type_extra_macaddr=no # Type macaddr +type_extra_mediumint=no # Type mediumint +type_extra_mediumtext=no # Type mediumtext +type_extra_middleint=no # Type middleint +type_extra_mlslabel=no # Type mlslabel +type_extra_money=no # Type money +type_extra_nclob=no # Type nclob +type_extra_number=no # Type number +type_extra_number(1_arg)=no # Type number(1 arg) +type_extra_number(2_arg)=no # Type number(2 arg) +type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) +type_extra_path=no # Type path +type_extra_point=no # Type point +type_extra_polygon=no # Type polygon +type_extra_raw(1_arg)=no # Type raw(1 arg) +type_extra_reltime=no # Type reltime +type_extra_rowid=no # Type rowid +type_extra_serial=no # Type serial +type_extra_set(1_arg)=no # Type set(1 arg) +type_extra_smalldatetime=no # Type smalldatetime +type_extra_smallfloat=no # Type smallfloat +type_extra_smallmoney=no # Type smallmoney +type_extra_text=no # Type text +type_extra_text(1_arg)=no # Type text(1 arg) +type_extra_timespan=no # Type timespan +type_extra_uint=no # Type uint +type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) +type_extra_year=no # Type year +type_odbc_bigint=no # Type bigint +type_odbc_binary(1_arg)=no # Type binary(1 arg) +type_odbc_datetime=no # Type datetime +type_odbc_tinyint=no # Type tinyint +type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) +type_sql_bit=no # Type bit +type_sql_bit(1_arg)=no # Type bit(1 arg) +type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) +type_sql_boolean=no # Type boolean +type_sql_char(1_arg)=yes # Type char(1 arg) +type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) +type_sql_character(1_arg)=yes # Type character(1 arg) +type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) +type_sql_date=no # Type date +type_sql_dec(2_arg)=yes # Type dec(2 arg) +type_sql_decimal(2_arg)=yes # Type decimal(2 arg) +type_sql_double_precision=yes # Type double precision +type_sql_float=yes # Type float +type_sql_float(1_arg)=yes # Type float(1 arg) +type_sql_int=yes # Type int +type_sql_integer=yes # Type integer +type_sql_interval_day=no # Type interval day +type_sql_interval_day_to_hour=no # Type interval day to hour +type_sql_interval_day_to_minute=no # Type interval day to minute +type_sql_interval_day_to_second=no # Type interval day to second +type_sql_interval_hour=no # Type interval hour +type_sql_interval_hour_to_minute=no # Type interval hour to minute +type_sql_interval_hour_to_second=no # Type interval hour to second +type_sql_interval_minute=no # Type interval minute +type_sql_interval_minute_to_second=no # Type interval minute to second +type_sql_interval_month=no # Type interval month +type_sql_interval_second=no # Type interval second +type_sql_interval_year=no # Type interval year +type_sql_interval_year_to_month=no # Type interval year to month +type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) +type_sql_national_character(1_arg)=yes # Type national character(1 arg) +type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) +type_sql_nchar(1_arg)=yes # Type nchar(1 arg) +type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) +type_sql_numeric(2_arg)=yes # Type numeric(2 arg) +type_sql_real=yes # Type real +type_sql_smallint=yes # Type smallint +type_sql_time=no # Type time +type_sql_timestamp=yes # Type timestamp +type_sql_timestamp_with_time_zone=no # Type timestamp with time zone +type_sql_varchar(1_arg)=yes # Type varchar(1 arg) +union=yes # union +union_all=yes # union all +union_all_incompat=yes # union all (incompatible lists) +union_incompat=yes # union (incompatible lists) +unique_in_create=yes # unique in create table +unique_null_in_create=no # unique null in create +views=no # views +where_string_size=32767 # constant string size in where diff --git a/sql-bench/limits/interbase-dialect3.cfg b/sql-bench/limits/interbase-dialect3.cfg new file mode 100644 index 00000000000..fdc93098688 --- /dev/null +++ b/sql-bench/limits/interbase-dialect3.cfg @@ -0,0 +1,514 @@ +#This file is automaticly generated by crash-me 1.57 + +NEG=no # update of column= -column +Need_cast_for_null=no # Need to cast NULL for arithmetic +alter_add_col=yes # Alter table add column +alter_add_constraint=yes # Alter table add constraint +alter_add_foreign_key=yes # Alter table add foreign key +alter_add_multi_col=with add # Alter table add many columns +alter_add_primary_key=with constraint # Alter table add primary key +alter_add_unique=no # Alter table add unique +alter_alter_col=no # Alter table alter column default +alter_change_col=no # Alter table change column +alter_drop_col=no # Alter table drop column +alter_drop_constraint=yes # Alter table drop constraint +alter_drop_foreign_key=with drop constraint # Alter table drop foreign key +alter_drop_primary_key=no # Alter table drop primary key +alter_drop_unique=no # Alter table drop unique +alter_modify_col=no # Alter table modify column +alter_rename_table=no # Alter table rename table +atomic_updates=no # atomic updates +automatic_rowid=no # Automatic row id +binary_numbers=yes # binary numbers (0b1001) +binary_strings=no # binary strings (b'0110') +case_insensitive_strings=no # Case insensitive compare +char_is_space_filled=yes # char are space filled +column_alias=yes # Column alias +columns_in_order_by=37 # number of columns in order by +comment_#=no # # as comment +comment_--=no # -- as comment (ANSI) +comment_/**/=yes # /* */ as comment +comment_//=no # // as comment +compute=no # Compute +connections=1000 # Simultaneous connections (installation default) +constraint_check=no # Column constraints +constraint_check_table=no # Table constraints +constraint_null=no # NULL constraint (SyBase style) +crash_me_safe=yes # crash me safe +crash_me_version=1.57 # crash me version +create_default=yes # default value for column +create_default_func=no # default value function for column +create_if_not_exists=no # create table if not exists +create_index=yes # create index +create_schema=no # Create SCHEMA +create_table_select=no # create table from select +cross_join=no # cross join (same as from a,b) +date_infinity=no # Supports 'infinity dates +date_last=error # Supports 9999-12-31 dates +date_one=error # Supports 0001-01-01 dates +date_with_YY=no # Supports YY-MM-DD dates +date_zero=no # Supports 0000-00-00 dates +domains=no # Domains (ANSI SQL) +double_quotes=yes # Double '' as ' in strings +drop_if_exists=no # drop table if exists +drop_index=yes # drop index +drop_requires_cascade=no # drop table require cascade/restrict +drop_restrict=no # drop table with cascade/restrict +end_colon=yes # allows end ';' +except=no # except +except_all=no # except all +except_all_incompat=no # except all (incompatible lists) +except_incompat=no # except (incompatible lists) +float_int_expr=yes # mixing of integer and float in expression +foreign_key_syntax=no # foreign key syntax +full_outer_join=yes # full outer join +func_extra_!=no # Function NOT as '!' in SELECT +func_extra_%=no # Function MOD as % +func_extra_&=no # Function & (bitwise and) +func_extra_&&=no # Function AND as '&&' +func_extra_<>=no # Function <> in SELECT +func_extra_==no # Function = +func_extra_add_months=no # Function ADD_MONTHS +func_extra_and_or=no # Function AND and OR in SELECT +func_extra_ascii_char=no # Function ASCII_CHAR +func_extra_ascii_code=no # Function ASCII_CODE +func_extra_atn2=no # Function ATN2 +func_extra_auto_num2string=no # Function automatic num->string convert +func_extra_auto_string2num=no # Function automatic string->num convert +func_extra_between=no # Function BETWEEN in SELECT +func_extra_binary_shifts=no # Function << and >> (bitwise shifts) +func_extra_bit_count=no # Function BIT_COUNT +func_extra_ceil=no # Function CEIL +func_extra_charindex=no # Function CHARINDEX +func_extra_chr=no # Function CHR +func_extra_concat_as_+=no # Function concatenation with + +func_extra_concat_list=no # Function CONCAT(list) +func_extra_convert=no # Function CONVERT +func_extra_cosh=no # Function COSH +func_extra_date_format=no # Function DATE_FORMAT +func_extra_dateadd=no # Function DATEADD +func_extra_datediff=no # Function DATEDIFF +func_extra_datename=no # Function DATENAME +func_extra_datepart=no # Function DATEPART +func_extra_elt=no # Function ELT +func_extra_encrypt=no # Function ENCRYPT +func_extra_field=no # Function FIELD +func_extra_format=no # Function FORMAT +func_extra_from_days=no # Function FROM_DAYS +func_extra_from_unixtime=no # Function FROM_UNIXTIME +func_extra_getdate=no # Function GETDATE +func_extra_greatest=no # Function GREATEST +func_extra_if=no # Function IF +func_extra_in_num=no # Function IN on numbers in SELECT +func_extra_in_str=no # Function IN on strings in SELECT +func_extra_initcap=no # Function INITCAP +func_extra_instr=no # Function LOCATE as INSTR +func_extra_instr_oracle=no # Function INSTR (Oracle syntax) +func_extra_instrb=no # Function INSTRB +func_extra_interval=no # Function INTERVAL +func_extra_last_day=no # Function LAST_DAY +func_extra_last_insert_id=no # Function LAST_INSERT_ID +func_extra_least=no # Function LEAST +func_extra_lengthb=no # Function LENGTHB +func_extra_like=no # Function LIKE in SELECT +func_extra_like_escape=no # Function LIKE ESCAPE in SELECT +func_extra_ln=no # Function LN +func_extra_log(m_n)=no # Function LOG(m,n) +func_extra_logn=no # Function LOGN +func_extra_lpad=no # Function LPAD +func_extra_mdy=no # Function MDY +func_extra_mid=no # Function SUBSTRING as MID +func_extra_months_between=no # Function MONTHS_BETWEEN +func_extra_not=no # Function NOT in SELECT +func_extra_not_between=no # Function NOT BETWEEN in SELECT +func_extra_not_like=no # Function NOT LIKE in SELECT +func_extra_odbc_convert=no # Function ODBC CONVERT +func_extra_password=no # Function PASSWORD +func_extra_paste=no # Function PASTE +func_extra_patindex=no # Function PATINDEX +func_extra_period_add=no # Function PERIOD_ADD +func_extra_period_diff=no # Function PERIOD_DIFF +func_extra_pow=no # Function POW +func_extra_range=no # Function RANGE +func_extra_regexp=no # Function REGEXP in SELECT +func_extra_replicate=no # Function REPLICATE +func_extra_reverse=no # Function REVERSE +func_extra_root=no # Function ROOT +func_extra_round1=no # Function ROUND(1 arg) +func_extra_rpad=no # Function RPAD +func_extra_sec_to_time=no # Function SEC_TO_TIME +func_extra_sinh=no # Function SINH +func_extra_str=no # Function STR +func_extra_strcmp=no # Function STRCMP +func_extra_stuff=no # Function STUFF +func_extra_substrb=no # Function SUBSTRB +func_extra_substring_index=no # Function SUBSTRING_INDEX +func_extra_sysdate=no # Function SYSDATE +func_extra_tail=no # Function TAIL +func_extra_tanh=no # Function TANH +func_extra_time_to_sec=no # Function TIME_TO_SEC +func_extra_to_days=no # Function TO_DAYS +func_extra_translate=no # Function TRANSLATE +func_extra_trim_many_char=no # Function TRIM; Many char extension +func_extra_trim_substring=no # Function TRIM; Substring extension +func_extra_trunc=no # Function TRUNC +func_extra_uid=no # Function UID +func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP +func_extra_userenv=no # Function USERENV +func_extra_version=no # Function VERSION +func_extra_weekday=no # Function WEEKDAY +func_extra_|=no # Function | (bitwise or) +func_extra_||=no # Function OR as '||' +func_extra_~*=no # Function ~* (case insensitive compare) +func_odbc_abs=no # Function ABS +func_odbc_acos=no # Function ACOS +func_odbc_ascii=no # Function ASCII +func_odbc_asin=no # Function ASIN +func_odbc_atan=no # Function ATAN +func_odbc_atan2=no # Function ATAN2 +func_odbc_ceiling=no # Function CEILING +func_odbc_char=no # Function CHAR +func_odbc_concat=no # Function CONCAT(2 arg) +func_odbc_cos=no # Function COS +func_odbc_cot=no # Function COT +func_odbc_curdate=no # Function CURDATE +func_odbc_curtime=no # Function CURTIME +func_odbc_database=no # Function DATABASE +func_odbc_dayname=no # Function DAYNAME +func_odbc_dayofmonth=no # Function DAYOFMONTH +func_odbc_dayofweek=no # Function DAYOFWEEK +func_odbc_dayofyear=no # Function DAYOFYEAR +func_odbc_degrees=no # Function DEGREES +func_odbc_difference=no # Function DIFFERENCE() +func_odbc_exp=no # Function EXP +func_odbc_floor=no # Function FLOOR +func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT +func_odbc_hour=no # Function HOUR +func_odbc_hour_time=no # Function ANSI HOUR +func_odbc_ifnull=no # Function IFNULL +func_odbc_insert=no # Function INSERT +func_odbc_lcase=no # Function LCASE +func_odbc_left=no # Function LEFT +func_odbc_length=no # Function REAL LENGTH +func_odbc_length_without_space=no # Function ODBC LENGTH +func_odbc_locate_2=no # Function LOCATE(2 arg) +func_odbc_locate_3=no # Function LOCATE(3 arg) +func_odbc_log=no # Function LOG +func_odbc_log10=no # Function LOG10 +func_odbc_ltrim=no # Function LTRIM +func_odbc_minute=no # Function MINUTE +func_odbc_mod=no # Function MOD +func_odbc_month=no # Function MONTH +func_odbc_monthname=no # Function MONTHNAME +func_odbc_now=no # Function NOW +func_odbc_pi=no # Function PI +func_odbc_power=no # Function POWER +func_odbc_quarter=no # Function QUARTER +func_odbc_radians=no # Function RADIANS +func_odbc_rand=no # Function RAND +func_odbc_repeat=no # Function REPEAT +func_odbc_replace=no # Function REPLACE +func_odbc_right=no # Function RIGHT +func_odbc_round=no # Function ROUND(2 arg) +func_odbc_rtrim=no # Function RTRIM +func_odbc_second=no # Function SECOND +func_odbc_sign=no # Function SIGN +func_odbc_sin=no # Function SIN +func_odbc_soundex=no # Function SOUNDEX +func_odbc_space=no # Function SPACE +func_odbc_sqrt=no # Function SQRT +func_odbc_substring=no # Function ODBC SUBSTRING +func_odbc_tan=no # Function TAN +func_odbc_timestampadd=no # Function TIMESTAMPADD +func_odbc_timestampdiff=no # Function TIMESTAMPDIFF +func_odbc_truncate=no # Function TRUNCATE +func_odbc_ucase=no # Function UCASE +func_odbc_user()=no # Function USER() +func_odbc_week=no # Function WEEK +func_odbc_year=no # Function YEAR +func_sql_+=yes # Function +, -, * and / +func_sql_bit_length=no # Function BIT_LENGTH +func_sql_cast=yes # Function CAST +func_sql_char_length=no # Function CHAR_LENGTH +func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) +func_sql_character_length=no # Function CHARACTER_LENGTH +func_sql_coalesce=no # Function COALESCE +func_sql_concat_as_||=yes # Function concatenation with || +func_sql_current_date=yes # Function CURRENT_DATE +func_sql_current_time=yes # Function CURRENT_TIME +func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP +func_sql_current_user=no # Function CURRENT_USER +func_sql_extract_sql=yes # Function EXTRACT +func_sql_localtime=no # Function LOCALTIME +func_sql_localtimestamp=no # Function LOCALTIMESTAMP +func_sql_lower=no # Function LOWER +func_sql_nullif_num=no # Function NULLIF with numbers +func_sql_nullif_string=no # Function NULLIF with strings +func_sql_octet_length=no # Function OCTET_LENGTH +func_sql_position=no # Function POSITION +func_sql_searched_case=no # Function searched CASE +func_sql_session_user=no # Function SESSION_USER +func_sql_simple_case=no # Function simple CASE +func_sql_substring=no # Function ANSI SQL SUBSTRING +func_sql_system_user=no # Function SYSTEM_USER +func_sql_trim=no # Function TRIM +func_sql_upper=yes # Function UPPER +func_sql_user=yes # Function USER +func_where_between=yes # Function BETWEEN +func_where_eq_all=yes # Function = ALL +func_where_eq_any=yes # Function = ANY +func_where_eq_some=yes # Function = SOME +func_where_exists=yes # Function EXISTS +func_where_in_num=yes # Function IN on numbers +func_where_like=yes # Function LIKE +func_where_like_escape=yes # Function LIKE ESCAPE +func_where_match=no # Function MATCH +func_where_match_unique=no # Function MATCH UNIQUE +func_where_matches=no # Function MATCHES +func_where_not_between=yes # Function NOT BETWEEN +func_where_not_exists=yes # Function NOT EXISTS +func_where_not_like=yes # Function NOT LIKE +func_where_not_unique=no # Function NOT UNIQUE +func_where_unique=no # Function UNIQUE +functions=yes # Functions +group_by=yes # Group by +group_by_alias=no # Group by alias +group_by_null=yes # Group on column with null values +group_by_position=no # Group by position +group_distinct_functions=yes # Group functions with distinct +group_func_extra_bit_and=no # Group function BIT_AND +group_func_extra_bit_or=no # Group function BIT_OR +group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) +group_func_extra_std=no # Group function STD +group_func_extra_stddev=no # Group function STDDEV +group_func_extra_variance=no # Group function VARIANCE +group_func_sql_any=no # Group function ANY +group_func_sql_avg=yes # Group function AVG +group_func_sql_count_*=yes # Group function COUNT (*) +group_func_sql_count_column=yes # Group function COUNT column name +group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) +group_func_sql_every=no # Group function EVERY +group_func_sql_max=yes # Group function MAX on numbers +group_func_sql_max_str=yes # Group function MAX on strings +group_func_sql_min=yes # Group function MIN on numbers +group_func_sql_min_str=yes # Group function MIN on strings +group_func_sql_some=no # Group function SOME +group_func_sql_sum=yes # Group function SUM +group_functions=yes # Group functions +group_on_unused=yes # Group on unused column +has_true_false=no # TRUE and FALSE +having=yes # Having +having_with_alias=no # Having on alias +having_with_group=yes # Having with group function +hex_numbers=yes # hex numbers (0x41) +hex_strings=no # hex strings (x'1ace') +ignore_end_space=yes # Ignore end space in compare +index_in_create=no # index in create table +index_namespace=no # different namespace for index +index_parts=no # index on column part (extension) +inner_join=yes # inner join +insert_empty_string=no # insert empty string +insert_multi_value=no # INSERT with Value lists +insert_select=no # insert INTO ... SELECT ... +insert_with_set=no # INSERT with set syntax +intersect=no # intersect +intersect_all=no # intersect all +intersect_all_incompat=no # intersect all (incompatible lists) +intersect_incompat=no # intersect (incompatible lists) +join_tables=+64 # tables in join +left_outer_join=yes # left outer join +left_outer_join_using=no # left outer join using +like_with_column=no # column LIKE column +like_with_number=no # LIKE on numbers +lock_tables=no # lock table +logical_value=not supported # Value of logical operation (1=1) +max_big_expressions=1 # big expressions +max_char_size=32767 # max char() size +max_columns=4759 # Columns in table +max_conditions=5888 # OR and AND in WHERE +max_expressions=+10000 # simple expressions +max_index=+64 # max index +max_index_name=31 # index name length +max_index_parts=16 # index parts +max_index_varchar_part_length=249 # index varchar part length +max_row_length=64744 # max table row length (without blobs) +max_row_length_with_null=64744 # table row length with nulls (without blobs) +max_select_alias_name=132 # select alias name length +max_stack_expression=165 # stacked expressions +max_table_alias_name=255 # table alias name length +max_table_name=31 # table name length +max_unique_index=+64 # unique indexes +max_varchar_size=10923 # max varchar() size +minus=no # minus +minus_incompat=no # minus (incompatible lists) +minus_neg=yes # Calculate 1--1 +multi_drop=no # many tables to drop table +multi_strings=no # Multiple line strings +multi_table_delete=no # DELETE FROM table1,table2... +multi_table_update=no # Update with many tables +natural_join=no # natural join +natural_join_incompat=no # natural join (incompatible lists) +natural_left_outer_join=no # natural left outer join +no_primary_key=yes # Tables without primary key +null_concat_expr=no # Is 'a' || NULL = NULL +null_in_index=yes # null in index +null_in_unique=no # null in unique index +null_num_expr=no # Is 1+NULL = NULL +nulls_in_unique=no # null combination in unique index +odbc_left_outer_join=no # left outer join odbc style +operating_system=Linux 2.4.4-64GB-SMP i686 # crash-me tested on +order_by=yes # Order by +order_by_alias=no # Order by alias +order_by_function=no # Order by function +order_by_position=yes # Order by position +order_by_remember_desc=no # Order by DESC is remembered +order_on_unused=yes # Order by on unused column +primary_key_in_create=yes # primary key in create table +psm_functions=no # PSM functions (ANSI SQL) +psm_modules=no # PSM modules (ANSI SQL) +psm_procedures=no # PSM procedures (ANSI SQL) +psm_trigger=no # Triggers (ANSI SQL) +query_size=65535 # query size +quote_ident_with_"=yes # " as identifier quote (ANSI SQL) +quote_ident_with_[=no # [] as identifier quote +quote_ident_with_`=no # ` as identifier quote +quote_with_"=no # Allows ' and " as string markers +recursive_subqueries=61 # recursive subqueries +remember_end_space=no # Remembers end space in char() +remember_end_space_varchar=yes # Remembers end space in varchar() +rename_table=no # rename table +right_outer_join=yes # right outer join +rowid=no # Type for row id +select_constants=yes # Select constants +select_limit=no # LIMIT number of rows +select_limit2=no # SELECT with LIMIT #,# +select_string_size=32767 # constant string size in SELECT +select_table_update=yes # Update with sub select +select_without_from=no # SELECT without FROM +server_version=6.0.1 # server version +simple_joins=yes # ANSI SQL simple joins +storage_of_float=round # Storage of float values +subqueries=yes # subqueries +table_alias=no # Table alias +table_name_case=yes # case independent table names +table_wildcard=yes # Select table_name.* +temporary_table=no # temporary tables +transactions=error # constant string size in where +truncate_table=no # truncate +type_extra_abstime=no # Type abstime +type_extra_bfile=no # Type bfile +type_extra_blob=yes # Type blob +type_extra_bool=no # Type bool +type_extra_box=no # Type box +type_extra_byte=no # Type byte +type_extra_char(1_arg)_binary=no # Type char(1 arg) binary +type_extra_cidr=no # Type cidr +type_extra_circle=no # Type circle +type_extra_clob=no # Type clob +type_extra_datetime=no # Type datetime +type_extra_double=no # Type double +type_extra_enum(1_arg)=no # Type enum(1 arg) +type_extra_float(2_arg)=no # Type float(2 arg) +type_extra_float4=no # Type float4 +type_extra_float8=no # Type float8 +type_extra_image=no # Type image +type_extra_inet=no # Type inet +type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill +type_extra_int1=no # Type int1 +type_extra_int2=no # Type int2 +type_extra_int3=no # Type int3 +type_extra_int4=no # Type int4 +type_extra_int8=no # Type int8 +type_extra_int_auto_increment=no # Type int not null auto_increment +type_extra_int_identity=no # Type int not null identity +type_extra_int_unsigned=no # Type int unsigned +type_extra_interval=no # Type interval +type_extra_line=no # Type line +type_extra_long=no # Type long +type_extra_long_raw=no # Type long raw +type_extra_long_varbinary=no # Type long varbinary +type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) +type_extra_lseg=no # Type lseg +type_extra_macaddr=no # Type macaddr +type_extra_mediumint=no # Type mediumint +type_extra_mediumtext=no # Type mediumtext +type_extra_middleint=no # Type middleint +type_extra_mlslabel=no # Type mlslabel +type_extra_money=no # Type money +type_extra_nclob=no # Type nclob +type_extra_number=no # Type number +type_extra_number(1_arg)=no # Type number(1 arg) +type_extra_number(2_arg)=no # Type number(2 arg) +type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) +type_extra_path=no # Type path +type_extra_point=no # Type point +type_extra_polygon=no # Type polygon +type_extra_raw(1_arg)=no # Type raw(1 arg) +type_extra_reltime=no # Type reltime +type_extra_rowid=no # Type rowid +type_extra_serial=no # Type serial +type_extra_set(1_arg)=no # Type set(1 arg) +type_extra_smalldatetime=no # Type smalldatetime +type_extra_smallfloat=no # Type smallfloat +type_extra_smallmoney=no # Type smallmoney +type_extra_text=no # Type text +type_extra_text(1_arg)=no # Type text(1 arg) +type_extra_timespan=no # Type timespan +type_extra_uint=no # Type uint +type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) +type_extra_year=no # Type year +type_odbc_bigint=no # Type bigint +type_odbc_binary(1_arg)=no # Type binary(1 arg) +type_odbc_datetime=no # Type datetime +type_odbc_tinyint=no # Type tinyint +type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) +type_sql_=no # Type +type_sql_bit=no # Type bit +type_sql_bit(1_arg)=no # Type bit(1 arg) +type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) +type_sql_boolean=no # Type boolean +type_sql_char(1_arg)=yes # Type char(1 arg) +type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) +type_sql_character(1_arg)=yes # Type character(1 arg) +type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) +type_sql_date=yes # Type date +type_sql_dec(2_arg)=yes # Type dec(2 arg) +type_sql_decimal(2_arg)=yes # Type decimal(2 arg) +type_sql_double_precision=yes # Type double precision +type_sql_float=yes # Type float +type_sql_float(1_arg)=yes # Type float(1 arg) +type_sql_int=yes # Type int +type_sql_integer=yes # Type integer +type_sql_interval_day=no # Type interval day +type_sql_interval_day_to_hour=no # Type interval day to hour +type_sql_interval_day_to_minute=no # Type interval day to minute +type_sql_interval_day_to_second=no # Type interval day to second +type_sql_interval_hour=no # Type interval hour +type_sql_interval_hour_to_minute=no # Type interval hour to minute +type_sql_interval_hour_to_second=no # Type interval hour to second +type_sql_interval_minute=no # Type interval minute +type_sql_interval_minute_to_second=no # Type interval minute to second +type_sql_interval_month=no # Type interval month +type_sql_interval_second=no # Type interval second +type_sql_interval_year=no # Type interval year +type_sql_interval_year_to_month=no # Type interval year to month +type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) +type_sql_national_character(1_arg)=yes # Type national character(1 arg) +type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) +type_sql_nchar(1_arg)=yes # Type nchar(1 arg) +type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) +type_sql_numeric(2_arg)=yes # Type numeric(2 arg) +type_sql_real=yes # Type real +type_sql_smallint=yes # Type smallint +type_sql_time=yes # Type time +type_sql_timestamp=yes # Type timestamp +type_sql_timestamp_with_time_zone=no # Type timestamp with time zone +type_sql_varchar(1_arg)=yes # Type varchar(1 arg) +union=yes # union +union_all=yes # union all +union_all_incompat=yes # union all (incompatible lists) +union_incompat=yes # union (incompatible lists) +unique_in_create=yes # unique in create table +unique_null_in_create=no # unique null in create +views=no # views +where_string_size=32767 # constant string size in where diff --git a/sql-bench/limits/interbase-superserver.cfg b/sql-bench/limits/interbase-superserver.cfg new file mode 100644 index 00000000000..87da0d0633c --- /dev/null +++ b/sql-bench/limits/interbase-superserver.cfg @@ -0,0 +1,514 @@ +#This file is automaticly generated by crash-me 1.57 + +NEG=no # update of column= -column +Need_cast_for_null=no # Need to cast NULL for arithmetic +alter_add_col=yes # Alter table add column +alter_add_constraint=yes # Alter table add constraint +alter_add_foreign_key=yes # Alter table add foreign key +alter_add_multi_col=with add # Alter table add many columns +alter_add_primary_key=with constraint # Alter table add primary key +alter_add_unique=no # Alter table add unique +alter_alter_col=no # Alter table alter column default +alter_change_col=no # Alter table change column +alter_drop_col=no # Alter table drop column +alter_drop_constraint=yes # Alter table drop constraint +alter_drop_foreign_key=with drop constraint # Alter table drop foreign key +alter_drop_primary_key=no # Alter table drop primary key +alter_drop_unique=no # Alter table drop unique +alter_modify_col=no # Alter table modify column +alter_rename_table=no # Alter table rename table +atomic_updates=no # atomic updates +automatic_rowid=no # Automatic row id +binary_numbers=yes # binary numbers (0b1001) +binary_strings=no # binary strings (b'0110') +case_insensitive_strings=no # Case insensitive compare +char_is_space_filled=yes # char are space filled +column_alias=yes # Column alias +columns_in_order_by=37 # number of columns in order by +comment_#=no # # as comment +comment_--=no # -- as comment (ANSI) +comment_/**/=yes # /* */ as comment +comment_//=no # // as comment +compute=no # Compute +connections=395 # Simultaneous connections (installation default) +constraint_check=no # Column constraints +constraint_check_table=no # Table constraints +constraint_null=no # NULL constraint (SyBase style) +crash_me_safe=no # crash me safe +crash_me_version=1.57 # crash me version +create_default=yes # default value for column +create_default_func=no # default value function for column +create_if_not_exists=no # create table if not exists +create_index=yes # create index +create_schema=no # Create SCHEMA +create_table_select=no # create table from select +cross_join=no # cross join (same as from a,b) +date_infinity=no # Supports 'infinity dates +date_last=error # Supports 9999-12-31 dates +date_one=error # Supports 0001-01-01 dates +date_with_YY=no # Supports YY-MM-DD dates +date_zero=no # Supports 0000-00-00 dates +domains=no # Domains (ANSI SQL) +double_quotes=yes # Double '' as ' in strings +drop_if_exists=no # drop table if exists +drop_index=yes # drop index +drop_requires_cascade=no # drop table require cascade/restrict +drop_restrict=no # drop table with cascade/restrict +end_colon=yes # allows end ';' +except=no # except +except_all=no # except all +except_all_incompat=no # except all (incompatible lists) +except_incompat=no # except (incompatible lists) +float_int_expr=yes # mixing of integer and float in expression +foreign_key_syntax=no # foreign key syntax +full_outer_join=yes # full outer join +func_extra_!=no # Function NOT as '!' in SELECT +func_extra_%=no # Function MOD as % +func_extra_&=no # Function & (bitwise and) +func_extra_&&=no # Function AND as '&&' +func_extra_<>=no # Function <> in SELECT +func_extra_==no # Function = +func_extra_add_months=no # Function ADD_MONTHS +func_extra_and_or=no # Function AND and OR in SELECT +func_extra_ascii_char=no # Function ASCII_CHAR +func_extra_ascii_code=no # Function ASCII_CODE +func_extra_atn2=no # Function ATN2 +func_extra_auto_num2string=no # Function automatic num->string convert +func_extra_auto_string2num=no # Function automatic string->num convert +func_extra_between=no # Function BETWEEN in SELECT +func_extra_binary_shifts=no # Function << and >> (bitwise shifts) +func_extra_bit_count=no # Function BIT_COUNT +func_extra_ceil=no # Function CEIL +func_extra_charindex=no # Function CHARINDEX +func_extra_chr=no # Function CHR +func_extra_concat_as_+=no # Function concatenation with + +func_extra_concat_list=no # Function CONCAT(list) +func_extra_convert=no # Function CONVERT +func_extra_cosh=no # Function COSH +func_extra_date_format=no # Function DATE_FORMAT +func_extra_dateadd=no # Function DATEADD +func_extra_datediff=no # Function DATEDIFF +func_extra_datename=no # Function DATENAME +func_extra_datepart=no # Function DATEPART +func_extra_elt=no # Function ELT +func_extra_encrypt=no # Function ENCRYPT +func_extra_field=no # Function FIELD +func_extra_format=no # Function FORMAT +func_extra_from_days=no # Function FROM_DAYS +func_extra_from_unixtime=no # Function FROM_UNIXTIME +func_extra_getdate=no # Function GETDATE +func_extra_greatest=no # Function GREATEST +func_extra_if=no # Function IF +func_extra_in_num=no # Function IN on numbers in SELECT +func_extra_in_str=no # Function IN on strings in SELECT +func_extra_initcap=no # Function INITCAP +func_extra_instr=no # Function LOCATE as INSTR +func_extra_instr_oracle=no # Function INSTR (Oracle syntax) +func_extra_instrb=no # Function INSTRB +func_extra_interval=no # Function INTERVAL +func_extra_last_day=no # Function LAST_DAY +func_extra_last_insert_id=no # Function LAST_INSERT_ID +func_extra_least=no # Function LEAST +func_extra_lengthb=no # Function LENGTHB +func_extra_like=no # Function LIKE in SELECT +func_extra_like_escape=no # Function LIKE ESCAPE in SELECT +func_extra_ln=no # Function LN +func_extra_log(m_n)=no # Function LOG(m,n) +func_extra_logn=no # Function LOGN +func_extra_lpad=no # Function LPAD +func_extra_mdy=no # Function MDY +func_extra_mid=no # Function SUBSTRING as MID +func_extra_months_between=no # Function MONTHS_BETWEEN +func_extra_not=no # Function NOT in SELECT +func_extra_not_between=no # Function NOT BETWEEN in SELECT +func_extra_not_like=no # Function NOT LIKE in SELECT +func_extra_odbc_convert=no # Function ODBC CONVERT +func_extra_password=no # Function PASSWORD +func_extra_paste=no # Function PASTE +func_extra_patindex=no # Function PATINDEX +func_extra_period_add=no # Function PERIOD_ADD +func_extra_period_diff=no # Function PERIOD_DIFF +func_extra_pow=no # Function POW +func_extra_range=no # Function RANGE +func_extra_regexp=no # Function REGEXP in SELECT +func_extra_replicate=no # Function REPLICATE +func_extra_reverse=no # Function REVERSE +func_extra_root=no # Function ROOT +func_extra_round1=no # Function ROUND(1 arg) +func_extra_rpad=no # Function RPAD +func_extra_sec_to_time=no # Function SEC_TO_TIME +func_extra_sinh=no # Function SINH +func_extra_str=no # Function STR +func_extra_strcmp=no # Function STRCMP +func_extra_stuff=no # Function STUFF +func_extra_substrb=no # Function SUBSTRB +func_extra_substring_index=no # Function SUBSTRING_INDEX +func_extra_sysdate=no # Function SYSDATE +func_extra_tail=no # Function TAIL +func_extra_tanh=no # Function TANH +func_extra_time_to_sec=no # Function TIME_TO_SEC +func_extra_to_days=no # Function TO_DAYS +func_extra_translate=no # Function TRANSLATE +func_extra_trim_many_char=no # Function TRIM; Many char extension +func_extra_trim_substring=no # Function TRIM; Substring extension +func_extra_trunc=no # Function TRUNC +func_extra_uid=no # Function UID +func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP +func_extra_userenv=no # Function USERENV +func_extra_version=no # Function VERSION +func_extra_weekday=no # Function WEEKDAY +func_extra_|=no # Function | (bitwise or) +func_extra_||=no # Function OR as '||' +func_extra_~*=no # Function ~* (case insensitive compare) +func_odbc_abs=no # Function ABS +func_odbc_acos=no # Function ACOS +func_odbc_ascii=no # Function ASCII +func_odbc_asin=no # Function ASIN +func_odbc_atan=no # Function ATAN +func_odbc_atan2=no # Function ATAN2 +func_odbc_ceiling=no # Function CEILING +func_odbc_char=no # Function CHAR +func_odbc_concat=no # Function CONCAT(2 arg) +func_odbc_cos=no # Function COS +func_odbc_cot=no # Function COT +func_odbc_curdate=no # Function CURDATE +func_odbc_curtime=no # Function CURTIME +func_odbc_database=no # Function DATABASE +func_odbc_dayname=no # Function DAYNAME +func_odbc_dayofmonth=no # Function DAYOFMONTH +func_odbc_dayofweek=no # Function DAYOFWEEK +func_odbc_dayofyear=no # Function DAYOFYEAR +func_odbc_degrees=no # Function DEGREES +func_odbc_difference=no # Function DIFFERENCE() +func_odbc_exp=no # Function EXP +func_odbc_floor=no # Function FLOOR +func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT +func_odbc_hour=no # Function HOUR +func_odbc_hour_time=no # Function ANSI HOUR +func_odbc_ifnull=no # Function IFNULL +func_odbc_insert=no # Function INSERT +func_odbc_lcase=no # Function LCASE +func_odbc_left=no # Function LEFT +func_odbc_length=no # Function REAL LENGTH +func_odbc_length_without_space=no # Function ODBC LENGTH +func_odbc_locate_2=no # Function LOCATE(2 arg) +func_odbc_locate_3=no # Function LOCATE(3 arg) +func_odbc_log=no # Function LOG +func_odbc_log10=no # Function LOG10 +func_odbc_ltrim=no # Function LTRIM +func_odbc_minute=no # Function MINUTE +func_odbc_mod=no # Function MOD +func_odbc_month=no # Function MONTH +func_odbc_monthname=no # Function MONTHNAME +func_odbc_now=no # Function NOW +func_odbc_pi=no # Function PI +func_odbc_power=no # Function POWER +func_odbc_quarter=no # Function QUARTER +func_odbc_radians=no # Function RADIANS +func_odbc_rand=no # Function RAND +func_odbc_repeat=no # Function REPEAT +func_odbc_replace=no # Function REPLACE +func_odbc_right=no # Function RIGHT +func_odbc_round=no # Function ROUND(2 arg) +func_odbc_rtrim=no # Function RTRIM +func_odbc_second=no # Function SECOND +func_odbc_sign=no # Function SIGN +func_odbc_sin=no # Function SIN +func_odbc_soundex=no # Function SOUNDEX +func_odbc_space=no # Function SPACE +func_odbc_sqrt=no # Function SQRT +func_odbc_substring=no # Function ODBC SUBSTRING +func_odbc_tan=no # Function TAN +func_odbc_timestampadd=no # Function TIMESTAMPADD +func_odbc_timestampdiff=no # Function TIMESTAMPDIFF +func_odbc_truncate=no # Function TRUNCATE +func_odbc_ucase=no # Function UCASE +func_odbc_user()=no # Function USER() +func_odbc_week=no # Function WEEK +func_odbc_year=no # Function YEAR +func_sql_+=yes # Function +, -, * and / +func_sql_bit_length=no # Function BIT_LENGTH +func_sql_cast=yes # Function CAST +func_sql_char_length=no # Function CHAR_LENGTH +func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) +func_sql_character_length=no # Function CHARACTER_LENGTH +func_sql_coalesce=no # Function COALESCE +func_sql_concat_as_||=yes # Function concatenation with || +func_sql_current_date=yes # Function CURRENT_DATE +func_sql_current_time=yes # Function CURRENT_TIME +func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP +func_sql_current_user=no # Function CURRENT_USER +func_sql_extract_sql=yes # Function EXTRACT +func_sql_localtime=no # Function LOCALTIME +func_sql_localtimestamp=no # Function LOCALTIMESTAMP +func_sql_lower=no # Function LOWER +func_sql_nullif_num=no # Function NULLIF with numbers +func_sql_nullif_string=no # Function NULLIF with strings +func_sql_octet_length=no # Function OCTET_LENGTH +func_sql_position=no # Function POSITION +func_sql_searched_case=no # Function searched CASE +func_sql_session_user=no # Function SESSION_USER +func_sql_simple_case=no # Function simple CASE +func_sql_substring=no # Function ANSI SQL SUBSTRING +func_sql_system_user=no # Function SYSTEM_USER +func_sql_trim=no # Function TRIM +func_sql_upper=yes # Function UPPER +func_sql_user=yes # Function USER +func_where_between=yes # Function BETWEEN +func_where_eq_all=yes # Function = ALL +func_where_eq_any=yes # Function = ANY +func_where_eq_some=yes # Function = SOME +func_where_exists=yes # Function EXISTS +func_where_in_num=yes # Function IN on numbers +func_where_like=yes # Function LIKE +func_where_like_escape=yes # Function LIKE ESCAPE +func_where_match=no # Function MATCH +func_where_match_unique=no # Function MATCH UNIQUE +func_where_matches=no # Function MATCHES +func_where_not_between=yes # Function NOT BETWEEN +func_where_not_exists=yes # Function NOT EXISTS +func_where_not_like=yes # Function NOT LIKE +func_where_not_unique=no # Function NOT UNIQUE +func_where_unique=no # Function UNIQUE +functions=yes # Functions +group_by=yes # Group by +group_by_alias=no # Group by alias +group_by_null=yes # Group on column with null values +group_by_position=no # Group by position +group_distinct_functions=yes # Group functions with distinct +group_func_extra_bit_and=no # Group function BIT_AND +group_func_extra_bit_or=no # Group function BIT_OR +group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) +group_func_extra_std=no # Group function STD +group_func_extra_stddev=no # Group function STDDEV +group_func_extra_variance=no # Group function VARIANCE +group_func_sql_any=no # Group function ANY +group_func_sql_avg=yes # Group function AVG +group_func_sql_count_*=yes # Group function COUNT (*) +group_func_sql_count_column=yes # Group function COUNT column name +group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) +group_func_sql_every=no # Group function EVERY +group_func_sql_max=yes # Group function MAX on numbers +group_func_sql_max_str=yes # Group function MAX on strings +group_func_sql_min=yes # Group function MIN on numbers +group_func_sql_min_str=yes # Group function MIN on strings +group_func_sql_some=no # Group function SOME +group_func_sql_sum=yes # Group function SUM +group_functions=yes # Group functions +group_on_unused=yes # Group on unused column +has_true_false=no # TRUE and FALSE +having=yes # Having +having_with_alias=no # Having on alias +having_with_group=yes # Having with group function +hex_numbers=yes # hex numbers (0x41) +hex_strings=no # hex strings (x'1ace') +ignore_end_space=yes # Ignore end space in compare +index_in_create=no # index in create table +index_namespace=no # different namespace for index +index_parts=no # index on column part (extension) +inner_join=yes # inner join +insert_empty_string=no # insert empty string +insert_multi_value=no # INSERT with Value lists +insert_select=no # insert INTO ... SELECT ... +insert_with_set=no # INSERT with set syntax +intersect=no # intersect +intersect_all=no # intersect all +intersect_all_incompat=no # intersect all (incompatible lists) +intersect_incompat=no # intersect (incompatible lists) +join_tables=+64 # tables in join +left_outer_join=yes # left outer join +left_outer_join_using=no # left outer join using +like_with_column=no # column LIKE column +like_with_number=no # LIKE on numbers +lock_tables=no # lock table +logical_value=not supported # Value of logical operation (1=1) +max_big_expressions=1 # big expressions +max_char_size=32745 # max char() size +max_column_name=18 # column name length +max_columns=4759 # Columns in table +max_conditions=441504 # OR and AND in WHERE +max_expressions=5486 # simple expressions +max_index=+64 # max index +max_index_name=31 # index name length +max_index_parts=16 # index parts +max_index_varchar_part_length=218 # index varchar part length +max_row_length=64744 # max table row length (without blobs) +max_row_length_with_null=64744 # table row length with nulls (without blobs) +max_select_alias_name=132 # select alias name length +max_stack_expression=165 # stacked expressions +max_table_alias_name=255 # table alias name length +max_table_name=31 # table name length +max_unique_index=+64 # unique indexes +max_varchar_size=32745 # max varchar() size +minus=no # minus +minus_incompat=no # minus (incompatible lists) +minus_neg=yes # Calculate 1--1 +multi_drop=no # many tables to drop table +multi_strings=no # Multiple line strings +multi_table_delete=no # DELETE FROM table1,table2... +multi_table_update=no # Update with many tables +natural_join=no # natural join +natural_join_incompat=no # natural join (incompatible lists) +natural_left_outer_join=no # natural left outer join +no_primary_key=yes # Tables without primary key +null_concat_expr=no # Is 'a' || NULL = NULL +null_in_index=yes # null in index +null_in_unique=no # null in unique index +null_num_expr=no # Is 1+NULL = NULL +nulls_in_unique=no # null combination in unique index +odbc_left_outer_join=no # left outer join odbc style +operating_system=Linux 2.4.4-64GB-SMP i686 # crash-me tested on +order_by=yes # Order by +order_by_alias=no # Order by alias +order_by_function=no # Order by function +order_by_position=yes # Order by position +order_by_remember_desc=no # Order by DESC is remembered +order_on_unused=yes # Order by on unused column +primary_key_in_create=yes # primary key in create table +psm_functions=no # PSM functions (ANSI SQL) +psm_modules=no # PSM modules (ANSI SQL) +psm_procedures=no # PSM procedures (ANSI SQL) +psm_trigger=no # Triggers (ANSI SQL) +query_size=16777216 # query size +quote_ident_with_"=yes # " as identifier quote (ANSI SQL) +quote_ident_with_[=no # [] as identifier quote +quote_ident_with_`=no # ` as identifier quote +quote_with_"=no # Allows ' and " as string markers +recursive_subqueries=61 # recursive subqueries +remember_end_space=no # Remembers end space in char() +remember_end_space_varchar=yes # Remembers end space in varchar() +rename_table=no # rename table +right_outer_join=yes # right outer join +rowid=no # Type for row id +select_constants=yes # Select constants +select_limit=no # LIMIT number of rows +select_limit2=no # SELECT with LIMIT #,# +select_string_size=32767 # constant string size in SELECT +select_table_update=yes # Update with sub select +select_without_from=no # SELECT without FROM +server_version=6.0.1 # server version +simple_joins=yes # ANSI SQL simple joins +storage_of_float=round # Storage of float values +subqueries=yes # subqueries +table_alias=no # Table alias +table_name_case=yes # case independent table names +table_wildcard=yes # Select table_name.* +temporary_table=no # temporary tables +transactions=error # constant string size in where +truncate_table=no # truncate +type_extra_abstime=no # Type abstime +type_extra_bfile=no # Type bfile +type_extra_blob=yes # Type blob +type_extra_bool=no # Type bool +type_extra_box=no # Type box +type_extra_byte=no # Type byte +type_extra_char(1_arg)_binary=no # Type char(1 arg) binary +type_extra_cidr=no # Type cidr +type_extra_circle=no # Type circle +type_extra_clob=no # Type clob +type_extra_datetime=no # Type datetime +type_extra_double=no # Type double +type_extra_enum(1_arg)=no # Type enum(1 arg) +type_extra_float(2_arg)=no # Type float(2 arg) +type_extra_float4=no # Type float4 +type_extra_float8=no # Type float8 +type_extra_image=no # Type image +type_extra_inet=no # Type inet +type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill +type_extra_int1=no # Type int1 +type_extra_int2=no # Type int2 +type_extra_int3=no # Type int3 +type_extra_int4=no # Type int4 +type_extra_int8=no # Type int8 +type_extra_int_auto_increment=no # Type int not null auto_increment +type_extra_int_identity=no # Type int not null identity +type_extra_int_unsigned=no # Type int unsigned +type_extra_interval=no # Type interval +type_extra_line=no # Type line +type_extra_long=no # Type long +type_extra_long_raw=no # Type long raw +type_extra_long_varbinary=no # Type long varbinary +type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) +type_extra_lseg=no # Type lseg +type_extra_macaddr=no # Type macaddr +type_extra_mediumint=no # Type mediumint +type_extra_mediumtext=no # Type mediumtext +type_extra_middleint=no # Type middleint +type_extra_mlslabel=no # Type mlslabel +type_extra_money=no # Type money +type_extra_nclob=no # Type nclob +type_extra_number=no # Type number +type_extra_number(1_arg)=no # Type number(1 arg) +type_extra_number(2_arg)=no # Type number(2 arg) +type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) +type_extra_path=no # Type path +type_extra_point=no # Type point +type_extra_polygon=no # Type polygon +type_extra_raw(1_arg)=no # Type raw(1 arg) +type_extra_reltime=no # Type reltime +type_extra_rowid=no # Type rowid +type_extra_serial=no # Type serial +type_extra_set(1_arg)=no # Type set(1 arg) +type_extra_smalldatetime=no # Type smalldatetime +type_extra_smallfloat=no # Type smallfloat +type_extra_smallmoney=no # Type smallmoney +type_extra_text=no # Type text +type_extra_text(1_arg)=no # Type text(1 arg) +type_extra_timespan=no # Type timespan +type_extra_uint=no # Type uint +type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) +type_extra_year=no # Type year +type_odbc_bigint=no # Type bigint +type_odbc_binary(1_arg)=no # Type binary(1 arg) +type_odbc_datetime=no # Type datetime +type_odbc_tinyint=no # Type tinyint +type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) +type_sql_bit=no # Type bit +type_sql_bit(1_arg)=no # Type bit(1 arg) +type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) +type_sql_boolean=no # Type boolean +type_sql_char(1_arg)=yes # Type char(1 arg) +type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) +type_sql_character(1_arg)=yes # Type character(1 arg) +type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) +type_sql_date=yes # Type date +type_sql_dec(2_arg)=yes # Type dec(2 arg) +type_sql_decimal(2_arg)=yes # Type decimal(2 arg) +type_sql_double_precision=yes # Type double precision +type_sql_float=yes # Type float +type_sql_float(1_arg)=yes # Type float(1 arg) +type_sql_int=yes # Type int +type_sql_integer=yes # Type integer +type_sql_interval_day=no # Type interval day +type_sql_interval_day_to_hour=no # Type interval day to hour +type_sql_interval_day_to_minute=no # Type interval day to minute +type_sql_interval_day_to_second=no # Type interval day to second +type_sql_interval_hour=no # Type interval hour +type_sql_interval_hour_to_minute=no # Type interval hour to minute +type_sql_interval_hour_to_second=no # Type interval hour to second +type_sql_interval_minute=no # Type interval minute +type_sql_interval_minute_to_second=no # Type interval minute to second +type_sql_interval_month=no # Type interval month +type_sql_interval_second=no # Type interval second +type_sql_interval_year=no # Type interval year +type_sql_interval_year_to_month=no # Type interval year to month +type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) +type_sql_national_character(1_arg)=yes # Type national character(1 arg) +type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) +type_sql_nchar(1_arg)=yes # Type nchar(1 arg) +type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) +type_sql_numeric(2_arg)=yes # Type numeric(2 arg) +type_sql_real=yes # Type real +type_sql_smallint=yes # Type smallint +type_sql_time=yes # Type time +type_sql_timestamp=yes # Type timestamp +type_sql_timestamp_with_time_zone=no # Type timestamp with time zone +type_sql_varchar(1_arg)=yes # Type varchar(1 arg) +union=yes # union +union_all=yes # union all +union_all_incompat=yes # union all (incompatible lists) +union_incompat=yes # union (incompatible lists) +unique_in_create=yes # unique in create table +unique_null_in_create=no # unique null in create +views=no # views +where_string_size=32767 # constant string size in where diff --git a/sql-bench/server-cfg.sh b/sql-bench/server-cfg.sh index 8fc2f1319e9..4dd762a804b 100644 --- a/sql-bench/server-cfg.sh +++ b/sql-bench/server-cfg.sh @@ -121,6 +121,7 @@ sub new $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'vacuum'} = 1; # When using with --fast $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $limits{'NEG'} = 1; # Supports -id $limits{'alter_add_multi_col'}= 1; #Have ALTER TABLE t add a int,add b int; @@ -370,6 +371,7 @@ sub new $self->{'limits'} = \%limits; $self->{'double_quotes'} = 0; $self->{'drop_attr'} = ""; + $self->{'transactions'} = 0; # No transactions $self->{'blob'} = "text(" . $limits{'max_text_size'} .")"; $self->{'text'} = "text(" . $limits{'max_text_size'} .")"; @@ -565,6 +567,7 @@ sub new $self->{'text'} = "text"; $self->{'double_quotes'} = 1; $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $self->{"vacuum"} = 1; $limits{'join_optimizer'} = 1; # Can optimize FROM tables $limits{'load_data_infile'} = 0; @@ -854,6 +857,7 @@ sub new $self->{'text'} = "long varchar"; $self->{'double_quotes'} = 1; $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $limits{'max_conditions'} = 9999; # Probably big enough $limits{'max_columns'} = 2000; # From crash-me @@ -1095,6 +1099,7 @@ sub new $self->{'text'} = "text"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $limits{'max_conditions'} = 1258; $limits{'max_columns'} = 226; # server is disconnecting???? @@ -1377,6 +1382,7 @@ sub new $self->{'text'} = "long"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $self->{"vacuum"} = 1; $limits{'max_conditions'} = 9999; # (Actually not a limit) @@ -1633,6 +1639,7 @@ sub new $self->{'text'} = "byte in table"; $self->{'double_quotes'} = 0; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $self->{'host'} = $host; $limits{'NEG'} = 1; # Supports -id @@ -1834,6 +1841,7 @@ sub new $self->{'text'} = "blob"; # text ? $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $limits{'max_conditions'} = 97; # We get 'Query is too complex' $limits{'max_columns'} = 255; # Max number of columns in table @@ -2010,6 +2018,7 @@ sub new $self->{'text'} = "text"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $limits{'max_conditions'} = 1030; # We get 'Query is too complex' $limits{'max_columns'} = 250; # Max number of columns in table @@ -2197,6 +2206,7 @@ sub new $self->{'text'} = "text"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $self->{"vacuum"} = 1; $limits{'max_conditions'} = 1030; # We get 'Query is too complex' @@ -2389,6 +2399,7 @@ sub new $self->{'text'} = "long"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $limits{'max_conditions'} = 50; # (Actually not a limit) $limits{'max_columns'} = 254; # Max number of columns in table @@ -2603,6 +2614,7 @@ sub new $self->{'text'} = "varchar(255)"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $limits{'max_conditions'} = 418; # We get 'Query is too complex' $limits{'max_columns'} = 500; # Max number of columns in table @@ -2772,6 +2784,7 @@ sub new $self->{'text'} = "character varying(15000)"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $self->{'char_null'} = "cast(NULL as char(1))"; $self->{'numeric_null'} = "cast(NULL as int)"; @@ -2972,6 +2985,7 @@ sub new $self->{'text'} = ""; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ""; + $self->{'transactions'} = 1; # Transactions enabled $self->{'char_null'} = ""; $self->{'numeric_null'} = ""; @@ -3184,6 +3198,7 @@ sub new $self->{'text'} = "varchar(8000000)"; $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' $self->{'drop_attr'} = ' restrict'; + $self->{'transactions'} = 1; # Transactions enabled $self->{'error_on_execute_means_zero_rows'}=1; $limits{'max_conditions'} = 5427; # (Actually not a limit) diff --git a/sql-bench/test-ATIS.sh b/sql-bench/test-ATIS.sh index 77e0e7d79bf..fa66dadd03e 100644 --- a/sql-bench/test-ATIS.sh +++ b/sql-bench/test-ATIS.sh @@ -106,6 +106,12 @@ if (!$opt_skip_create) } else { + if ($opt_fast && $server->{transactions}) + { + $dbh->{AutoCommit} = 0; + print "Transactions enabled\n" if ($opt_debug); + } + for ($ti = 0; $ti <= $#table_names; $ti++) { my $table_name = $table_names[$ti]; @@ -128,8 +134,14 @@ if (!$opt_skip_create) $row_count++; } } + if ($opt_fast && $server->{transactions}) + { + $dbh->commit; + $dbh->{AutoCommit} = 1; + } close(DATA); } + if ($opt_lock_tables) { $dbh->do("UNLOCK TABLES"); diff --git a/sql-bench/test-alter-table.sh b/sql-bench/test-alter-table.sh index 276c4863d8c..af0f630d938 100644 --- a/sql-bench/test-alter-table.sh +++ b/sql-bench/test-alter-table.sh @@ -74,11 +74,25 @@ do_many($dbh,$server->create("bench",\@fields,\@index)); print "Insert data into the table\n"; $loop_time=new Benchmark; + +if ($opt_fast && defined($server->{transactions})) +{ + $dbh->{AutoCommit} = 0; + print "Transactions enabled\n" if ($opt_debug); +} + for ($i=0 ; $i < $opt_row_count ; $i++) { $query="insert into bench values ( " . ("$i," x ($opt_start_field_count-1)) . "$i)"; $dbh->do($query) or die $DBI::errstr; } + +if ($opt_fast && defined($server->{transactions})) +{ + $dbh->commit; + $dbh->{AutoCommit} = 1; +} + $end_time=new Benchmark; print "Time for insert ($opt_row_count)", diff --git a/sql-bench/test-big-tables.sh b/sql-bench/test-big-tables.sh index ac942f2b571..151a169d31f 100644 --- a/sql-bench/test-big-tables.sh +++ b/sql-bench/test-big-tables.sh @@ -127,14 +127,28 @@ end_benchmark($start_time); sub test_query { my($test_text,$result_text,$query,$dbh,$count)=@_; - my($i,$loop_time,$end_time); + my($i,$loop_time,$end_time, $using_transactions); print $test_text . "\n"; $loop_time=new Benchmark; + + $using_transactions=0; + if ($opt_fast && server->{transactions} && $query=~ /^insert /i) + { + $using_transactions=1; + $dbh->{AutoCommit} = 0; + print "Transactions enabled\n" if ($opt_debug); + } for ($i=0 ; $i < $count ; $i++) { defined(fetch_all_rows($dbh,$query)) or die $DBI::errstr; } + if ($using_transactions) + { + $dbh->commit; + $dbh->{AutoCommit} = 1; + } + $end_time=new Benchmark; print $result_text . "($count): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; diff --git a/sql-bench/test-insert.sh b/sql-bench/test-insert.sh index 9da82fc8191..085d7cce7f3 100644 --- a/sql-bench/test-insert.sh +++ b/sql-bench/test-insert.sh @@ -29,6 +29,7 @@ use DBI; use Benchmark; +use Data::Dumper; $opt_loop_count=100000; # number of rows/3 $small_loop_count=10; # Loop for full table retrieval @@ -132,6 +133,12 @@ else $query="insert into bench1 (id,id2,id3,dummy1) values "; } +if ($opt_fast && $server->{transactions}) +{ + $dbh->{AutoCommit} = 0; + print "Transactions enabled\n" if ($opt_debug); +} + if (($opt_fast || $opt_fast_insert) && $server->{'limits'}->{'insert_multi_value'}) { $query_size=$server->{'limits'}->{'query_size'}; @@ -209,6 +216,12 @@ else } } +if ($opt_fast && $server->{transactions}) +{ + $dbh->commit; + $dbh->{AutoCommit} = 1; +} + $end_time=new Benchmark; print "Time for insert (" . ($total_rows) . "): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; @@ -234,6 +247,12 @@ if ($limits->{'unique_index'}) { print "Testing insert of duplicates\n"; $loop_time=new Benchmark; + + if ($opt_fast && $server->{transactions}) + { + $dbh->{AutoCommit} = 0; + } + for ($i=0 ; $i < $opt_loop_count ; $i++) { $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); @@ -244,6 +263,11 @@ if ($limits->{'unique_index'}) die "Didn't get an error when inserting duplicate record $tmp\n"; } } + if ($opt_fast && $server->{transactions}) + { + $dbh->commit; + $dbh->{AutoCommit} = 1; + } $end_time=new Benchmark; print "Time for insert_duplicates (" . ($opt_loop_count) . "): " . @@ -577,7 +601,6 @@ if ($limits->{'group_functions'}) } $sth->finish; - $count++; $sth=$dbh->prepare($query="select count(*),sum(id+0.0),min(id),max(id),avg(id-0.0) from bench1") or die $DBI::errstr; $sth->execute or die $DBI::errstr; @@ -1250,6 +1273,11 @@ if ($server->small_rollback_segment()) } $loop_time=new Benchmark; +if ($opt_fast && $server->{transactions}) +{ + $dbh->{AutoCommit} = 0; +} + $fields=$#fields; if (($opt_fast || $opt_fast_insert) && $server->{'limits'}->{'insert_multi_value'}) { @@ -1297,6 +1325,13 @@ else $dbh->do($query) or die "Got error $DBI::errstr with query: $query\n"; } } + +if ($opt_fast && $server->{transactions}) +{ + $dbh->commit; + $dbh->{AutoCommit} = 1; +} + $end_time=new Benchmark; print "Time for insert_key ($many_keys_loop_count): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; @@ -1325,11 +1360,24 @@ if ($opt_fast && defined($server->{vacuum})) print "Testing update of keys\n"; $loop_time=new Benchmark; + +if ($opt_fast && $server->{transactions}) +{ + $dbh->{AutoCommit} = 0; +} + for ($i=0 ; $i< 256; $i++) { $dbh->do("update bench1 set field5=1 where field_search=$i") or die "Got error $DBI::errstr with query: update bench1 set field5=1 where field_search=$i\n"; } + +if ($opt_fast && $server->{transactions}) +{ + $dbh->commit; + $dbh->{AutoCommit} = 1; +} + $end_time=new Benchmark; print "Time for update_of_primary_key_many_keys (256): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; @@ -1420,12 +1468,18 @@ if ($limits->{'insert_multi_value'}) "dummy1 char(30)"], ["primary key (id,id2)", "index index_id3 (id3)"])); + + $loop_time=new Benchmark; + if ($opt_lock_tables) { $sth = $dbh->do("LOCK TABLES bench1 write") || die $DBI::errstr; } + if ($opt_fast && $server->{transactions}) + { + $dbh->{AutoCommit} = 0; + } - $loop_time=new Benchmark; print "Inserting $opt_loop_count rows with multiple values\n"; $query="insert into bench1 values "; $res=$query; @@ -1448,6 +1502,11 @@ if ($limits->{'insert_multi_value'}) { $sth = $dbh->do("UNLOCK TABLES ") || die $DBI::errstr; } + if ($opt_fast && $server->{transactions}) + { + $dbh->commit; + $dbh->{AutoCommit} = 1; + } $end_time=new Benchmark; print "Time for multiple_value_insert (" . ($opt_loop_count) . "): " . diff --git a/sql-bench/test-select.sh b/sql-bench/test-select.sh index eba2a7085d8..62e978a945f 100644 --- a/sql-bench/test-select.sh +++ b/sql-bench/test-select.sh @@ -92,6 +92,12 @@ if ($opt_fast && defined($server->{vacuum})) print "Inserting $opt_loop_count rows\n"; $loop_time=new Benchmark; + +if ($opt_fast && $server->{transactions}) +{ + $dbh->{AutoCommit} = 0; +} + $query="insert into bench1 values ("; $half_done=$opt_loop_count/2; for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ; $id++,$rev_id--) @@ -105,6 +111,12 @@ for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ; $id++,$rev_id--) } } +if ($opt_fast && $server->{transactions}) +{ + $dbh->commit; + $dbh->{AutoCommit} = 1; +} + $end_time=new Benchmark; print "Time to insert ($opt_loop_count): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; diff --git a/sql-bench/test-wisconsin.sh b/sql-bench/test-wisconsin.sh index 84d098ca583..e7e3a0f235a 100644 --- a/sql-bench/test-wisconsin.sh +++ b/sql-bench/test-wisconsin.sh @@ -109,6 +109,11 @@ if ($opt_fast && $server->{'limits'}->{'load_data_infile'}) } else { + if ($opt_fast && $server->{transactions}) + { + $dbh->{AutoCommit} = 0; + } + for ($ti = 0; $ti <= $#table_names; $ti++) { my $table_name = $table_names[$ti]; @@ -133,10 +138,17 @@ else } close(DATA); } + if ($opt_lock_tables) { do_query($dbh,"UNLOCK TABLES"); } +if ($opt_fast && $server->{transactions}) +{ + $dbh->commit; + $dbh->{AutoCommit} = 1; +} + $end_time=new Benchmark; print "Time to insert ($row_count): " . timestr(timediff($end_time, $loop_time),"all") . "\n"; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d6c9437e93c..3830db48613 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1626,8 +1626,7 @@ mysql_execute_command(void) if (!(res=open_and_lock_tables(thd, tables))) { if ((result=new select_insert(tables->table,&lex->field_list, - lex->sql_command == SQLCOM_REPLACE_SELECT ? - DUP_REPLACE : DUP_IGNORE))) + lex->duplicates))) res=handle_select(thd,lex,result); } else diff --git a/sql/sql_update.cc b/sql/sql_update.cc index fbf8239bf69..fec40d61f91 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -148,7 +148,7 @@ int mysql_update(THD *thd, used_key_is_modified=check_if_key_used(table, used_index, fields); else used_key_is_modified=0; - if (used_key_is_modified) + if (used_key_is_modified || order) { /* ** We can't update table directly; We must first search after all diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e34f42bdfde..076e6d98356 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2188,7 +2188,13 @@ insert: INSERT { Lex->sql_command = SQLCOM_INSERT; } insert_lock_option opt_ignore insert2 insert_field_spec replace: - REPLACE { Lex->sql_command = SQLCOM_REPLACE; } replace_lock_option insert2 insert_field_spec + REPLACE + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_REPLACE; + lex->duplicates= DUP_REPLACE; + } + replace_lock_option insert2 insert_field_spec insert_lock_option: /* empty */ { Lex->lock_option= TL_WRITE_CONCURRENT_INSERT; } @@ -2299,10 +2305,6 @@ values: update: UPDATE_SYM opt_low_priority opt_ignore table_name - SET update_list - where_clause - opt_order_clause - delete_limit_clause { LEX *lex=Lex; lex->sql_command = SQLCOM_UPDATE; @@ -2310,6 +2312,10 @@ update: lex->select->order_list.first=0; lex->select->order_list.next= (byte**) &lex->select->order_list.first; } + SET update_list + where_clause + opt_order_clause + delete_limit_clause update_list: update_list ',' simple_ident equal expr