mirror of
https://github.com/MariaDB/server.git
synced 2025-08-30 11:22:14 +03:00
Docs/Flags/australia.eps: First import - 3.23.10 Docs/Flags/australia.gif: First import - 3.23.10 Docs/Flags/australia.txt: First import - 3.23.10 Docs/Flags/austria.eps: First import - 3.23.10 Docs/Flags/austria.gif: First import - 3.23.10 Docs/Flags/austria.txt: First import - 3.23.10 Docs/Flags/brazil.eps: First import - 3.23.10 Docs/Flags/brazil.gif: First import - 3.23.10 Docs/Flags/brazil.txt: First import - 3.23.10 Docs/Flags/bulgaria.eps: First import - 3.23.10 Docs/Flags/bulgaria.gif: First import - 3.23.10 Docs/Flags/bulgaria.txt: First import - 3.23.10 Docs/Flags/canada.eps: First import - 3.23.10 Docs/Flags/canada.gif: First import - 3.23.10 Docs/Flags/canada.txt: First import - 3.23.10 Docs/Flags/chile.eps: First import - 3.23.10 Docs/Flags/chile.gif: First import - 3.23.10 Docs/Flags/chile.txt: First import - 3.23.10 Docs/Flags/china.eps: First import - 3.23.10 Docs/Flags/china.gif: First import - 3.23.10 Docs/Flags/china.txt: First import - 3.23.10 Docs/Flags/croatia.eps: First import - 3.23.10 Docs/Flags/croatia.gif: First import - 3.23.10 Docs/Flags/croatia.txt: First import - 3.23.10 Docs/Flags/czech-republic.eps: First import - 3.23.10 Docs/Flags/czech-republic.gif: First import - 3.23.10 Docs/Flags/czech-republic.txt: First import - 3.23.10 Docs/Flags/denmark.eps: First import - 3.23.10 Docs/Flags/denmark.gif: First import - 3.23.10 Docs/Flags/denmark.txt: First import - 3.23.10 Docs/Flags/estonia.eps: First import - 3.23.10 Docs/Flags/estonia.gif: First import - 3.23.10 Docs/Flags/estonia.txt: First import - 3.23.10 Docs/Flags/finland.eps: First import - 3.23.10 Docs/Flags/finland.gif: First import - 3.23.10 Docs/Flags/finland.txt: First import - 3.23.10 Docs/Flags/france.eps: First import - 3.23.10 Docs/Flags/france.gif: First import - 3.23.10 Docs/Flags/france.txt: First import - 3.23.10 Docs/Flags/germany.eps: First import - 3.23.10 Docs/Flags/germany.gif: First import - 3.23.10 Docs/Flags/germany.txt: First import - 3.23.10 Docs/Flags/great-britain.eps: First import - 3.23.10 Docs/Flags/great-britain.gif: First import - 3.23.10 Docs/Flags/great-britain.txt: First import - 3.23.10 Docs/Flags/greece.eps: First import - 3.23.10 Docs/Flags/greece.gif: First import - 3.23.10 Docs/Flags/greece.txt: First import - 3.23.10 Docs/Flags/hungary.eps: First import - 3.23.10 Docs/Flags/hungary.gif: First import - 3.23.10 Docs/Flags/hungary.txt: First import - 3.23.10 Docs/Flags/iceland.eps: First import - 3.23.10 Docs/Flags/iceland.gif: First import - 3.23.10 Docs/Flags/iceland.txt: First import - 3.23.10 Docs/Flags/ireland.eps: First import - 3.23.10 Docs/Flags/ireland.gif: First import - 3.23.10 Docs/Flags/ireland.txt: First import - 3.23.10 Docs/Flags/island.eps: First import - 3.23.10 Docs/Flags/island.gif: First import - 3.23.10 Docs/Flags/island.txt: First import - 3.23.10 Docs/Flags/israel.eps: First import - 3.23.10 Docs/Flags/israel.gif: First import - 3.23.10 Docs/Flags/israel.txt: First import - 3.23.10 Docs/Flags/italy.eps: First import - 3.23.10 Docs/Flags/italy.gif: First import - 3.23.10 Docs/Flags/italy.txt: First import - 3.23.10 Docs/Flags/japan.eps: First import - 3.23.10 Docs/Flags/japan.gif: First import - 3.23.10 Docs/Flags/japan.txt: First import - 3.23.10 Docs/Flags/kroatia.eps: First import - 3.23.10 Docs/Flags/kroatia.gif: First import - 3.23.10 Docs/Flags/kroatia.txt: First import - 3.23.10 Docs/Flags/netherlands.eps: First import - 3.23.10 Docs/Flags/netherlands.gif: First import - 3.23.10 Docs/Flags/netherlands.txt: First import - 3.23.10 Docs/Flags/poland.eps: First import - 3.23.10 Docs/Flags/poland.gif: First import - 3.23.10 Docs/Flags/poland.txt: First import - 3.23.10 Docs/Flags/portugal.eps: First import - 3.23.10 Docs/Flags/portugal.gif: First import - 3.23.10 Docs/Flags/portugal.txt: First import - 3.23.10 Docs/Flags/romania.eps: First import - 3.23.10 Docs/Flags/romania.gif: First import - 3.23.10 Docs/Flags/romania.txt: First import - 3.23.10 Docs/Flags/russia.eps: First import - 3.23.10 Docs/Flags/russia.gif: First import - 3.23.10 Docs/Flags/russia.txt: First import - 3.23.10 Docs/Flags/singapore.eps: First import - 3.23.10 Docs/Flags/singapore.gif: First import - 3.23.10 Docs/Flags/singapore.txt: First import - 3.23.10 Docs/Flags/south-africa.eps: First import - 3.23.10 Docs/Flags/south-africa.gif: First import - 3.23.10 Docs/Flags/south-africa.txt: First import - 3.23.10 Docs/Flags/south-africa1.eps: First import - 3.23.10 Docs/Flags/south-africa1.gif: First import - 3.23.10 Docs/Flags/south-africa1.txt: First import - 3.23.10 Docs/Flags/south-korea.eps: First import - 3.23.10 Docs/Flags/south-korea.gif: First import - 3.23.10 Docs/Flags/south-korea.txt: First import - 3.23.10 Docs/Flags/spain.eps: First import - 3.23.10 Docs/Flags/spain.gif: First import - 3.23.10 Docs/Flags/spain.txt: First import - 3.23.10 Docs/Flags/sweden.eps: First import - 3.23.10 Docs/Flags/sweden.gif: First import - 3.23.10 Docs/Flags/sweden.txt: First import - 3.23.10 Docs/Flags/switzerland.eps: First import - 3.23.10 Docs/Flags/switzerland.gif: First import - 3.23.10 Docs/Flags/switzerland.txt: First import - 3.23.10 Docs/Flags/taiwan.eps: First import - 3.23.10 Docs/Flags/taiwan.gif: First import - 3.23.10 Docs/Flags/taiwan.txt: First import - 3.23.10 Docs/Flags/ukraine.eps: First import - 3.23.10 Docs/Flags/ukraine.gif: First import - 3.23.10 Docs/Flags/ukraine.txt: First import - 3.23.10 Docs/Flags/usa.eps: First import - 3.23.10 Docs/Flags/usa.gif: First import - 3.23.10 Docs/Flags/usa.txt: First import - 3.23.10 Docs/Images/mysql-logo.gif: First import - 3.23.10 Docs/To-be-included-in-the-manual/MySQL-for-dummies: First import - 3.23.10 README: First import - 3.23.10 config.guess: First import - 3.23.10 dbug/dbug_long.h: First import - 3.23.10 dbug/example1.c: First import - 3.23.10 dbug/example2.c: First import - 3.23.10 dbug/example3.c: First import - 3.23.10 dbug/factorial.c: First import - 3.23.10 dbug/main.c: First import - 3.23.10 dbug/monty.doc: First import - 3.23.10 dbug/readme.prof: First import - 3.23.10 dbug/sanity.c: First import - 3.23.10 dbug/user.r: First import - 3.23.10 heap/ChangeLog: First import - 3.23.10 install-sh: First import - 3.23.10 ltconfig: First import - 3.23.10 ltmain.sh: First import - 3.23.10 missing: First import - 3.23.10 mit-pthreads/COPYRIGHT: First import - 3.23.10 mit-pthreads/FAQ: First import - 3.23.10 mit-pthreads/NOTES_OSR5_BUILD_SKUNKWARE97: First import - 3.23.10 mit-pthreads/NOTES: First import - 3.23.10 mit-pthreads/README: First import - 3.23.10 mit-pthreads/TODO-mysql: First import - 3.23.10 mit-pthreads/Whats_New: First import - 3.23.10 mit-pthreads/bin/Makefile.in: First import - 3.23.10 mit-pthreads/bin/finger/Makefile.in: First import - 3.23.10 mit-pthreads/bin/finger/finger.c: First import - 3.23.10 mit-pthreads/bin/finger/net.c: First import - 3.23.10 mit-pthreads/config/COPYING.GNU: First import - 3.23.10 mit-pthreads/config/COPYRIGHT: First import - 3.23.10 mit-pthreads/config/GNUmakefile.in: First import - 3.23.10 mit-pthreads/config/Makefile.in: First import - 3.23.10 mit-pthreads/config/acconfig.h: First import - 3.23.10 mit-pthreads/config/aclocal.m4: First import - 3.23.10 mit-pthreads/config/config.flags.in: First import - 3.23.10 mit-pthreads/config/config.guess: First import - 3.23.10 mit-pthreads/config/config.sub: First import - 3.23.10 mit-pthreads/config/configure.org: First import - 3.23.10 mit-pthreads/config/install-sh: First import - 3.23.10 mit-pthreads/configure: First import - 3.23.10 mit-pthreads/gen/GNUmakefile.inc: First import - 3.23.10 mit-pthreads/gen/Makefile.inc: First import - 3.23.10 mit-pthreads/gen/ctime.c: First import - 3.23.10 mit-pthreads/gen/difftime.c: First import - 3.23.10 mit-pthreads/gen/directory.c: First import - 3.23.10 mit-pthreads/gen/eprintf.c: First import - 3.23.10 mit-pthreads/gen/getcwd.c: First import - 3.23.10 mit-pthreads/gen/getpwent.c: First import - 3.23.10 mit-pthreads/gen/getpwnamuid.c: First import - 3.23.10 mit-pthreads/gen/getwd.c: First import - 3.23.10 mit-pthreads/gen/isatty.c: First import - 3.23.10 mit-pthreads/gen/popen.c: First import - 3.23.10 mit-pthreads/gen/pwd_internal.c: First import - 3.23.10 mit-pthreads/gen/pwd_internal.h: First import - 3.23.10 mit-pthreads/gen/syslog.c: First import - 3.23.10 mit-pthreads/gen/time.c: First import - 3.23.10 mit-pthreads/include/Makefile.inc: First import - 3.23.10 mit-pthreads/include/arpa/inet.h: First import - 3.23.10 mit-pthreads/include/arpa/nameser.h: First import - 3.23.10 mit-pthreads/include/dirent.h: First import - 3.23.10 mit-pthreads/include/endian.h: First import - 3.23.10 mit-pthreads/include/errno.h: First import - 3.23.10 mit-pthreads/include/math.h: First import - 3.23.10 mit-pthreads/include/netdb.h: First import - 3.23.10 mit-pthreads/include/pthread.h: First import - 3.23.10 mit-pthreads/include/pthread/cleanup.h: First import - 3.23.10 mit-pthreads/include/pthread/debug_out.h: First import - 3.23.10 mit-pthreads/include/pthread/fd.h: First import - 3.23.10 mit-pthreads/include/pthread/fd_pipe.h: First import - 3.23.10 mit-pthreads/include/pthread/kernel.h: First import - 3.23.10 mit-pthreads/include/pthread/kthread.h: First import - 3.23.10 mit-pthreads/include/pthread/mutex.h: First import - 3.23.10 mit-pthreads/include/pthread/prio_queue.h: First import - 3.23.10 mit-pthreads/include/pthread/pthread_attr.h: First import - 3.23.10 mit-pthreads/include/pthread/pthread_once.h: First import - 3.23.10 mit-pthreads/include/pthread/queue.h: First import - 3.23.10 mit-pthreads/include/pthread/sleep.h: First import - 3.23.10 mit-pthreads/include/pthread/specific.h: First import - 3.23.10 mit-pthreads/include/pthread/state.def: First import - 3.23.10 mit-pthreads/include/pthread/types.h: First import - 3.23.10 mit-pthreads/include/pthread/unistd.h: First import - 3.23.10 mit-pthreads/include/pthread/util.h: First import - 3.23.10 mit-pthreads/include/pthread/version.h: First import - 3.23.10 mit-pthreads/include/pthread/xtypes.h: First import - 3.23.10 mit-pthreads/include/pwd.h: First import - 3.23.10 mit-pthreads/include/resolv.h: First import - 3.23.10 mit-pthreads/include/sched.h: First import - 3.23.10 mit-pthreads/include/signal.h: First import - 3.23.10 mit-pthreads/include/stdio.h: First import - 3.23.10 mit-pthreads/include/stdlib.h: First import - 3.23.10 mit-pthreads/include/string.h: First import - 3.23.10 mit-pthreads/include/syslog.h: First import - 3.23.10 mit-pthreads/include/time.h: First import - 3.23.10 mit-pthreads/include/timers.h: First import - 3.23.10 mit-pthreads/include/tzfile.h: First import - 3.23.10 mit-pthreads/include/unistd.h: First import - 3.23.10 mit-pthreads/lib/Makefile.in: First import - 3.23.10 mit-pthreads/lib/libpthreadutil/Makefile.in: First import - 3.23.10 mit-pthreads/lib/libpthreadutil/pthread_atexit.c: First import - 3.23.10 mit-pthreads/lib/libpthreadutil/pthread_tad.c: First import - 3.23.10 mit-pthreads/lib/libpthreadutil/pthreadutil.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/__math.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/__signal.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/__string.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/__time.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/compat.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/dirent.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/signal.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/socket.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/timers.h: First import - 3.23.10 mit-pthreads/machdep/alpha-osf1/uio.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-1.1/compat.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-1.1/dirent.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-1.1/errno.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-1.1/socket.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-1.1/timers.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__math.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__path.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__signal.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__string.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__time.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/compat.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/dirent.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/errno.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/time.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/timers.h: First import - 3.23.10 mit-pthreads/machdep/bsdi-2.0/wait.h: First import - 3.23.10 mit-pthreads/machdep/engine-alpha-netbsd-1.1.c: First import - 3.23.10 mit-pthreads/machdep/engine-alpha-netbsd-1.1.h: First import - 3.23.10 mit-pthreads/machdep/engine-alpha-netbsd-1.3.c: First import - 3.23.10 mit-pthreads/machdep/engine-alpha-netbsd-1.3.h: First import - 3.23.10 mit-pthreads/machdep/engine-alpha-osf1.c: First import - 3.23.10 mit-pthreads/machdep/engine-alpha-osf1.h: First import - 3.23.10 mit-pthreads/machdep/engine-arm32-netbsd-1.3.c: First import - 3.23.10 mit-pthreads/machdep/engine-arm32-netbsd-1.3.h: First import - 3.23.10 mit-pthreads/machdep/engine-hppa-hpux-10.20.c: First import - 3.23.10 mit-pthreads/machdep/engine-hppa-hpux-10.20.h: First import - 3.23.10 mit-pthreads/machdep/engine-hppa-hpux-9.03.c: First import - 3.23.10 mit-pthreads/machdep/engine-hppa-hpux-9.03.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-bsdi-1.1.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-bsdi-1.1.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-bsdi-2.0.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-bsdi-2.0.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-freebsd-1.1.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-freebsd-1.1.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-freebsd-2.0.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-freebsd-2.0.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-linux-1.0.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-linux-1.0.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-netbsd-0.9.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-netbsd-0.9.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-netbsd-1.0.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-netbsd-1.0.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-netbsd-1.3.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-netbsd-1.3.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-openbsd-2.0.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-openbsd-2.0.h: First import - 3.23.10 mit-pthreads/machdep/engine-i386-sco-3.2v5.c: First import - 3.23.10 mit-pthreads/machdep/engine-i386-sco-3.2v5.h: First import - 3.23.10 mit-pthreads/machdep/engine-ip22-irix-5.2.c: First import - 3.23.10 mit-pthreads/machdep/engine-ip22-irix-5.2.h: First import - 3.23.10 mit-pthreads/machdep/engine-m68000-netbsd.c: First import - 3.23.10 mit-pthreads/machdep/engine-m68000-netbsd.h: First import - 3.23.10 mit-pthreads/machdep/engine-r2000-ultrix-4.2.c: First import - 3.23.10 mit-pthreads/machdep/engine-r2000-ultrix-4.2.h: First import - 3.23.10 mit-pthreads/machdep/engine-romp-bsd.c: First import - 3.23.10 mit-pthreads/machdep/engine-romp-bsd.h: First import - 3.23.10 mit-pthreads/machdep/engine-sparc-netbsd-1.3.c: First import - 3.23.10 mit-pthreads/machdep/engine-sparc-netbsd-1.3.h: First import - 3.23.10 mit-pthreads/machdep/engine-sparc-sunos-4.1.3.c: First import - 3.23.10 mit-pthreads/machdep/engine-sparc-sunos-4.1.3.h: First import - 3.23.10 mit-pthreads/machdep/engine-sparc-sunos-5.3.c: First import - 3.23.10 mit-pthreads/machdep/engine-sparc-sunos-5.3.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-1.1/compat.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-1.1/dirent.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-1.1/socket.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-1.1/timers.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__math.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__path.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__signal.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__string.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__time.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/compat.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/dirent.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/errno.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/timers.h: First import - 3.23.10 mit-pthreads/machdep/freebsd-2.0/wait.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/__math.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/__signal.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/__string.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/__time.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/compat.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/dirent.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/socket.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/stdtypes.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/time.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/timers.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/uio.h: First import - 3.23.10 mit-pthreads/machdep/hpux-10.20/wait.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/__math.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/__signal.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/__string.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/__time.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/compat.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/dirent.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/socket.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/stdtypes.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/time.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/timers.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/uio.h: First import - 3.23.10 mit-pthreads/machdep/hpux-9.03/wait.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/__math.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/__signal.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/__string.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/__time.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/compat.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/dirent.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/posix/__signal.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/socket.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/syscall.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/timers.h: First import - 3.23.10 mit-pthreads/machdep/i386-sco-3.2v5/trash.can: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/__math.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/__signal.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/__string.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/__time.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/compat.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/dirent.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/socket.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/timers.h: First import - 3.23.10 mit-pthreads/machdep/irix-5.2/wait.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__math.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__path.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__signal.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__string.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__time.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/compat.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/dirent.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/errno.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/socket.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/timers.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/uio.h: First import - 3.23.10 mit-pthreads/machdep/linux-1.0/wait.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-0.9/dirent.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__math.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__path.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__signal.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__string.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__time.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/compat.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/dirent.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/errno.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/time.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/timers.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.0/wait.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__math.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__path.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__signal.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__string.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__time.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/compat.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/dirent.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/errno.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/time.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/timers.h: First import - 3.23.10 mit-pthreads/machdep/netbsd-1.1/wait.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__math.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__path.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__signal.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__string.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__time.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/compat.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/dirent.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/errno.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/timers.h: First import - 3.23.10 mit-pthreads/machdep/openbsd-2.0/wait.h: First import - 3.23.10 mit-pthreads/machdep/posix-alpha-osf1.h: First import - 3.23.10 mit-pthreads/machdep/posix-bsdi-1.1.h: First import - 3.23.10 mit-pthreads/machdep/posix-bsdi-2.0.h: First import - 3.23.10 mit-pthreads/machdep/posix-freebsd-1.1.h: First import - 3.23.10 mit-pthreads/machdep/posix-freebsd-2.0.h: First import - 3.23.10 mit-pthreads/machdep/posix-hpux-10.20.h: First import - 3.23.10 mit-pthreads/machdep/posix-hpux-9.03.h: First import - 3.23.10 mit-pthreads/machdep/posix-i386-sco-3.2v5.h: First import - 3.23.10 mit-pthreads/machdep/posix-irix-5.2.h: First import - 3.23.10 mit-pthreads/machdep/posix-linux-1.0.h: First import - 3.23.10 mit-pthreads/machdep/posix-netbsd-0.9.h: First import - 3.23.10 mit-pthreads/machdep/posix-netbsd-1.0.h: First import - 3.23.10 mit-pthreads/machdep/posix-netbsd-1.1.h: First import - 3.23.10 mit-pthreads/machdep/posix-openbsd-2.0.h: First import - 3.23.10 mit-pthreads/machdep/posix-romp-bsd.h: First import - 3.23.10 mit-pthreads/machdep/posix-sco-3.2v5.h: First import - 3.23.10 mit-pthreads/machdep/posix-sunos-4.1.3.h: First import - 3.23.10 mit-pthreads/machdep/posix-sunos-5.3.h: First import - 3.23.10 mit-pthreads/machdep/posix-sunos-5.5.h: First import - 3.23.10 mit-pthreads/machdep/posix-ultrix-4.2.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/__math.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/__signal.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/__string.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/__time.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/compat.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/dirent.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/posix/__signal.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/socket.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/syscall.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/timers.h: First import - 3.23.10 mit-pthreads/machdep/sco-3.2v5/trash.can: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__math.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__path.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__signal.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__string.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__time.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/compat.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/dirent.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/fcntlcom.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/signal.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/stat.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/time.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/timers.h: First import - 3.23.10 mit-pthreads/machdep/sunos-4.1.3/wait.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/__math.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/__signal.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/__string.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/__time.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/compat.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/dirent.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/socket.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/timers.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.3/uio.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/__math.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/__signal.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/__string.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/__time.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/compat.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/dirent.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/socket.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/timers.h: First import - 3.23.10 mit-pthreads/machdep/sunos-5.5/uio.h: First import - 3.23.10 mit-pthreads/machdep/syscall-alpha-netbsd-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-alpha-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-alpha-osf1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-arm32-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-hppa-hpux-10.20.S: First import - 3.23.10 mit-pthreads/machdep/syscall-hppa-hpux-9.03.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-bsdi-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-bsdi-2.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-freebsd-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-freebsd-2.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-linux-1.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-netbsd-0.9.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-netbsd-1.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-netbsd-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-openbsd-2.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-i386-sco-3.2v5.S: First import - 3.23.10 mit-pthreads/machdep/syscall-ip22-irix-5.2.S: First import - 3.23.10 mit-pthreads/machdep/syscall-m68000-netbsd.S: First import - 3.23.10 mit-pthreads/machdep/syscall-r2000-ultrix-4.2.S: First import - 3.23.10 mit-pthreads/machdep/syscall-romp-bsd.S: First import - 3.23.10 mit-pthreads/machdep/syscall-sparc-netbsd-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-sparc-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-sparc-sunos-4.1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-sparc-sunos-5.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-sparc-sunos4.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-alpha-netbsd-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-alpha-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-alpha-osf1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-arm32-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-hppa-hpux-10.20.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-hppa-hpux-9.03.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-i386-bsdi-2.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-i386-freebsd-2.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-i386-netbsd-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-i386-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-i386-netbsd1.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-i386-openbsd-2.0.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-i386-sco-3.2v5.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-ip22-irix-5.2.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-m68000-netbsd.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-r2000-ultrix-4.2.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-sparc-netbsd-1.1.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-sparc-netbsd-1.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-sparc-sunos-5.3.S: First import - 3.23.10 mit-pthreads/machdep/syscall-template-sparc-sunos4.S: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/__math.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/__signal.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/__stdio.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/__stdlib.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/__string.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/__time.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/__unistd.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/cdefs.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/compat.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/dirent.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/errno.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/time.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/timers.h: First import - 3.23.10 mit-pthreads/machdep/ultrix-4.2/wait.h: First import - 3.23.10 mit-pthreads/machdep/unistd-i386-freebsd-1.1.h: First import - 3.23.10 mit-pthreads/machdep/unistd-i386-linux-1.0.h: First import - 3.23.10 mit-pthreads/machdep/unistd-sparc-sunos-4.1.3.h: First import - 3.23.10 mit-pthreads/net/GNUmakefile.inc: First import - 3.23.10 mit-pthreads/net/gethostbyaddr.c: First import - 3.23.10 mit-pthreads/net/gethostbyname.c: First import - 3.23.10 mit-pthreads/net/gethostent.c: First import - 3.23.10 mit-pthreads/net/getnetbyaddr.c: First import - 3.23.10 mit-pthreads/net/getnetbyname.c: First import - 3.23.10 mit-pthreads/net/getnetent.c: First import - 3.23.10 mit-pthreads/net/getproto.c: First import - 3.23.10 mit-pthreads/net/getprotoent.c: First import - 3.23.10 mit-pthreads/net/getprotoname.c: First import - 3.23.10 mit-pthreads/net/getservbyname.c: First import - 3.23.10 mit-pthreads/net/getservbyport.c: First import - 3.23.10 mit-pthreads/net/getservent.c: First import - 3.23.10 mit-pthreads/net/herror.c: First import - 3.23.10 mit-pthreads/net/inet_addr.c: First import - 3.23.10 mit-pthreads/net/inet_lnaof.c: First import - 3.23.10 mit-pthreads/net/inet_makeaddr.c: First import - 3.23.10 mit-pthreads/net/inet_netof.c: First import - 3.23.10 mit-pthreads/net/inet_network.c: First import - 3.23.10 mit-pthreads/net/inet_ntoa.c: First import - 3.23.10 mit-pthreads/net/net_internal.c: First import - 3.23.10 mit-pthreads/net/net_internal.h: First import - 3.23.10 mit-pthreads/net/proto_internal.c: First import - 3.23.10 mit-pthreads/net/proto_internal.h: First import - 3.23.10 mit-pthreads/net/res_comp.c: First import - 3.23.10 mit-pthreads/net/res_debug.c: First import - 3.23.10 mit-pthreads/net/res_init.c: First import - 3.23.10 mit-pthreads/net/res_internal.c: First import - 3.23.10 mit-pthreads/net/res_internal.h: First import - 3.23.10 mit-pthreads/net/res_mkquery.c: First import - 3.23.10 mit-pthreads/net/res_query.c: First import - 3.23.10 mit-pthreads/net/res_querydomain.c: First import - 3.23.10 mit-pthreads/net/res_search.c: First import - 3.23.10 mit-pthreads/net/res_send.c: First import - 3.23.10 mit-pthreads/net/serv_internal.c: First import - 3.23.10 mit-pthreads/net/serv_internal.h: First import - 3.23.10 mit-pthreads/patches/Streepy.html: First import - 3.23.10 mit-pthreads/patches/Streepy2.html: First import - 3.23.10 mit-pthreads/patches/bill_lear: First import - 3.23.10 mit-pthreads/patches/chris_demetriou: First import - 3.23.10 mit-pthreads/patches/mevans: First import - 3.23.10 mit-pthreads/patches/p153: First import - 3.23.10 mit-pthreads/patches/p155: First import - 3.23.10 mit-pthreads/pg++: First import - 3.23.10 mit-pthreads/pgcc: First import - 3.23.10 mit-pthreads/pthreads/GNUmakefile.inc: First import - 3.23.10 mit-pthreads/pthreads/Makefile.inc: First import - 3.23.10 mit-pthreads/pthreads/_exit.c: First import - 3.23.10 mit-pthreads/pthreads/cleanup.c: First import - 3.23.10 mit-pthreads/pthreads/cond.c: First import - 3.23.10 mit-pthreads/pthreads/condattr.c: First import - 3.23.10 mit-pthreads/pthreads/dump_state.c: First import - 3.23.10 mit-pthreads/pthreads/errno.c: First import - 3.23.10 mit-pthreads/pthreads/fd_pipe.c: First import - 3.23.10 mit-pthreads/pthreads/file.c: First import - 3.23.10 mit-pthreads/pthreads/globals.c: First import - 3.23.10 mit-pthreads/pthreads/info.c: First import - 3.23.10 mit-pthreads/pthreads/init.cc: First import - 3.23.10 mit-pthreads/pthreads/malloc.c: First import - 3.23.10 mit-pthreads/pthreads/mutex.c: First import - 3.23.10 mit-pthreads/pthreads/mutexattr.c: First import - 3.23.10 mit-pthreads/pthreads/panic.c: First import - 3.23.10 mit-pthreads/pthreads/prio_queue.c: First import - 3.23.10 mit-pthreads/pthreads/process.c: First import - 3.23.10 mit-pthreads/pthreads/pthread.c: First import - 3.23.10 mit-pthreads/pthreads/pthread_attr.c: First import - 3.23.10 mit-pthreads/pthreads/pthread_cancel.c: First import - 3.23.10 mit-pthreads/pthreads/pthread_detach.c: First import - 3.23.10 mit-pthreads/pthreads/pthread_init.c: First import - 3.23.10 mit-pthreads/pthreads/pthread_join.c: First import - 3.23.10 mit-pthreads/pthreads/pthread_kill.c: First import - 3.23.10 mit-pthreads/pthreads/pthread_once.c: First import - 3.23.10 mit-pthreads/pthreads/queue.c: First import - 3.23.10 mit-pthreads/pthreads/readv.c: First import - 3.23.10 mit-pthreads/pthreads/schedparam.c: First import - 3.23.10 mit-pthreads/pthreads/select.c: First import - 3.23.10 mit-pthreads/pthreads/sig.c: First import - 3.23.10 mit-pthreads/pthreads/sleep.c: First import - 3.23.10 mit-pthreads/pthreads/specific.c: First import - 3.23.10 mit-pthreads/pthreads/stat.c: First import - 3.23.10 mit-pthreads/pthreads/wait.c: First import - 3.23.10 mit-pthreads/pthreads/writev.c: First import - 3.23.10 mit-pthreads/scripts/GNUmakefile.inc: First import - 3.23.10 mit-pthreads/scripts/Makefile.inc: First import - 3.23.10 mit-pthreads/scripts/pgcc.sh: First import - 3.23.10 mit-pthreads/stdio/GNUmakefile.inc: First import - 3.23.10 mit-pthreads/stdio/Makefile.inc: First import - 3.23.10 mit-pthreads/stdio/README: First import - 3.23.10 mit-pthreads/stdio/clrerr.c: First import - 3.23.10 mit-pthreads/stdio/fclose.c: First import - 3.23.10 mit-pthreads/stdio/fdopen.c: First import - 3.23.10 mit-pthreads/stdio/feof.c: First import - 3.23.10 mit-pthreads/stdio/ferror.c: First import - 3.23.10 mit-pthreads/stdio/fflush.c: First import - 3.23.10 mit-pthreads/stdio/fgetc.c: First import - 3.23.10 mit-pthreads/stdio/fgetline.c: First import - 3.23.10 mit-pthreads/stdio/fgetpos.c: First import - 3.23.10 mit-pthreads/stdio/fgets.c: First import - 3.23.10 mit-pthreads/stdio/fileno.c: First import - 3.23.10 mit-pthreads/stdio/findfp.c: First import - 3.23.10 mit-pthreads/stdio/flags.c: First import - 3.23.10 mit-pthreads/stdio/floatio.h: First import - 3.23.10 mit-pthreads/stdio/fopen.c: First import - 3.23.10 mit-pthreads/stdio/fprintf.c: First import - 3.23.10 mit-pthreads/stdio/fpurge.c: First import - 3.23.10 mit-pthreads/stdio/fputc.c: First import - 3.23.10 mit-pthreads/stdio/fputs.c: First import - 3.23.10 mit-pthreads/stdio/fread.c: First import - 3.23.10 mit-pthreads/stdio/freopen.c: First import - 3.23.10 mit-pthreads/stdio/fscanf.c: First import - 3.23.10 mit-pthreads/stdio/fseek.c: First import - 3.23.10 mit-pthreads/stdio/fsetpos.c: First import - 3.23.10 mit-pthreads/stdio/ftell.c: First import - 3.23.10 mit-pthreads/stdio/funopen.c: First import - 3.23.10 mit-pthreads/stdio/fvwrite.c: First import - 3.23.10 mit-pthreads/stdio/fvwrite.h: First import - 3.23.10 mit-pthreads/stdio/fwalk.c: First import - 3.23.10 mit-pthreads/stdio/fwrite.c: First import - 3.23.10 mit-pthreads/stdio/getc.c: First import - 3.23.10 mit-pthreads/stdio/getc_unlocked.c: First import - 3.23.10 mit-pthreads/stdio/getchar.c: First import - 3.23.10 mit-pthreads/stdio/getchar_unlocked.c: First import - 3.23.10 mit-pthreads/stdio/gets.c: First import - 3.23.10 mit-pthreads/stdio/getw.c: First import - 3.23.10 mit-pthreads/stdio/glue.h: First import - 3.23.10 mit-pthreads/stdio/local.h: First import - 3.23.10 mit-pthreads/stdio/makebuf.c: First import - 3.23.10 mit-pthreads/stdio/mktemp.c: First import - 3.23.10 mit-pthreads/stdio/perror.c: First import - 3.23.10 mit-pthreads/stdio/printf.c: First import - 3.23.10 mit-pthreads/stdio/putc.c: First import - 3.23.10 mit-pthreads/stdio/putc_unlocked.c: First import - 3.23.10 mit-pthreads/stdio/putchar.c: First import - 3.23.10 mit-pthreads/stdio/putchar_unlocked.c: First import - 3.23.10 mit-pthreads/stdio/puts.c: First import - 3.23.10 mit-pthreads/stdio/putw.c: First import - 3.23.10 mit-pthreads/stdio/refill.c: First import - 3.23.10 mit-pthreads/stdio/remove.c: First import - 3.23.10 mit-pthreads/stdio/rewind.c: First import - 3.23.10 mit-pthreads/stdio/rget.c: First import - 3.23.10 mit-pthreads/stdio/scanf.c: First import - 3.23.10 mit-pthreads/stdio/setbuf.c: First import - 3.23.10 mit-pthreads/stdio/setbuffer.c: First import - 3.23.10 mit-pthreads/stdio/setvbuf.c: First import - 3.23.10 mit-pthreads/stdio/snprintf.c: First import - 3.23.10 mit-pthreads/stdio/sprintf.c: First import - 3.23.10 mit-pthreads/stdio/sscanf.c: First import - 3.23.10 mit-pthreads/stdio/stdio.c: First import - 3.23.10 mit-pthreads/stdio/strerror.c: First import - 3.23.10 mit-pthreads/stdio/tempnam.c: First import - 3.23.10 mit-pthreads/stdio/tmpfile.c: First import - 3.23.10 mit-pthreads/stdio/tmpnam.c: First import - 3.23.10 mit-pthreads/stdio/ungetc.c: First import - 3.23.10 mit-pthreads/stdio/vfprintf.c: First import - 3.23.10 mit-pthreads/stdio/vfscanf.c: First import - 3.23.10 mit-pthreads/stdio/vprintf.c: First import - 3.23.10 mit-pthreads/stdio/vscanf.c: First import - 3.23.10 mit-pthreads/stdio/vsnprintf.c: First import - 3.23.10 mit-pthreads/stdio/vsprintf.c: First import - 3.23.10 mit-pthreads/stdio/vsscanf.c: First import - 3.23.10 mit-pthreads/stdio/wbuf.c: First import - 3.23.10 mit-pthreads/stdio/wsetup.c: First import - 3.23.10 mit-pthreads/stdio/xprintf.c: First import - 3.23.10 mit-pthreads/stdlib/GNUmakefile.inc: First import - 3.23.10 mit-pthreads/stdlib/Makefile.inc: First import - 3.23.10 mit-pthreads/stdlib/abort.c: First import - 3.23.10 mit-pthreads/stdlib/atexit.h: First import - 3.23.10 mit-pthreads/stdlib/exit.c: First import - 3.23.10 mit-pthreads/stdlib/rand.c: First import - 3.23.10 mit-pthreads/stdlib/random.c: First import - 3.23.10 mit-pthreads/stdlib/strtod.c: First import - 3.23.10 mit-pthreads/stdlib/strtol.c: First import - 3.23.10 mit-pthreads/stdlib/strtoul.c: First import - 3.23.10 mit-pthreads/stdlib/system.c: First import - 3.23.10 mit-pthreads/string/GNUmakefile.inc: First import - 3.23.10 mit-pthreads/string/Makefile.inc: First import - 3.23.10 mit-pthreads/string/strtok.c: First import - 3.23.10 mit-pthreads/tests/Makefile.in: First import - 3.23.10 mit-pthreads/tests/README: First import - 3.23.10 mit-pthreads/tests/bench_fcntl.c: First import - 3.23.10 mit-pthreads/tests/bench_pipe.c: First import - 3.23.10 mit-pthreads/tests/bench_read.c: First import - 3.23.10 mit-pthreads/tests/p_bench_getpid.c: First import - 3.23.10 mit-pthreads/tests/p_bench_mutex.c: First import - 3.23.10 mit-pthreads/tests/p_bench_pthread_create.c: First import - 3.23.10 mit-pthreads/tests/p_bench_read.c: First import - 3.23.10 mit-pthreads/tests/p_bench_semaphore.c: First import - 3.23.10 mit-pthreads/tests/p_bench_yield.c: First import - 3.23.10 mit-pthreads/tests/test_create.c: First import - 3.23.10 mit-pthreads/tests/test_cwd.c: First import - 3.23.10 mit-pthreads/tests/test_execve.c: First import - 3.23.10 mit-pthreads/tests/test_fcntl.c: First import - 3.23.10 mit-pthreads/tests/test_fork.c: First import - 3.23.10 mit-pthreads/tests/test_netdb.c: First import - 3.23.10 mit-pthreads/tests/test_pause.c: First import - 3.23.10 mit-pthreads/tests/test_preemption.c: First import - 3.23.10 mit-pthreads/tests/test_preemption_float.c: First import - 3.23.10 mit-pthreads/tests/test_pthread_cond_timedwait.c: First import - 3.23.10 mit-pthreads/tests/test_pthread_join.c: First import - 3.23.10 mit-pthreads/tests/test_pthread_mutex.c: First import - 3.23.10 mit-pthreads/tests/test_pw.c: First import - 3.23.10 mit-pthreads/tests/test_readdir.c: First import - 3.23.10 mit-pthreads/tests/test_select.c: First import - 3.23.10 mit-pthreads/tests/test_setjmp.c: First import - 3.23.10 mit-pthreads/tests/test_sleep.c: First import - 3.23.10 mit-pthreads/tests/test_sock_1.c: First import - 3.23.10 mit-pthreads/tests/test_sock_2.c: First import - 3.23.10 mit-pthreads/tests/test_sock_2a.c: First import - 3.23.10 mit-pthreads/tests/test_stdio_1.c: First import - 3.23.10 mit-pthreads/tests/test_switch.c: First import - 3.23.10 mysys/COPYING.LIB: First import - 3.23.10 mysys/getopt.c: First import - 3.23.10 readline/COPYING: First import - 3.23.10 readline/INSTALL: First import - 3.23.10 readline/Makefile.am: First import - 3.23.10 readline/README: First import - 3.23.10 readline/ansi_stdlib.h: First import - 3.23.10 readline/bind.c: First import - 3.23.10 readline/callback.c: First import - 3.23.10 readline/chardefs.h: First import - 3.23.10 readline/configure.in: First import - 3.23.10 readline/configure: First import - 3.23.10 readline/display.c: First import - 3.23.10 readline/emacs_keymap.c: First import - 3.23.10 readline/funmap.c: First import - 3.23.10 readline/histexpand.c: First import - 3.23.10 readline/histfile.c: First import - 3.23.10 readline/histlib.h: First import - 3.23.10 readline/history.c: First import - 3.23.10 readline/history.h: First import - 3.23.10 readline/histsearch.c: First import - 3.23.10 readline/input.c: First import - 3.23.10 readline/isearch.c: First import - 3.23.10 readline/keymaps.c: First import - 3.23.10 readline/keymaps.h: First import - 3.23.10 readline/kill.c: First import - 3.23.10 readline/macro.c: First import - 3.23.10 readline/nls.c: First import - 3.23.10 readline/parens.c: First import - 3.23.10 readline/posixdir.h: First import - 3.23.10 readline/posixjmp.h: First import - 3.23.10 readline/posixstat.h: First import - 3.23.10 readline/readline.c: First import - 3.23.10 readline/readline.h: First import - 3.23.10 readline/rlconf.h: First import - 3.23.10 readline/rldefs.h: First import - 3.23.10 readline/rltty.c: First import - 3.23.10 readline/rltty.h: First import - 3.23.10 readline/rlwinsize.h: First import - 3.23.10 readline/search.c: First import - 3.23.10 readline/shell.c: First import - 3.23.10 readline/signals.c: First import - 3.23.10 readline/tcap.h: First import - 3.23.10 readline/terminal.c: First import - 3.23.10 readline/tilde.c: First import - 3.23.10 readline/tilde.h: First import - 3.23.10 readline/undo.c: First import - 3.23.10 readline/util.c: First import - 3.23.10 readline/vi_keymap.c: First import - 3.23.10 readline/vi_mode.c: First import - 3.23.10 readline/xmalloc.c: First import - 3.23.10 regex/CHANGES: First import - 3.23.10 regex/COPYRIGHT: First import - 3.23.10 regex/README: First import - 3.23.10 regex/WHATSNEW: First import - 3.23.10 regex/cclass.h: First import - 3.23.10 regex/cname.h: First import - 3.23.10 regex/debug.c: First import - 3.23.10 regex/debug.ih: First import - 3.23.10 regex/engine.c: First import - 3.23.10 regex/engine.ih: First import - 3.23.10 regex/main.ih: First import - 3.23.10 regex/regcomp.ih: First import - 3.23.10 regex/regerror.c: First import - 3.23.10 regex/regerror.ih: First import - 3.23.10 regex/regex.3: First import - 3.23.10 regex/regex.7: First import - 3.23.10 regex/regex.h: First import - 3.23.10 regex/regfree.c: First import - 3.23.10 regex/reginit.c: First import - 3.23.10 regex/split.c: First import - 3.23.10 regex/tests: First import - 3.23.10 scripts/msql2mysql.sh: First import - 3.23.10 scripts/mysql_fix_privilege_tables.sh: First import - 3.23.10 scripts/mysql_setpermission.sh: First import - 3.23.10 scripts/mysqlaccess.conf: First import - 3.23.10 scripts/mysqlbug.sh: First import - 3.23.10 sql-bench/Data/ATIS/aircraft.txt: First import - 3.23.10 sql-bench/Data/ATIS/airline.txt: First import - 3.23.10 sql-bench/Data/ATIS/airport.txt: First import - 3.23.10 sql-bench/Data/ATIS/airport_service.txt: First import - 3.23.10 sql-bench/Data/ATIS/city.txt: First import - 3.23.10 sql-bench/Data/ATIS/class_of_service.txt: First import - 3.23.10 sql-bench/Data/ATIS/code_description.txt: First import - 3.23.10 sql-bench/Data/ATIS/compound_class.txt: First import - 3.23.10 sql-bench/Data/ATIS/connect_leg.txt: First import - 3.23.10 sql-bench/Data/ATIS/connection.txt: First import - 3.23.10 sql-bench/Data/ATIS/date_day.txt: First import - 3.23.10 sql-bench/Data/ATIS/day_name.txt: First import - 3.23.10 sql-bench/Data/ATIS/dual_carrier.txt: First import - 3.23.10 sql-bench/Data/ATIS/fare.txt: First import - 3.23.10 sql-bench/Data/ATIS/flight.txt: First import - 3.23.10 sql-bench/Data/ATIS/flight_class.txt: First import - 3.23.10 sql-bench/Data/ATIS/flight_day.txt: First import - 3.23.10 sql-bench/Data/ATIS/flight_fare.txt: First import - 3.23.10 sql-bench/Data/ATIS/food_service.txt: First import - 3.23.10 sql-bench/Data/ATIS/ground_service.txt: First import - 3.23.10 sql-bench/Data/ATIS/month_name.txt: First import - 3.23.10 sql-bench/Data/ATIS/restrict_carrier.txt: First import - 3.23.10 sql-bench/Data/ATIS/restrict_class.txt: First import - 3.23.10 sql-bench/Data/ATIS/restriction.txt: First import - 3.23.10 sql-bench/Data/ATIS/state.txt: First import - 3.23.10 sql-bench/Data/ATIS/stop.txt: First import - 3.23.10 sql-bench/Data/ATIS/stop1.txt: First import - 3.23.10 sql-bench/Data/ATIS/time_interval.txt: First import - 3.23.10 sql-bench/Data/ATIS/time_zone.txt: First import - 3.23.10 sql-bench/Data/ATIS/transport.txt: First import - 3.23.10 sql-bench/Data/Wisconsin/onek.data: First import - 3.23.10 sql-bench/Data/Wisconsin/tenk.data: First import - 3.23.10 sql-bench/README: First import - 3.23.10 sql-bench/Results/ATIS-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/ATIS-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql: First import - 3.23.10 sql-bench/Results/ATIS-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/ATIS-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/ATIS-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/ATIS-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/ATIS-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/ATIS-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/ATIS-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/ATIS-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/ATIS-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/ATIS-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/ATIS-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/ATIS-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/ATIS-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/ATIS-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/ATIS-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/ATIS-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/ATIS-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/ATIS-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/RUN-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/RUN-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/RUN-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/RUN-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/RUN-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/RUN-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/RUN-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/RUN-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/RUN-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/RUN-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/RUN-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/RUN-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/RUN-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/RUN-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/RUN-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/RUN-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/RUN-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/RUN-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/RUN-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/RUN-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/RUN-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/alter-table-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/alter-table-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql: First import - 3.23.10 sql-bench/Results/alter-table-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/alter-table-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/alter-table-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/alter-table-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/alter-table-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/alter-table-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/alter-table-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/alter-table-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/alter-table-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/alter-table-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/alter-table-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/alter-table-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/alter-table-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/alter-table-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/alter-table-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/alter-table-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/alter-table-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/alter-table-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/big-tables-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/big-tables-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/big-tables-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/big-tables-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/big-tables-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/big-tables-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/big-tables-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/big-tables-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/big-tables-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/big-tables-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/big-tables-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/big-tables-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/big-tables-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/big-tables-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/big-tables-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/big-tables-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/big-tables-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/big-tables-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/big-tables-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/connect-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/connect-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/connect-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/connect-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/connect-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/connect-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/connect-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/connect-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/connect-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/connect-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/connect-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/connect-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/connect-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/connect-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/connect-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/connect-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/connect-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/connect-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/connect-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/connect-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/create-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/create-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/create-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/create-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/create-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/create-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/create-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/create-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/create-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/create-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/create-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/create-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/create-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/create-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/create-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/create-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/create-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/create-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/create-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/create-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/insert-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/select-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-HP_UX_B.10.20_9000_778: First import - 3.23.10 sql/md5.c: First import - 3.23.10 sql/share/norwegian-ny/.cvsignore: First import - 3.23.10 sql/share/norwegian/.cvsignore: First import - 3.23.10 stamp-h.in: First import - 3.23.10 strings/ChangeLog: First import - 3.23.10 strings/bfill.c: First import - 3.23.10 strings/bmove.c: First import - 3.23.10 strings/strend.c: First import - 3.23.10 strings/strstr.c: First import - 3.23.10 strings/strxnmov.c: First import - 3.23.10 tests/auto_increment.res: First import - 3.23.10 tests/auto_increment.tst: First import - 3.23.10 tests/function.res: First import - 3.23.10 tests/function.tst: First import - 3.23.10 tests/grant.res: First import - 3.23.10 tests/lock_test.res: First import - 3.23.10 tests/table_types.pl: First import - 3.23.10 tests/udf_test.res: First import - 3.23.10 tests/udf_test: First import - 3.23.10 sql-bench/Results-linux/ATIS-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/ATIS-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql-Linux_2.0.33_i586-cmp-access,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql-Linux_2.0.33_i586-cmp-ms-sql,mysql,sybase: ***MISSING WEAVE*** sql-bench/Results-win32/ATIS-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/ATIS-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/ATIS-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/ATIS-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/ATIS-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/ATIS-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/ATIS-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/RUN-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/alter-table-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/big-tables-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/connect-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/create-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/insert-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/select-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/select-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/select-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/select-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/select-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/select-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/select-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/wisconsin-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/wisconsin-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/wisconsin-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/wisconsin-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/wisconsin-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/wisconsin-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results-win32/wisconsin-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase: First import - 3.23.10 sql-bench/Results/create-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/insert-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/insert-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/insert-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/insert-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/insert-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/insert-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/insert-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/insert-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/insert-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/insert-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/insert-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/insert-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/insert-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/insert-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/insert-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/insert-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/insert-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/insert-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/insert-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/insert-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/select-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/select-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/select-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/select-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/select-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/select-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/select-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/select-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/select-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/select-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/select-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/select-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/select-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/select-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/select-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/select-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/select-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/select-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/select-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/select-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/wisconsin-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/wisconsin-msql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-3.21-Linux_2.2.1_i686: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-Linux_2.0.35_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-Linux_2.2.10_i686: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-Linux_2.2.1_i686-cmp-adabas,mysql: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-SunOS_5.5.1_sun4u: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-SunOS_5.6_sun4m: ***MISSING WEAVE*** sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4m: First import - 3.23.10 sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4u: First import - 3.23.10 sql-bench/Results/wisconsin-mysql_3.21-Linux_2.0.35_i686: First import - 3.23.10 sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql: First import - 3.23.10 sql-bench/Results/wisconsin-mysql_odbc-win98: First import - 3.23.10 sql-bench/Results/wisconsin-oracle-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/wisconsin-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle: First import - 3.23.10 sql-bench/Results/wisconsin-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/wisconsin-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/Results/wisconsin-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid: First import - 3.23.10 sql-bench/limits/Adabas.cfg: First import - 3.23.10 sql-bench/limits/Adabas.comment: First import - 3.23.10 sql-bench/limits/Informix.cfg: First import - 3.23.10 sql-bench/limits/Informix.comment: First import - 3.23.10 sql-bench/limits/access.comment: First import - 3.23.10 sql-bench/limits/access_odbc.cfg: First import - 3.23.10 sql-bench/limits/db2.cfg: First import - 3.23.10 sql-bench/limits/empress.cfg: First import - 3.23.10 sql-bench/limits/empress.comment: First import - 3.23.10 sql-bench/limits/ms-sql65.cfg: First import - 3.23.10 sql-bench/limits/msql.cfg: First import - 3.23.10 sql-bench/limits/mysql-3.22.cfg: First import - 3.23.10 sql-bench/limits/pg.comment: First import - 3.23.10 sql-bench/limits/solid-nt4.cfg: First import - 3.23.10 sql-bench/limits/solid.cfg: First import - 3.23.10 sql-bench/limits/sybase.cfg: First import - 3.23.10 support-files/binary-configure.sh: First import - 3.23.10 support-files/mysql-log-rotate.sh: First import - 3.23.10 mkinstalldirs: Update to 3.23.11 Docs/mysqld_error.txt: Update to 3.23.11 man/mysql.1: Update to 3.23.11 mysys/ChangeLog: Update to 3.23.11 scripts/mysqlaccess.sh: Update to 3.23.11 strings/Attic/ptr_cmp.c: Update to 3.23.11 dbug/dbug_analyze.c: Update for 3.23.12 dbug/doinstall.sh: Update for 3.23.12 dbug/install.sh: Update for 3.23.12 dbug/mklintlib.sh: Update for 3.23.12 dbug/qmake.cmd: Update for 3.23.12 dbug/vargs.h: Update for 3.23.12 isam/test_all.res: Update for 3.23.12 isam/test_all: Update for 3.23.12 myisam/NEWS: Update for 3.23.12 myisam/common_words: ***MISSING WEAVE*** myisam/mi_test_all.res: Update for 3.23.12 myisam/test_pack: Update for 3.23.12 scripts/safe_mysqld-watch.sh: Update for 3.23.12 sql/ha_hash.h: Update for 3.23.12 sql/nt_servc.h: Update for 3.23.12 strings/READ-ME: Update for 3.23.12 strings/bzero.c: Update for 3.23.12 strings/latin2.def: Update for 3.23.12 strings/memset.c: Update for 3.23.12 strings/strcat.c: Update for 3.23.12 strings/strchr.c: Update for 3.23.12 strings/strcmp.c: Update for 3.23.12 strings/string.doc: Update for 3.23.12 strings/strings-not-used.h: Update for 3.23.12 strings/strlen.c: Update for 3.23.12 strings/strrchr.c: Update for 3.23.12 strings/t_ctype.h: Update for 3.23.12 Build-tools/Do-create-perl-rpms: Initial checkin of MySQL build environment. Build-tools/Do-local-patch-file: Initial checkin of MySQL build environment. Build-tools/newest: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-01.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-02.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-03.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-04.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-05.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-06.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-07.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-08.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-09.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-10.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-11.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-12.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-13.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-14.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-15.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-16.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-17.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql-compatible.jpg: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql_anim-01.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql_anim-02.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql_anim-03.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql_anim-04.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql_anim-05.gif: Initial checkin of MySQL build environment. Docs/MySQL-logos/mysql_anim-06.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/afghanistan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/albania.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/algeria.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/andorra.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/angola.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/antartica.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/antigua-and-barbuda.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/argentina.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/armenia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/australia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/austria.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/azerbaijan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bahamas.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bahrein.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bangladesh.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/barbados.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/belarus.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/belgium.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/belize.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/benin.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bermuda.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bhutan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bolivia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bosnia-and-herzegovina.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/botswana.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/brazil.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/brunei.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/bulgaria.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/burkina-faso.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/burma.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/burundi.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/cambodia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/cameroon.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/canada.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/cape-verde.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/central-african-republic.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/chad.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/chile.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/china.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/colombia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/comoros.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/congo.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/costa-rica.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/cote-d-ivoire.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/croatia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/cuba.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/cyprus.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/czech-republic.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/denmark-original-incorrect.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/denmark.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/djibouti.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/dominica.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/dominican-republic.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/ecuador.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/egypt.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/el-salvador.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/equatorial-guinea.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/eritrea.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/estonia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/ethiopia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/fiji.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/finland.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/france.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/gabon.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/gambia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/georgia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/germany.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/ghana.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/great-britain.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/greece.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/greenland.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/grenada.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/guatemala.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/guinea-bissau.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/guinea.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/guyana.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/haiti.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/honduras.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/hungary.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/iceland.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/india.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/indonesia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/iran.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/iraq.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/ireland.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/israel.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/italy.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/jamaica.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/japan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/jordan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/kazakhstan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/kenya.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/kiribati.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/kuwait.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/kyrgyzstan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/laos.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/latvia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/lebanon.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/lesotho.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/liberia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/libya.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/liechtenstein.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/lithuania.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/luxembourg.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/macedonia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/madagascar.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/malawi.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/malaysia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/maldives.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/mali.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/malta.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/marshall.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/mauritania.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/mauritius.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/mexico.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/micronesia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/moldova.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/monaco.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/mongolia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/morocco.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/mozambique.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/namibia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/nauru.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/nepal.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/netherlands.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/new-zealand.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/nicaragua.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/niger.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/nigeria.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/north-korea.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/norway.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/oman.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/pakistan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/panama.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/papua-new-guinea.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/paraguay.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/peru.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/philippines.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/poland.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/portugal.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/qatar.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/romania.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/russia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/rwanda.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/saint-kitts-and-nevis.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/saint-lucia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/samoa.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/sao-tome-and-principe.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/saudi-arabia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/senegal.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/seychelles.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/sierra-leone.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/singapore.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/slovakia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/slovenia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/solomon-islands.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/somalia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/south-africa.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/south-korea.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/spain.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/sri-lanka.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/sudan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/suriname.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/swaziland.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/sweden.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/sweden2.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/switzerland.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/syria.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/taiwan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/tajikistan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/tanzania.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/thailand.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/togo.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/tonga.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/trinidad-and-tobago.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/tunisia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/turkey.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/turkmenistan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/tuvalu.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/uganda.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/ukraine.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/united-arab-emirates.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/united-states-of-america.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/uruguay.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/usa.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/uzbekistan.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/vanuatu.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/venezuela.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/vietnam.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/vincent-and-grenadines.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/yemen.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/yugoslavia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/zaire.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/zambia.gif: Initial checkin of MySQL build environment. Docs/Raw-Flags/zimbabwe.gif: Initial checkin of MySQL build environment. Docs/Support/generate-flag-images: Initial checkin of MySQL build environment. Docs/Support/generate-mirror-listing.pl: Initial checkin of MySQL build environment. Docs/Support/generate-text-files.pl: Initial checkin of MySQL build environment. Docs/Support/make-makefile: Initial checkin of MySQL build environment. Docs/Support/texinfo.tex: Initial checkin of MySQL build environment. Docs/Translations/myodbc-br.texi: Initial checkin of MySQL build environment. man/.cvsignore: Initial checkin of MySQL build environment. mit-pthreads/include/pthread/config.h: Initial checkin of MySQL build environment. readline/.cvsignore: Initial checkin of MySQL build environment. sql/share/.cvsignore: Initial checkin of MySQL build environment. tests/.cvsignore: Initial checkin of MySQL build environment. libmysql/acconfig.h: ***MISSING WEAVE*** libmysql/acinclude.m4: Configure stuff for libmysql. libmysql/configure.in: Configure stuff for libmysql. mit-pthreads/.cvsignore: More work on initial build mit-pthreads/include/pthread/cond.h: Update to 3.23.12 mit-pthreads/machdep/engine-i386-linux-2.0.c: Update to 3.23.12 mit-pthreads/machdep/engine-i386-linux-2.0.h: Update to 3.23.12 mit-pthreads/machdep/posix-linux-2.0.h: Update to 3.23.12 mit-pthreads/machdep/unistd-i386-linux-2.0.h: Update to 3.23.12 sql/add_errmsg: Update to 3.23.12 sql/watchdog_mysqld: Update to 3.23.12 strings/Attic/memory.h: Update to 3.23.12 dbug/.cvsignore: Update to 3.23.12 heap/.cvsignore: Update to 3.23.12 merge/.cvsignore: Update to 3.23.12 mit-pthreads/bin/.cvsignore: Update to 3.23.12 mit-pthreads/bin/finger/.cvsignore: Update to 3.23.12 mit-pthreads/lib/.cvsignore: Update to 3.23.12 mit-pthreads/lib/libpthreadutil/.cvsignore: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/__math.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/__path.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/__signal.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/__stdio.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/__stdlib.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/__string.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/__time.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/cdefs.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/compat.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/dirent.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/errno.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/socket.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/socketcall.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/timers.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/uio.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/wait.h: Update to 3.23.12 mit-pthreads/tests/.cvsignore: Update to 3.23.12 myisammrg/.cvsignore: Update to 3.23.12 regex/.cvsignore: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/extra/bits/local_lim.h: Update to 3.23.12 mit-pthreads/machdep/linux-2.0/extra/bits/socket.h: Update to 3.23.12 vio/.cvsignore: Update for 3.23.12 vio/Vio.cc: Update for 3.23.12 vio/VioAcceptorFd.cc: Update for 3.23.12 vio/VioAcceptorFd.h: Update for 3.23.12 vio/VioConnectorFd.cc: Update for 3.23.12 vio/VioConnectorFd.h: Update for 3.23.12 vio/VioFd.cc: Update for 3.23.12 vio/VioFd.h: Update for 3.23.12 vio/VioPipe.cc: Update for 3.23.12 vio/VioSSL.cc: Update for 3.23.12 vio/VioSSL.h: Update for 3.23.12 vio/VioSSLAcceptorFd.cc: Update for 3.23.12 vio/VioSSLFactoriesFd.cc: Update for 3.23.12 vio/VioSSLFactoriesFd.h: Update for 3.23.12 vio/VioSocket.cc: Update for 3.23.12 vio/VioSocket.h: Update for 3.23.12 vio/version.cc: Update for 3.23.12 vio/vio-global.h: Update for 3.23.12 vio/vioelitexx.cc: Update for 3.23.12 vio/viotest-ssl.cc: Update for 3.23.12 vio/viotest-sslconnect.cc: Update for 3.23.12 vio/viotest.cc: Update for 3.23.12 vio/viotypes.h: Update for 3.23.12 strings/strxmov.c: Update to 3.23.12a sql/md5.h: Lots of patches for Alpha-Linux Docs/Images/empty.png: *** empty log message *** Docs/Images/flag-background.pnm: *** empty log message *** NEW-RPMS/.cvsignore: Changes for new build environment sql-bench/example.bat: Update for 3.23.12a sql-bench/pwd.bat: Update for 3.23.12a sql-bench/uname.bat: Update for 3.23.12a sql-bench/Results/Attic/ATIS-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/RUN-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/alter-table-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/big-tables-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/connect-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/create-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/insert-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/select-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results/Attic/wisconsin-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/ATIS-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/ATIS-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/ATIS-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/ATIS-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/ATIS-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/ATIS-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/ATIS-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/ATIS-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/RUN-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/RUN-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/RUN-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/RUN-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/RUN-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/RUN-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/RUN-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/big-tables-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/big-tables-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/big-tables-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/big-tables-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/big-tables-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/big-tables-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/big-tables-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/connect-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/connect-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/connect-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/connect-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/connect-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/connect-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/connect-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/create-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/create-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/create-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/create-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/create-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/create-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/create-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/insert-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/insert-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/insert-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/insert-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/insert-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/insert-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/insert-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/select-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/select-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/select-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/select-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/select-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/select-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/select-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/wisconsin-mysql-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/wisconsin-mysql-Linux_dynamic: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/wisconsin-mysql-Linux_pgcc: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/wisconsin-mysql-Linux_static: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/wisconsin-mysql_fast-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/wisconsin-mysql_local_tcp-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/Attic/wisconsin-mysql_new-Linux_2.0.33_i586: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/.cvsignore: Update of benchmarks sql-bench/Results-win32/ATIS-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/ATIS-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/RUN-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/RUN-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/alter-table-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/alter-table-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/big-tables-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/big-tables-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/connect-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/connect-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/create-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/create-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/insert-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/insert-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/select-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/select-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/wisconsin-access_odbc-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-win32/wisconsin-mysql-win98-cmp-access,mysql: Update of benchmarks sql-bench/Results-linux/RUN-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql-Linux_2.2.12_20smp_i686: ***MISSING WEAVE*** Docs/Images/Attic/mysql5.gif: Second copy Docs/Images/Attic/html-fs.gif: Moved to web...icons Docs/Images/Attic/mysql-01.gif: Moved to web...icons Docs/Images/Attic/mysql-02.gif: Moved to web...icons Docs/Images/Attic/mysql-03.gif: Moved to web...icons Docs/Images/Attic/mysql-04.gif: Moved to web...icons Docs/Images/Attic/mysql-05.gif: Moved to web...icons Docs/Images/Attic/mysql-06.gif: Moved to web...icons Docs/Images/Attic/mysql-07.gif: Moved to web...icons Docs/Images/Attic/mysql-08.gif: Moved to web...icons Docs/Images/Attic/mysql-09.gif: Moved to web...icons Docs/Images/Attic/mysql-10.gif: Moved to web...icons Docs/Images/Attic/mysql-11.gif: Moved to web...icons Docs/Images/Attic/mysql-12.gif: Moved to web...icons Docs/Images/Attic/mysql-13.gif: Moved to web...icons Docs/Images/Attic/mysql-14.gif: Moved to web...icons Docs/Images/Attic/mysql-15.gif: Moved to web...icons Docs/Images/Attic/mysql-16.gif: Moved to web...icons Docs/Images/Attic/mysql-17.gif: Moved to web...icons Docs/Images/Attic/mysql-18.gif: Moved to web...icons Docs/Images/Attic/mysql-19.gif: Moved to web...icons Docs/Images/Attic/mysql-compatible.jpg: Moved to web...icons Docs/Images/Attic/mysql_anim-01.gif: Moved to web...icons Docs/Images/Attic/mysql_anim-02.gif: Moved to web...icons Docs/Images/Attic/mysql_anim-03.gif: Moved to web...icons Docs/Images/Attic/mysql_anim-04.gif: Moved to web...icons Docs/Images/Attic/mysql_anim-05.gif: Moved to web...icons Docs/Images/Attic/mysql_anim-06.gif: Moved to web...icons Docs/Images/Attic/powered-by-MySQL-transparent.gif: Moved to web...icons scripts/mysql_zap.sh: Fixes from the Debian maintainer Build-tools/Do-patch-file: Update at work myisam/TODO: Fixes for raid + other things regex/utils.h: Renamed some portability defines heap/make-ccc: First version isam/make-ccc: First version merge/make-ccc: First version myisam/make-ccc: First version myisammrg/make-ccc: First version mysys/make-ccc: First version regex/make-ccc: First version strings/make-ccc: First version sql/share/romanian/errmsg.sys: ***MISSING WEAVE*** Docs/manual-license-spanish.texi: Update to 3.23.13 BUILD/test-alpha-ccc: Bug patches from mailing list sql-bench/Results-win32/ATIS-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/RUN-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/alter-table-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/big-tables-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/connect-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/create-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/insert-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/select-mysql-win98: Bug patches from mailing list sql-bench/Results-win32/wisconsin-mysql-win98: Bug patches from mailing list mit-pthreads/Changes-mysql: Updated for Linux mit-pthreads/config/config.h.in: Updated for Linux mit-pthreads/config/configure.in: Updated for Linux mit-pthreads/config/configure: Updated for Linux mit-pthreads/gen/ttyname.c: Updated for Linux mit-pthreads/machdep/syscall-i386-linux-2.0.S: Updated for Linux mit-pthreads/machdep/linux-2.0/__unistd.h: Updated for Linux mit-pthreads/net/Makefile.inc: Updated for Linux mit-pthreads/pthreads/fd.c: Updated for Linux mit-pthreads/pthreads/fd_kern.c: Updated for Linux mit-pthreads/pthreads/fd_sysv.c: Updated for Linux mit-pthreads/pthreads/signal.c: Updated for Linux mit-pthreads/pthreads/wrapper.c: Updated for Linux mit-pthreads/stdlib/getopt.c: Updated for Linux sql/share/charsets/cp1251.conf: Updates for 3.23.14 sql/share/charsets/croat.conf: Updates for 3.23.14 sql/share/charsets/danish.conf: Updates for 3.23.14 sql/share/charsets/dec8.conf: Updates for 3.23.14 sql/share/charsets/dos.conf: Updates for 3.23.14 sql/share/charsets/german1.conf: Updates for 3.23.14 sql/share/charsets/greek.conf: Updates for 3.23.14 sql/share/charsets/hebrew.conf: Updates for 3.23.14 sql/share/charsets/hp8.conf: Updates for 3.23.14 sql/share/charsets/hungarian.conf: Updates for 3.23.14 sql/share/charsets/koi8_ru.conf: Updates for 3.23.14 sql/share/charsets/koi8_ukr.conf: Updates for 3.23.14 sql/share/charsets/latin1.conf: Updates for 3.23.14 sql/share/charsets/latin2.conf: Updates for 3.23.14 sql/share/charsets/swe7.conf: Updates for 3.23.14 sql/share/charsets/usa7.conf: Updates for 3.23.14 sql/share/charsets/win1251.conf: Updates for 3.23.14 sql/share/charsets/win1251ukr.conf: Updates for 3.23.14 sql/Attic/mybinlogdump.cc: Fix for binary log include/Attic/m_ctype.h.in: Update for dynamic character sets strings/Attic/ct_init.c: Update for dynamic character sets strings/Attic/ctype-cp1251.c: Update for dynamic character sets strings/Attic/ctype-cp1257.c: Update for dynamic character sets strings/Attic/ctype-croat.c: Update for dynamic character sets strings/Attic/ctype-danish.c: Update for dynamic character sets strings/Attic/ctype-dec8.c: Update for dynamic character sets strings/Attic/ctype-dos.c: Update for dynamic character sets strings/Attic/ctype-estonia.c: Update for dynamic character sets strings/Attic/ctype-german1.c: Update for dynamic character sets strings/Attic/ctype-greek.c: Update for dynamic character sets strings/Attic/ctype-hebrew.c: Update for dynamic character sets strings/Attic/ctype-hp8.c: Update for dynamic character sets strings/Attic/ctype-hungarian.c: Update for dynamic character sets strings/Attic/ctype-koi8_ru.c: Update for dynamic character sets strings/Attic/ctype-koi8_ukr.c: Update for dynamic character sets strings/Attic/ctype-latin1.c: Update for dynamic character sets strings/Attic/ctype-latin2.c: Update for dynamic character sets strings/Attic/ctype-swe7.c: Update for dynamic character sets strings/Attic/ctype-usa7.c: Update for dynamic character sets strings/Attic/ctype-win1250.c: Update for dynamic character sets strings/Attic/ctype-win1251.c: Update for dynamic character sets strings/Attic/ctype-win1251ukr.c: Update for dynamic character sets mysys/.cvsignore: Update for dynamic character set handling client/Attic/libmysql.c: Update of new character sets. sql/share/charsets/Index: Update to 3.23.14 sql/share/charsets/README: Update to 3.23.14 sql/share/charsets/cp1257.conf: Update to 3.23.14 sql/share/charsets/estonia.conf: Update to 3.23.14 sql/share/charsets/win1250.conf: Update to 3.23.14 strings/.cvsignore: Update to 3.23.14 strings/Attic/bootstrap-ctype.c: Update to 3.23.14 strings/Attic/ctype.c.in: Update to 3.23.14 strings/ctype-ujis.c: Update to 3.23.14 BUILD/.cvsignore: Portability changes libmysql/.cvsignore: Portability changes mit-pthreads/GNUmakefile: Modifications to get MySQL 3.23.14 to build mit-pthreads/config.flags: ***MISSING WEAVE*** mit-pthreads/include/pthread/ac-types.h: Modifications to get MySQL 3.23.14 to build mit-pthreads/include/pthread/paths.h: Modifications to get MySQL 3.23.14 to build regex/main.c: Portability fixes sql/Attic/mini_client_errors.c: fixed up dependencies and symlinking in mini_client Build-tools/cvs-sanity-check: added a script to do a build from fresh CVS for sanity checking - make Tim, Tonu, and everybody else who has had problems with the stuff out of CVS not compiling happy include/t_ctype.h: Small updates by monty include/.cvsignore: Update to 3.23.15 include/mysql_version.h.in: Update to 3.23.15 isam/ChangeLog: Update to 3.23.15 sql-bench/limits/interbase.cfg: character sets patches + fix of order by sql-bench/Results-linux/ATIS-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/create-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/insert-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/select-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** Docs/net_doc.txt: Fixes for Win32 sql/share/Makefile.am: Update at work to get MySQL to configure include/Attic/mysql_com.h.in: Update of benchmarks and other small stuff sql-bench/Results-linux/ATIS-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/ATIS-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/connect-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/connect-interbase-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/create-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/insert-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/select-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql: ***MISSING WEAVE*** sql-bench/limits/mimer.cfg: Update of benchmarks and other small stuff sql/Attic/mini_client.c: Update to get Berkeley db to work. sql/Attic/net_serv.c: Update to get Berkeley db to work. sql/Attic/lex_hash.h: lex_hash.h is a pain in the neck for cvs diff scripts/mysql_convert_table_format.sh: Update for 3.23.16 include/getopt.h: Update for 3.23.16 Docs/Support/.cvsignore: Update for build scripts/mysqlhotcopy.sh: Update for 3.23.16 Docs/Attic/myisam.doc: Mirror addition, Broken Image fix, renamed myisam.doc -> myisam.txt (because it's really text. :). Docs/myisam.txt: Mirror addition, Broken Image fix, renamed myisam.doc -> myisam.txt (because it's really text. :). sql-bench/ChangeLog: Updates for 3.23.17 tests/big_record.pl: Updates for 3.23.17 tests/export.pl: Updates for 3.23.17 tests/fork2_test.pl: Updates for 3.23.17 tests/fork3_test.pl: Updates for 3.23.17 tests/fork_test.pl: Updates for 3.23.17 tests/grant.pl: Updates for 3.23.17 tests/insert_and_repair.pl: Updates for 3.23.17 tests/lock_test.pl: Updates for 3.23.17 tests/pmail.pl: Updates for 3.23.17 sql/.cvsignore: Update for 3.23.17 sql-bench/Results/Attic/ATIS-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/ATIS-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/ATIS-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/ATIS-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/ATIS-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/RUN-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/RUN-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/RUN-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/RUN-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/RUN-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/alter-table-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/alter-table-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/alter-table-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/alter-table-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/alter-table-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/big-tables-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/big-tables-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/big-tables-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/big-tables-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/big-tables-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/connect-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/connect-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/connect-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/connect-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/connect-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/create-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/create-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/create-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/create-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/create-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/insert-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/insert-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/insert-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/insert-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/insert-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/select-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/select-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/select-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/select-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/select-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/wisconsin-mysql-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/wisconsin-mysql-Linux_2.2.1_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/wisconsin-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/wisconsin-pg-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/Attic/wisconsin-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/ATIS-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/RUN-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/alter-table-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/big-tables-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/connect-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/create-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/insert-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/select-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/wisconsin-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** support-files/Attic/my-example.cnf.sh: Updates to 3.23.17 support-files/Attic/my-huge.cfg.sh: Update for 3.23.17 support-files/Attic/my-large.cfg.sh: Update for 3.23.17 support-files/Attic/my-medium.cfg.sh: Update for 3.23.17 support-files/Attic/my-small.cfg.sh: Update for 3.23.17 sql-bench/limits/pg.cfg: Updates to 3.23.17 support-files/my-small.cnf.sh: Updates to 3.23.17 dbug/dbug.c: update 3.23.17 for Monty mysys/getopt1.c: update 3.23.17 for Monty readline/complete.c: update 3.23.17 for Monty regex/regcomp.c: update 3.23.17 for Monty regex/regex2.h: update 3.23.17 for Monty regex/regexec.c: update 3.23.17 for Monty regex/regexp.c: update 3.23.17 for Monty sql-bench/Results/ATIS-mysql-win98: update 3.23.17 for Monty sql-bench/Results/RUN-mysql-win98: update 3.23.17 for Monty sql-bench/Results/alter-table-mysql-win98: update 3.23.17 for Monty sql-bench/Results/big-tables-mysql-win98: update 3.23.17 for Monty sql-bench/Results/connect-mysql-win98: update 3.23.17 for Monty sql-bench/Results/create-mysql-win98: update 3.23.17 for Monty sql-bench/Results/insert-mysql-win98: update 3.23.17 for Monty sql-bench/Results/select-mysql-win98: update 3.23.17 for Monty sql-bench/Results/wisconsin-mysql-win98: update 3.23.17 for Monty sql-bench/Results-linux/ATIS-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** tests/test_delayed_insert.pl: update 3.23.17 for Monty vio/Vio.h: update 3.23.17 for Monty vio/VioPipe.h: update 3.23.17 for Monty vio/violite.h: update 3.23.17 for Monty sql-bench/limits/access.cfg: Update for 3.23.17 sql-bench/limits/ms-sql.cfg: Update for 3.23.17 sql-bench/limits/oracle.cfg: Update for 3.23.17 BUILD/compile-alpha-ccc: Update to 3.23.18 BUILD/compile-alpha-debug: Update to 3.23.18 BUILD/compile-alpha: Update to 3.23.18 BUILD/compile-pentium-gcov: Update to 3.23.18 BUILD/compile-pentium-myodbc: Update to 3.23.18 BUILD/compile-pentium: Update to 3.23.18 BUILD/compile-solaris-sparc-purify: Update to 3.23.18 BUILD/compile-solaris-sparc: Update to 3.23.18 client/Attic/net.c: Update to 3.23.18 sql-bench/Results/ATIS-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/RUN-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/alter-table-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/big-tables-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/connect-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/create-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/insert-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/select-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results/wisconsin-mysql-Linux_2.2.14_i686_xeon: Update to 3.23.18 sql-bench/Results-linux/RUN-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** mysql-test/mybin/mysql-test_install_db: Initial checkin of mysql-test subdir. mysql-test/mysql-test-run: Quick commit before I checkout a new tree. Docs/Tutorial-MySQL-final.txt: Update for 3.23.19-beta Build-tools/Do-rpm: Fix of wrong CVS update sql-bench/Results/ATIS-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/RUN-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/alter-table-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/big-tables-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/connect-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/create-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/insert-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/select-mysql-NT_4.0: Fix of wrong CVS update sql-bench/Results/wisconsin-mysql-NT_4.0: Fix of wrong CVS update acconfig.h: Change of copyright to GPL/LGPL client/.cvsignore: Change of copyright to GPL/LGPL client/completion_hash.h: Change of copyright to GPL/LGPL client/connect_test.c: Change of copyright to GPL/LGPL client/errmsg.c: Change of copyright to GPL/LGPL client/insert_test.c: Change of copyright to GPL/LGPL client/list_test.c: Change of copyright to GPL/LGPL client/my_readline.h: Change of copyright to GPL/LGPL client/password.c: Change of copyright to GPL/LGPL client/readline.cc: Change of copyright to GPL/LGPL client/select_test.c: Change of copyright to GPL/LGPL client/showdb_test.c: Change of copyright to GPL/LGPL client/sql_string.cc: Change of copyright to GPL/LGPL client/sql_string.h: Change of copyright to GPL/LGPL client/ssl_test.c: Change of copyright to GPL/LGPL client/thread_test.c: Change of copyright to GPL/LGPL client/violite.c: Change of copyright to GPL/LGPL dbug/Makefile.am: Change of copyright to GPL/LGPL extra/comp_err.c: Change of copyright to GPL/LGPL extra/perror.c: Change of copyright to GPL/LGPL extra/replace.c: Change of copyright to GPL/LGPL extra/resolveip.c: Change of copyright to GPL/LGPL heap/Makefile.am: Change of copyright to GPL/LGPL heap/_check.c: Change of copyright to GPL/LGPL heap/_rectest.c: Change of copyright to GPL/LGPL heap/heapdef.h: Change of copyright to GPL/LGPL heap/hp_block.c: Change of copyright to GPL/LGPL heap/hp_clear.c: Change of copyright to GPL/LGPL heap/hp_close.c: Change of copyright to GPL/LGPL heap/hp_create.c: Change of copyright to GPL/LGPL heap/hp_delete.c: Change of copyright to GPL/LGPL heap/hp_extra.c: Change of copyright to GPL/LGPL heap/hp_hash.c: Change of copyright to GPL/LGPL heap/hp_info.c: Change of copyright to GPL/LGPL heap/hp_open.c: Change of copyright to GPL/LGPL heap/hp_panic.c: Change of copyright to GPL/LGPL heap/hp_rename.c: Change of copyright to GPL/LGPL heap/hp_rfirst.c: Change of copyright to GPL/LGPL heap/hp_rlast.c: Change of copyright to GPL/LGPL heap/hp_rnext.c: Change of copyright to GPL/LGPL heap/hp_rprev.c: Change of copyright to GPL/LGPL heap/hp_rrnd.c: Change of copyright to GPL/LGPL heap/hp_rsame.c: Change of copyright to GPL/LGPL heap/hp_scan.c: Change of copyright to GPL/LGPL heap/hp_static.c: Change of copyright to GPL/LGPL heap/hp_test1.c: Change of copyright to GPL/LGPL heap/hp_test2.c: Change of copyright to GPL/LGPL heap/hp_update.c: Change of copyright to GPL/LGPL heap/hp_write.c: Change of copyright to GPL/LGPL include/dbug.h: Change of copyright to GPL/LGPL include/hash.h: Change of copyright to GPL/LGPL include/heap.h: Change of copyright to GPL/LGPL include/m_ctype.h: Change of copyright to GPL/LGPL include/m_string.h: Change of copyright to GPL/LGPL include/merge.h: Change of copyright to GPL/LGPL include/my_alarm.h: Change of copyright to GPL/LGPL include/my_dir.h: Change of copyright to GPL/LGPL include/my_list.h: Change of copyright to GPL/LGPL include/my_net.h: Change of copyright to GPL/LGPL include/my_no_pthread.h: Change of copyright to GPL/LGPL include/my_nosys.h: Change of copyright to GPL/LGPL include/my_pthread.h: Change of copyright to GPL/LGPL include/my_sys.h: Change of copyright to GPL/LGPL include/my_tree.h: Change of copyright to GPL/LGPL include/myisammrg.h: Change of copyright to GPL/LGPL include/myisampack.h: Change of copyright to GPL/LGPL include/mysys_err.h: Change of copyright to GPL/LGPL include/nisam.h: Change of copyright to GPL/LGPL include/queues.h: Change of copyright to GPL/LGPL include/raid.h: Change of copyright to GPL/LGPL include/sslopt-case.h: Change of copyright to GPL/LGPL include/sslopt-longopts.h: Change of copyright to GPL/LGPL include/sslopt-usage.h: Change of copyright to GPL/LGPL include/sslopt-vars.h: Change of copyright to GPL/LGPL include/thr_alarm.h: Change of copyright to GPL/LGPL include/thr_lock.h: Change of copyright to GPL/LGPL include/violite.h: Change of copyright to GPL/LGPL isam/Makefile.am: Change of copyright to GPL/LGPL isam/_cache.c: Change of copyright to GPL/LGPL isam/_dynrec.c: Change of copyright to GPL/LGPL isam/_key.c: Change of copyright to GPL/LGPL isam/_locking.c: Change of copyright to GPL/LGPL isam/_packrec.c: Change of copyright to GPL/LGPL isam/_page.c: Change of copyright to GPL/LGPL isam/_search.c: Change of copyright to GPL/LGPL isam/_statrec.c: Change of copyright to GPL/LGPL isam/changed.c: Change of copyright to GPL/LGPL isam/close.c: Change of copyright to GPL/LGPL isam/create.c: Change of copyright to GPL/LGPL isam/delete.c: Change of copyright to GPL/LGPL isam/extra.c: Change of copyright to GPL/LGPL isam/isamchk.c: Change of copyright to GPL/LGPL isam/isamlog.c: Change of copyright to GPL/LGPL isam/log.c: Change of copyright to GPL/LGPL isam/open.c: Change of copyright to GPL/LGPL isam/pack_isam.c: Change of copyright to GPL/LGPL isam/panic.c: Change of copyright to GPL/LGPL isam/range.c: Change of copyright to GPL/LGPL isam/rfirst.c: Change of copyright to GPL/LGPL isam/rkey.c: Change of copyright to GPL/LGPL isam/rlast.c: Change of copyright to GPL/LGPL isam/rnext.c: Change of copyright to GPL/LGPL isam/rprev.c: Change of copyright to GPL/LGPL isam/rrnd.c: Change of copyright to GPL/LGPL isam/rsame.c: Change of copyright to GPL/LGPL isam/rsamepos.c: Change of copyright to GPL/LGPL isam/sort.c: Change of copyright to GPL/LGPL isam/static.c: Change of copyright to GPL/LGPL isam/test1.c: Change of copyright to GPL/LGPL isam/test3.c: Change of copyright to GPL/LGPL libmysql/Makefile.am: Change of copyright to GPL/LGPL libmysql/conf_to_src.c: Change of copyright to GPL/LGPL libmysql/dll.c: Change of copyright to GPL/LGPL libmysql/get_password.c: Change of copyright to GPL/LGPL libmysql/password.c: Change of copyright to GPL/LGPL libmysql/violite.c: Change of copyright to GPL/LGPL man/Makefile.am: Change of copyright to GPL/LGPL merge/Makefile.am: Change of copyright to GPL/LGPL merge/_locking.c: Change of copyright to GPL/LGPL merge/close.c: Change of copyright to GPL/LGPL merge/create.c: Change of copyright to GPL/LGPL merge/delete.c: Change of copyright to GPL/LGPL merge/extra.c: Change of copyright to GPL/LGPL merge/info.c: Change of copyright to GPL/LGPL merge/mrgdef.h: Change of copyright to GPL/LGPL merge/open.c: Change of copyright to GPL/LGPL merge/panic.c: Change of copyright to GPL/LGPL merge/rrnd.c: Change of copyright to GPL/LGPL merge/rsame.c: Change of copyright to GPL/LGPL merge/static.c: Change of copyright to GPL/LGPL merge/update.c: Change of copyright to GPL/LGPL myisam/ft_eval.c: Change of copyright to GPL/LGPL myisam/ft_eval.h: Change of copyright to GPL/LGPL myisam/ft_parser.c: Change of copyright to GPL/LGPL myisam/ft_static.c: Change of copyright to GPL/LGPL myisam/ft_stem.c: Change of copyright to GPL/LGPL myisam/ft_stopwords.c: Change of copyright to GPL/LGPL myisam/ft_test1.c: Change of copyright to GPL/LGPL myisam/ft_test1.h: Change of copyright to GPL/LGPL myisam/ftdefs.h: Change of copyright to GPL/LGPL myisam/fulltext.h: Change of copyright to GPL/LGPL myisam/mi_cache.c: Change of copyright to GPL/LGPL myisam/mi_changed.c: Change of copyright to GPL/LGPL myisam/mi_checksum.c: Change of copyright to GPL/LGPL myisam/mi_dbug.c: Change of copyright to GPL/LGPL myisam/mi_delete_all.c: Change of copyright to GPL/LGPL myisam/mi_delete_table.c: Change of copyright to GPL/LGPL myisam/mi_dynrec.c: Change of copyright to GPL/LGPL myisam/mi_info.c: Change of copyright to GPL/LGPL myisam/mi_key.c: Change of copyright to GPL/LGPL myisam/mi_packrec.c: Change of copyright to GPL/LGPL myisam/mi_page.c: Change of copyright to GPL/LGPL myisam/mi_range.c: Change of copyright to GPL/LGPL myisam/mi_rename.c: Change of copyright to GPL/LGPL myisam/mi_rfirst.c: Change of copyright to GPL/LGPL myisam/mi_rkey.c: Change of copyright to GPL/LGPL myisam/mi_rlast.c: Change of copyright to GPL/LGPL myisam/mi_rnext.c: Change of copyright to GPL/LGPL myisam/mi_rprev.c: Change of copyright to GPL/LGPL myisam/mi_rrnd.c: Change of copyright to GPL/LGPL myisam/mi_rsame.c: Change of copyright to GPL/LGPL myisam/mi_rsamepos.c: Change of copyright to GPL/LGPL myisam/mi_scan.c: Change of copyright to GPL/LGPL myisam/mi_static.c: Change of copyright to GPL/LGPL myisam/mi_statrec.c: Change of copyright to GPL/LGPL myisam/mi_test1.c: Change of copyright to GPL/LGPL myisam/mi_test2.c: Change of copyright to GPL/LGPL myisam/mi_test3.c: Change of copyright to GPL/LGPL myisam/mi_unique.c: Change of copyright to GPL/LGPL myisam/myisamlog.c: Change of copyright to GPL/LGPL myisam/sort.c: Change of copyright to GPL/LGPL myisammrg/Makefile.am: Change of copyright to GPL/LGPL myisammrg/mymrgdef.h: Change of copyright to GPL/LGPL myisammrg/myrg_close.c: Change of copyright to GPL/LGPL myisammrg/myrg_create.c: Change of copyright to GPL/LGPL myisammrg/myrg_delete.c: Change of copyright to GPL/LGPL myisammrg/myrg_extra.c: Change of copyright to GPL/LGPL myisammrg/myrg_info.c: Change of copyright to GPL/LGPL myisammrg/myrg_locking.c: Change of copyright to GPL/LGPL myisammrg/myrg_open.c: Change of copyright to GPL/LGPL myisammrg/myrg_panic.c: Change of copyright to GPL/LGPL myisammrg/myrg_rrnd.c: Change of copyright to GPL/LGPL myisammrg/myrg_rsame.c: Change of copyright to GPL/LGPL myisammrg/myrg_static.c: Change of copyright to GPL/LGPL myisammrg/myrg_update.c: Change of copyright to GPL/LGPL mysys/Makefile.am: Change of copyright to GPL/LGPL mysys/array.c: Change of copyright to GPL/LGPL mysys/charset.c: Change of copyright to GPL/LGPL mysys/checksum.c: Change of copyright to GPL/LGPL mysys/default.c: Change of copyright to GPL/LGPL mysys/errors.c: Change of copyright to GPL/LGPL mysys/getvar.c: Change of copyright to GPL/LGPL mysys/hash.c: Change of copyright to GPL/LGPL mysys/list.c: Change of copyright to GPL/LGPL mysys/make-conf.c: Change of copyright to GPL/LGPL mysys/mf_brkhant.c: Change of copyright to GPL/LGPL mysys/mf_cache.c: Change of copyright to GPL/LGPL mysys/mf_casecnv.c: Change of copyright to GPL/LGPL mysys/mf_dirname.c: Change of copyright to GPL/LGPL mysys/mf_fn_ext.c: Change of copyright to GPL/LGPL mysys/mf_format.c: Change of copyright to GPL/LGPL mysys/mf_getdate.c: Change of copyright to GPL/LGPL mysys/mf_iocache.c: Change of copyright to GPL/LGPL mysys/mf_keycache.c: Change of copyright to GPL/LGPL mysys/mf_loadpath.c: Change of copyright to GPL/LGPL mysys/mf_pack2.c: Change of copyright to GPL/LGPL mysys/mf_path.c: Change of copyright to GPL/LGPL mysys/mf_qsort.c: Change of copyright to GPL/LGPL mysys/mf_qsort2.c: Change of copyright to GPL/LGPL mysys/mf_radix.c: Change of copyright to GPL/LGPL mysys/mf_reccache.c: ***MISSING WEAVE*** mysys/mf_same.c: Change of copyright to GPL/LGPL mysys/mf_sleep.c: Change of copyright to GPL/LGPL mysys/mf_sort.c: Change of copyright to GPL/LGPL mysys/mf_soundex.c: Change of copyright to GPL/LGPL mysys/mf_stripp.c: Change of copyright to GPL/LGPL mysys/mf_unixpath.c: Change of copyright to GPL/LGPL mysys/mf_util.c: Change of copyright to GPL/LGPL mysys/mf_wcomp.c: Change of copyright to GPL/LGPL mysys/mf_wfile.c: Change of copyright to GPL/LGPL mysys/mulalloc.c: Change of copyright to GPL/LGPL mysys/my_alarm.c: Change of copyright to GPL/LGPL mysys/my_alloc.c: Change of copyright to GPL/LGPL mysys/my_append.c: Change of copyright to GPL/LGPL mysys/my_chsize.c: Change of copyright to GPL/LGPL mysys/my_clock.c: Change of copyright to GPL/LGPL mysys/my_compress.c: Change of copyright to GPL/LGPL mysys/my_copy.c: Change of copyright to GPL/LGPL mysys/my_create.c: Change of copyright to GPL/LGPL mysys/my_delete.c: Change of copyright to GPL/LGPL mysys/my_div.c: Change of copyright to GPL/LGPL mysys/my_error.c: Change of copyright to GPL/LGPL mysys/my_fopen.c: Change of copyright to GPL/LGPL mysys/my_fstream.c: Change of copyright to GPL/LGPL mysys/my_getwd.c: Change of copyright to GPL/LGPL mysys/my_init.c: Change of copyright to GPL/LGPL mysys/my_lib.c: Change of copyright to GPL/LGPL mysys/my_lock.c: Change of copyright to GPL/LGPL mysys/my_lockmem.c: Change of copyright to GPL/LGPL mysys/my_lread.c: Change of copyright to GPL/LGPL mysys/my_lwrite.c: Change of copyright to GPL/LGPL mysys/my_malloc.c: Change of copyright to GPL/LGPL mysys/my_messnc.c: Change of copyright to GPL/LGPL mysys/my_mkdir.c: Change of copyright to GPL/LGPL mysys/my_net.c: Change of copyright to GPL/LGPL mysys/my_once.c: Change of copyright to GPL/LGPL mysys/my_open.c: Change of copyright to GPL/LGPL mysys/my_pread.c: Change of copyright to GPL/LGPL mysys/my_pthread.c: Change of copyright to GPL/LGPL mysys/my_quick.c: Change of copyright to GPL/LGPL mysys/my_read.c: Change of copyright to GPL/LGPL mysys/my_realloc.c: Change of copyright to GPL/LGPL mysys/my_redel.c: Change of copyright to GPL/LGPL mysys/my_rename.c: Change of copyright to GPL/LGPL mysys/my_seek.c: Change of copyright to GPL/LGPL mysys/my_static.c: Change of copyright to GPL/LGPL mysys/my_static.h: Change of copyright to GPL/LGPL mysys/my_tempnam.c: Change of copyright to GPL/LGPL mysys/my_vsnprintf.c: Change of copyright to GPL/LGPL mysys/my_wincond.c: Change of copyright to GPL/LGPL mysys/my_winthread.c: Change of copyright to GPL/LGPL mysys/my_write.c: Change of copyright to GPL/LGPL mysys/mysys_priv.h: Change of copyright to GPL/LGPL mysys/ptr_cmp.c: Change of copyright to GPL/LGPL mysys/queues.c: Change of copyright to GPL/LGPL mysys/raid.cc: Change of copyright to GPL/LGPL mysys/safemalloc.c: Change of copyright to GPL/LGPL mysys/string.c: Change of copyright to GPL/LGPL mysys/test_charset.c: Change of copyright to GPL/LGPL mysys/test_dir.c: Change of copyright to GPL/LGPL mysys/test_fn.c: Change of copyright to GPL/LGPL mysys/test_vsnprintf.c: Change of copyright to GPL/LGPL mysys/testhash.c: Change of copyright to GPL/LGPL mysys/thr_alarm.c: Change of copyright to GPL/LGPL mysys/thr_lock.c: Change of copyright to GPL/LGPL mysys/thr_mutex.c: Change of copyright to GPL/LGPL mysys/thr_rwlock.c: Change of copyright to GPL/LGPL mysys/tree.c: Change of copyright to GPL/LGPL mysys/typelib.c: Change of copyright to GPL/LGPL regex/Makefile.am: Change of copyright to GPL/LGPL sql/cache_manager.cc: Change of copyright to GPL/LGPL sql/cache_manager.h: Change of copyright to GPL/LGPL sql/convert.cc: Change of copyright to GPL/LGPL sql/custom_conf.h: Change of copyright to GPL/LGPL sql/derror.cc: Change of copyright to GPL/LGPL sql/field_conv.cc: Change of copyright to GPL/LGPL sql/frm_crypt.cc: Change of copyright to GPL/LGPL sql/ha_heap.cc: Change of copyright to GPL/LGPL sql/ha_heap.h: Change of copyright to GPL/LGPL sql/ha_isam.cc: Change of copyright to GPL/LGPL sql/ha_isammrg.cc: Change of copyright to GPL/LGPL sql/hash_filo.cc: Change of copyright to GPL/LGPL sql/hash_filo.h: Change of copyright to GPL/LGPL sql/hostname.cc: Change of copyright to GPL/LGPL sql/init.cc: Change of copyright to GPL/LGPL sql/item_buff.cc: Change of copyright to GPL/LGPL sql/item_cmpfunc.h: Change of copyright to GPL/LGPL sql/item_create.cc: Change of copyright to GPL/LGPL sql/item_create.h: Change of copyright to GPL/LGPL sql/item_strfunc.cc: Change of copyright to GPL/LGPL sql/item_strfunc.h: Change of copyright to GPL/LGPL sql/item_sum.cc: Change of copyright to GPL/LGPL sql/item_sum.h: Change of copyright to GPL/LGPL sql/item_uniq.cc: Change of copyright to GPL/LGPL sql/item_uniq.h: Change of copyright to GPL/LGPL sql/key.cc: Change of copyright to GPL/LGPL sql/lex_symbol.h: Change of copyright to GPL/LGPL sql/lock.cc: Change of copyright to GPL/LGPL sql/matherr.c: Change of copyright to GPL/LGPL sql/mf_iocache.cc: Change of copyright to GPL/LGPL sql/mini_client.h: Change of copyright to GPL/LGPL sql/my_lock.c: Change of copyright to GPL/LGPL sql/opt_sum.cc: Change of copyright to GPL/LGPL sql/password.c: Change of copyright to GPL/LGPL sql/procedure.cc: Change of copyright to GPL/LGPL sql/procedure.h: Change of copyright to GPL/LGPL sql/sql_acl.h: Change of copyright to GPL/LGPL sql/sql_analyse.cc: Change of copyright to GPL/LGPL sql/sql_cache.cc: Change of copyright to GPL/LGPL sql/sql_crypt.cc: Change of copyright to GPL/LGPL sql/sql_crypt.h: Change of copyright to GPL/LGPL sql/sql_list.cc: Change of copyright to GPL/LGPL sql/sql_list.h: Change of copyright to GPL/LGPL sql/sql_map.cc: Change of copyright to GPL/LGPL sql/sql_map.h: Change of copyright to GPL/LGPL sql/sql_string.h: Change of copyright to GPL/LGPL sql/sql_test.cc: Change of copyright to GPL/LGPL sql/sql_udf.cc: Change of copyright to GPL/LGPL sql/sql_udf.h: Change of copyright to GPL/LGPL sql/thr_malloc.cc: Change of copyright to GPL/LGPL sql/udf_example.cc: Change of copyright to GPL/LGPL sql/unireg.cc: Change of copyright to GPL/LGPL sql/unireg.h: Change of copyright to GPL/LGPL sql/violite.c: Change of copyright to GPL/LGPL sql-bench/Makefile.am: Change of copyright to GPL/LGPL sql-bench/bench-init.pl.sh: Change of copyright to GPL/LGPL sql-bench/copy-db.sh: Change of copyright to GPL/LGPL sql-bench/run-all-tests.sh: Change of copyright to GPL/LGPL sql-bench/server-cfg.sh: Change of copyright to GPL/LGPL sql-bench/test-ATIS.sh: Change of copyright to GPL/LGPL sql-bench/test-alter-table.sh: Change of copyright to GPL/LGPL sql-bench/test-big-tables.sh: Change of copyright to GPL/LGPL sql-bench/test-connect.sh: Change of copyright to GPL/LGPL sql-bench/test-create.sh: Change of copyright to GPL/LGPL sql-bench/test-insert.sh: Change of copyright to GPL/LGPL sql-bench/test-select.sh: Change of copyright to GPL/LGPL sql-bench/test-wisconsin.sh: Change of copyright to GPL/LGPL sql-bench/Results/ATIS-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/ATIS-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/RUN-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/RUN-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/RUN-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/RUN-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/alter-table-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/alter-table-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/big-tables-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/big-tables-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/connect-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/connect-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/connect-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/connect-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/create-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/create-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/create-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/create-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/insert-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/insert-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/insert-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/select-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/select-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/select-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/wisconsin-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg: ***MISSING WEAVE*** strings/Makefile.am: Change of copyright to GPL/LGPL strings/README: Change of copyright to GPL/LGPL strings/atof.c: Change of copyright to GPL/LGPL strings/bchange.c: Change of copyright to GPL/LGPL strings/bcmp.c: Change of copyright to GPL/LGPL strings/bcopy-duff.c: Change of copyright to GPL/LGPL strings/bmove512.c: Change of copyright to GPL/LGPL strings/bmove_upp-sparc.s: Change of copyright to GPL/LGPL strings/bmove_upp.c: Change of copyright to GPL/LGPL strings/conf_to_src.c: Change of copyright to GPL/LGPL strings/ctype-big5.c: Change of copyright to GPL/LGPL strings/ctype-euc_kr.c: Change of copyright to GPL/LGPL strings/ctype-gb2312.c: Change of copyright to GPL/LGPL strings/ctype-sjis.c: Change of copyright to GPL/LGPL strings/ctype.c: Change of copyright to GPL/LGPL strings/do_ctype.c: Change of copyright to GPL/LGPL strings/int2str.c: Change of copyright to GPL/LGPL strings/is_prefix.c: Change of copyright to GPL/LGPL strings/llstr.c: Change of copyright to GPL/LGPL strings/longlong2str-x86.s: Change of copyright to GPL/LGPL strings/longlong2str.c: Change of copyright to GPL/LGPL strings/macros.asm: Change of copyright to GPL/LGPL strings/memcmp.c: Change of copyright to GPL/LGPL strings/memcpy.c: Change of copyright to GPL/LGPL strings/ptr_cmp.asm: Change of copyright to GPL/LGPL strings/str2int.c: Change of copyright to GPL/LGPL strings/str_test.c: Change of copyright to GPL/LGPL strings/strappend-sparc.s: Change of copyright to GPL/LGPL strings/strappend.c: Change of copyright to GPL/LGPL strings/strcend.c: Change of copyright to GPL/LGPL strings/strcont.c: Change of copyright to GPL/LGPL strings/strend-sparc.s: Change of copyright to GPL/LGPL strings/strfill.c: Change of copyright to GPL/LGPL strings/strings-x86.s: Change of copyright to GPL/LGPL strings/strings.asm: Change of copyright to GPL/LGPL strings/strinstr-sparc.s: Change of copyright to GPL/LGPL strings/strinstr.c: Change of copyright to GPL/LGPL strings/strmake-sparc.s: Change of copyright to GPL/LGPL strings/strmake.c: Change of copyright to GPL/LGPL strings/strmov-sparc.s: Change of copyright to GPL/LGPL strings/strmov.c: Change of copyright to GPL/LGPL strings/strnmov-sparc.s: Change of copyright to GPL/LGPL strings/strnmov.c: Change of copyright to GPL/LGPL strings/strstr-sparc.s: Change of copyright to GPL/LGPL strings/strto.c: Change of copyright to GPL/LGPL strings/strtol.c: Change of copyright to GPL/LGPL strings/strtoll.c: Change of copyright to GPL/LGPL strings/strtoul.c: Change of copyright to GPL/LGPL strings/strtoull.c: Change of copyright to GPL/LGPL strings/strxmov-sparc.s: Change of copyright to GPL/LGPL strings/strxmov.asm: Change of copyright to GPL/LGPL strings/udiv.c: Change of copyright to GPL/LGPL support-files/Makefile.am: Change of copyright to GPL/LGPL tests/Makefile.am: Change of copyright to GPL/LGPL vio/Makefile.am: Change of copyright to GPL/LGPL isam/.cvsignore: Updates for 3.23.19 myisam/.cvsignore: Updates for 3.23.19 sql-bench/Results/insert-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/select-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_5.0_i686: ***MISSING WEAVE*** sql/sql_analyse.h: Fix bug when memory wasn't freed sql/mysqlbinlog.cc: Small fixes sql/share/romanian/errmsg.txt: ***MISSING WEAVE*** include/mysql_com.h: Replication update/LOAD TABLE FROM MASTER + other fixes client/mysql-test.c: ***MISSING WEAVE*** myisam/Attic/ft_global.h: This file is now in include/ extra/Attic/print_defaults.c: Updates for text search + ORDER BY extra/Makefile.am: Updates for text search + ORDER BY extra/my_print_defaults.c: Updates for text search + ORDER BY include/mysqld_error.h: Updates for text search + ORDER BY sql/item_cmpfunc.cc: Updates for text search + ORDER BY sql/opt_range.h: Updates for text search + ORDER BY sql/sql_lex.cc: Updates for text search + ORDER BY sql-bench/crash-me.sh: Updates for text search + ORDER BY sql-bench/limits/mysql.cfg: Updates for text search + ORDER BY sql/share/czech/errmsg.sys: Updates for text search + ORDER BY sql/share/czech/errmsg.txt: Updates for text search + ORDER BY sql/share/danish/errmsg.sys: Updates for text search + ORDER BY sql/share/danish/errmsg.txt: Updates for text search + ORDER BY sql/share/dutch/errmsg.sys: Updates for text search + ORDER BY sql/share/dutch/errmsg.txt: Updates for text search + ORDER BY sql/share/english/errmsg.sys: Updates for text search + ORDER BY sql/share/english/errmsg.txt: Updates for text search + ORDER BY sql/share/estonia/errmsg.sys: Updates for text search + ORDER BY sql/share/estonia/errmsg.txt: Updates for text search + ORDER BY sql/share/french/errmsg.sys: Updates for text search + ORDER BY sql/share/french/errmsg.txt: Updates for text search + ORDER BY sql/share/german/errmsg.sys: Updates for text search + ORDER BY sql/share/german/errmsg.txt: Updates for text search + ORDER BY sql/share/greek/errmsg.sys: Updates for text search + ORDER BY sql/share/greek/errmsg.txt: Updates for text search + ORDER BY sql/share/hungarian/errmsg.sys: Updates for text search + ORDER BY sql/share/hungarian/errmsg.txt: Updates for text search + ORDER BY sql/share/japanese/errmsg.sys: Updates for text search + ORDER BY sql/share/japanese/errmsg.txt: Updates for text search + ORDER BY sql/share/korean/errmsg.sys: Updates for text search + ORDER BY sql/share/korean/errmsg.txt: Updates for text search + ORDER BY sql/share/norwegian/errmsg.txt: Updates for text search + ORDER BY sql/share/norwegian-ny/errmsg.txt: Updates for text search + ORDER BY sql/share/polish/errmsg.sys: Updates for text search + ORDER BY sql/share/polish/errmsg.txt: Updates for text search + ORDER BY sql/share/portuguese/errmsg.sys: Updates for text search + ORDER BY sql/share/portuguese/errmsg.txt: Updates for text search + ORDER BY sql/share/romania/errmsg.sys: Updates for text search + ORDER BY sql/share/romania/errmsg.txt: Updates for text search + ORDER BY sql/share/russian/errmsg.sys: Updates for text search + ORDER BY sql/share/russian/errmsg.txt: Updates for text search + ORDER BY sql/share/slovak/errmsg.sys: Updates for text search + ORDER BY sql/share/slovak/errmsg.txt: Updates for text search + ORDER BY sql/share/spanish/errmsg.sys: Updates for text search + ORDER BY sql/share/spanish/errmsg.txt: Updates for text search + ORDER BY sql/share/swedish/errmsg.OLD: Updates for text search + ORDER BY sql/share/swedish/errmsg.sys: Updates for text search + ORDER BY sql/share/swedish/errmsg.txt: Updates for text search + ORDER BY support-files/mysql.server-sys5.sh: Updates for text search + ORDER BY extra/.cvsignore: Fix for update + BDB tables isam/_dbug.c: Fix for update + BDB tables myisam/mi_delete.c: Fix for update + BDB tables myisam/mi_rnext_same.c: Fix for update + BDB tables myisam/mi_search.c: Fix for update + BDB tables sql/table.cc: Fix of core dump bugs myisam/Makefile.am: Aded missing file sql/ha_berkeley.h: Fix DELETE FROM table_name problem Build-tools/Do-all-build-steps: Update to final 3.23.20 Build-tools/mysql-copyright-2: Update to final 3.23.20 Build-tools/mysql-copyright: Update to final 3.23.20 Docs/.cvsignore: Update to final 3.23.20 scripts/make_binary_distribution.sh: Update to final 3.23.20 Docs/internals.texi: Fix of licenses issues. sql/ha_isam.h: Added patch by Sergei for MATCH + some bug fixes. sql/ha_isammrg.h: Added patch by Sergei for MATCH + some bug fixes. sql/ha_myisammrg.h: Added patch by Sergei for MATCH + some bug fixes. myisam/ft_search.c: Fix of portability bug include/ft_global.h: Fix of portability bug sql/log_event.cc: One more safety fix sql/log_event.h: One more safety fix isam/test2.c: Update to 3.23.21 isam/update.c: Update to 3.23.21 myisam/ChangeLog: Update to 3.23.21 myisam/mi_test_all.sh: Update to 3.23.21 myisam/mi_update.c: Update to 3.23.21 myisam/mi_write.c: Update to 3.23.21 scripts/.cvsignore: Update to 3.23.21 scripts/mysql_config.sh: Update to 3.23.21 sql/filesort.cc: Update to 3.23.21 Docs/Support/texi2html: removed NOSAVE attrib from TABLE tags, non-standard HTML. include/Attic/config-win32.h: Made update log ASCII 0 safe myisam/mi_test_all: ***MISSING WEAVE*** sql/sql_acl.cc: Made update log ASCII 0 safe sql/sql_db.cc: Made update log ASCII 0 safe sql/sql_delete.cc: Made update log ASCII 0 safe sql/sql_insert.cc: Made update log ASCII 0 safe sql/sql_load.cc: Made update log ASCII 0 safe sql/sql_select.h: Made update log ASCII 0 safe sql/sql_update.cc: Made update log ASCII 0 safe sql/table.h: Made update log ASCII 0 safe strings/ctype-czech.c: Made update log ASCII 0 safe support-files/maxsql.spec.sh: Made update log ASCII 0 safe client/mysqlimport.c: Update to 3.23.21 client/mysqlshow.c: Update to 3.23.21 include/mysql.h: Added mysql_character_set_name() mit-pthreads/net/gethostname.c: Added mysql_character_set_name() scripts/Makefile.am: Added mysql_character_set_name() client/Makefile.am: portability fixes scripts/mysql_install_db.sh: portability fixes support-files/mysql.spec.sh: Added mysql_config config.h.in: ***MISSING WEAVE*** client/mysqldump.c: Small fixes heap/hp_rkey.c: Small fixes sql-bench/compare-results.sh: Small fixes tests/mail_to_db.pl: Small fixes acinclude.m4: Configure updates for 3.23.22 BUILD/compile-pentium-debug: Configure updates for 3.23.22 Docs/Makefile.am: Configure updates for 3.23.22 client/get_password.c: Configure updates for 3.23.22 client/mysqladmin.c: Configure updates for 3.23.22 include/Makefile.am: Configure updates for 3.23.22 include/my_global.h: ***MISSING WEAVE*** isam/info.c: Configure updates for 3.23.22 isam/isamdef.h: Configure updates for 3.23.22 isam/write.c: Configure updates for 3.23.22 sql/records.cc: Configure updates for 3.23.22 sql-bench/print-limit-table: Configure updates for 3.23.22 sql-bench/limits/mysql-3.23.cfg: Configure updates for 3.23.22 support-files/my-huge.cnf.sh: Configure updates for 3.23.22 support-files/my-large.cnf.sh: Configure updates for 3.23.22 support-files/my-medium.cnf.sh: Configure updates for 3.23.22 myisam/ft_update.c: This is to make ft-code to ignore keyseg.length at all and to index the whole VARCHAR/BLOB instead... Makefile.am: Fixed gen_lex_hash recursion myisam/myisampack.c: Fixes for 3.23.22 sql/ChangeLog: Fixes for 3.23.22 sql/nt_servc.cc: Fixes for 3.23.22 sql/sql_class.cc: Fixes for 3.23.22 include/my_base.h: Fix for BDB and MERGE tables sql/ha_myisammrg.cc: Fix for BDB and MERGE tables Docs/LICENSE: Update for 3.23.22 config.sub: Update for ia64 Build-tools/Do-compile-all: ***MISSING WEAVE*** scripts/safe_mysqld.sh: Small bug fixes for 3.23.22 support-files/.cvsignore: Small bug fixes for 3.23.22 scripts/mysql_find_rows.sh: Critical bug fixes sql/sql_class.h: SHOW SLAVE STATUS, change in SHOW MASTER STATUS repl-tests/include/master-slave.inc: Replication test cases repl-tests/test-dump/run.test: Replication test cases repl-tests/test-dump/table-dump-check.master: Replication test cases repl-tests/test-dump/table-dump-select.master: Replication test cases repl-tests/test-repl-ts/repl-timestamp.master: Replication test cases repl-tests/test-repl-ts/run.test: Replication test cases repl-tests/test-repl/foo-dump-master.master: Replication test cases repl-tests/test-repl/foo-dump-slave.master: Replication test cases repl-tests/test-repl/run.test: Replication test cases repl-tests/test-repl/sum-wlen-master.master: Replication test cases repl-tests/test-repl/sum-wlen-slave.master: Replication test cases Images/.cvsignore: Update of div reported bugs include/config-win.h: Update of div reported bugs mysys/mf_pack.c: Update of div reported bugs sql/field.cc: Update of div reported bugs sql/field.h: Update of div reported bugs sql/ha_myisam.h: Update of div reported bugs sql/handler.h: Update of div reported bugs sql/item.cc: Update of div reported bugs sql/item_func.h: Update of div reported bugs sql/item_timefunc.cc: Update of div reported bugs sql/item_timefunc.h: Update of div reported bugs sql/sql_string.cc: Update of div reported bugs sql/sql_table.cc: Update of div reported bugs sql/structs.h: Update of div reported bugs sql/time.cc: Update of div reported bugs strings/ctype-gbk.c: Update of div reported bugs strings/ctype-tis620.c: Update of div reported bugs strings/r_strinstr.c: Update of div reported bugs strings/strnlen.c: Update of div reported bugs support-files/mysql.server.sh: Update of div reported bugs myisam/mi_locking.c: Small bug fixes myisam/myisamdef.h: Small bug fixes mysys/my_thr_init.c: Small bug fixes myisam/mi_close.c: Changed mutex THR_lock_isam -> THR_lock_myisam myisam/mi_create.c: Changed mutex THR_lock_isam -> THR_lock_myisam myisam/mi_extra.c: Changed mutex THR_lock_isam -> THR_lock_myisam myisam/mi_log.c: Changed mutex THR_lock_isam -> THR_lock_myisam myisam/mi_open.c: Changed mutex THR_lock_isam -> THR_lock_myisam myisam/mi_panic.c: Changed mutex THR_lock_isam -> THR_lock_myisam myisam/myisamchk.c: Changed mutex THR_lock_isam -> THR_lock_myisam sql/item_func.cc: Don't let MySQL use ft-keys in non-ft way sql/opt_range.cc: Don't let MySQL use ft-keys in non-ft way sql-bench/Results-linux/ATIS-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql/share/italian/errmsg.sys: new translated error messages sql/share/italian/errmsg.txt: new translated error messages libmysql/errmsg.c: Fix to get 'Too big packet' error + fixes for Ia64 libmysql/libmysql.c: Fix to get 'Too big packet' error + fixes for Ia64 libmysql/net.c: Fix to get 'Too big packet' error + fixes for Ia64 include/errmsg.h: Fix to get 'Too big packet' mysql.proj: Update for 3.23.22 client/mysql.cc: Fix for rehash on reconnect (By Jeremey) readline/rlstdc.h: portability fixes sql/Makefile.am: Hack to force lex_hash.h to be generated sql/ha_berkeley.cc: Fixes for Berekely DB sql/handler.cc: Fixes for Berekely DB sql/item.h: Small fixes for 3.23.22 sql/net_serv.cc: Small fixes for 3.23.22 client/completion_hash.cc: Fixes for Ia64 sql/mini_client.cc: Fixes for Ia64 sql/sql_select.cc: Fixes for Ia64 .cvsignore: Update at work for release myisam/mi_check.c: Fix bug in ANALYZE TABLE sql/ha_myisam.cc: Fix bug in ANALYZE TABLE include/myisam.h: Fix bug in ANALYZE TABLE configure.in: Fix for AIX 4.3 Build-tools/Do-compile: Fix for local perl libraries sql/sql_show.cc: Fix for show processlist on SCO include/global.h: Fix for AIX 4.3 BUILD/compile-ia64-O0-sgicc: Last minute updates for 3.23.22 BUILD/compile-ia64-O0: Last minute updates for 3.23.22 BUILD/compile-ia64-O2-sgicc: Last minute updates for 3.23.22 BUILD/compile-ia64-O2: Last minute updates for 3.23.22 BUILD/compile-ia64-O6: Last minute updates for 3.23.22 Docs/manual.texi: Added paragraph in introduction pointing to SQL and MySQL books, for newbies. sql/gen_lex_hash.cc: CHANGE MASTER TO and other fixes sql/lex.h: CHANGE MASTER TO and other fixes sql/log.cc: CHANGE MASTER TO and other fixes sql/mysql_priv.h: CHANGE MASTER TO and other fixes sql/mysqld.cc: CHANGE MASTER TO and other fixes sql/net_pkg.cc: CHANGE MASTER TO and other fixes sql/slave.cc: CHANGE MASTER TO and other fixes sql/sql_base.cc: CHANGE MASTER TO and other fixes sql/sql_lex.h: CHANGE MASTER TO and other fixes sql/sql_parse.cc: CHANGE MASTER TO and other fixes sql/sql_yacc.yy: CHANGE MASTER TO and other fixes
3443 lines
101 KiB
Bash
Executable File
3443 lines
101 KiB
Bash
Executable File
#!@PERL@
|
|
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Library General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Library General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Library General Public
|
|
# License along with this library; if not, write to the Free
|
|
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
|
# MA 02111-1307, USA
|
|
|
|
# Written by Monty for the TCX/Monty Program/Detron benchmark suite.
|
|
# Empress and PostgreSQL patches by Luuk de Boer
|
|
# Extensions for ANSI SQL and Mimer by Bengt Gunne
|
|
# Some additions and corrections by Matthias Urlich
|
|
#
|
|
# This programs tries to find all limits for a sql server
|
|
# It gets the name from what it does to most servers :)
|
|
#
|
|
# Be sure to use --help before running this!
|
|
#
|
|
# If you want to add support for another server, add a new package for the
|
|
# server in server-cfg. You only have to support the 'new' and 'version'
|
|
# functions. new doesn't need to have any limits if one doesn't want to
|
|
# use the benchmarks.
|
|
#
|
|
|
|
# TODO:
|
|
# CMT includes types and functions which are synonyms for other types
|
|
# and functions, including those in SQL9x. It should label those synonyms
|
|
# as such, and clarify ones such as "mediumint" with comments such as
|
|
# "3-byte int" or "same as xxx".
|
|
|
|
|
|
$version="1.47";
|
|
|
|
use DBI;
|
|
use Getopt::Long;
|
|
chomp($pwd = `pwd`); $pwd = "." if ($pwd eq '');
|
|
require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n";
|
|
|
|
$opt_server="mysql"; $opt_host="localhost"; $opt_database="test";
|
|
$opt_dir="limits";
|
|
$opt_debug=$opt_help=$opt_Information=$opt_restart=$opt_force=$opt_quick=0;
|
|
$opt_log_all_queries=$opt_fix_limit_file=$opt_batch_mode=0;
|
|
$opt_db_start_cmd=""; # the db server start command
|
|
$opt_sleep=10; # time to sleep while starting the db server
|
|
$limit_changed=0; # For configure file
|
|
$reconnect_count=0;
|
|
$opt_comment=$opt_config_file=$opt_log_queries_to_file="";
|
|
$limits{'crash_me_safe'}='yes';
|
|
$prompts{'crash_me_safe'}='crash me safe';
|
|
$limits{'operating_system'}= machine();
|
|
$prompts{'operating_system'}='crash-me tested on';
|
|
$retry_limit=3;
|
|
|
|
GetOptions("Information","help","server=s","debug","user=s","password=s","database=s","restart","force","quick","log-all-queries","comment=s","host=s","fix-limit-file","dir=s","db-start-cmd=s","sleep=s","batch-mode","config-file=s","log-queries-to-file=s") || usage();
|
|
usage() if ($opt_help || $opt_Information);
|
|
|
|
$opt_config_file="$pwd/$opt_dir/$opt_server.cfg" if (length($opt_config_file) == 0);
|
|
|
|
if ($opt_fix_limit_file)
|
|
{
|
|
print "Fixing limit file for $opt_server\n";
|
|
read_config_data();
|
|
$limit_changed=1;
|
|
save_all_config_data();
|
|
exit 0;
|
|
}
|
|
|
|
$server=get_server($opt_server,$opt_host,$opt_database);
|
|
$opt_server=$server->{'cmp_name'};
|
|
|
|
$|=1; # For debugging
|
|
|
|
print "Running $0 $version on '",($server_version=$server->version()),"'\n\n";
|
|
print "I hope you didn't have anything important running on this server....\n";
|
|
read_config_data();
|
|
if ($limit_changed) # Must have been restarted
|
|
{
|
|
save_config_data('crash_me_safe','no',"crash me safe");
|
|
}
|
|
|
|
if (!$opt_force && !$opt_batch_mode)
|
|
{
|
|
server_info();
|
|
}
|
|
else
|
|
{
|
|
print "Using --force. I assume you know what you are doing...\n";
|
|
}
|
|
print "\n";
|
|
|
|
save_config_data('crash_me_version',$version,"crash me version");
|
|
if ($server_version)
|
|
{
|
|
save_config_data('server_version',$server_version,"server version");
|
|
}
|
|
if (length($opt_comment))
|
|
{
|
|
save_config_data('user_comment',$opt_comment,"comment");
|
|
}
|
|
|
|
$opt_log=0;
|
|
if (length($opt_log_queries_to_file))
|
|
{
|
|
open(LOG,">$opt_log_queries_to_file") || die "Can't open file $opt_log_queries_to_file\n";
|
|
$opt_log=1;
|
|
}
|
|
|
|
#
|
|
# Set up some limits that's regared as unlimited
|
|
# We don't want to take up all resources from the server...
|
|
#
|
|
|
|
$max_connections="+1000"; # Number of simultaneous connections
|
|
$max_buffer_size="+16000000"; # size of communication buffer.
|
|
$max_string_size="+8000000"; # Enough for this test
|
|
$max_name_length="+512"; # Actually 256, but ...
|
|
$max_keys="+64"; # Probably too big.
|
|
$max_join_tables="+64"; # Probably too big.
|
|
$max_columns="+8192"; # Probably too big.
|
|
$max_row_length=$max_string_size;
|
|
$max_key_length="+8192"; # Big enough
|
|
$max_order_by="+64"; # Big enough
|
|
$max_expressions="+10000";
|
|
$max_big_expressions="+100";
|
|
$max_stacked_expressions="+2000";
|
|
$query_size=$max_buffer_size;
|
|
$longreadlen=16000000; # For retrieval buffer
|
|
|
|
#
|
|
# First do some checks that needed for the rest of the benchmark
|
|
#
|
|
use sigtrap; # Must be removed with perl5.005_2 on Win98
|
|
$SIG{PIPE} = 'IGNORE';
|
|
$SIG{SEGV} = sub {warn('SEGFAULT')};
|
|
$dbh=safe_connect();
|
|
$dbh->do("drop table crash_me"); # Remove old run
|
|
$dbh->do("drop table crash_me2"); # Remove old run
|
|
$dbh->do("drop table crash_me3"); # Remove old run
|
|
$dbh->do("drop table crash_q"); # Remove old run
|
|
$dbh->do("drop table crash_q1"); # Remove old run
|
|
|
|
$prompt="Tables without primary key";
|
|
if (!safe_query(["create table crash_me (a integer not null,b char(10) not null)",
|
|
"insert into crash_me (a,b) values (1,'a')"]))
|
|
{
|
|
if (!safe_query(["create table crash_me (a integer not null,b char(10) not null, primary key (a))",
|
|
"insert into crash_me (a,b) values (1,'a')"]))
|
|
{
|
|
die "Can't create table 'crash_me' with one record: $DBI::errstr\n";
|
|
}
|
|
save_config_data('no_primary_key',"no",$prompt);
|
|
}
|
|
else
|
|
{
|
|
save_config_data('no_primary_key',"yes",$prompt);
|
|
}
|
|
#
|
|
# Define strings for character NULL and numeric NULL used in expressions
|
|
#
|
|
$char_null=$server->{'char_null'};
|
|
$numeric_null=$server->{'numeric_null'};
|
|
if ($char_null eq '')
|
|
{
|
|
$char_null="NULL";
|
|
}
|
|
if ($numeric_null eq '')
|
|
{
|
|
$numeric_null="NULL";
|
|
}
|
|
|
|
print "$prompt: $limits{'no_primary_key'}\n";
|
|
|
|
report("SELECT without FROM",'select_without_from',"select 1");
|
|
if ($limits{'select_without_from'} ne "yes")
|
|
{
|
|
$end_query=" from crash_me";
|
|
$check_connect="select a from crash_me";
|
|
}
|
|
else
|
|
{
|
|
$end_query="";
|
|
$check_connect="select 1";
|
|
}
|
|
|
|
assert($check_connect);
|
|
assert("select a from crash_me where b<'b'");
|
|
|
|
report("Select constants",'select_constants',"select 1 $end_query");
|
|
report("Select table_name.*",'table_wildcard',
|
|
"select crash_me.* from crash_me");
|
|
report("Allows \' and \" as string markers",'quote_with_"',
|
|
'select a from crash_me where b<"c"');
|
|
check_and_report("Double '' as ' in strings",'double_quotes',[],
|
|
"select 'Walker''s' $end_query",[],"Walker's",1);
|
|
check_and_report("Multiple line strings","multi_strings",[],
|
|
"select a from crash_me where b < 'a'\n'b'",[],"1",0);
|
|
check_and_report("\" as identifier quote (ANSI SQL)",'quote_ident_with_"',[],
|
|
'select "A" from crash_me',[],"1",0);
|
|
check_and_report("\` as identifier quote",'quote_ident_with_`',[],
|
|
'select `A` from crash_me',[],"1",0);
|
|
check_and_report("[] as identifier quote",'quote_ident_with_[',[],
|
|
'select [A] from crash_me',[],"1",0);
|
|
|
|
report("Column alias","column_alias","select a as ab from crash_me");
|
|
report("Table alias","table_alias","select b.a from crash_me as b");
|
|
report("Functions",'functions',"select 1+1 $end_query");
|
|
report("Group functions",'group_functions',"select count(*) from crash_me");
|
|
report("Group functions with distinct",'group_distinct_functions',
|
|
"select count(distinct a) from crash_me");
|
|
report("Group by",'group_by',"select a from crash_me group by a");
|
|
report("Group by position",'group_by_position',
|
|
"select a from crash_me group by 1");
|
|
report("Group by alias",'group_by_alias',
|
|
"select a as ab from crash_me group by ab");
|
|
report("Order by",'order_by',"select a from crash_me order by a");
|
|
report("Order by position",'order_by_position',
|
|
"select a from crash_me order by 1");
|
|
report("Order by function","order_by_function",
|
|
"select a from crash_me order by a+1");
|
|
check_and_report("Order by DESC is remembered",'order_by_remember_desc',
|
|
["create table crash_q (s int,s1 int)",
|
|
"insert into crash_q values(1,1)",
|
|
"insert into crash_q values(3,1)",
|
|
"insert into crash_q values(2,1)"],
|
|
"select s,s1 from crash_q order by s1 DESC,s",
|
|
["drop table crash_q"],[3,2,1],7,undef(),3);
|
|
report("Compute",'compute',
|
|
"select a from crash_me order by a compute sum(a) by a");
|
|
report("Value lists in INSERT",'multi_value_insert',
|
|
"create table crash_q (s char(10))",
|
|
"insert into crash_q values ('a'),('b')",
|
|
"drop table crash_q");
|
|
report("INSERT with set syntax",'insert_with_set',
|
|
"create table crash_q (a integer)",
|
|
"insert into crash_q SET a=1",
|
|
"drop table crash_q");
|
|
report("allows end ';'","end_colon", "select * from crash_me;");
|
|
try_and_report("LIMIT number of rows","select_limit",
|
|
["with LIMIT",
|
|
"select * from crash_me limit 1"],
|
|
["with TOP",
|
|
"select TOP 1 * from crash_me"]);
|
|
report("SELECT with LIMIT #,#","select_limit2", "select * from crash_me limit 1,1");
|
|
|
|
# The following alter table commands MUST be kept together!
|
|
if ($dbh->do("create table crash_q (a integer, b integer,c CHAR(10))"))
|
|
{
|
|
report("Alter table add column",'alter_add_col',
|
|
"alter table crash_q add d integer");
|
|
report_one("Alter table add many columns",'alter_add_multi_col',
|
|
[["alter table crash_q add (f integer,g integer)","yes"],
|
|
["alter table crash_q add f integer, add g integer","with add"],
|
|
["alter table crash_q add f integer,g integer","without add"]] );
|
|
report("Alter table change column",'alter_change_col',
|
|
"alter table crash_q change a e char(50)");
|
|
|
|
# informix can only change data type with modify
|
|
report_one("Alter table modify column",'alter_modify_col',
|
|
[["alter table crash_q modify c CHAR(20)","yes"],
|
|
["alter table crash_q alter c CHAR(20)","with alter"]]);
|
|
report("Alter table alter column default",'alter_alter_col',
|
|
"alter table crash_q alter b set default 10",
|
|
"alter table crash_q alter b set default NULL");
|
|
report("Alter table drop column",'alter_drop_col',
|
|
"alter table crash_q drop column b");
|
|
report("Alter table rename table",'alter_rename_table',
|
|
"alter table crash_q rename to crash_q1");
|
|
}
|
|
# Make sure both tables will be dropped, even if rename fails.
|
|
$dbh->do("drop table crash_q1");
|
|
$dbh->do("drop table crash_q");
|
|
|
|
if ($dbh->do("create table crash_q (a integer, b integer,c CHAR(10))") &&
|
|
$dbh->do("create table crash_q1 (a integer, b integer,c CHAR(10) not null)"))
|
|
{
|
|
report("Alter table add constraint",'alter_add_constraint',
|
|
"alter table crash_q add constraint c1 check(a > b)");
|
|
report("Alter table drop constraint",'alter_drop_constraint',
|
|
"alter table crash_q drop constraint c1");
|
|
report("Alter table add unique",'alter_add_unique',
|
|
"alter table crash_q add constraint u1 unique(c)");
|
|
try_and_report("Alter table drop unique",'alter_drop_unique',
|
|
["with constraint",
|
|
"alter table crash_q drop constraint u1"],
|
|
["with drop key",
|
|
"alter table crash_q drop key c"]);
|
|
try_and_report("Alter table add primary key",'alter_add_primary_key',
|
|
["with constraint",
|
|
"alter table crash_q1 add constraint p1 primary key(c)"],
|
|
["with add primary key",
|
|
"alter table crash_q1 add primary key(c)"]);
|
|
report("Alter table add foreign key",'alter_add_foreign_key',
|
|
"alter table crash_q add constraint f1 foreign key(c) references crash_q1(c)");
|
|
try_and_report("Alter table drop foreign key",'alter_drop_foreign_key',
|
|
["with drop constraint",
|
|
"alter table crash_q drop constraint f1"],
|
|
["with drop foreign key",
|
|
"alter table crash_q drop foreign key f1"]);
|
|
try_and_report("Alter table drop primary key",'alter_drop_primary_key',
|
|
["drop constraint",
|
|
"alter table crash_q1 drop constraint p1 restrict"],
|
|
["drop primary key",
|
|
"alter table crash_q1 drop primary key"]);
|
|
}
|
|
$dbh->do("drop table crash_q");
|
|
$dbh->do("drop table crash_q1");
|
|
|
|
check_and_report("case insensitive compare","case_insensitive_strings",
|
|
[],"select b from crash_me where b = 'A'",[],'a',1);
|
|
check_and_report("ignore end space in compare","ignore_end_space",
|
|
[],"select b from crash_me where b = 'a '",[],'a',1);
|
|
check_and_report("group on column with null values",'group_by_null',
|
|
["create table crash_q (s char(10))",
|
|
"insert into crash_q values(null)",
|
|
"insert into crash_q values(null)"],
|
|
"select count(*) from crash_q group by s",
|
|
["drop table crash_q"],2,0);
|
|
|
|
$prompt="Having";
|
|
if (!defined($limits{'having'}))
|
|
{ # Complicated because of postgreSQL
|
|
if (!safe_query_result("select a from crash_me group by a having a > 0",1,0))
|
|
{
|
|
if (!safe_query_result("select a from crash_me group by a having a < 0",
|
|
1,0))
|
|
{ save_config_data("having","error",$prompt); }
|
|
else
|
|
{ save_config_data("having","yes",$prompt); }
|
|
}
|
|
else
|
|
{ save_config_data("having","no",$prompt); }
|
|
}
|
|
print "$prompt: $limits{'having'}\n";
|
|
|
|
if ($limits{'having'} eq 'yes')
|
|
{
|
|
report("Having with group function","having_with_group",
|
|
"select a from crash_me group by a having count(*) = 1");
|
|
}
|
|
|
|
if ($limits{'column_alias'} eq 'yes')
|
|
{
|
|
report("Order by alias",'order_by_alias',
|
|
"select a as ab from crash_me order by ab");
|
|
if ($limits{'having'} eq 'yes')
|
|
{
|
|
report("Having on alias","having_with_alias",
|
|
"select a as ab from crash_me group by a having ab > 0");
|
|
}
|
|
}
|
|
report("binary numbers (0b1001)","binary_numbers","select 0b1001 $end_query");
|
|
report("hex numbers (0x41)","hex_numbers","select 0x41 $end_query");
|
|
report("binary strings (b'0110')","binary_strings","select b'0110' $end_query");
|
|
report("hex strings (x'1ace')","hex_strings","select x'1ace' $end_query");
|
|
|
|
report_result("Value of logical operation (1=1)","logical_value",
|
|
"select (1=1) $end_query");
|
|
|
|
$logical_value= $limits{'logical_value'};
|
|
|
|
$false=0;
|
|
$result="no";
|
|
if ($res=safe_query("select (1=1)=true $end_query")) {
|
|
$false="false";
|
|
$result="yes";
|
|
}
|
|
save_config_data('has_true_false',$result,"TRUE and FALSE");
|
|
|
|
#
|
|
# Check how many connections the server can handle:
|
|
# We can't test unlimited connections, because this may take down the
|
|
# server...
|
|
#
|
|
|
|
$prompt="Simultaneous connections (installation default)";
|
|
print "$prompt: ";
|
|
if (defined($limits{'connections'}))
|
|
{
|
|
print "$limits{'connections'}\n";
|
|
}
|
|
else
|
|
{
|
|
@connect=($dbh);
|
|
|
|
for ($i=1; $i < $max_connections ; $i++)
|
|
{
|
|
if (!($dbh=DBI->connect($server->{'data_source'},$opt_user,$opt_password,
|
|
{ PrintError => 0})))
|
|
{
|
|
print "Last connect error: $DBI::errstr\n" if ($opt_debug);
|
|
last;
|
|
}
|
|
$dbh->{LongReadLen}= $longreadlen; # Set retrieval buffer
|
|
print "." if ($opt_debug);
|
|
push(@connect,$dbh);
|
|
}
|
|
print "$i\n";
|
|
save_config_data('connections',$i,$prompt);
|
|
foreach $dbh (@connect)
|
|
{
|
|
print "#" if ($opt_debug);
|
|
$dbh->disconnect || warn $dbh->errstr; # close connection
|
|
}
|
|
|
|
$#connect=-1; # Free connections
|
|
|
|
if ($i == 0)
|
|
{
|
|
print "Can't connect to server: $DBI::errstr. Please start it and try again\n";
|
|
exit 1;
|
|
}
|
|
$dbh=safe_connect();
|
|
}
|
|
|
|
|
|
#
|
|
# Check size of communication buffer, strings...
|
|
#
|
|
|
|
$prompt="query size";
|
|
print "$prompt: ";
|
|
if (!defined($limits{'query_size'}))
|
|
{
|
|
$query="select ";
|
|
$first=64;
|
|
$end=$max_buffer_size;
|
|
$select= $limits{'select_without_from'} eq 'yes' ? 1 : 'a';
|
|
|
|
assert($query . "$select$end_query");
|
|
|
|
$first=$limits{'restart'}{'low'} if ($limits{'restart'}{'low'});
|
|
|
|
if ($limits{'restart'}{'tohigh'})
|
|
{
|
|
$end = $limits{'restart'}{'tohigh'} - 1;
|
|
print "\nRestarting this with low limit: $first and high limit: $end\n";
|
|
delete $limits{'restart'};
|
|
$first=$first+int(($end-$first+4)/5); # Prefere lower on errors
|
|
}
|
|
for ($i=$first ; $i < $end ; $i*=2)
|
|
{
|
|
last if (!safe_query($query . (" " x ($i - length($query)-length($end_query) -1)) . "$select$end_query"));
|
|
$first=$i;
|
|
save_config_data("restart",$i,"") if ($opt_restart);
|
|
}
|
|
$end=$i;
|
|
|
|
if ($i < $max_buffer_size)
|
|
{
|
|
while ($first != $end)
|
|
{
|
|
$i=int(($first+$end+1)/2);
|
|
if (safe_query($query .
|
|
(" " x ($i - length($query)-length($end_query) -1)) .
|
|
"$select$end_query"))
|
|
{
|
|
$first=$i;
|
|
}
|
|
else
|
|
{
|
|
$end=$i-1;
|
|
}
|
|
}
|
|
}
|
|
save_config_data('query_size',$end,$prompt);
|
|
}
|
|
$query_size=$limits{'query_size'};
|
|
|
|
print "$limits{'query_size'}\n";
|
|
#
|
|
# Test database types
|
|
#
|
|
|
|
@sql_types=("character(1)","char(1)","char varying(1)", "character varying(1)",
|
|
"boolean",
|
|
"varchar(1)",
|
|
"integer","int","smallint",
|
|
"numeric(9,2)","decimal(6,2)","dec(6,2)",
|
|
"bit", "bit(2)","bit varying(2)","float","float(8)","real",
|
|
"double precision", "date","time","timestamp",
|
|
"interval year", "interval year to month",
|
|
"interval month",
|
|
"interval day", "interval day to hour", "interval day to minute",
|
|
"interval day to second",
|
|
"interval hour", "interval hour to minute", "interval hour to second",
|
|
"interval minute", "interval minute to second",
|
|
"interval second",
|
|
"national character varying(20)",
|
|
"national character(20)","nchar(1)",
|
|
"national char varying(20)","nchar varying(20)",
|
|
"national character varying(20)",
|
|
"timestamp with time zone");
|
|
@odbc_types=("binary(1)","varbinary(1)","tinyint","bigint",
|
|
"datetime");
|
|
@extra_types=("blob","byte","long varbinary","image","text","text(10)",
|
|
"mediumtext",
|
|
"long varchar(1)", "varchar2(257)",
|
|
"mediumint","middleint","int unsigned",
|
|
"int1","int2","int3","int4","int8","uint",
|
|
"money","smallmoney","float4","float8","smallfloat",
|
|
"float(6,2)","double",
|
|
"enum('red')","set('red')", "int(5) zerofill", "serial",
|
|
"char(10) binary","int not null auto_increment,unique(q)",
|
|
"abstime","year","datetime","smalldatetime","timespan","reltime",
|
|
# Sybase types
|
|
"int not null identity,unique(q)",
|
|
# postgres types
|
|
"box","bool","circle","polygon","point","line","lseg","path",
|
|
"interval", "serial", "inet", "cidr", "macaddr",
|
|
|
|
# oracle types
|
|
"varchar2(16)","nvarchar2(16)","number(9,2)","number(9)",
|
|
"number", "long","raw(16)","long raw","rowid","mlslabel","clob",
|
|
"nclob","bfile"
|
|
);
|
|
|
|
@types=(["sql",\@sql_types],
|
|
["odbc",\@odbc_types],
|
|
["extra",\@extra_types]);
|
|
|
|
foreach $types (@types)
|
|
{
|
|
print "\nSupported $types->[0] types\n";
|
|
$tmp=@$types->[1];
|
|
foreach $use_type (@$tmp)
|
|
{
|
|
$type=$use_type;
|
|
$type =~ s/\(.*\)/(1 arg)/;
|
|
if (index($use_type,",")>= 0)
|
|
{
|
|
$type =~ s/\(1 arg\)/(2 arg)/;
|
|
}
|
|
if (($tmp2=index($type,",unique")) >= 0)
|
|
{
|
|
$type=substr($type,0,$tmp2);
|
|
}
|
|
$tmp2=$type;
|
|
$tmp2 =~ s/ /_/g;
|
|
$tmp2 =~ s/_not_null//g;
|
|
report("Type $type","type_$types->[0]_$tmp2",
|
|
"create table crash_q (q $use_type)",
|
|
"drop table crash_q");
|
|
}
|
|
}
|
|
|
|
#
|
|
# Test some type limits
|
|
#
|
|
|
|
check_and_report("Remembers end space in char()","remember_end_space",
|
|
["create table crash_q (a char(10))",
|
|
"insert into crash_q values('hello ')"],
|
|
"select a from crash_q where a = 'hello '",
|
|
["drop table crash_q"],
|
|
'hello ',6);
|
|
|
|
check_and_report("Remembers end space in varchar()",
|
|
"remember_end_space_varchar",
|
|
["create table crash_q (a varchar(10))",
|
|
"insert into crash_q values('hello ')"],
|
|
"select a from crash_q where a = 'hello '",
|
|
["drop table crash_q"],
|
|
'hello ',6);
|
|
|
|
check_and_report("Supports 0000-00-00 dates","date_zero",
|
|
["create table crash_me2 (a date not null)",
|
|
"insert into crash_me2 values ('0000-00-00')"],
|
|
"select a from crash_me2",
|
|
["drop table crash_me2"],
|
|
"0000-00-00",1);
|
|
|
|
check_and_report("Supports 0001-01-01 dates","date_one",
|
|
["create table crash_me2 (a date not null)",
|
|
"insert into crash_me2 values (DATE '0001-01-01')"],
|
|
"select a from crash_me2",
|
|
["drop table crash_me2"],
|
|
"0001-01-01",1);
|
|
|
|
check_and_report("Supports 9999-12-31 dates","date_last",
|
|
["create table crash_me2 (a date not null)",
|
|
"insert into crash_me2 values (DATE '9999-12-31')"],
|
|
"select a from crash_me2",
|
|
["drop table crash_me2"],
|
|
"9999-12-31",1);
|
|
|
|
check_and_report("Supports 'infinity dates","date_infinity",
|
|
["create table crash_me2 (a date not null)",
|
|
"insert into crash_me2 values ('infinity')"],
|
|
"select a from crash_me2",
|
|
["drop table crash_me2"],
|
|
"infinity",1);
|
|
|
|
if (!defined($limits{'date_with_YY'}))
|
|
{
|
|
check_and_report("Supports YY-MM-DD dates","date_with_YY",
|
|
["create table crash_me2 (a date not null)",
|
|
"insert into crash_me2 values ('98-03-03')"],
|
|
"select a from crash_me2",
|
|
["drop table crash_me2"],
|
|
"1998-03-03",5);
|
|
if ($limits{'date_with_YY'} eq "yes")
|
|
{
|
|
undef($limits{'date_with_YY'});
|
|
check_and_report("Supports YY-MM-DD 2000 compilant dates",
|
|
"date_with_YY",
|
|
["create table crash_me2 (a date not null)",
|
|
"insert into crash_me2 values ('10-03-03')"],
|
|
"select a from crash_me2",
|
|
["drop table crash_me2"],
|
|
"2010-03-03",5);
|
|
}
|
|
}
|
|
|
|
if (($limits{'type_extra_float(2_arg)'} eq "yes" ||
|
|
$limits{'type_sql_decimal(2_arg)'} eq "yes") &&
|
|
(!defined($limits{'storage_of_float'})))
|
|
{
|
|
my $type=$limits{'type_extra_float(2_arg)'} eq "yes" ? "float(4,1)" :
|
|
"decimal(4,1)";
|
|
my $result="undefined";
|
|
if (execute_and_check(["create table crash_q (q1 $type)",
|
|
"insert into crash_q values(1.14)"],
|
|
"select q1 from crash_q",
|
|
["drop table crash_q"],1.1,0) &&
|
|
execute_and_check(["create table crash_q (q1 $type)",
|
|
"insert into crash_q values(1.16)"],
|
|
"select q1 from crash_q",
|
|
["drop table crash_q"],1.1,0))
|
|
{
|
|
$result="truncate";
|
|
}
|
|
elsif (execute_and_check(["create table crash_q (q1 $type)",
|
|
"insert into crash_q values(1.14)"],
|
|
"select q1 from crash_q",
|
|
["drop table crash_q"],1.1,0) &&
|
|
execute_and_check(["create table crash_q (q1 $type)",
|
|
"insert into crash_q values(1.16)"],
|
|
"select q1 from crash_q",
|
|
["drop table crash_q"],1.2,0))
|
|
{
|
|
$result="round";
|
|
}
|
|
elsif (execute_and_check(["create table crash_q (q1 $type)",
|
|
"insert into crash_q values(1.14)"],
|
|
"select q1 from crash_q",
|
|
["drop table crash_q"],1.14,0) &&
|
|
execute_and_check(["create table crash_q (q1 $type)",
|
|
"insert into crash_q values(1.16)"],
|
|
"select q1 from crash_q",
|
|
["drop table crash_q"],1.16,0))
|
|
{
|
|
$result="exact";
|
|
}
|
|
$prompt="Storage of float values";
|
|
print "$prompt: $result\n";
|
|
save_config_data("storage_of_float", $result, $prompt);
|
|
}
|
|
|
|
try_and_report("Type for row id", "rowid",
|
|
["rowid",
|
|
"create table crash_q (a rowid)","drop table crash_q"],
|
|
["auto_increment",
|
|
"create table crash_q (a int not null auto_increment, primary key(a))","drop table crash_q"],
|
|
["oid",
|
|
"create table crash_q (a oid, primary key(a))","drop table crash_q"],
|
|
["serial",
|
|
"create table crash_q (a serial, primary key(a))","drop table crash_q"]);
|
|
|
|
try_and_report("Automatic rowid", "automatic_rowid",
|
|
["_rowid",
|
|
"create table crash_q (a int not null, primary key(a))",
|
|
"insert into crash_q values (1)",
|
|
"select _rowid from crash_q",
|
|
"drop table crash_q"]);
|
|
|
|
#
|
|
# Test functions
|
|
#
|
|
|
|
@sql_functions=
|
|
(["+, -, * and /","+","5*3-4/2+1",14,0],
|
|
["ANSI SQL SUBSTRING","substring","substring('abcd' from 2 for 2)","bc",1],
|
|
["BIT_LENGTH","bit_length","bit_length('abc')",24,0],
|
|
["searched CASE","searched_case","case when 1 > 2 then 'false' when 2 > 1 then 'true' end", "true",1],
|
|
["simple CASE","simple_case","case 2 when 1 then 'false' when 2 then 'true' end", "true",1],
|
|
["CAST","cast","CAST(1 as CHAR)","1",1],
|
|
["CHARACTER_LENGTH","character_length","character_length('abcd')","4",0],
|
|
["CHAR_LENGTH","char_length","char_length(b)","10",0],
|
|
["CHAR_LENGTH(constant)","char_length(constant)","char_length('abcd')","4",0],
|
|
["COALESCE","coalesce","coalesce($char_null,'bcd','qwe')","bcd",1],
|
|
["CURRENT_DATE","current_date","current_date",0,2],
|
|
["CURRENT_TIME","current_time","current_time",0,2],
|
|
["CURRENT_TIMESTAMP","current_timestamp","current_timestamp",0,2],
|
|
["CURRENT_USER","current_user","current_user",0,2],
|
|
["EXTRACT","extract_sql","extract(minute from timestamp '2000-02-23 18:43:12.987')",43,0],
|
|
["LOCALTIME","localtime","localtime",0,2],
|
|
["LOCALTIMESTAMP","localtimestamp","localtimestamp",0,2],
|
|
["LOWER","lower","LOWER('ABC')","abc",1],
|
|
["NULLIF with strings","nullif_string","NULLIF(NULLIF('first','second'),'first')",undef(),4],
|
|
["NULLIF with numbers","nullif_num","NULLIF(NULLIF(1,2),1)",undef(),4],
|
|
["OCTET_LENGTH","octet_length","octet_length('abc')",3,0],
|
|
["POSITION","position","position('ll' in 'hello')",3,0],
|
|
["SESSION_USER","session_user","session_user",0,2],
|
|
["SYSTEM_USER","system_user","system_user",0,2],
|
|
["TRIM","trim","trim(trailing from trim(LEADING FROM ' abc '))","abc",3],
|
|
["UPPER","upper","UPPER('abc')","ABC",1],
|
|
["USER","user","user"],
|
|
["concatenation with ||","concat_as_||","'abc' || 'def'","abcdef",1],
|
|
);
|
|
|
|
@odbc_functions=
|
|
(["ASCII", "ascii", "ASCII('A')","65",0],
|
|
["CHAR", "char", "CHAR(65)" ,"A",1],
|
|
["CONCAT(2 arg)","concat", "concat('a','b')","ab",1],
|
|
["DIFFERENCE()","difference","difference('abc','abe')",0,2],
|
|
["INSERT","insert","insert('abcd',2,2,'ef')","aefd",1],
|
|
["LEFT","left","left('abcd',2)","ab",1],
|
|
["LTRIM","ltrim","ltrim(' abcd')","abcd",1],
|
|
["REAL LENGTH","length","length('abcd ')","5",0],
|
|
["ODBC LENGTH","length_without_space","length('abcd ')","4",0],
|
|
["LOCATE(2 arg)","locate_2","locate('bcd','abcd')","2",0],
|
|
["LOCATE(3 arg)","locate_3","locate('bcd','abcd',3)","0",0],
|
|
["LCASE","lcase","lcase('ABC')","abc",1],
|
|
["REPEAT","repeat","repeat('ab',3)","ababab",1],
|
|
["REPLACE","replace","replace('abbaab','ab','ba')","bababa",1],
|
|
["RIGHT","right","right('abcd',2)","cd",1],
|
|
["RTRIM","rtrim","rtrim(' abcd ')"," abcd",1],
|
|
["SPACE","space","space(5)"," ",3],
|
|
["SOUNDEX","soundex","soundex('hello')",0,2],
|
|
["ODBC SUBSTRING","substring","substring('abcd',3,2)","cd",1],
|
|
["UCASE","ucase","ucase('abc')","ABC",1],
|
|
|
|
["ABS","abs","abs(-5)",5,0],
|
|
["ACOS","acos","acos(0)","1.570796",0],
|
|
["ASIN","asin","asin(1)","1.570796",0],
|
|
["ATAN","atan","atan(1)","0.785398",0],
|
|
["ATAN2","atan2","atan2(1,0)","1.570796",0],
|
|
["CEILING","ceiling","ceiling(-4.5)",-4,0],
|
|
["COS","cos","cos(0)","1.00000",0],
|
|
["COT","cot","cot(1)","0.64209262",0],
|
|
["DEGREES","degrees","degrees(6.283185)","360",0],
|
|
["EXP","exp","exp(1)","2.718282",0],
|
|
["FLOOR","floor","floor(2.5)","2",0],
|
|
["LOG","log","log(2)","0.693147",0],
|
|
["LOG10","log10","log10(10)","1",0],
|
|
["MOD","mod","mod(11,7)","4",0],
|
|
["PI","pi","pi()","3.141593",0],
|
|
["POWER","power","power(2,4)","16",0],
|
|
["RAND","rand","rand(1)",0,2], # Any value is acceptable
|
|
["RADIANS","radians","radians(360)","6.283185",0],
|
|
["ROUND(2 arg)","round","round(5.63,2)","5.6",0],
|
|
["SIGN","sign","sign(-5)",-1,0],
|
|
["SIN","sin","sin(1)","0.841471",0],
|
|
["SQRT","sqrt","sqrt(4)",2,0],
|
|
["TAN","tan","tan(1)","1.557408",0],
|
|
["TRUNCATE","truncate","truncate(18.18,-1)",10,0],
|
|
["NOW","now","now()",0,2], # Any value is acceptable
|
|
["CURDATE","curdate","curdate()",0,2],
|
|
["DAYNAME","dayname","dayname(DATE '1997-02-01')","",2],
|
|
["MONTH","month","month(DATE '1997-02-01')","",2],
|
|
["MONTHNAME","monthname","monthname(DATE '1997-02-01')","",2],
|
|
["DAYOFMONTH","dayofmonth","dayofmonth(DATE '1997-02-01')",1,0],
|
|
["DAYOFWEEK","dayofweek","dayofweek(DATE '1997-02-01')",7,0],
|
|
["DAYOFYEAR","dayofyear","dayofyear(DATE '1997-02-01')",32,0],
|
|
["QUARTER","quarter","quarter(DATE '1997-02-01')",1,0],
|
|
["WEEK","week","week(DATE '1997-02-01')",5,0],
|
|
["YEAR","year","year(DATE '1997-02-01')",1997,0],
|
|
["CURTIME","curtime","curtime()",0,2],
|
|
["HOUR","hour","hour('12:13:14')",12,0],
|
|
["ANSI HOUR","hour_time","hour(TIME '12:13:14')",12,0],
|
|
["MINUTE","minute","minute('12:13:14')",13,0],
|
|
["SECOND","second","second('12:13:14')",14,0],
|
|
["TIMESTAMPADD","timestampadd",
|
|
"timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00')",
|
|
"1997-01-01 00:00:01",1],
|
|
["TIMESTAMPDIFF","timestampdiff",
|
|
"timestampdiff(SQL_TSI_SECOND,'1997-01-01 00:00:02', '1997-01-01 00:00:01')","1",0],
|
|
["USER()","user()","user()",0,2],
|
|
["DATABASE","database","database()",0,2],
|
|
["IFNULL","ifnull","ifnull(2,3)",2,0],
|
|
["ODBC syntax LEFT & RIGHT", "fn_left",
|
|
"{ fn LEFT( { fn RIGHT('abcd',2) },1) }","c",1],
|
|
);
|
|
|
|
@extra_functions=
|
|
(
|
|
["& (bitwise and)",'&',"5 & 3",1,0],
|
|
["| (bitwise or)",'|',"1 | 2",3,0],
|
|
["<< and >> (bitwise shifts)",'binary_shifts',"(1 << 4) >> 2",4,0],
|
|
["<> in SELECT","<>","1<>1","0",0],
|
|
["=","=","(1=1)",1,$logical_value],
|
|
["~* (case insensitive compare)","~*","'hi' ~* 'HI'",1,$logical_value],
|
|
["ADD_MONTHS","add_months","add_months('1997-01-01',1)","1997-02-01",0], # oracle the date plus n months
|
|
["AND and OR in SELECT","and_or","1=1 AND 2=2",$logical_value,0],
|
|
["AND as '&&'",'&&',"1=1 && 2=2",$logical_value,0],
|
|
["ASCII_CHAR", "ascii_char", "ASCII_CHAR(65)","A",1],
|
|
["ASCII_CODE", "ascii_code", "ASCII_CODE('A')","65",0],
|
|
["ATN2","atn2","atn2(1,0)","1.570796",0],
|
|
["BETWEEN in SELECT","between","5 between 4 and 6",$logical_value,0],
|
|
["BIT_COUNT","bit_count","bit_count(5)",2,0],
|
|
["CEIL","ceil","ceil(-4.5)",-4,0], # oracle
|
|
["CHARINDEX","charindex","charindex('a','crash')",3,0],
|
|
["CHR", "chr", "CHR(65)" ,"A",1], # oracle
|
|
["CONCAT(list)","concat_list", "concat('a','b','c','d')","abcd",1],
|
|
["CONVERT","convert","convert(CHAR,5)","5",1],
|
|
["COSH","cosh","cosh(0)","1",0], # oracle hyperbolic cosine of n.
|
|
["DATEADD","dateadd","dateadd(day,3,'Nov 30 1997')",0,2],
|
|
["DATEDIFF","datediff","datediff(month,'Oct 21 1997','Nov 30 1997')",0,2],
|
|
["DATENAME","datename","datename(month,'Nov 30 1997')",0,2],
|
|
["DATEPART","datepart","datepart(month,'July 20 1997')",0,2],
|
|
["DATE_FORMAT","date_format", "date_format('1997-01-02 03:04:05','M W D Y y m d h i s w')", 0,2],
|
|
["ELT","elt","elt(2,'ONE','TWO','THREE')","TWO",1],
|
|
["ENCRYPT","encrypt","encrypt('hello')",0,2],
|
|
["FIELD","field","field('IBM','NCA','ICL','SUN','IBM','DIGITAL')",4,0],
|
|
["FORMAT","format","format(1234.5555,2)","1,234.56",1],
|
|
["FROM_DAYS","from_days","from_days(729024)","1996-01-01",1],
|
|
["FROM_UNIXTIME","from_unixtime","from_unixtime(0)",0,2],
|
|
["GETDATE","getdate","getdate()",0,2],
|
|
["GREATEST","greatest","greatest('HARRY','HARRIOT','HAROLD')","HARRY",1], # oracle
|
|
["IF","if", "if(5,6,7)",6,0],
|
|
["IN on numbers in SELECT","in_num","2 in (3,2,5,9,5,1)",$logical_value,0],
|
|
["IN on strings in SELECT","in_str","'monty' in ('david','monty','allan')", $logical_value,0],
|
|
["INITCAP","initcap","initcap('the soap')","The Soap",1], # oracle Returns char, with the first letter of each word in uppercase
|
|
["INSTR (Oracle syntax)", "instr_oracle", "INSTR('CORPORATE FLOOR','OR',3,2)" ,"14",0], # oracle instring
|
|
["INSTRB", "instrb", "INSTRB('CORPORATE FLOOR','OR',5,2)" ,"27",0], # oracle instring in bytes
|
|
["INTERVAL","interval","interval(55,10,20,30,40,50,60,70,80,90,100)",5,0],
|
|
["LAST_DAY","last_day","last_day('1997-04-01')","1997-04-30",0], # oracle last day of month of date
|
|
["LAST_INSERT_ID","last_insert_id","last_insert_id()",0,2],
|
|
["LEAST","least","least('HARRY','HARRIOT','HAROLD')","HAROLD",1], # oracle
|
|
["LENGTHB","lengthb","lengthb('CANDIDE')","14",0], # oracle length in bytes
|
|
["LIKE ESCAPE in SELECT","like_escape","'%' like 'a%' escape 'a'",$logical_value,0],
|
|
["LIKE in SELECT","like","'a' like 'a%'",$logical_value,0],
|
|
["LN","ln","ln(95)","4.55387689",0], # oracle natural logarithm of n
|
|
["LOCATE as INSTR","instr","instr('hello','ll')",3,0],
|
|
["LOG(m,n)","log(m_n)","log(10,100)","2",0], # oracle logarithm, base m, of n
|
|
["LOGN","logn","logn(2)","0.693147",0], # informix
|
|
["LPAD","lpad","lpad('hi',4,'??')",'??hi',3],
|
|
["MDY","mdy","mdy(7,1,1998)","1998-07-01",0], # informix
|
|
["MOD as %","%","10%7","3",0],
|
|
["MONTHS_BETWEEN","months_between","months_between('1997-02-02','1997-01-01')","1.03225806",0], # oracle number of months between 2 dates
|
|
["NOT BETWEEN in SELECT","not_between","5 not between 4 and 6",0,0],
|
|
["NOT LIKE in SELECT","not_like","'a' not like 'a%'",0,0],
|
|
["NOT as '!' in SELECT","!","! 1",0,0],
|
|
["NOT in SELECT","not","not $false",$logical_value,0],
|
|
["ODBC CONVERT","odbc_convert","convert(5,SQL_CHAR)","5",1],
|
|
["OR as '||'",'||',"1=0 || 1=1",$logical_value,0],
|
|
["PASSWORD","password","password('hello')",0,2],
|
|
["PASTE", "paste", "paste('ABCDEFG',3,2,'1234')","AB1234EFG",1],
|
|
["PATINDEX","patindex","patindex('%a%','crash')",3,0],
|
|
["PERIOD_ADD","period_add","period_add(9602,-12)",199502,0],
|
|
["PERIOD_DIFF","period_diff","period_diff(199505,199404)",13,0],
|
|
["POW","pow","pow(3,2)",9,0],
|
|
["RANGE","range","range(a)","0.0",0], # informix range(a) = max(a) - min(a)
|
|
["REGEXP in SELECT","regexp","'a' regexp '^(a|b)*\$'",$logical_value,0],
|
|
["REPLICATE","replicate","replicate('a',5)","aaaaa",1],
|
|
["REVERSE","reverse","reverse('abcd')","dcba",1],
|
|
["ROOT","root","root(4)",2,0], # informix
|
|
["ROUND(1 arg)","round1","round(5.63)","6",0],
|
|
["RPAD","rpad","rpad('hi',4,'??')",'hi??',3],
|
|
["SEC_TO_TIME","sec_to_time","sec_to_time(5001)","01:23:21",1],
|
|
["SINH","sinh","sinh(1)","1.17520119",0], # oracle hyperbolic sine of n
|
|
["STR","str","str(123.45,5,1)",123.5,3],
|
|
["STRCMP","strcmp","strcmp('abc','adc')",-1,0],
|
|
["STUFF","stuff","stuff('abc',2,3,'xyz')",'axyz',3],
|
|
["SUBSTRB", "substrb", "SUBSTRB('ABCDEFG',5,4.2)" ,"CD",1], # oracle substring with bytes
|
|
["SUBSTRING as MID","mid","mid('hello',3,2)","ll",1],
|
|
["SUBSTRING_INDEX","substring_index","substring_index('www.tcx.se','.',-2)", "tcx.se",1],
|
|
["SYSDATE","sysdate","sysdate()",0,2],
|
|
["TAIL","tail","tail('ABCDEFG',3)","EFG",0],
|
|
["TANH","tanh","tanh(1)","0.462117157",0], # oracle hyperbolic tangent of n
|
|
["TIME_TO_SEC","time_to_sec","time_to_sec('01:23:21')","5001",0],
|
|
["TO_DAYS","to_days","to_days(DATE '1996-01-01')",729024,0],
|
|
["TRANSLATE","translate","translate('abc','bc','de')",'ade',3],
|
|
["TRIM; Many char extension","trim_many_char","trim(':!' FROM ':abc!')","abc",3],
|
|
["TRIM; Substring extension","trim_substring","trim('cb' FROM 'abccb')","abc",3],
|
|
["TRUNC","trunc","trunc(18.18,-1)",10,0], # oracle
|
|
["UID","uid","uid",0,2], # oracle uid from user
|
|
["UNIX_TIMESTAMP","unix_timestamp","unix_timestamp()",0,2],
|
|
["USERENV","userenv","userenv",0,2], # oracle user enviroment
|
|
["VERSION","version","version()",0,2],
|
|
["WEEKDAY","weekday","weekday(DATE '1997-11-29')",5,0],
|
|
["automatic num->string convert","auto_num2string","concat('a',2)","a2",1],
|
|
["automatic string->num convert","auto_string2num","'1'+2",3,0],
|
|
["concatenation with +","concat_as_+","'abc' + 'def'","abcdef",1],
|
|
);
|
|
|
|
@sql_group_functions=
|
|
(
|
|
["AVG","avg","avg(a)",1,0],
|
|
["COUNT (*)","count_*","count(*)",1,0],
|
|
["COUNT column name","count_column","count(a)",1,0],
|
|
["COUNT(DISTINCT expr)","count_distinct","count(distinct a)",1,0],
|
|
["MAX on numbers","max","max(a)",1,0],
|
|
["MAX on strings","max_str","max(b)","a",1],
|
|
["MIN on numbers","min","min(a)",1,0],
|
|
["MIN on strings","min_str","min(b)","a",1],
|
|
["SUM","sum","sum(a)",1,0],
|
|
);
|
|
|
|
@extra_group_functions=
|
|
(
|
|
["BIT_AND",'bit_and',"bit_and(a)",1,0],
|
|
["BIT_OR", 'bit_or', "bit_or(a)",1,0],
|
|
["COUNT(DISTINCT expr,expr,...)","count_distinct_list","count(distinct a,b)",1,0],
|
|
["STD","std","std(a)",0,0],
|
|
["STDDEV","stddev","stddev(a)",0,0],
|
|
["VARIANCE","variance","variance(a)",0,0],
|
|
);
|
|
|
|
@where_functions=
|
|
(
|
|
["= ALL","eq_all","b =all (select b from crash_me)",1,0],
|
|
["= ANY","eq_any","b =any (select b from crash_me)",1,0],
|
|
["= SOME","eq_some","b =some (select b from crash_me)",1,0],
|
|
["BETWEEN","between","5 between 4 and 6",1,0],
|
|
["EXISTS","exists","exists (select * from crash_me)",1,0],
|
|
["IN on numbers","in_num","2 in (3,2,5,9,5,1)",1,0],
|
|
["LIKE ESCAPE","like_escape","b like '%' escape 'a'",1,0],
|
|
["LIKE","like","b like 'a%'",1,0],
|
|
["MATCH UNIQUE","match_unique","1 match unique (select a from crash_me)",1,0],
|
|
["MATCH","match","1 match (select a from crash_me)",1,0],
|
|
["MATCHES","matches","b matcjhes 'a*'",1,0],
|
|
["NOT BETWEEN","not_between","7 not between 4 and 6",1,0],
|
|
["NOT EXISTS","not_exists","not exists (select * from crash_me where a = 2)",1,0],
|
|
["NOT LIKE","not_like","b not like 'b%'",1,0],
|
|
["NOT UNIQUE","not_unique","not unique (select * from crash_me where a = 2)",1,0],
|
|
["UNIQUE","unique","unique (select * from crash_me)",1,0],
|
|
);
|
|
|
|
@types=(["sql",\@sql_functions,0],
|
|
["odbc",\@odbc_functions,0],
|
|
["extra",\@extra_functions,0],
|
|
["where",\@where_functions,0]);
|
|
|
|
@group_types=(["sql",\@sql_group_functions,0],
|
|
["extra",\@extra_group_functions,0]);
|
|
|
|
|
|
foreach $types (@types)
|
|
{
|
|
print "\nSupported $types->[0] functions\n";
|
|
$tmp=@$types->[1];
|
|
foreach $type (@$tmp)
|
|
{
|
|
if (defined($limits{"func_$types->[0]_$type->[1]"}))
|
|
{
|
|
next;
|
|
}
|
|
if ($types->[0] eq "where")
|
|
{
|
|
check_and_report("Function $type->[0]","func_$types->[0]_$type->[1]",
|
|
[],"select a from crash_me where $type->[2]",[],
|
|
$type->[3],$type->[4]);
|
|
}
|
|
elsif ($limits{'functions'} eq 'yes')
|
|
{
|
|
if (($type->[2] =~ /char_length\(b\)/) && (!$end_query))
|
|
{
|
|
my $tmp= $type->[2];
|
|
$tmp .= " from crash_me ";
|
|
undef($limits{"func_$types->[0]_$type->[1]"});
|
|
check_and_report("Function $type->[0]",
|
|
"func_$types->[0]_$type->[1]",
|
|
[],"select $tmp ",[],
|
|
$type->[3],$type->[4]);
|
|
}
|
|
else
|
|
{
|
|
undef($limits{"func_$types->[0]_$type->[1]"});
|
|
$result = check_and_report("Function $type->[0]",
|
|
"func_$types->[0]_$type->[1]",
|
|
[],"select $type->[2] $end_query",[],
|
|
$type->[3],$type->[4]);
|
|
if (!$result)
|
|
{
|
|
# check without type specifyer
|
|
if ($type->[2] =~ /DATE /)
|
|
{
|
|
my $tmp= $type->[2];
|
|
$tmp =~ s/DATE //;
|
|
undef($limits{"func_$types->[0]_$type->[1]"});
|
|
$result = check_and_report("Function $type->[0]",
|
|
"func_$types->[0]_$type->[1]",
|
|
[],"select $tmp $end_query",[],
|
|
$type->[3],$type->[4]);
|
|
}
|
|
if (!$result)
|
|
{
|
|
if ($types->[0] eq "odbc" && ! ($type->[2] =~ /\{fn/))
|
|
{
|
|
my $tmp= $type->[2];
|
|
# Check by converting to ODBC format
|
|
undef($limits{"func_$types->[0]_$type->[1]"});
|
|
$tmp= "{fn $tmp }";
|
|
$tmp =~ s/('1997-\d\d-\d\d \d\d:\d\d:\d\d')/{ts $1}/g;
|
|
$tmp =~ s/(DATE '1997-\d\d-\d\d')/{d $1}/g;
|
|
$tmp =~ s/(TIME '12:13:14')/{t $1}/g;
|
|
$tmp =~ s/DATE //;
|
|
$tmp =~ s/TIME //;
|
|
check_and_report("Function $type->[0]",
|
|
"func_$types->[0]_$type->[1]",
|
|
[],"select $tmp $end_query",[],
|
|
$type->[3],$type->[4]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($limits{'functions'} eq 'yes')
|
|
{
|
|
foreach $types (@group_types)
|
|
{
|
|
print "\nSupported $types->[0] group functions\n";
|
|
$tmp=@$types->[1];
|
|
foreach $type (@$tmp)
|
|
{
|
|
check_and_report("Group function $type->[0]",
|
|
"group_func_$types->[0]_$type->[1]",
|
|
[],"select $type->[2],a from crash_me group by a",[],
|
|
$type->[3],$type->[4]);
|
|
}
|
|
}
|
|
print "\n";
|
|
report("mixing of integer and float in expression","float_int_expr",
|
|
"select 1+1.0 $end_query");
|
|
|
|
check_and_report("Is 1+NULL = NULL","null_num_expr",
|
|
[],"select 1+$numeric_null $end_query",[],undef(),4);
|
|
$tmp=sql_concat("'a'",$char_null);
|
|
if (defined($tmp))
|
|
{
|
|
check_and_report("Is $tmp = NULL", "null_concat_expr", [],
|
|
"select $tmp $end_query",[], undef(),4);
|
|
}
|
|
$prompt="Need to cast NULL for arithmetic";
|
|
save_config_data("Need_cast_for_null",
|
|
($numeric_null eq "NULL") ? "no" : "yes",
|
|
$prompt);
|
|
}
|
|
else
|
|
{
|
|
print "\n";
|
|
}
|
|
|
|
|
|
report("LIKE on numbers","like_with_number",
|
|
"create table crash_q (a int,b int)",
|
|
"insert into crash_q values(10,10)",
|
|
"select * from crash_q where a like '10'",
|
|
"drop table crash_q");
|
|
|
|
report("column LIKE column","like_with_column",
|
|
"create table crash_q (a char(10),b char(10))",
|
|
"insert into crash_q values('abc','abc')",
|
|
"select * from crash_q where a like b",
|
|
"drop table crash_q");
|
|
|
|
report("update of column= -column","NEG",
|
|
"create table crash_q (a integer)",
|
|
"insert into crash_q values(10)",
|
|
"update crash_q set a=-a",
|
|
"drop table crash_q");
|
|
|
|
if ($limits{'func_odbc_left'} eq 'yes' ||
|
|
$limits{'func_odbc_substring'} eq 'yes')
|
|
{
|
|
my $type= ($limits{'func_odbc_left'} eq 'yes' ?
|
|
"left(a,4)" : "substring(a for 4)");
|
|
|
|
check_and_report("String functions on date columns","date_as_string",
|
|
["create table crash_me2 (a date not null)",
|
|
"insert into crash_me2 values ('1998-03-03')"],
|
|
"select $type from crash_me2",
|
|
["drop table crash_me2"],
|
|
"1998",1);
|
|
}
|
|
|
|
|
|
$tmp=sql_concat("b","b");
|
|
if (defined($tmp))
|
|
{
|
|
check_and_report("char are space filled","char_is_space_filled",
|
|
[],"select $tmp from crash_me where b = 'a '",[],
|
|
'a a ',6);
|
|
}
|
|
|
|
if (!defined($limits{'multi_table_update'}))
|
|
{
|
|
if (check_and_report("Update with many tables","multi_table_update",
|
|
["create table crash_q (a integer,b char(10))",
|
|
"insert into crash_q values(1,'c')",
|
|
"update crash_q left join crash_me on crash_q.a=crash_me.a set crash_q.b=crash_me.b"],
|
|
"select b from crash_q",
|
|
["drop table crash_q"],
|
|
"a",1,undef(),2))
|
|
{
|
|
check_and_report("Update with many tables","multi_table_update",
|
|
["create table crash_q (a integer,b char(10))",
|
|
"insert into crash_q values(1,'c')",
|
|
"update crash_q,crash_me set crash_q.b=crash_me.b where crash_q.a=crash_me.a"],
|
|
"select b from crash_q",
|
|
["drop table crash_q"],
|
|
"a",1,
|
|
1);
|
|
}
|
|
}
|
|
|
|
report("DELETE FROM table1,table2...","multi_table_delete",
|
|
"create table crash_q (a integer,b char(10))",
|
|
"insert into crash_q values(1,'c')",
|
|
"delete crash_q.* from crash_q,crash_me where crash_q.a=crash_me.a",
|
|
"drop table crash_q");
|
|
|
|
check_and_report("Update with sub select","select_table_update",
|
|
["create table crash_q (a integer,b char(10))",
|
|
"insert into crash_q values(1,'c')",
|
|
"update crash_q set b= (select b from crash_me where crash_q.a = crash_me.a)"],
|
|
"select b from crash_q",
|
|
["drop table crash_q"],
|
|
"a",1);
|
|
|
|
check_and_report("Calculate 1--1","minus_neg",[],
|
|
"select a--1 from crash_me",[],0,2);
|
|
|
|
report("ANSI SQL simple joins","simple_joins",
|
|
"select crash_me.a from crash_me, crash_me t0");
|
|
|
|
#
|
|
# Check max string size, and expression limits
|
|
#
|
|
$found=undef;
|
|
foreach $type (('mediumtext','text','text()','blob','long'))
|
|
{
|
|
if ($limits{"type_extra_$type"} eq 'yes')
|
|
{
|
|
$found=$type;
|
|
last;
|
|
}
|
|
}
|
|
if (defined($found))
|
|
{
|
|
$found =~ s/\(\)/\(%d\)/;
|
|
find_limit("max text or blob size","max_text_size",
|
|
new query_many(["create table crash_q (q $found)",
|
|
"insert into crash_q values ('%s')"],
|
|
"select * from crash_q","%s",
|
|
["drop table crash_q"],
|
|
min($max_string_size,$limits{'query_size'}-30)));
|
|
|
|
}
|
|
|
|
# It doesn't make lots of sense to check for string lengths much bigger than
|
|
# what can be stored...
|
|
|
|
find_limit(($prompt="constant string size in where"),"where_string_size",
|
|
new query_repeat([],"select a from crash_me where b <'",
|
|
"","","a","","'"));
|
|
if ($limits{'where_string_size'} == 10)
|
|
{
|
|
save_config_data('where_string_size','nonstandard',$prompt);
|
|
}
|
|
|
|
if ($limits{'select_constants'} eq 'yes')
|
|
{
|
|
find_limit("constant string size in SELECT","select_string_size",
|
|
new query_repeat([],"select '","","","a","","'$end_query"));
|
|
}
|
|
|
|
goto no_functions if ($limits{'functions'} ne "yes");
|
|
|
|
if ($limits{'func_odbc_repeat'} eq 'yes')
|
|
{
|
|
find_limit("return string size from function","repeat_string_size",
|
|
new query_many([],
|
|
"select repeat('a',%d) $end_query","%s",
|
|
[],
|
|
$max_string_size,0));
|
|
}
|
|
|
|
$tmp=find_limit("simple expressions","max_expressions",
|
|
new query_repeat([],"select 1","","","+1","",$end_query,
|
|
undef(),$max_expressions));
|
|
|
|
if ($tmp > 10)
|
|
{
|
|
$tmp= "(1" . ( '+1' x ($tmp-10) ) . ")";
|
|
find_limit("big expressions", "max_big_expressions",
|
|
new query_repeat([],"select 0","","","+$tmp","",$end_query,
|
|
undef(),$max_big_expressions));
|
|
}
|
|
|
|
find_limit("stacked expressions", "max_stack_expression",
|
|
new query_repeat([],"select 1","","","+(1",")",$end_query,
|
|
undef(),$max_stacked_expressions));
|
|
|
|
no_functions:
|
|
|
|
if (!defined($limits{'max_conditions'}))
|
|
{
|
|
find_limit("OR and AND in WHERE","max_conditions",
|
|
new query_repeat([],
|
|
"select a from crash_me where a=1 and b='a'","",
|
|
"", " or a=%d and b='%d'","","","",
|
|
[],($query_size-42)/29,undef,2));
|
|
$limits{'max_conditions'}*=2;
|
|
}
|
|
# The 42 is the length of the constant part.
|
|
# The 29 is the length of the variable part, plus two seven-digit numbers.
|
|
|
|
find_limit("tables in join", "join_tables",
|
|
new query_repeat([],
|
|
"select crash_me.a",",t%d.a","from crash_me",
|
|
",crash_me t%d","","",[],$max_join_tables,undef,
|
|
1));
|
|
|
|
# Different CREATE TABLE options
|
|
|
|
report("primary key in create table",'primary_key_in_create',
|
|
"create table crash_q (q integer not null,primary key (q))",
|
|
"drop table crash_q");
|
|
|
|
report("unique in create table",'unique_in_create',
|
|
"create table crash_q (q integer not null,unique (q))",
|
|
"drop table crash_q");
|
|
|
|
if ($limits{'unique_in_create'} eq 'yes')
|
|
{
|
|
report("unique null in create",'unique_null_in_create',
|
|
"create table crash_q (q integer,unique (q))",
|
|
"insert into crash_q (q) values (NULL)",
|
|
"insert into crash_q (q) values (NULL)",
|
|
"insert into crash_q (q) values (1)",
|
|
"drop table crash_q");
|
|
}
|
|
|
|
report("default value for column",'create_default',
|
|
"create table crash_q (q integer default 10 not null)",
|
|
"drop table crash_q");
|
|
|
|
report("default value function for column",'create_default_func',
|
|
"create table crash_q (q integer not null,q1 integer default (1+1)",
|
|
"drop table crash_q");
|
|
|
|
report("temporary tables",'tempoary_table',
|
|
"create temporary table crash_q (q integer not null)",
|
|
"drop table crash_q");
|
|
|
|
report("create table from select",'create_table_select',
|
|
"create table crash_q SELECT * from crash_me",
|
|
"drop table crash_q");
|
|
|
|
report("index in create table",'index_in_create',
|
|
"create table crash_q (q integer not null,index (q))",
|
|
"drop table crash_q");
|
|
|
|
# The following must be executed as we need the value of end_drop_keyword
|
|
# later
|
|
if (! defined($limits{'create_index'}) &&
|
|
! defined($limits{'drop_index'}) )
|
|
{
|
|
if ($res=safe_query("create index crash_q on crash_me (a)"))
|
|
{
|
|
$res="yes";
|
|
$drop_res="yes";
|
|
$end_drop_keyword="";
|
|
if (!safe_query("drop index crash_q"))
|
|
{
|
|
# Can't drop the standard way; Check if mSQL
|
|
if (safe_query("drop index crash_q from crash_me"))
|
|
{
|
|
$drop_res="with 'FROM'"; # Drop is not ANSI SQL
|
|
$end_drop_keyword="drop index %i from %t";
|
|
}
|
|
# else check if Access or MySQL
|
|
elsif (safe_query("drop index crash_q on crash_me"))
|
|
{
|
|
$drop_res="with 'ON'"; # Drop is not ANSI SQL
|
|
$end_drop_keyword="drop index %i on %t";
|
|
}
|
|
# else check if MS-SQL
|
|
elsif (safe_query("drop index crash_me.crash_q"))
|
|
{
|
|
$drop_res="with 'table.index'"; # Drop is not ANSI SQL
|
|
$end_drop_keyword="drop index %t.%i";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
# Old MySQL 3.21 supports only the create index syntax
|
|
# This means that the second create doesn't give an error.
|
|
$res=safe_query(["create index crash_q on crash_me (a)",
|
|
"create index crash_q on crash_me (a)",
|
|
"drop index crash_q"]);
|
|
$res= $res ? 'ignored' : 'yes';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$drop_res=$res='no';
|
|
}
|
|
save_config_data('create_index',$res,"create index");
|
|
save_config_data('drop_index',$drop_res,"drop index");
|
|
|
|
print "create index: $limits{'create_index'}\n";
|
|
print "drop index: $limits{'drop_index'}\n";
|
|
}
|
|
|
|
# check if we can have 'NULL' as a key
|
|
check_and_report("null in index","null_in_index",
|
|
[create_table("crash_q",["a char(10)"],["(a)"]),
|
|
"insert into crash_q values (NULL)"],
|
|
"select * from crash_q",
|
|
["drop table crash_q"],
|
|
undef(),4);
|
|
|
|
if ($limits{'unique_in_create'} eq 'yes')
|
|
{
|
|
report("null in unique index",'null_in_unique',
|
|
create_table("crash_q",["q integer"],["unique(q)"]),
|
|
"insert into crash_q (q) values(NULL)",
|
|
"insert into crash_q (q) values(NULL)",
|
|
"drop table crash_q");
|
|
}
|
|
|
|
if ($limits{'null_in_unique'} eq 'yes')
|
|
{
|
|
report("null in unique index",'multi_null_in_unique',
|
|
create_table("crash_q",["q integer, x integer"],["unique(q)"]),
|
|
"insert into crash_q(x) values(1)",
|
|
"insert into crash_q(x) values(2)",
|
|
"drop table crash_q");
|
|
}
|
|
|
|
if ($limits{'create_index'} ne 'no')
|
|
{
|
|
$end_drop=$end_drop_keyword;
|
|
$end_drop =~ s/%i/crash_q/;
|
|
$end_drop =~ s/%t/crash_me/;
|
|
report("index on column part (extension)","index_parts",,
|
|
"create index crash_q on crash_me (b(5))",
|
|
$end_drop);
|
|
$end_drop=$end_drop_keyword;
|
|
$end_drop =~ s/%i/crash_me/;
|
|
$end_drop =~ s/%t/crash_me/;
|
|
report("different namespace for index",
|
|
"index_namespace",
|
|
"create index crash_me on crash_me (b)",
|
|
$end_drop);
|
|
}
|
|
|
|
if (!report("case independent table names","table_name_case",
|
|
"create table crash_q (q integer)",
|
|
"drop table CRASH_Q"))
|
|
{
|
|
safe_query("drop table crash_q");
|
|
}
|
|
|
|
if (!report("drop table if exists","drop_if_exists",
|
|
"create table crash_q (q integer)",
|
|
"drop table if exists crash_q"))
|
|
{
|
|
safe_query("drop table crash_q");
|
|
}
|
|
|
|
report("create table if not exists","create_if_not_exists",
|
|
"create table crash_q (q integer)",
|
|
"create table if not exists crash_q (q integer)");
|
|
safe_query("drop table crash_q");
|
|
|
|
#
|
|
# test of different join types
|
|
#
|
|
|
|
assert("create table crash_me2 (a integer not null,b char(10) not null, c integer)");
|
|
assert("insert into crash_me2 (a,b,c) values (1,'b',1)");
|
|
assert("create table crash_me3 (a integer not null,b char(10) not null)");
|
|
assert("insert into crash_me3 (a,b) values (1,'b')");
|
|
|
|
report("inner join","inner_join",
|
|
"select crash_me.a from crash_me inner join crash_me2 ON crash_me.a=crash_me2.a");
|
|
report("left outer join","left_outer_join",
|
|
"select crash_me.a from crash_me left join crash_me2 ON crash_me.a=crash_me2.a");
|
|
report("natural left outer join","natural_left_outer_join",
|
|
"select c from crash_me natural left join crash_me2");
|
|
report("left outer join using","left_outer_join_using",
|
|
"select c from crash_me left join crash_me2 using (a)");
|
|
report("left outer join odbc style","odbc_left_outer_join",
|
|
"select crash_me.a from { oj crash_me left outer join crash_me2 ON crash_me.a=crash_me2.a }");
|
|
report("right outer join","right_outer_join",
|
|
"select crash_me.a from crash_me right join crash_me2 ON crash_me.a=crash_me2.a");
|
|
report("full outer join","full_outer_join",
|
|
"select crash_me.a from crash_me full join crash_me2 ON crash_me.a=crash_me2.a");
|
|
report("cross join (same as from a,b)","cross_join",
|
|
"select crash_me.a from crash_me cross join crash_me3");
|
|
report("natural join","natural_join",
|
|
"select * from crash_me natural join crash_me3");
|
|
report("union","union",
|
|
"select * from crash_me union select a,b from crash_me3");
|
|
report("union all","union_all",
|
|
"select * from crash_me union all select a,b from crash_me3");
|
|
report("intersect","intersect",
|
|
"select * from crash_me intersect select * from crash_me3");
|
|
report("intersect all","intersect_all",
|
|
"select * from crash_me intersect all select * from crash_me3");
|
|
report("except","except",
|
|
"select * from crash_me except select * from crash_me3");
|
|
report("except all","except_all",
|
|
"select * from crash_me except all select * from crash_me3");
|
|
report("except","except",
|
|
"select * from crash_me except select * from crash_me3");
|
|
report("except all","except_all",
|
|
"select * from crash_me except all select * from crash_me3");
|
|
report("minus","minus",
|
|
"select * from crash_me minus select * from crash_me3"); # oracle ...
|
|
|
|
report("natural join (incompatible lists)","natural_join_incompat",
|
|
"select c from crash_me natural join crash_me2");
|
|
report("union (incompatible lists)","union_incompat",
|
|
"select * from crash_me union select a,b from crash_me2");
|
|
report("union all (incompatible lists)","union_all_incompat",
|
|
"select * from crash_me union all select a,b from crash_me2");
|
|
report("intersect (incompatible lists)","intersect_incompat",
|
|
"select * from crash_me intersect select * from crash_me2");
|
|
report("intersect all (incompatible lists)","intersect_all_incompat",
|
|
"select * from crash_me intersect all select * from crash_me2");
|
|
report("except (incompatible lists)","except_incompat",
|
|
"select * from crash_me except select * from crash_me2");
|
|
report("except all (incompatible lists)","except_all_incompat",
|
|
"select * from crash_me except all select * from crash_me2");
|
|
report("except (incompatible lists)","except_incompat",
|
|
"select * from crash_me except select * from crash_me2");
|
|
report("except all (incompatible lists)","except_all_incompat",
|
|
"select * from crash_me except all select * from crash_me2");
|
|
report("minus (incompatible lists)","minus_incompat",
|
|
"select * from crash_me minus select * from crash_me2"); # oracle ...
|
|
|
|
assert("drop table crash_me2");
|
|
assert("drop table crash_me3");
|
|
|
|
# somethings to be added here ....
|
|
# FOR UNION - INTERSECT - EXCEPT -> CORRESPONDING [ BY ]
|
|
# after subqueries:
|
|
# >ALL | ANY | SOME - EXISTS - UNIQUE
|
|
|
|
if (report("subqueries","subqueries",
|
|
"select a from crash_me where crash_me.a in (select max(a) from crash_me)"))
|
|
{
|
|
$tmp=new query_repeat([],"select a from crash_me","","",
|
|
" where a in (select a from crash_me",")",
|
|
"",[],$max_join_tables);
|
|
find_limit("recursive subqueries", "recursive_subqueries",$tmp);
|
|
}
|
|
|
|
report("insert INTO ... SELECT ...","insert_select",
|
|
"create table crash_q (a int)",
|
|
"insert into crash_q (a) SELECT crash_me.a from crash_me",
|
|
"drop table crash_q");
|
|
|
|
report_trans("transactions","transactions",
|
|
[create_table("crash_q",["a integer not null"],[]),
|
|
"insert into crash_q values (1)"],
|
|
"select * from crash_q",
|
|
"drop table crash_q"
|
|
);
|
|
|
|
report("atomic updates","atomic_updates",
|
|
create_table("crash_q",["a integer not null"],["primary key (a)"]),
|
|
"insert into crash_q values (2)",
|
|
"insert into crash_q values (3)",
|
|
"insert into crash_q values (1)",
|
|
"update crash_q set a=a+1",
|
|
"drop table crash_q");
|
|
|
|
if ($limits{'atomic_updates'} eq 'yes')
|
|
{
|
|
report_fail("atomic_updates_with_rollback","atomic_updates_with_rollback",
|
|
create_table("crash_q",["a integer not null"],
|
|
["primary key (a)"]),
|
|
"insert into crash_q values (2)",
|
|
"insert into crash_q values (3)",
|
|
"insert into crash_q values (1)",
|
|
"update crash_q set a=a+1 where a < 3",
|
|
"drop table crash_q");
|
|
}
|
|
|
|
# To add with the views:
|
|
# DROP VIEW - CREAT VIEW *** [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
|
|
report("views","views",
|
|
"create view crash_q as select a from crash_me",
|
|
"drop view crash_q");
|
|
|
|
report("foreign key syntax","foreign_key_syntax",
|
|
create_table("crash_q",["a integer not null"],["primary key (a)"]),
|
|
create_table("crash_q2",["a integer not null",
|
|
"foreign key (a) references crash_q (a)"],
|
|
[]),
|
|
"insert into crash_q values (1)",
|
|
"insert into crash_q2 values (1)",
|
|
"drop table crash_q2",
|
|
"drop table crash_q");
|
|
|
|
if ($limits{'foreign_key_syntax'} eq 'yes')
|
|
{
|
|
report_fail("foreign keys","foreign_key",
|
|
create_table("crash_q",["a integer not null"],
|
|
["primary key (a)"]),
|
|
create_table("crash_q2",["a integer not null",
|
|
"foreign key (a) references crash_q (a)"],
|
|
[]),
|
|
"insert into crash_q values (1)",
|
|
"insert into crash_q2 values (2)",
|
|
"drop table crash_q2",
|
|
"drop table crash_q");
|
|
}
|
|
|
|
report("Create SCHEMA","create_schema",
|
|
"create schema crash_schema create table crash_q (a int) create table crash_q2(b int)",
|
|
"drop schema crash_schema cascade");
|
|
|
|
if ($limits{'foreign_key'} eq 'yes')
|
|
{
|
|
if ($limits{'create_schema'} eq 'yes')
|
|
{
|
|
report("Circular foreign keys","foreign_key_circular",
|
|
"create schema crash_schema create table crash_q (a int primary key, b int, foreign key (b) references crash_q2(a)) create table crash_q2(a int, b int, primary key(a), foreign key (b) references crash_q(a))",
|
|
"drop schema crash_schema cascade");
|
|
}
|
|
}
|
|
|
|
report("Column constraints","constraint_check",
|
|
"create table crash_q (a int check (a>0))",
|
|
"drop table crash_q");
|
|
|
|
report("Table constraints","constraint_check_table",
|
|
"create table crash_q (a int ,b int, check (a>b))",
|
|
"drop table crash_q");
|
|
|
|
report("Named constraints","constraint_check",
|
|
"create table crash_q (a int ,b int, constraint abc check (a>b))",
|
|
"drop table crash_q");
|
|
|
|
report("NULL constraint (SyBase style)","constraint_null",
|
|
"create table crash_q (a int null)",
|
|
"drop table crash_q");
|
|
|
|
report("Triggers (ANSI SQL)","psm_trigger",
|
|
"create table crash_q (a int ,b int)",
|
|
"create trigger crash_trigger after insert on crash_q referencing new table as new_a when (localtime > time '18:00:00') begin atomic end",
|
|
"insert into crash_q values(1,2)",
|
|
"drop trigger crash_trigger",
|
|
"drop table crash_q");
|
|
|
|
report("PSM procedures (ANSI SQL)","psm_procedures",
|
|
"create table crash_q (a int,b int)",
|
|
"create procedure crash_proc(in a1 int, in b1 int) language sql modifies sql data begin declare c1 int; set c1 = a1 + b1; insert into crash_q(a,b) values (a1,c1); end",
|
|
"call crash_proc(1,10)",
|
|
"drop procedure crash_proc",
|
|
"drop table crash_q");
|
|
|
|
report("PSM modules (ANSI SQL)","psm_modules",
|
|
"create table crash_q (a int,b int)",
|
|
"create module crash_m declare procedure crash_proc(in a1 int, in b1 int) language sql modifies sql data begin declare c1 int; set c1 = a1 + b1; insert into crash_q(a,b) values (a1,c1); end; declare procedure crash_proc2(INOUT a int, in b int) contains sql set a = b + 10; end module",
|
|
"call crash_proc(1,10)",
|
|
"drop module crash_m cascade",
|
|
"drop table crash_q cascade");
|
|
|
|
report("PSM functions (ANSI SQL)","psm_functions",
|
|
"create table crash_q (a int)",
|
|
"create function crash_func(in a1 int, in b1 int) returns int language sql deterministic contains sql begin return a1 * b1; end",
|
|
"insert into crash_q values(crash_func(2,4))",
|
|
"select a,crash_func(a,2) from crash_q",
|
|
"drop function crash_func cascade",
|
|
"drop table crash_q");
|
|
|
|
report("Domains (ANSI SQL)","domains",
|
|
"create domain crash_d as varchar(10) default 'Empty' check (value <> 'abcd')",
|
|
"create table crash_q(a crash_d, b int)",
|
|
"insert into crash_q(a,b) values('xyz',10)",
|
|
"insert into crash_q(b) values(10)",
|
|
"drop table crash_q",
|
|
"drop domain crash_d");
|
|
|
|
|
|
if (!defined($limits{'lock_tables'}))
|
|
{
|
|
report("lock table","lock_tables",
|
|
"lock table crash_me READ",
|
|
"unlock tables");
|
|
if ($limits{'lock_tables'} eq 'no')
|
|
{
|
|
delete $limits{'lock_tables'};
|
|
report("lock table","lock_tables",
|
|
"lock table crash_me IN SHARE MODE");
|
|
}
|
|
}
|
|
|
|
if (!report("many tables to drop table","multi_drop",
|
|
"create table crash_q (a int)",
|
|
"create table crash_q2 (a int)",
|
|
"drop table crash_q,crash_q2"))
|
|
{
|
|
$dbh->do("drop table crash_q");
|
|
$dbh->do("drop table crash_q2");
|
|
}
|
|
|
|
|
|
report("-- as comment","comment_--",
|
|
"select * from crash_me -- Testing of comments");
|
|
report("// as comment","comment_//",
|
|
"select * from crash_me // Testing of comments");
|
|
report("# as comment","comment_#",
|
|
"select * from crash_me # Testing of comments");
|
|
report("/* */ as comment","comment_/**/",
|
|
"select * from crash_me /* Testing of comments */");
|
|
|
|
#
|
|
# Check things that fails one some servers
|
|
#
|
|
|
|
# Empress can't insert empty strings in a char() field
|
|
report("insert empty string","insert_empty_string",
|
|
create_table("crash_q",["a char(10) not null,b char(10)"],[]),
|
|
"insert into crash_q values ('','')",
|
|
"drop table crash_q");
|
|
|
|
report("Having with alias","having_with_alias",
|
|
create_table("crash_q",["a integer"],[]),
|
|
"insert into crash_q values (10)",
|
|
"select sum(a) as b from crash_q group by a having b > 0",
|
|
"drop table crash_q");
|
|
|
|
#
|
|
# test name limits
|
|
#
|
|
|
|
find_limit("table name length","max_table_name",
|
|
new query_many(["create table crash_q%s (q integer)",
|
|
"insert into crash_q%s values(1)"],
|
|
"select * from crash_q%s",1,
|
|
["drop table crash_q%s"],
|
|
$max_name_length,7,1));
|
|
|
|
find_limit("column name length","max_column_name",
|
|
new query_many(["create table crash_q (q%s integer)",
|
|
"insert into crash_q (q%s) values(1)"],
|
|
"select q%s from crash_q",1,
|
|
["drop table crash_q"],
|
|
$max_name_length,1));
|
|
|
|
if ($limits{'column_alias'} eq 'yes')
|
|
{
|
|
find_limit("select alias name length","max_select_alias_name",
|
|
new query_many(undef,
|
|
"select b as %s from crash_me",undef,
|
|
undef, $max_name_length));
|
|
}
|
|
|
|
find_limit("table alias name length","max_table_alias_name",
|
|
new query_many(undef,
|
|
"select %s.b from crash_me %s",
|
|
undef,
|
|
undef, $max_name_length));
|
|
|
|
$end_drop_keyword = "drop index %i" if (!$end_drop_keyword);
|
|
$end_drop=$end_drop_keyword;
|
|
$end_drop =~ s/%i/crash_q%s/;
|
|
$end_drop =~ s/%t/crash_me/;
|
|
|
|
if ($limits{'create_index'} ne 'no')
|
|
{
|
|
find_limit("index name length","max_index_name",
|
|
new query_many(["create index crash_q%s on crash_me (a)"],
|
|
undef,undef,
|
|
[$end_drop],
|
|
$max_name_length,7));
|
|
}
|
|
|
|
find_limit("max char() size","max_char_size",
|
|
new query_many(["create table crash_q (q char(%d))",
|
|
"insert into crash_q values ('%s')"],
|
|
"select * from crash_q","%s",
|
|
["drop table crash_q"],
|
|
min($max_string_size,$limits{'query_size'})));
|
|
|
|
if ($limits{'type_sql_varchar(1_arg)'} eq 'yes')
|
|
{
|
|
find_limit("max varchar() size","max_varchar_size",
|
|
new query_many(["create table crash_q (q varchar(%d))",
|
|
"insert into crash_q values ('%s')"],
|
|
"select * from crash_q","%s",
|
|
["drop table crash_q"],
|
|
min($max_string_size,$limits{'query_size'})));
|
|
}
|
|
|
|
$found=undef;
|
|
foreach $type (('mediumtext','text','text()','blob','long'))
|
|
{
|
|
if ($limits{"type_extra_$type"} eq 'yes')
|
|
{
|
|
$found=$type;
|
|
last;
|
|
}
|
|
}
|
|
if (defined($found))
|
|
{
|
|
$found =~ s/\(\)/\(%d\)/;
|
|
find_limit("max text or blob size","max_text_size",
|
|
new query_many(["create table crash_q (q $found)",
|
|
"insert into crash_q values ('%s')"],
|
|
"select * from crash_q","%s",
|
|
["drop table crash_q"],
|
|
min($max_string_size,$limits{'query_size'}-30)));
|
|
|
|
}
|
|
|
|
$tmp=new query_repeat([],"create table crash_q (a integer","","",
|
|
",a%d integer","",")",["drop table crash_q"],
|
|
$max_columns);
|
|
$tmp->{'offset'}=1;
|
|
find_limit("Columns in table","max_columns",$tmp);
|
|
|
|
# Make a field definition to be used when testing keys
|
|
|
|
$key_definitions="q0 integer not null";
|
|
$key_fields="q0";
|
|
for ($i=1; $i < min($limits{'max_columns'},$max_keys) ; $i++)
|
|
{
|
|
$key_definitions.=",q$i integer not null";
|
|
$key_fields.=",q$i";
|
|
}
|
|
$key_values="1," x $i;
|
|
chop($key_values);
|
|
|
|
if ($limits{'unique_in_create'} eq 'yes')
|
|
{
|
|
find_limit("unique indexes","max_unique_index",
|
|
new query_table("create table crash_q (q integer",
|
|
",q%d integer not null,unique (q%d)",")",
|
|
["insert into crash_q (q,%f) values (1,%v)"],
|
|
"select q from crash_q",1,
|
|
"drop table crash_q",
|
|
$max_keys,0));
|
|
|
|
find_limit("index parts","max_index_parts",
|
|
new query_table("create table crash_q ($key_definitions,unique (q0",
|
|
",q%d","))",
|
|
["insert into crash_q ($key_fields) values ($key_values)"],
|
|
"select q0 from crash_q",1,
|
|
"drop table crash_q",
|
|
$max_keys,1));
|
|
|
|
find_limit("max index part length","max_index_part_length",
|
|
new query_many(["create table crash_q (q char(%d) not null,unique(q))",
|
|
"insert into crash_q (q) values ('%s')"],
|
|
"select q from crash_q","%s",
|
|
["drop table crash_q"],
|
|
$limits{'max_char_size'},0));
|
|
|
|
if ($limits{'type_sql_varchar(1_arg)'} eq 'yes')
|
|
{
|
|
find_limit("index varchar part length","max_index_varchar_part_length",
|
|
new query_many(["create table crash_q (q varchar(%d) not null,unique(q))",
|
|
"insert into crash_q (q) values ('%s')"],
|
|
"select q from crash_q","%s",
|
|
["drop table crash_q"],
|
|
$limits{'max_varchar_size'},0));
|
|
}
|
|
}
|
|
|
|
|
|
if ($limits{'create_index'} ne 'no')
|
|
{
|
|
if ($limits{'create_index'} eq 'ignored' ||
|
|
$limits{'unique_in_create'} eq 'yes')
|
|
{ # This should be true
|
|
save_config_data('max_index',$limits{'max_unique_index'},"max index");
|
|
print "indexes: $limits{'max_index'}\n";
|
|
}
|
|
else
|
|
{
|
|
if (!defined($limits{'max_index'}))
|
|
{
|
|
assert("create table crash_q ($key_definitions)");
|
|
for ($i=1; $i <= min($limits{'max_columns'},$max_keys) ; $i++)
|
|
{
|
|
last if (!safe_query("create index crash_q$i on crash_q (q$i)"));
|
|
}
|
|
save_config_data('max_index',$i == $max_keys ? $max_keys : $i,
|
|
"max index");
|
|
while ( --$i > 0)
|
|
{
|
|
$end_drop=$end_drop_keyword;
|
|
$end_drop =~ s/%i/crash_q$i/;
|
|
$end_drop =~ s/%t/crash_q/;
|
|
assert($end_drop);
|
|
}
|
|
assert("drop table crash_q");
|
|
}
|
|
print "indexs: $limits{'max_index'}\n";
|
|
if (!defined($limits{'max_unique_index'}))
|
|
{
|
|
assert("create table crash_q ($key_definitions)");
|
|
for ($i=0; $i < min($limits{'max_columns'},$max_keys) ; $i++)
|
|
{
|
|
last if (!safe_query("create unique index crash_q$i on crash_q (q$i)"));
|
|
}
|
|
save_config_data('max_unique_index',$i == $max_keys ? $max_keys : $i,
|
|
"max unique index");
|
|
while ( --$i >= 0)
|
|
{
|
|
$end_drop=$end_drop_keyword;
|
|
$end_drop =~ s/%i/crash_q$i/;
|
|
$end_drop =~ s/%t/crash_q/;
|
|
assert($end_drop);
|
|
}
|
|
assert("drop table crash_q");
|
|
}
|
|
print "unique indexes: $limits{'max_unique_index'}\n";
|
|
if (!defined($limits{'max_index_parts'}))
|
|
{
|
|
assert("create table crash_q ($key_definitions)");
|
|
$end_drop=$end_drop_keyword;
|
|
$end_drop =~ s/%i/crash_q1%d/;
|
|
$end_drop =~ s/%t/crash_q/;
|
|
find_limit("index parts","max_index_parts",
|
|
new query_table("create index crash_q1%d on crash_q (q0",
|
|
",q%d",")",
|
|
[],
|
|
undef,undef,
|
|
$end_drop,
|
|
$max_keys,1));
|
|
assert("drop table crash_q");
|
|
}
|
|
else
|
|
{
|
|
print "index parts: $limits{'max_index_parts'}\n";
|
|
}
|
|
$end_drop=$end_drop_keyword;
|
|
$end_drop =~ s/%i/crash_q2%d/;
|
|
$end_drop =~ s/%t/crash_me/;
|
|
|
|
find_limit("index part length","max_index_part_length",
|
|
new query_many(["create table crash_q (q char(%d))",
|
|
"create index crash_q2%d on crash_q (q)",
|
|
"insert into crash_q values('%s')"],
|
|
"select q from crash_q",
|
|
"%s",
|
|
[ $end_drop,
|
|
"drop table crash_q"],
|
|
min($limits{'max_char_size'},"+8192")));
|
|
}
|
|
}
|
|
|
|
find_limit("index length","max_index_length",
|
|
new query_index_length("create table crash_q ",
|
|
"drop table crash_q",
|
|
$max_key_length));
|
|
|
|
find_limit("max table row length (without blobs)","max_row_length",
|
|
new query_row_length("crash_q ",
|
|
"not null",
|
|
"drop table crash_q",
|
|
min($max_row_length,
|
|
$limits{'max_columns'}*
|
|
min($limits{'max_char_size'},255))));
|
|
|
|
find_limit("table row length with nulls (without blobs)",
|
|
"max_row_length_with_null",
|
|
new query_row_length("crash_q ",
|
|
"",
|
|
"drop table crash_q",
|
|
$limits{'max_row_length'}*2));
|
|
|
|
find_limit("number of columns in order by","columns_in_order_by",
|
|
new query_many(["create table crash_q (%F)",
|
|
"insert into crash_q values(%v)",
|
|
"insert into crash_q values(%v)"],
|
|
"select * from crash_q order by %f",
|
|
undef(),
|
|
["drop table crash_q"],
|
|
$max_order_by));
|
|
|
|
find_limit("number of columns in group by","columns_in_group_by",
|
|
new query_many(["create table crash_q (%F)",
|
|
"insert into crash_q values(%v)",
|
|
"insert into crash_q values(%v)"],
|
|
"select %f from crash_q group by %f",
|
|
undef(),
|
|
["drop table crash_q"],
|
|
$max_order_by));
|
|
|
|
#
|
|
# End of test
|
|
#
|
|
|
|
$dbh->do("drop table crash_me"); # Remove temporary table
|
|
|
|
print "crash-me safe: $limits{'crash_me_safe'}\n";
|
|
print "reconnected $reconnect_count times\n";
|
|
|
|
$dbh->disconnect || warn $dbh->errstr;
|
|
save_all_config_data();
|
|
exit 0;
|
|
|
|
sub usage
|
|
{
|
|
print <<EOF;
|
|
$0 Ver $version
|
|
|
|
This program tries to find all limits and capabilities for a SQL
|
|
server. As it will use the server in some 'unexpected' ways, one
|
|
shouldn\'t have anything important running on it at the same time this
|
|
program runs! There is a slight chance that something unexpected may
|
|
happen....
|
|
|
|
As all used queries are legal according to some SQL standard. any
|
|
reasonable SQL server should be able to run this test without any
|
|
problems.
|
|
|
|
All questions is cached in $opt_dir/'server_name'.cfg that future runs will use
|
|
limits found in previous runs. Remove this file if you want to find the
|
|
current limits for your version of the database server.
|
|
|
|
This program uses some table names while testing things. If you have any
|
|
tables with the name of 'crash_me' or 'crash_qxxxx' where 'x' is a number,
|
|
they will be deleted by this test!
|
|
|
|
$0 takes the following options:
|
|
|
|
--help or --Information
|
|
Shows this help
|
|
|
|
--batch-mode
|
|
Don\'t ask any questions, quit on errors.
|
|
|
|
--comment='some comment'
|
|
Add this comment to the crash-me limit file
|
|
|
|
--database='database' (Default $opt_database)
|
|
Create test tables in this database.
|
|
|
|
--dir='limits'
|
|
Save crash-me output in this directory
|
|
|
|
--debug
|
|
Lots of printing to help debugging if something goes wrong.
|
|
|
|
--fix-limit-file
|
|
Reformat the crash-me limit file. crash-me is not run!
|
|
|
|
--force
|
|
Start test at once, without a warning screen and without questions.
|
|
This is a option for the very brave.
|
|
Use this in your cron scripts to test your database every night.
|
|
|
|
--log-all-queries
|
|
Prints all queries that are executed. Mostly used for debugging crash-me.
|
|
|
|
--log-queries-to-file='filename'
|
|
Log full queries to file.
|
|
|
|
--host='hostname' (Default $opt_host)
|
|
Run tests on this host.
|
|
|
|
--password='password'
|
|
Password for the current user.
|
|
|
|
--restart
|
|
Save states during each limit tests. This will make it possible to continue
|
|
by restarting with the same options if there is some bug in the DBI or
|
|
DBD driver that caused $0 to die!
|
|
|
|
--server='server name' (Default $opt_server)
|
|
Run the test on the given server.
|
|
Known servers names are: Access, Adabas, AdabasD, Empress, Oracle, Informix, DB2, Mimer, mSQL, MS-SQL, MySQL, Pg, Solid or Sybase.
|
|
For others $0 can\'t report the server version.
|
|
|
|
--user='user_name'
|
|
User name to log into the SQL server.
|
|
|
|
--start-cmd='command to restart server'
|
|
Automaticly restarts server with this command if the server dies.
|
|
|
|
--sleep='time in seconds' (Default $opt_sleep)
|
|
Wait this long before restarting server.
|
|
|
|
EOF
|
|
exit(0);
|
|
}
|
|
|
|
|
|
sub server_info
|
|
{
|
|
my ($ok,$tmp);
|
|
$ok=0;
|
|
print "\nNOTE: You should be familiar with '$0 --help' before continuing!\n\n";
|
|
if (lc($opt_server) eq "mysql")
|
|
{
|
|
$ok=1;
|
|
print <<EOF;
|
|
This test should not crash MySQL if it was distributed together with the
|
|
running MySQL version.
|
|
If this is the case you can probably continue without having to worry about
|
|
destroying something.
|
|
EOF
|
|
}
|
|
elsif (lc($opt_server) eq "msql")
|
|
{
|
|
print <<EOF;
|
|
This test will take down mSQL repeatedly while finding limits.
|
|
To make this test easier, start mSQL in another terminal with something like:
|
|
|
|
while (true); do /usr/local/mSQL/bin/msql2d ; done
|
|
|
|
You should be sure that no one is doing anything important with mSQL and that
|
|
you have privileges to restart it!
|
|
It may take awhile to determinate the number of joinable tables, so prepare to
|
|
wait!
|
|
EOF
|
|
}
|
|
elsif (lc($opt_server) eq "solid")
|
|
{
|
|
print <<EOF;
|
|
This test will take down Solid server repeatedly while finding limits.
|
|
You should be sure that no one is doing anything important with Solid
|
|
and that you have privileges to restart it!
|
|
|
|
If you are running Solid without logging and/or backup YOU WILL LOSE!
|
|
Solid does not write data from the cache often enough. So if you continue
|
|
you may lose tables and data that you entered hours ago!
|
|
|
|
Solid will also take a lot of memory running this test. You will nead
|
|
at least 234M free!
|
|
|
|
When doing the connect test Solid server or the perl api will hang when
|
|
freeing connections. Kill this program and restart it to continue with the
|
|
test. You don\'t have to use --restart for this case.
|
|
EOF
|
|
if (!$opt_restart)
|
|
{
|
|
print "\nWhen DBI/Solid dies you should run this program repeatedly\n";
|
|
print "with --restart until all tests have completed\n";
|
|
}
|
|
}
|
|
elsif (lc($opt_server) eq "pg")
|
|
{
|
|
print <<EOF;
|
|
This test will crash postgreSQL when calculating the number of joinable tables!
|
|
You should be sure that no one is doing anything important with postgreSQL
|
|
and that you have privileges to restart it!
|
|
EOF
|
|
}
|
|
else
|
|
{
|
|
print <<EOF;
|
|
This test may crash $opt_server repeatedly while finding limits!
|
|
You should be sure that no one is doing anything important with $opt_server
|
|
and that you have privileges to restart it!
|
|
EOF
|
|
}
|
|
print <<EOF;
|
|
|
|
Some of the tests you are about to execute may require a lot of
|
|
memory. Your tests WILL adversely affect system performance. It's
|
|
not uncommon that either this crash-me test program, or the actual
|
|
database back-end, will DIE with an out-of-memory error. So might
|
|
any other program on your system if it requests more memory at the
|
|
wrong time.
|
|
|
|
Note also that while crash-me tries to find limits for the database server
|
|
it will make a lot of queries that can't be categorized as 'normal'. It's
|
|
not unlikely that crash-me finds some limit bug in your server so if you
|
|
run this test you have to be prepared that your server may die during it!
|
|
|
|
We, the creators of this utility, are not responsible in any way if your
|
|
database server unexpectedly crashes while this program tries to find the
|
|
limitations of your server. By accepting the following question with 'yes',
|
|
you agree to the above!
|
|
|
|
You have been warned!
|
|
|
|
EOF
|
|
|
|
#
|
|
# No default reply here so no one can blame us for starting the test
|
|
# automaticly.
|
|
#
|
|
for (;;)
|
|
{
|
|
print "Start test (yes/no) ? ";
|
|
$tmp=<STDIN>; chomp($tmp); $tmp=lc($tmp);
|
|
last if ($tmp =~ /^yes$/i);
|
|
exit 1 if ($tmp =~ /^n/i);
|
|
print "\n";
|
|
}
|
|
}
|
|
|
|
sub machine
|
|
{
|
|
$name= `uname -s -r -m`;
|
|
if ($?)
|
|
{
|
|
$name= `uname -s -m`;
|
|
}
|
|
if ($?)
|
|
{
|
|
$name= `uname -s`;
|
|
}
|
|
if ($?)
|
|
{
|
|
$name= `uname`;
|
|
}
|
|
if ($?)
|
|
{
|
|
$name="unknown";
|
|
}
|
|
chomp($name); $name =~ s/[\n\r]//g;
|
|
return $name;
|
|
}
|
|
|
|
|
|
#
|
|
# Help functions that we need
|
|
#
|
|
|
|
sub safe_connect
|
|
{
|
|
my ($object)=@_;
|
|
my ($dbh,$tmp);
|
|
|
|
for (;;)
|
|
{
|
|
if (($dbh=DBI->connect($server->{'data_source'},$opt_user,$opt_password,
|
|
{ PrintError => 0, AutoCommit => 1})))
|
|
{
|
|
$dbh->{LongReadLen}= 16000000; # Set max retrieval buffer
|
|
return $dbh;
|
|
}
|
|
print "Error: $DBI::errstr; $server->{'data_source'} - '$opt_user' - '$opt_password'\n";
|
|
print "I got the above error when connecting to $opt_server\n";
|
|
if (defined($object) && defined($object->{'limit'}))
|
|
{
|
|
print "This check was done with limit: $object->{'limit'}.\nNext check will be done with a smaller limit!\n";
|
|
$object=undef();
|
|
}
|
|
save_config_data('crash_me_safe','no',"crash me safe");
|
|
if ($opt_db_start_cmd)
|
|
{
|
|
print "Restarting the db server with:\n'$opt_db_start_cmd'\n";
|
|
system("$opt_db_start_cmd");
|
|
print "Waiting $opt_sleep seconds so the server can initialize\n";
|
|
sleep $opt_sleep;
|
|
}
|
|
else
|
|
{
|
|
exit(1) if ($opt_batch_mode);
|
|
print "Can you check/restart it so I can continue testing?\n";
|
|
for (;;)
|
|
{
|
|
print "Continue test (yes/no) ? [yes] ";
|
|
$tmp=<STDIN>; chomp($tmp); $tmp=lc($tmp);
|
|
$tmp = "yes" if ($tmp eq "");
|
|
last if (index("yes",$tmp) >= 0);
|
|
exit 1 if (index("no",$tmp) >= 0);
|
|
print "\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#
|
|
# Check if the server is upp and running. If not, ask the user to restart it
|
|
#
|
|
|
|
sub check_connect
|
|
{
|
|
my ($object)=@_;
|
|
my ($sth);
|
|
print "Checking connection\n" if ($opt_log_all_queries);
|
|
# The following line will not work properly with interbase
|
|
return if (defined($check_connect) && defined($dbh->do($check_connect)));
|
|
$dbh->disconnect || warn $dbh->errstr;
|
|
print "\nreconnecting\n" if ($opt_debug);
|
|
$reconnect_count++;
|
|
undef($dbh);
|
|
$dbh=safe_connect($object);
|
|
}
|
|
|
|
#
|
|
# print query if debugging
|
|
#
|
|
sub print_query
|
|
{
|
|
my ($query)=@_;
|
|
$last_error=$DBI::errstr;
|
|
if ($opt_debug)
|
|
{
|
|
if (length($query) > 130)
|
|
{
|
|
$query=substr($query,0,120) . "...(" . (length($query)-120) . ")";
|
|
}
|
|
printf "\nGot error from query: '%s'\n%s\n",$query,$DBI::errstr;
|
|
}
|
|
}
|
|
|
|
#
|
|
# Do one or many queries. Return 1 if all was ok
|
|
# Note that all rows are executed (to ensure that we execute drop table commands)
|
|
#
|
|
|
|
sub safe_query
|
|
{
|
|
my($queries)=@_;
|
|
my($query,$ok,$retry_ok,$retry,@tmp,$sth);
|
|
$ok=1;
|
|
if (ref($queries) ne "ARRAY")
|
|
{
|
|
push(@tmp,$queries);
|
|
$queries= \@tmp;
|
|
}
|
|
foreach $query (@$queries)
|
|
{
|
|
printf "query1: %-80.80s ...(%d - %d)\n",$query,length($query),$retry_limit if ($opt_log_all_queries);
|
|
print LOG "$query;\n" if ($opt_log);
|
|
if (length($query) > $query_size)
|
|
{
|
|
$ok=0;
|
|
next;
|
|
}
|
|
|
|
$retry_ok=0;
|
|
for ($retry=0; $retry < $retry_limit ; $retry++)
|
|
{
|
|
if (! ($sth=$dbh->prepare($query)))
|
|
{
|
|
print_query($query);
|
|
$retry=100 if (!$server->abort_if_fatal_error());
|
|
# Force a reconnect because of Access drop table bug!
|
|
if ($retry == $retry_limit-2)
|
|
{
|
|
print "Forcing disconnect to retry query\n" if ($opt_debug);
|
|
$dbh->disconnect || warn $dbh->errstr;
|
|
}
|
|
check_connect(); # Check that server is still up
|
|
}
|
|
else
|
|
{
|
|
if (!$sth->execute())
|
|
{
|
|
print_query($query);
|
|
$retry=100 if (!$server->abort_if_fatal_error());
|
|
# Force a reconnect because of Access drop table bug!
|
|
if ($retry == $retry_limit-2)
|
|
{
|
|
print "Forcing disconnect to retry query\n" if ($opt_debug);
|
|
$dbh->disconnect || warn $dbh->errstr;
|
|
}
|
|
check_connect(); # Check that server is still up
|
|
}
|
|
else
|
|
{
|
|
$retry = $retry_limit;
|
|
$retry_ok = 1;
|
|
}
|
|
$sth->finish;
|
|
}
|
|
}
|
|
$ok=0 if (!$retry_ok);
|
|
if ($query =~ /create/i && $server->reconnect_on_errors())
|
|
{
|
|
print "Forcing disconnect to retry query\n" if ($opt_debug);
|
|
$dbh->disconnect || warn $dbh->errstr;
|
|
$dbh=safe_connect();
|
|
}
|
|
}
|
|
return $ok;
|
|
}
|
|
|
|
|
|
#
|
|
# Do a query on a query package object.
|
|
#
|
|
|
|
sub limit_query
|
|
{
|
|
my($object,$limit)=@_;
|
|
my ($query,$result,$retry,$sth);
|
|
|
|
$query=$object->query($limit);
|
|
$result=safe_query($query);
|
|
if (!$result)
|
|
{
|
|
$object->cleanup();
|
|
return 0;
|
|
}
|
|
if (defined($query=$object->check_query()))
|
|
{
|
|
for ($retry=0 ; $retry < $retry_limit ; $retry++)
|
|
{
|
|
printf "query2: %-80.80s\n",$query if ($opt_log_all_queries);
|
|
print LOG "$query;\n" if ($opt_log);
|
|
if (($sth= $dbh->prepare($query)))
|
|
{
|
|
if ($sth->execute)
|
|
{
|
|
$result= $object->check($sth);
|
|
$sth->finish;
|
|
$object->cleanup();
|
|
return $result;
|
|
}
|
|
print_query($query);
|
|
$sth->finish;
|
|
}
|
|
else
|
|
{
|
|
print_query($query);
|
|
}
|
|
$retry=100 if (!$server->abort_if_fatal_error()); # No need to continue
|
|
if ($retry == $retry_limit-2)
|
|
{
|
|
print "Forcing discoennect to retry query\n" if ($opt_debug);
|
|
$dbh->disconnect || warn $dbh->errstr;
|
|
}
|
|
check_connect($object); # Check that server is still up
|
|
}
|
|
$result=0; # Query failed
|
|
}
|
|
$object->cleanup();
|
|
return $result; # Server couldn't handle the query
|
|
}
|
|
|
|
|
|
sub report
|
|
{
|
|
my ($prompt,$limit,@queries)=@_;
|
|
print "$prompt: ";
|
|
if (!defined($limits{$limit}))
|
|
{
|
|
save_config_data($limit,safe_query(\@queries) ? "yes" : "no",$prompt);
|
|
}
|
|
print "$limits{$limit}\n";
|
|
return $limits{$limit} ne "no";
|
|
}
|
|
|
|
sub report_fail
|
|
{
|
|
my ($prompt,$limit,@queries)=@_;
|
|
print "$prompt: ";
|
|
if (!defined($limits{$limit}))
|
|
{
|
|
save_config_data($limit,safe_query(\@queries) ? "no" : "yes",$prompt);
|
|
}
|
|
print "$limits{$limit}\n";
|
|
return $limits{$limit} ne "no";
|
|
}
|
|
|
|
|
|
# Return true if one of the queries is ok
|
|
|
|
sub report_one
|
|
{
|
|
my ($prompt,$limit,$queries)=@_;
|
|
my ($query,$res,$result);
|
|
print "$prompt: ";
|
|
if (!defined($limits{$limit}))
|
|
{
|
|
$result="no";
|
|
foreach $query (@$queries)
|
|
{
|
|
if (safe_query($query->[0]))
|
|
{
|
|
$result= $query->[1];
|
|
last;
|
|
}
|
|
}
|
|
save_config_data($limit,$result,$prompt);
|
|
}
|
|
print "$limits{$limit}\n";
|
|
return $limits{$limit} ne "no";
|
|
}
|
|
|
|
|
|
# Execute query and save result as limit value.
|
|
|
|
sub report_result
|
|
{
|
|
my ($prompt,$limit,$query)=@_;
|
|
my($error);
|
|
print "$prompt: ";
|
|
if (!defined($limits{$limit}))
|
|
{
|
|
$error=safe_query_result($query,"1",2);
|
|
save_config_data($limit,$error ? "not supported" : $last_result,$prompt);
|
|
}
|
|
print "$limits{$limit}\n";
|
|
return $limits{$limit} ne "no";
|
|
}
|
|
|
|
sub report_trans
|
|
{
|
|
my ($prompt,$limit,$queries,$check,$clear)=@_;
|
|
print "$prompt: ";
|
|
if (!defined($limits{$limit}))
|
|
{
|
|
eval {undef($dbh->{AutoCommit})};
|
|
if (!$@)
|
|
{
|
|
if (safe_query(\@$queries))
|
|
{
|
|
$rc = $dbh->rollback;
|
|
if ($rc) {
|
|
$dbh->{AutoCommit} = 1;
|
|
if (safe_query_result($check,"","")) {
|
|
save_config_data($limit,"yes",$prompt);
|
|
}
|
|
safe_query($clear);
|
|
} else {
|
|
$dbh->{AutoCommit} = 1;
|
|
safe_query($clear);
|
|
save_config_data($limit,"error",$prompt);
|
|
}
|
|
} else {
|
|
save_config_data($limit,"error",$prompt);
|
|
}
|
|
$dbh->{AutoCommit} = 1;
|
|
}
|
|
else
|
|
{
|
|
save_config_data($limit,"no",$prompt);
|
|
}
|
|
safe_query($clear);
|
|
}
|
|
print "$limits{$limit}\n";
|
|
return $limits{$limit} ne "no";
|
|
}
|
|
|
|
|
|
sub check_and_report
|
|
{
|
|
my ($prompt,$limit,$pre,$query,$post,$answer,$string_type,$skip_prompt,
|
|
$function)=@_;
|
|
my ($tmp);
|
|
$function=0 if (!defined($function));
|
|
|
|
print "$prompt: " if (!defined($skip_prompt));
|
|
if (!defined($limits{$limit}))
|
|
{
|
|
$tmp=1-safe_query(\@$pre);
|
|
$tmp=safe_query_result($query,$answer,$string_type) if (!$tmp);
|
|
safe_query(\@$post);
|
|
if ($function == 3) # Report error as 'no'.
|
|
{
|
|
$function=0;
|
|
$tmp= -$tmp;
|
|
}
|
|
if ($function == 0 ||
|
|
$tmp != 0 && $function == 1 ||
|
|
$tmp == 0 && $function== 2)
|
|
{
|
|
save_config_data($limit, $tmp == 0 ? "yes" : $tmp == 1 ? "no" : "error",
|
|
$prompt);
|
|
print "$limits{$limit}\n";
|
|
return $function == 0 ? $limits{$limit} eq "yes" : 0;
|
|
}
|
|
return 1; # more things to check
|
|
}
|
|
print "$limits{$limit}\n";
|
|
return 0 if ($function);
|
|
return $limits{$limit} eq "yes";
|
|
}
|
|
|
|
|
|
sub try_and_report
|
|
{
|
|
my ($prompt,$limit,@tests)=@_;
|
|
my ($tmp,$test,$type);
|
|
|
|
print "$prompt: ";
|
|
if (!defined($limits{$limit}))
|
|
{
|
|
$type="no"; # Not supported
|
|
foreach $test (@tests)
|
|
{
|
|
my $tmp_type= shift(@$test);
|
|
if (safe_query(\@$test))
|
|
{
|
|
$type=$tmp_type;
|
|
goto outer;
|
|
}
|
|
}
|
|
outer:
|
|
save_config_data($limit, $type, $prompt);
|
|
}
|
|
print "$limits{$limit}\n";
|
|
return $limits{$limit} ne "no";
|
|
}
|
|
|
|
#
|
|
# Just execute the query and check values; Returns 1 if ok
|
|
#
|
|
|
|
sub execute_and_check
|
|
{
|
|
my ($pre,$query,$post,$answer,$string_type)=@_;
|
|
my ($tmp);
|
|
|
|
$tmp=safe_query(\@$pre);
|
|
$tmp=safe_query_result($query,$answer,$string_type) == 0 if ($tmp);
|
|
safe_query(\@$post);
|
|
return $tmp;
|
|
}
|
|
|
|
|
|
# returns 0 if ok, 1 if error, -1 if wrong answer
|
|
# Sets $last_result to value of query
|
|
|
|
sub safe_query_result
|
|
{
|
|
my ($query,$answer,$result_type)=@_;
|
|
my ($sth,$row,$result,$retry);
|
|
undef($last_result);
|
|
|
|
printf "\nquery3: %-80.80s\n",$query if ($opt_log_all_queries);
|
|
print LOG "$query;\n" if ($opt_log);
|
|
for ($retry=0; $retry < $retry_limit ; $retry++)
|
|
{
|
|
if (!($sth=$dbh->prepare($query)))
|
|
{
|
|
print_query($query);
|
|
if ($server->abort_if_fatal_error())
|
|
{
|
|
check_connect(); # Check that server is still up
|
|
next; # Retry again
|
|
}
|
|
check_connect(); # Check that server is still up
|
|
return 1;
|
|
}
|
|
if (!$sth->execute)
|
|
{
|
|
print_query($query);
|
|
if ($server->abort_if_fatal_error())
|
|
{
|
|
check_connect(); # Check that server is still up
|
|
next; # Retry again
|
|
}
|
|
check_connect(); # Check that server is still up
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
last;
|
|
}
|
|
}
|
|
if (!($row=$sth->fetchrow_arrayref))
|
|
{
|
|
print "\nquery: $query didn't return any result\n" if ($opt_debug);
|
|
$sth->finish;
|
|
return ($result_type == 8) ? 0 : 1;
|
|
}
|
|
if(result_type == 8) {
|
|
$sth->finish;
|
|
return 1;
|
|
}
|
|
$result=0; # Ok
|
|
$last_result= $row->[0]; # Save for report_result;
|
|
if ($result_type == 0) # Compare numbers
|
|
{
|
|
$row->[0] =~ s/,/,/; # Fix if ',' is used instead of '.'
|
|
if ($row->[0] != $answer && (abs($row->[0]- $answer)/
|
|
(abs($row->[0]) + abs($answer))) > 0.01)
|
|
{
|
|
$result=-1;
|
|
}
|
|
}
|
|
elsif ($result_type == 1) # Compare where end space may differ
|
|
{
|
|
$row->[0] =~ s/\s+$//;
|
|
$result=-1 if ($row->[0] ne $answer);
|
|
}
|
|
elsif ($result_type == 3) # This should be a exact match
|
|
{
|
|
$result= -1 if ($row->[0] ne $answer);
|
|
}
|
|
elsif ($result_type == 4) # If results should be NULL
|
|
{
|
|
$result= -1 if (defined($row->[0]));
|
|
}
|
|
elsif ($result_type == 5) # Result should have given prefix
|
|
{
|
|
$result= -1 if (length($row->[0]) < length($answer) &&
|
|
substring($row->[0],1,length($answer)) ne $answer);
|
|
}
|
|
elsif ($result_type == 6) # Exact match but ignore errors
|
|
{
|
|
$result= 1 if ($row->[0] ne $answer);
|
|
}
|
|
elsif ($result_type == 7) # Compare against array of numbers
|
|
{
|
|
if ($row->[0] != $answer->[0])
|
|
{
|
|
$result= -1;
|
|
}
|
|
else
|
|
{
|
|
my ($value);
|
|
shift @$answer;
|
|
while (($row=$sth->fetchrow_arrayref))
|
|
{
|
|
$value=shift(@$answer);
|
|
if (!defined($value))
|
|
{
|
|
print "\nquery: $query returned to many results\n"
|
|
if ($opt_debug);
|
|
$result= 1;
|
|
last;
|
|
}
|
|
if ($row->[0] != $value)
|
|
{
|
|
$result= -1;
|
|
last;
|
|
}
|
|
}
|
|
if ($#$answer != -1)
|
|
{
|
|
print "\nquery: $query returned too few results\n"
|
|
if ($opt_debug);
|
|
$result= 1;
|
|
}
|
|
}
|
|
}
|
|
$sth->finish;
|
|
print "\nquery: '$query' returned '$row->[0]' instead of '$answer'\n"
|
|
if ($opt_debug && $result && $result_type != 7);
|
|
return $result;
|
|
}
|
|
|
|
#
|
|
# Find limit using binary search. This is a weighed binary search that
|
|
# will prefere lower limits to get the server to crash as few times as possible
|
|
#
|
|
|
|
sub find_limit()
|
|
{
|
|
my ($prompt,$limit,$query)=@_;
|
|
my ($first,$end,$i,$tmp);
|
|
print "$prompt: ";
|
|
if (defined($end=$limits{$limit}))
|
|
{
|
|
print "$end (cache)\n";
|
|
return $end;
|
|
}
|
|
if (defined($query->{'init'}) && !defined($end=$limits{'restart'}{'tohigh'}))
|
|
{
|
|
if (!safe_query($query->{'init'}))
|
|
{
|
|
$query->cleanup();
|
|
return "error";
|
|
}
|
|
}
|
|
|
|
if (!limit_query($query,1)) # This must work
|
|
{
|
|
print "\nMaybe fatal error: Can't check '$prompt' for limit=1\nerror: $last_error\n";
|
|
return "error";
|
|
}
|
|
|
|
$first=0;
|
|
$first=$limits{'restart'}{'low'} if ($limits{'restart'}{'low'});
|
|
|
|
if (defined($end=$limits{'restart'}{'tohigh'}))
|
|
{
|
|
$end--;
|
|
print "\nRestarting this with low limit: $first and high limit: $end\n";
|
|
delete $limits{'restart'};
|
|
$i=$first+int(($end-$first+4)/5); # Prefere lower on errors
|
|
}
|
|
else
|
|
{
|
|
$end= $query->max_limit();
|
|
$i=int(($end+$first)/2);
|
|
}
|
|
|
|
unless(limit_query($query,0+$end)) {
|
|
while ($first < $end)
|
|
{
|
|
print "." if ($opt_debug);
|
|
save_config_data("restart",$i,"") if ($opt_restart);
|
|
if (limit_query($query,$i))
|
|
{
|
|
$first=$i;
|
|
$i=$first+int(($end-$first+1)/2); # to be a bit faster to go up
|
|
}
|
|
else
|
|
{
|
|
$end=$i-1;
|
|
$i=$first+int(($end-$first+4)/5); # Prefere lower on errors
|
|
}
|
|
}
|
|
}
|
|
$end+=$query->{'offset'} if ($end && defined($query->{'offset'}));
|
|
if ($end >= $query->{'max_limit'} &&
|
|
substr($query->{'max_limit'},0,1) eq '+')
|
|
{
|
|
$end= $query->{'max_limit'};
|
|
}
|
|
print "$end\n";
|
|
save_config_data($limit,$end,$prompt);
|
|
delete $limits{'restart'};
|
|
return $end;
|
|
}
|
|
|
|
#
|
|
# Check that the query works!
|
|
#
|
|
|
|
sub assert
|
|
{
|
|
my($query)=@_;
|
|
|
|
if (!safe_query($query))
|
|
{
|
|
$query=join("; ",@$query) if (ref($query) eq "ARRAY");
|
|
print "\nFatal error:\nquery: '$query'\nerror: $DBI::errstr\n";
|
|
exit 1;
|
|
}
|
|
}
|
|
|
|
|
|
sub read_config_data
|
|
{
|
|
my ($key,$limit,$prompt);
|
|
if (-e $opt_config_file)
|
|
{
|
|
open(CONFIG_FILE,"+<$opt_config_file") ||
|
|
die "Can't open configure file $opt_config_file\n";
|
|
print "Reading old values from cache: $opt_config_file\n";
|
|
}
|
|
else
|
|
{
|
|
open(CONFIG_FILE,"+>>$opt_config_file") ||
|
|
die "Can't create configure file $opt_config_file: $!\n";
|
|
}
|
|
select CONFIG_FILE;
|
|
$|=1;
|
|
select STDOUT;
|
|
while (<CONFIG_FILE>)
|
|
{
|
|
chomp;
|
|
if (/^(\S+)=([^\#]*[^\#\s])\s*(\# .*)*$/)
|
|
{
|
|
$key=$1; $limit=$2 ; $prompt=$3;
|
|
if (!$opt_quick || $limit =~ /\d/ || $key =~ /crash_me/)
|
|
{
|
|
if ($key !~ /restart/i)
|
|
{
|
|
$limits{$key}=$limit;
|
|
$prompts{$key}=length($prompt) ? substr($prompt,2) : "";
|
|
delete $limits{'restart'};
|
|
}
|
|
else
|
|
{
|
|
$limit_changed=1;
|
|
if ($limit > $limits{'restart'}{'tohigh'})
|
|
{
|
|
$limits{'restart'}{'low'} = $limits{'restart'}{'tohigh'};
|
|
}
|
|
$limits{'restart'}{'tohigh'} = $limit;
|
|
}
|
|
}
|
|
}
|
|
elsif (!/^\s*$/ && !/^\#/)
|
|
{
|
|
die "Wrong config row: $_\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
sub save_config_data
|
|
{
|
|
my ($key,$limit,$prompt)=@_;
|
|
$prompts{$key}=$prompt;
|
|
return if (defined($limits{$key}) && $limits{$key} eq $limit);
|
|
if (!defined($limit) || $limit eq "")
|
|
{
|
|
die "Undefined limit for $key\n";
|
|
}
|
|
print CONFIG_FILE "$key=$limit\t# $prompt\n";
|
|
$limits{$key}=$limit;
|
|
$limit_changed=1;
|
|
if (($opt_restart && $limits{'operating_system'} =~ /windows/i) ||
|
|
($limits{'operating_system'} =~ /NT/))
|
|
{
|
|
# If perl crashes in windows, everything is lost (Wonder why? :)
|
|
close CONFIG_FILE;
|
|
open(CONFIG_FILE,"+>>$opt_config_file") ||
|
|
die "Can't reopen configure file $opt_config_file: $!\n";
|
|
}
|
|
}
|
|
|
|
|
|
sub save_all_config_data
|
|
{
|
|
my ($key,$tmp);
|
|
close CONFIG_FILE;
|
|
return if (!$limit_changed);
|
|
open(CONFIG_FILE,">$opt_config_file") ||
|
|
die "Can't create configure file $opt_config_file: $!\n";
|
|
select CONFIG_FILE;
|
|
$|=1;
|
|
select STDOUT;
|
|
delete $limits{'restart'};
|
|
|
|
print CONFIG_FILE "#This file is automaticly generated by crash-me $version\n\n";
|
|
foreach $key (sort keys %limits)
|
|
{
|
|
$tmp="$key=$limits{$key}";
|
|
print CONFIG_FILE $tmp . ("\t" x (int((32-min(length($tmp),32)+7)/8)+1)) .
|
|
"# $prompts{$key}\n";
|
|
}
|
|
close CONFIG_FILE;
|
|
}
|
|
|
|
|
|
sub check_repeat
|
|
{
|
|
my ($sth,$limit)=@_;
|
|
my ($row);
|
|
|
|
return 0 if (!($row=$sth->fetchrow_arrayref));
|
|
return (defined($row->[0]) && ('a' x $limit) eq $row->[0]) ? 1 : 0;
|
|
}
|
|
|
|
|
|
sub min
|
|
{
|
|
my($min)=$_[0];
|
|
my($i);
|
|
for ($i=1 ; $i <= $#_; $i++)
|
|
{
|
|
$min=$_[$i] if ($min > $_[$i]);
|
|
}
|
|
return $min;
|
|
}
|
|
|
|
sub sql_concat
|
|
{
|
|
my ($a,$b)= @_;
|
|
return "$a || $b" if ($limits{'func_sql_concat_as_||'} eq 'yes');
|
|
return "concat($a,$b)" if ($limits{'func_odbc_concat'} eq 'yes');
|
|
return "$a + $b" if ($limits{'func_extra_concat_as_+'} eq 'yes');
|
|
return undef;
|
|
}
|
|
|
|
#
|
|
# Returns a list of statements to create a table in a portable manner
|
|
# but still utilizing features in the databases.
|
|
#
|
|
|
|
sub create_table
|
|
{
|
|
my($table_name,$fields,$index) = @_;
|
|
my($query,$nr,$parts,@queries,@index);
|
|
|
|
$query="create table $table_name (";
|
|
$nr=0;
|
|
foreach $field (@$fields)
|
|
{
|
|
$query.= $field . ',';
|
|
}
|
|
foreach $index (@$index)
|
|
{
|
|
$index =~ /\(([^\(]*)\)$/i;
|
|
$parts=$1;
|
|
if ($index =~ /^primary key/)
|
|
{
|
|
if ($limits{'primary_key_in_create'} eq 'yes')
|
|
{
|
|
$query.= $index . ',';
|
|
}
|
|
else
|
|
{
|
|
push(@queries,
|
|
"create unique index ${table_name}_prim on $table_name ($parts)");
|
|
}
|
|
}
|
|
elsif ($index =~ /^unique/)
|
|
{
|
|
if ($limits{'unique_in_create'} eq 'yes')
|
|
{
|
|
$query.= "unique ($parts),";
|
|
}
|
|
else
|
|
{
|
|
$nr++;
|
|
push(@queries,
|
|
"create unique index ${table_name}_$nr on $table_name ($parts)");
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ($limits{'index_in_create'} eq 'yes')
|
|
{
|
|
$query.= "index ($parts),";
|
|
}
|
|
else
|
|
{
|
|
$nr++;
|
|
push(@queries,
|
|
"create index ${table_name}_$nr on $table_name ($1)");
|
|
}
|
|
}
|
|
}
|
|
chop($query);
|
|
$query.= ')';
|
|
unshift(@queries,$query);
|
|
return @queries;
|
|
}
|
|
|
|
|
|
#
|
|
# This is used by some query packages to change:
|
|
# %d -> limit
|
|
# %s -> 'a' x limit
|
|
# %v -> "1,1,1,1,1" where there are 'limit' number of ones
|
|
# %f -> q1,q2,q3....
|
|
# %F -> q1 integer,q2 integer,q3 integer....
|
|
|
|
sub fix_query
|
|
{
|
|
my ($query,$limit)=@_;
|
|
my ($repeat,$i);
|
|
|
|
return $query if !(defined($query));
|
|
$query =~ s/%d/$limit/g;
|
|
if ($query =~ /%s/)
|
|
{
|
|
$repeat= 'a' x $limit;
|
|
$query =~ s/%s/$repeat/g;
|
|
}
|
|
if ($query =~ /%v/)
|
|
{
|
|
$repeat= '1,' x $limit;
|
|
chop($repeat);
|
|
$query =~ s/%v/$repeat/g;
|
|
}
|
|
if ($query =~ /%f/)
|
|
{
|
|
$repeat="";
|
|
for ($i=1 ; $i <= $limit ; $i++)
|
|
{
|
|
$repeat.="q$i,";
|
|
}
|
|
chop($repeat);
|
|
$query =~ s/%f/$repeat/g;
|
|
}
|
|
if ($query =~ /%F/)
|
|
{
|
|
$repeat="";
|
|
for ($i=1 ; $i <= $limit ; $i++)
|
|
{
|
|
$repeat.="q$i integer,";
|
|
}
|
|
chop($repeat);
|
|
$query =~ s/%F/$repeat/g;
|
|
}
|
|
return $query;
|
|
}
|
|
|
|
|
|
#
|
|
# Different query packages
|
|
#
|
|
|
|
package query_repeat;
|
|
|
|
sub new
|
|
{
|
|
my ($type,$init,$query,$add1,$add_mid,$add,$add_end,$end_query,$cleanup,
|
|
$max_limit, $check, $offset)=@_;
|
|
my $self={};
|
|
if (defined($init) && $#$init != -1)
|
|
{
|
|
$self->{'init'}=$init;
|
|
}
|
|
$self->{'query'}=$query;
|
|
$self->{'add1'}=$add1;
|
|
$self->{'add_mid'}=$add_mid;
|
|
$self->{'add'}=$add;
|
|
$self->{'add_end'}=$add_end;
|
|
$self->{'end_query'}=$end_query;
|
|
$self->{'cleanup'}=$cleanup;
|
|
$self->{'max_limit'}=(defined($max_limit) ? $max_limit : $main::query_size);
|
|
$self->{'check'}=$check;
|
|
$self->{'offset'}=$offset;
|
|
$self->{'printf'}= ($add =~ /%d/);
|
|
bless $self;
|
|
}
|
|
|
|
sub query
|
|
{
|
|
my ($self,$limit)=@_;
|
|
if (!$self->{'printf'})
|
|
{
|
|
return $self->{'query'} . ($self->{'add'} x $limit) .
|
|
($self->{'add_end'} x $limit) . $self->{'end_query'};
|
|
}
|
|
my ($tmp,$tmp2,$tmp3,$i);
|
|
$tmp=$self->{'query'};
|
|
if ($self->{'add1'})
|
|
{
|
|
for ($i=0; $i < $limit ; $i++)
|
|
{
|
|
$tmp3 = $self->{'add1'};
|
|
$tmp3 =~ s/%d/$i/g;
|
|
$tmp .= $tmp3;
|
|
}
|
|
}
|
|
$tmp .= " ".$self->{'add_mid'};
|
|
if ($self->{'add'})
|
|
{
|
|
for ($i=0; $i < $limit ; $i++)
|
|
{
|
|
$tmp2 = $self->{'add'};
|
|
$tmp2 =~ s/%d/$i/g;
|
|
$tmp .= $tmp2;
|
|
}
|
|
}
|
|
return ($tmp .
|
|
($self->{'add_end'} x $limit) . $self->{'end_query'});
|
|
}
|
|
|
|
sub max_limit
|
|
{
|
|
my ($self)=@_;
|
|
my $tmp;
|
|
$tmp=int(($main::limits{"query_size"}-length($self->{'query'})
|
|
-length($self->{'add_mid'})-length($self->{'end_query'}))/
|
|
(length($self->{'add1'})+
|
|
length($self->{'add'})+length($self->{'add_end'})));
|
|
return main::min($self->{'max_limit'},$tmp);
|
|
}
|
|
|
|
|
|
sub cleanup
|
|
{
|
|
my ($self)=@_;
|
|
my($tmp,$statement);
|
|
$tmp=$self->{'cleanup'};
|
|
foreach $statement (@$tmp)
|
|
{
|
|
main::safe_query($statement) if (defined($statement) && length($statement));
|
|
}
|
|
}
|
|
|
|
sub check
|
|
{
|
|
my ($self,$sth)=@_;
|
|
my $check=$self->{'check'};
|
|
return &$check($sth,$self->{'limit'}) if (defined($check));
|
|
return 1;
|
|
}
|
|
|
|
sub check_query
|
|
{
|
|
return undef;
|
|
}
|
|
|
|
|
|
package query_num;
|
|
|
|
sub new
|
|
{
|
|
my ($type,$query,$end_query,$cleanup,$max_limit,$check)=@_;
|
|
my $self={};
|
|
$self->{'query'}=$query;
|
|
$self->{'end_query'}=$end_query;
|
|
$self->{'cleanup'}=$cleanup;
|
|
$self->{'max_limit'}=$max_limit;
|
|
$self->{'check'}=$check;
|
|
bless $self;
|
|
}
|
|
|
|
|
|
sub query
|
|
{
|
|
my ($self,$i)=@_;
|
|
$self->{'limit'}=$i;
|
|
return "$self->{'query'}$i$self->{'end_query'}";
|
|
}
|
|
|
|
sub max_limit
|
|
{
|
|
my ($self)=@_;
|
|
return $self->{'max_limit'};
|
|
}
|
|
|
|
sub cleanup
|
|
{
|
|
my ($self)=@_;
|
|
my($statement);
|
|
foreach $statement ($self->{'$cleanup'})
|
|
{
|
|
main::safe_query($statement) if (defined($statement) && length($statement));
|
|
}
|
|
}
|
|
|
|
|
|
sub check
|
|
{
|
|
my ($self,$sth)=@_;
|
|
my $check=$self->{'check'};
|
|
return &$check($sth,$self->{'limit'}) if (defined($check));
|
|
return 1;
|
|
}
|
|
|
|
sub check_query
|
|
{
|
|
return undef;
|
|
}
|
|
|
|
#
|
|
# This package is used when testing CREATE TABLE!
|
|
#
|
|
|
|
package query_table;
|
|
|
|
sub new
|
|
{
|
|
my ($type,$query, $add, $end_query, $extra_init, $safe_query, $check,
|
|
$cleanup, $max_limit, $offset)=@_;
|
|
my $self={};
|
|
$self->{'query'}=$query;
|
|
$self->{'add'}=$add;
|
|
$self->{'end_query'}=$end_query;
|
|
$self->{'extra_init'}=$extra_init;
|
|
$self->{'safe_query'}=$safe_query;
|
|
$self->{'check'}=$check;
|
|
$self->{'cleanup'}=$cleanup;
|
|
$self->{'max_limit'}=$max_limit;
|
|
$self->{'offset'}=$offset;
|
|
bless $self;
|
|
}
|
|
|
|
|
|
sub query
|
|
{
|
|
my ($self,$limit)=@_;
|
|
$self->{'limit'}=$limit;
|
|
$self->cleanup(); # Drop table before create
|
|
|
|
my ($tmp,$tmp2,$i,$query,@res);
|
|
$tmp =$self->{'query'};
|
|
$tmp =~ s/%d/$limit/g;
|
|
for ($i=1; $i <= $limit ; $i++)
|
|
{
|
|
$tmp2 = $self->{'add'};
|
|
$tmp2 =~ s/%d/$i/g;
|
|
$tmp .= $tmp2;
|
|
}
|
|
push(@res,$tmp . $self->{'end_query'});
|
|
$tmp=$self->{'extra_init'};
|
|
foreach $query (@$tmp)
|
|
{
|
|
push(@res,main::fix_query($query,$limit));
|
|
}
|
|
return \@res;
|
|
}
|
|
|
|
|
|
sub max_limit
|
|
{
|
|
my ($self)=@_;
|
|
return $self->{'max_limit'};
|
|
}
|
|
|
|
|
|
sub check_query
|
|
{
|
|
my ($self)=@_;
|
|
return main::fix_query($self->{'safe_query'},$self->{'limit'});
|
|
}
|
|
|
|
sub check
|
|
{
|
|
my ($self,$sth)=@_;
|
|
my $check=$self->{'check'};
|
|
return 0 if (!($row=$sth->fetchrow_arrayref));
|
|
if (defined($check))
|
|
{
|
|
return (defined($row->[0]) &&
|
|
$row->[0] eq main::fix_query($check,$self->{'limit'})) ? 1 : 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
# Remove table before and after create table query
|
|
|
|
sub cleanup()
|
|
{
|
|
my ($self)=@_;
|
|
main::safe_query(main::fix_query($self->{'cleanup'},$self->{'limit'}));
|
|
}
|
|
|
|
#
|
|
# Package to do many queries with %d, and %s substitution
|
|
#
|
|
|
|
package query_many;
|
|
|
|
sub new
|
|
{
|
|
my ($type,$query,$safe_query,$check_result,$cleanup,$max_limit,$offset,
|
|
$safe_cleanup)=@_;
|
|
my $self={};
|
|
$self->{'query'}=$query;
|
|
$self->{'safe_query'}=$safe_query;
|
|
$self->{'check'}=$check_result;
|
|
$self->{'cleanup'}=$cleanup;
|
|
$self->{'max_limit'}=$max_limit;
|
|
$self->{'offset'}=$offset;
|
|
$self->{'safe_cleanup'}=$safe_cleanup;
|
|
bless $self;
|
|
}
|
|
|
|
|
|
sub query
|
|
{
|
|
my ($self,$limit)=@_;
|
|
my ($queries,$query,@res);
|
|
$self->{'limit'}=$limit;
|
|
$self->cleanup() if (defined($self->{'safe_cleanup'}));
|
|
$queries=$self->{'query'};
|
|
foreach $query (@$queries)
|
|
{
|
|
push(@res,main::fix_query($query,$limit));
|
|
}
|
|
return \@res;
|
|
}
|
|
|
|
sub check_query
|
|
{
|
|
my ($self)=@_;
|
|
return main::fix_query($self->{'safe_query'},$self->{'limit'});
|
|
}
|
|
|
|
sub cleanup
|
|
{
|
|
my ($self)=@_;
|
|
my($tmp,$statement);
|
|
return if (!defined($self->{'cleanup'}));
|
|
$tmp=$self->{'cleanup'};
|
|
foreach $statement (@$tmp)
|
|
{
|
|
if (defined($statement) && length($statement))
|
|
{
|
|
main::safe_query(main::fix_query($statement,$self->{'limit'}));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
sub check
|
|
{
|
|
my ($self,$sth)=@_;
|
|
my ($check,$row);
|
|
return 0 if (!($row=$sth->fetchrow_arrayref));
|
|
$check=$self->{'check'};
|
|
if (defined($check))
|
|
{
|
|
return (defined($row->[0]) &&
|
|
$row->[0] eq main::fix_query($check,$self->{'limit'})) ? 1 : 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
sub max_limit
|
|
{
|
|
my ($self)=@_;
|
|
return $self->{'max_limit'};
|
|
}
|
|
|
|
#
|
|
# Used to find max supported row length
|
|
#
|
|
|
|
package query_row_length;
|
|
|
|
sub new
|
|
{
|
|
my ($type,$create,$null,$drop,$max_limit)=@_;
|
|
my $self={};
|
|
$self->{'table_name'}=$create;
|
|
$self->{'null'}=$null;
|
|
$self->{'cleanup'}=$drop;
|
|
$self->{'max_limit'}=$max_limit;
|
|
bless $self;
|
|
}
|
|
|
|
|
|
sub query
|
|
{
|
|
my ($self,$limit)=@_;
|
|
my ($res,$values,$size,$length,$i);
|
|
$self->{'limit'}=$limit;
|
|
|
|
$res="";
|
|
$size=main::min($main::limits{'max_char_size'},255);
|
|
$size = 255 if (!$size); # Safety
|
|
for ($length=$i=0; $length + $size <= $limit ; $length+=$size, $i++)
|
|
{
|
|
$res.= "q$i char($size) $self->{'null'},";
|
|
$values.="'" . ('a' x $size) . "',";
|
|
}
|
|
if ($length < $limit)
|
|
{
|
|
$size=$limit-$length;
|
|
$res.= "q$i char($size) $self->{'null'},";
|
|
$values.="'" . ('a' x $size) . "',";
|
|
}
|
|
chop($res);
|
|
chop($values);
|
|
return ["create table " . $self->{'table_name'} . " ($res)",
|
|
"insert into " . $self->{'table_name'} . " values ($values)"];
|
|
}
|
|
|
|
sub max_limit
|
|
{
|
|
my ($self)=@_;
|
|
return $self->{'max_limit'};
|
|
}
|
|
|
|
sub cleanup
|
|
{
|
|
my ($self)=@_;
|
|
main::safe_query($self->{'cleanup'});
|
|
}
|
|
|
|
|
|
sub check
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
sub check_query
|
|
{
|
|
return undef;
|
|
}
|
|
|
|
#
|
|
# Used to find max supported index length
|
|
#
|
|
|
|
package query_index_length;
|
|
|
|
sub new
|
|
{
|
|
my ($type,$create,$drop,$max_limit)=@_;
|
|
my $self={};
|
|
$self->{'create'}=$create;
|
|
$self->{'cleanup'}=$drop;
|
|
$self->{'max_limit'}=$max_limit;
|
|
bless $self;
|
|
}
|
|
|
|
|
|
sub query
|
|
{
|
|
my ($self,$limit)=@_;
|
|
my ($res,$size,$length,$i,$parts,$values);
|
|
$self->{'limit'}=$limit;
|
|
|
|
$res=$parts=$values="";
|
|
$size=main::min($main::limits{'max_index_part_length'},$main::limits{'max_char_size'});
|
|
$size=1 if ($size == 0); # Avoid infinite loop errors
|
|
for ($length=$i=0; $length + $size <= $limit ; $length+=$size, $i++)
|
|
{
|
|
$res.= "q$i char($size) not null,";
|
|
$parts.= "q$i,";
|
|
$values.= "'" . ('a' x $size) . "',";
|
|
}
|
|
if ($length < $limit)
|
|
{
|
|
$size=$limit-$length;
|
|
$res.= "q$i char($size) not null,";
|
|
$parts.="q$i,";
|
|
$values.= "'" . ('a' x $size) . "',";
|
|
}
|
|
chop($parts);
|
|
chop($res);
|
|
chop($values);
|
|
if ($main::limits{'unique_in_create'} eq 'yes')
|
|
{
|
|
return [$self->{'create'} . "($res,unique ($parts))",
|
|
"insert into crash_q values($values)"];
|
|
}
|
|
return [$self->{'create'} . "($res)",
|
|
"create index crash_q_index on crash_q ($parts)",
|
|
"insert into crash_q values($values)"];
|
|
}
|
|
|
|
sub max_limit
|
|
{
|
|
my ($self)=@_;
|
|
return $self->{'max_limit'};
|
|
}
|
|
|
|
sub cleanup
|
|
{
|
|
my ($self)=@_;
|
|
main::safe_query($self->{'cleanup'});
|
|
}
|
|
|
|
|
|
sub check
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
sub check_query
|
|
{
|
|
return undef;
|
|
}
|
|
|
|
|
|
### TODO:
|
|
# OID test instead of / in addition to _rowid
|