--- myodbc-3.51.11.orig/debian/README.Maintainer +++ myodbc-3.51.11/debian/README.Maintainer @@ -0,0 +1,7 @@ +autoconf: + To get autoconf know that it should use v2.50 I had to rename configure.in + to configure.ac. +Versioning: + The shared lib is called libmyodbc2.20.30.so instead of libmyodbc.so.x.y.z + so a dynamic linked program would not know that libmyodbc2.20.32.so would + be acceptable, too. I complained the author! --- myodbc-3.51.11.orig/debian/rules +++ myodbc-3.51.11/debian/rules @@ -0,0 +1,101 @@ +#!/usr/bin/make -f +#-*- makefile -*- +# Made with the aid of dh_make, by Craig Small +# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. +# This version is for a hypothetical package that builds an +# architecture-dependant package, as well as an architecture-independant +# package. + +#export DH_VERBOSE=1 +export DH_COMPAT=3 + +# Authoritative build/host types for the Debian archen. +DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += --build $(DEB_HOST_GNU_TYPE) +else + confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) +endif + +# Support the DEB_BUILD_OPTIONS variable +CFLAGS = -g -Wall + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +build: build-stamp +build-stamp: + dh_testdir + + CPPFLAGS="-D_REENTRANT -D_GNU_SOURCE" \ + CFLAGS="${CFLAGS}" \ + ./configure $(confflags) \ + --prefix=/usr \ + --enable-shared \ + --enable-thread-safe \ + --with-unixODBC=/usr \ + --disable-gui \ + --with-mysql-libs=/usr/lib \ + --with-mysql-includes=/usr/include/mysql + $(MAKE) + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp install-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) clean + -$(MAKE) distclean + + dh_clean + +install: install-stamp +install-stamp: build-stamp + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/$(dirname). + $(MAKE) install prefix=`pwd`/debian/tmp/usr libdir=`pwd`/debian/tmp/usr/lib/odbc + + rm `pwd`/debian/tmp/usr/lib/odbc/libmyodbc3.* + rm `pwd`/debian/tmp/usr/lib/odbc/libmyodbc3_r.* + rm `pwd`/debian/tmp/usr/lib/odbc/libmyodbc3-3.* + mv `pwd`/debian/tmp/usr/lib/odbc/libmyodbc3_r-3.51.11.so `pwd`/debian/tmp/usr/lib/odbc/libmyodbc.so + mkdir -p `pwd`/debian/tmp/usr/share/libmyodbc + install -m644 debian/odbcinst.ini `pwd`/debian/tmp/usr/share/libmyodbc + + touch install-stamp + +binary-indep: build install + +binary-arch: build install + dh_testdir -a + dh_testroot -a + dh_installdirs -a + dh_movefiles -a + dh_installdocs -a + dh_installexamples -a + dh_installchangelogs -a ChangeLog + dh_installdebconf -a + dh_link -a + dh_strip -a + dh_compress -a + dh_fixperms -a + dh_installdeb -a + dh_perl -a + dh_shlibdeps -a + dh_gencontrol -a + dh_md5sums -a + dh_builddeb -a + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install --- myodbc-3.51.11.orig/debian/config +++ myodbc-3.51.11/debian/config @@ -0,0 +1,17 @@ +#!/bin/sh + +action=$1 +version=$2 + +# Source debconf library. +. /usr/share/debconf/confmodule +db_version 2.0 + +if [ -e /usr/bin/odbcinst -a "$action" = configure ] +then + db_title "ODBC Setup" + + db_input medium libmyodbc/addtoodbc || true + db_go +fi +exit 0 --- myodbc-3.51.11.orig/debian/watch +++ myodbc-3.51.11/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://mysql.osuosl.org/Downloads/MyODBC3/MyODBC-([0-9.]+)\.tar\.gz --- myodbc-3.51.11.orig/debian/odbcinst.ini +++ myodbc-3.51.11/debian/odbcinst.ini @@ -0,0 +1,6 @@ +[MySQL] +Description = MySQL driver +Driver = /usr/lib/odbc/libmyodbc.so +Setup = /usr/lib/odbc/libodbcmyS.so +CPTimeout = +CPReuse = --- myodbc-3.51.11.orig/debian/copyright +++ myodbc-3.51.11/debian/copyright @@ -0,0 +1,25 @@ +This package was debianized by Christian Hammers on +Sun, 3 Oct 1999 11:46:10 +0200. + +It was downloaded from http://www.mysql.org + +Upstream Authors: Michael 'Monty' Widenius, TCX Datakonsult AB + +Copyright: + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation +Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. --- myodbc-3.51.11.orig/debian/postinst +++ myodbc-3.51.11/debian/postinst @@ -0,0 +1,20 @@ +#!/bin/sh + +# Source debconf library. +. /usr/share/debconf/confmodule + +db_version 2.0 + +# Always add in the postinst, always delete in the prerm -- this way, +# we'll always have a good reference count in odbcinst.ini. +if [ -e /usr/bin/odbcinst ] +then + db_get libmyodbc/addtoodbc || true + if [ "$RET" = "true" ]; then + odbcinst -i -d -f /usr/share/libmyodbc/odbcinst.ini 1>&2 + fi +fi + +db_stop + +#DEBHELPER# --- myodbc-3.51.11.orig/debian/README.Debian +++ myodbc-3.51.11/debian/README.Debian @@ -0,0 +1,8 @@ +MyODBC for Debian +---------------------- + +I decided to build no -dev package since it was already so small and +due to the strange version numbering system I expect the headers +not to stay compatible for another release. + + -- Christian Hammers , Sun, 17 Oct 1999 13:26:59 +0200 --- myodbc-3.51.11.orig/debian/libmyodbc.examples +++ myodbc-3.51.11/debian/libmyodbc.examples @@ -0,0 +1 @@ +odbc.ini --- myodbc-3.51.11.orig/debian/libmyodbc.dirs +++ myodbc-3.51.11/debian/libmyodbc.dirs @@ -0,0 +1,2 @@ +usr/lib/odbc +usr/share/libmyodbc --- myodbc-3.51.11.orig/debian/templates +++ myodbc-3.51.11/debian/templates @@ -0,0 +1,10 @@ +Template: libmyodbc/addtoodbc +Type: boolean +Default: false +_Description: Do you want MyODBC to be registered as an ODBC driver? + You appear to have an ODBC manager (unixodbc or iODBC) installed on your + system. + . + If you wish, MyODBC will be automatically added as an ODBC driver now and + will be automatically deleted from the list when you remove the libmyodbc + package, using the /usr/bin/odbcinst utility from unixodbc. --- myodbc-3.51.11.orig/debian/changelog +++ myodbc-3.51.11/debian/changelog @@ -0,0 +1,262 @@ +myodbc (3.51.11-6.1) unstable; urgency=low + + * Non-maintainer upload. + + * Added German translation (thanks Matthias Julius) (Closes: #397639) + + -- Bastian Venthur Sun, 28 Jan 2007 13:21:40 +0100 + +myodbc (3.51.11-6) unstable; urgency=low + + * Add Swedish debconf translation, thanks to Daniel Nylander + (closes: #331559). + * Rebuild against libmysqlclient15-dev, as libmysqlclient12 no longer + exists. Closes: #353997. + * Also rebuild against unixodbc-dev (>= 2.2.11-13), to pull in a small + ABI change on 64-bit archs that's been backported from 2.2.12. This + also requires a patch to driver/prepare.c. + * No longer specify extra build flags to request a 64-bit-clean ABI; + the headers from the unixodbc-dev package have been fixed to always + declare this for us. + + -- Steve Langasek Thu, 25 May 2006 15:14:40 -0700 + +myodbc (3.51.11-5) unstable; urgency=low + + * Use ${misc:Depends} instead of hard-coding a dependency on debconf, + for compatibility with cdebconf. + + -- Steve Langasek Fri, 5 Aug 2005 04:39:19 -0700 + +myodbc (3.51.11-4) unstable; urgency=low + + * Doesn't build cleanly with REAL_64_BIT_MODE: fix some conflicting + types in MyODBC so that they're 64-bittable. + + -- Steve Langasek Tue, 28 Jun 2005 16:07:14 -0700 + +myodbc (3.51.11-3) unstable; urgency=low + + * Rebuild against unixodbc 2.2.11. + * Set BUILD_REAL_64_BIT_MODE define for the benefit of 64-bit archs, + which seems to have been missed previously. + + -- Steve Langasek Fri, 17 Jun 2005 05:54:13 -0700 + +myodbc (3.51.11-2) unstable; urgency=low + + * Add missing header includes to fix 64-bit issues; thanks to Dann + Frazier for the patch (closes: #314165). + * Add a direct Build-Dependency on libltdl3-dev since we're using + headers from it, rather than relying on unixodbc-dev to pull it in + for us. + * Disable the Qt-based GUI setup library, unless someone asks for it + (it wasn't being used anyway, since we're specifying the unixodbc + setup lib in odbcinst.ini). + + -- Steve Langasek Wed, 15 Jun 2005 03:00:04 -0700 + +myodbc (3.51.11-1) unstable; urgency=low + + * New upstream release + * Add debian/watch to keep more easily in sync with upstream + * Add Vietnamese debconf translation, thanks to Clytie Siddall + (closes: #312997). + + -- Steve Langasek Mon, 13 Jun 2005 20:04:16 -0700 + +myodbc (3.51.09-1) unstable; urgency=low + + * New upstream release + - includes compatibility with newer versions of MySQL servers + (closes: #274879). + * Build-Depend on libmysqclient12-dev instead of on + libmysqlclient10-dev, required by the new upstream version + (closes: #245231). + * Update debian/rules to honor DEB_BUILD_OPTIONS and turn on -g by + default, bringing us in line with Standards-Version 3.6.1. + * Add Japanese debconf translation, thanks to Hideki Yamane + (closes: #237175). + * Add Czech debconf translation, thanks to Miroslav Kure + (closes: #283221). + + -- Steve Langasek Wed, 9 Mar 2005 14:13:36 -0800 + +myodbc (3.51.06-1) unstable; urgency=low + + * New upstream release (closes: #149461). + * Add French debconf translations, thanks to Clément Stenac + (closes: #232839). + + -- Steve Langasek Sun, 15 Feb 2004 14:59:29 -0600 + +myodbc (2.50.39-6) unstable; urgency=low + + * Change to using po-debconf for debconf template translations. + * Provide a more verbose package description (closes: #209878). + * Remove build-depends on autotools. + * Fix --host and --build options passed to configure in ./debian/rules. + + -- Steve Langasek Sat, 7 Feb 2004 17:52:11 -0600 + +myodbc (2.50.39-5) unstable; urgency=low + + * Build-dep on autoconf and call 'autoconf' instead of 'autoconf2.50', + so that autobuilders know what to do with us again (closes: #162725) + + -- Steve Langasek Sun, 29 Sep 2002 00:39:27 -0500 + +myodbc (2.50.39-4) unstable; urgency=low + + * make sure our examples set a good example (closes: #162005) + + -- Steve Langasek Mon, 23 Sep 2002 21:42:58 -0500 + +myodbc (2.50.39-3) unstable; urgency=low + + * Merge in Russian debconf templates, thanks to Ilgiz Kalmetev + . (Closes: #137671) + + -- Steve Langasek Sun, 10 Mar 2002 12:53:20 -0600 + +myodbc (2.50.39-2) unstable; urgency=medium + + * db_stop was being called too early in the postrm script, and broke + things Badly. Move to the end of the script. (Closes: #136274). + + -- Steve Langasek Fri, 1 Mar 2002 14:42:41 -0600 + +myodbc (2.50.39-1) unstable; urgency=low + + * New upstream release + * Add a package relationship for unixodbc | libiodbc2. + + -- Steve Langasek Sun, 24 Feb 2002 23:01:06 -0600 + +myodbc (2.50.37-7) unstable; urgency=low + + * Admit that static linking was a bad idea. Switch back to using + dynamic linking, now that there's a separate odbcinst package. + Build-depend appropriately. + + -- Steve Langasek Mon, 14 Jan 2002 21:06:04 -0600 + +myodbc (2.50.37-6) unstable; urgency=low + + * Change package name: myodbc is a plugin, not a normal shared + library, and versioned package names are an inconvenience. + * Likewise, disable building of static libs, and remove header files + from the package, since nothing uses them. + * Move .so file to /usr/lib/odbc, and remove dh_makeshlibs reference. + * Fix aclocal.m4 to look for $ac_header instead of $ac_hdr, since + the name has changed w/ autoconf 2.5. Fixes build on arm, ia64, + hppa, and mips, at least. + * Remove --with-odbc-ini argument to configure, only needed when using + the internal ini-file handling. + * Oh, and while we're at it, add support to debian/rules for + cross-compiling packages. + + -- Steve Langasek Mon, 7 Jan 2002 19:18:32 -0600 + +myodbc2.50.37 (2.50.37-5) unstable; urgency=low + + * New maintainer + * Change package to build against unixodbc-dev instead of libiodbc2-dev, + fixes ABI problems on Alpha platform. + * Force static linking against libodbcinst, so that we avoid a + dependency on unixodbc. + * Add support for automatically registering as a driver on + installation if unixodbc is installed (closes: #107038) + * Disable DH_VERBOSE, because it's annoying to read. :) + + -- Steve Langasek Mon, 31 Dec 2001 12:23:00 -0600 + +myodbc2.50.37 (2.50.37-4) unstable; urgency=low + + * Added autoconf patches to let it build on ia64. + Hopefully closes #110074. Thanks to Jeff Lincquia for this. + + -- Christian Hammers Tue, 6 Nov 2001 23:51:00 +0100 + +myodbc2.50.37 (2.50.37-3) unstable; urgency=low + + * Approving NMU. + + -- Christian Hammers Tue, 7 Aug 2001 21:31:05 +0200 + +myodbc2.50.37 (2.50.37-2.1) unstable; urgency=low + + * NMU + * Run libtoolize/aclocal for new arch support. Closes: #107655 + + -- LaMont Jones Fri, 3 Aug 2001 22:19:56 -0600 + +myodbc2.50.37 (2.50.37-2) unstable; urgency=low + + * Recompiled in current unstable. Closes: #98190 + * Fixed configure directive. + + -- Christian Hammers Mon, 21 May 2001 10:09:53 +0200 + +myodbc2.50.37 (2.50.37-1) unstable; urgency=low + + * New upstream. Now fully supports transactions. + + -- Christian Hammers Sat, 28 Apr 2001 19:10:43 +0200 + +myodbc2.50.32 (2.50.32-5) unstable; urgency=low + + * Added Build-Depends for libiodbc2-dev. Closes: #81801 + * No code change. + + -- Christian Hammers Sun, 18 Feb 2001 05:21:49 +0100 + +myodbc2.50.32 (2.50.32-4) testing unstable; urgency=low + + * This one should be in woody and sid! + * Added build-depends for debhelper. + + -- Christian Hammers Fri, 29 Dec 2000 17:00:08 +0100 + +myodbc2.50.32 (2.50.32-3) unstable; urgency=low + + * Added build-depends for debhelper. + + -- Christian Hammers Fri, 29 Dec 2000 17:00:08 +0100 + +myodbc2.50.32 (2.50.32-2) unstable; urgency=low + + * Recompiled against libmysqlclient10. + + -- Christian Hammers Wed, 11 Oct 2000 23:08:25 +0200 + +myodbc2.50.32 (2.50.32-1) unstable; urgency=low + + * New upstream version. + * (As always, forgive the package versioning, it's forced due to upstream + versioning of the shared library) + + -- Christian Hammers Tue, 12 Sep 2000 06:57:40 +0200 + +myodbc2.50.28 (2.50.28-2) frozen unstable; urgency=low + + * Applied a small upstream bug fix. + + -- Christian Hammers Tue, 22 Feb 2000 17:29:45 +0100 + +myodbc2.50.28 (2.50.28-1) unstable; urgency=low + + * New upstream release. + * Now compilable without full mysql source. Closes: #51643 + + -- Christian Hammers Sat, 4 Dec 1999 20:06:34 +0100 + +myodbc2.50.26 (2.50.26-1) unstable; urgency=low + + * Initial Release. + + -- Christian Hammers Sun, 3 Oct 1999 11:46:10 +0200 + +Local variables: +mode: debian-changelog +End: --- myodbc-3.51.11.orig/debian/control +++ myodbc-3.51.11/debian/control @@ -0,0 +1,19 @@ +Source: myodbc +Section: libs +Priority: optional +Maintainer: Steve Langasek +Standards-Version: 3.6.1 +Build-Depends: debhelper (>= 3.0.0), libmysqlclient15-dev, zlib1g-dev (>= 1:1.1.3), unixodbc-dev (>= 2.2.11-1), libltdl3-dev + +Package: libmyodbc +Section: libs +Architecture: any +Replaces: libmyodbc2.50.26, libmyodbc2.50.28, libmyodbc2.50.32, libmyodbc2.50.37 +Conflicts: libmyodbc2.50.26, libmyodbc2.50.28, libmyodbc2.50.32, libmyodbc2.50.37, unixodbc (<< 2.1.1-2) +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: unixodbc | libiodbc2 +Description: the MySQL ODBC driver + This package allows you to connect to MySQL database servers using + ODBC, the Open Database Connectivity abstraction layer which is + understood by a variety of database tools that cannot talk to MySQL + databases directly. --- myodbc-3.51.11.orig/debian/libmyodbc.files +++ myodbc-3.51.11/debian/libmyodbc.files @@ -0,0 +1,2 @@ +usr/lib/odbc/*.so +usr/share/libmyodbc/* --- myodbc-3.51.11.orig/debian/postrm +++ myodbc-3.51.11/debian/postrm @@ -0,0 +1,19 @@ +#!/bin/sh + +set -e + +if [ -x /usr/bin/odbcinst ] +then + # Source debconf library. + . /usr/share/debconf/confmodule + db_version 2.0 + + db_get libmyodbc/addtoodbc || true + if [ "$RET" = "true" ]; then + odbcinst -u -d -n MySQL + fi +fi + +#DEBHELPER# + +db_stop --- myodbc-3.51.11.orig/debian/po/POTFILES.in +++ myodbc-3.51.11/debian/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] templates --- myodbc-3.51.11.orig/debian/po/de.po +++ myodbc-3.51.11/debian/po/de.po @@ -0,0 +1,54 @@ +# translation of po-debconf template to German +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans# +# Developers do not need to manually edit POT or PO files. +# +# Matthias Julius , 2006. +msgid "" +msgstr "" +"Project-Id-Version: myodbc 3.51.11-6\n" +"Report-Msgid-Bugs-To: myodbc@packages.debian.org\n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: 2006-11-04 08:19-0500\n" +"Last-Translator: Matthias Julius \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "Wollen Sie MyODBC als ODBC-Treiber registrieren?" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +"Es scheint ein ODBC-Manager (unixodbc oder iODBC) auf Ihrem System installiert " +"zu sein." + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" +"Wenn Sie möchten, wird MyODBC jetzt automatisch als ODBC-Treiber hinzugefügt " +"und automatisch von der Liste gelöscht, wenn Sie das Paket libmyodbc entfernen. " +"Dazu wird /usr/bin/odbcinst aus unixodbc verwendet." + --- myodbc-3.51.11.orig/debian/po/ru.po +++ myodbc-3.51.11/debian/po/ru.po @@ -0,0 +1,53 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=KOI8-R\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr " MyODBC ODBC?" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +" ODBC (unixodbc " +"iODBC)." + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" +" , MyODBC ODBC " +" libmyodbc, " +" /usr/bin/odbcinst." --- myodbc-3.51.11.orig/debian/po/fr.po +++ myodbc-3.51.11/debian/po/fr.po @@ -0,0 +1,53 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: myodbc_2.50.39-6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: 2004-02-10 10:55+0100\n" +"Last-Translator: Clment Stenac \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "Souhaitez-vous que MyODBC soit enregistr en tant que pilote ODBC?" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +"Il semble qu'un gestionnaire ODBC (unixodbc ou iODBC) soit install sur " +"votre systme." + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" +"Si vous le souhaitez, MyODBC sera automatiquement ajout en tant que pilote " +"ODBC maintenant et sera automatiquement retir de la liste lorsque vous " +"supprimerez le paquet libmyodbc, grce l'utilitaire /usr/bin/odbcinst " +"d'unixodbc." --- myodbc-3.51.11.orig/debian/po/sv.po +++ myodbc-3.51.11/debian/po/sv.po @@ -0,0 +1,52 @@ +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# Developers do not need to manually edit POT or PO files. +# , fuzzy +# +# +msgid "" +msgstr "" +"Project-Id-Version: myodbc 3.51.11-5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: 2005-10-05 02:11+0200\n" +"Last-Translator: Daniel Nylander \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "Vill du att MyODBC ska registreras som en ODBC-drivare?" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +"Du verkar ha en ODBC-hanterare (unixodbc eller iODBC) installerat p ditt " +"system." + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" +"Om du nskar kan MyODBC automatiskt lggas till som en ODBC-drivare nu och " +"kommer att automatiskt tas bort frn listan nr du tar bort myodbc-paketet med verktyget " +"/usr/bin/odbcinst frn paketet unixodbc." + --- myodbc-3.51.11.orig/debian/po/cs.po +++ myodbc-3.51.11/debian/po/cs.po @@ -0,0 +1,52 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: myodbc\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: 2004-11-27 10:45+0100\n" +"Last-Translator: Miroslav Kure \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "Chcete MyODBC zaregistrovat jako ODBC ovlada?" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +"Zd se, e mte na svm systmu nainstalovanho sprvce ODBC (unixodbc nebo " +"iODBC)." + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" +"Pokud chcete, me se nyn MyODBC automaticky pidat jako ODBC ovlada a " +"pozdji, a odstrante libmyodbc, zase automaticky ze seznamu odstranit. " +"(Pro tyto akce se pouije nstroj /usr/bin/odbcinst z balku unixodbc.)" --- myodbc-3.51.11.orig/debian/po/templates.pot +++ myodbc-3.51.11/debian/po/templates.pot @@ -0,0 +1,48 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" --- myodbc-3.51.11.orig/debian/po/es.po +++ myodbc-3.51.11/debian/po/es.po @@ -0,0 +1,53 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "Quiere que el MyODBC se registre como driver de ODBC?" + +#. Type: boolean +#. Description +#: ../templates:4 +#, fuzzy +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +"Parece que est instalado un gerente de ODBC (conectividad abierta de bases " +"de dados), como unixodbc o iODBC. Si lo desea, se usar la herramienta /usr/" +"bin/odbcinst para automaticamente aadir el MyODBC a la lista de drivers " +"ahora y para luego quitarlo al remover el paquete libmyodbc." + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" --- myodbc-3.51.11.orig/debian/po/vi.po +++ myodbc-3.51.11/debian/po/vi.po @@ -0,0 +1,44 @@ +# Vietnamese Translation for myodbc. +# Copyright © 2005 Free Software Foundation, Inc. +# Clytie Siddall , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: myodbc 3.51.09-1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: 2005-06-11 16:44+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "Bạn có muốn đăng ký MyODBC là một trình hỗ trợ thiết bị ODBC không?" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +"Hình như bạn đã cài đặt một trình quản lý ODBC (unixodbc hay iODBC) trong hệ " +"thống này rồi." + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" +"Nếu bạn muốn thì trình này sẻ tự động thêm MyODBC là một trình hỗ trợ thiết " +"bị ODBC ngay bây giờ, và sẽ tự động xóa bỏ nó ra danh sách khi bạn loại bỏ " +"gói tin «libmyodbc», dùng tiện ích «/usr/bin/odbcinst» từ «unixodbc»." --- myodbc-3.51.11.orig/debian/po/ja.po +++ myodbc-3.51.11/debian/po/ja.po @@ -0,0 +1,53 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +# +msgid "" +msgstr "" +"Project-Id-Version: myodbc 3.51.06\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-12-01 04:52-0800\n" +"PO-Revision-Date: 2004-03-02 02:00+0900\n" +"Last-Translator: Hideki Yamane \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "Do you want MyODBC to be registered as an ODBC driver?" +msgstr "ODBC ɥ饤ФȤ MyODBC Ͽޤ?" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"You appear to have an ODBC manager (unixodbc or iODBC) installed on your " +"system." +msgstr "" +"ODBC ޥ͡ (unixodbc ޤ iODBC) ƥ˥󥹥ȡ뤵Ƥ" +"Ǥ" + +#. Type: boolean +#. Description +#: ../templates:4 +msgid "" +"If you wish, MyODBC will be automatically added as an ODBC driver now and " +"will be automatically deleted from the list when you remove the libmyodbc " +"package, using the /usr/bin/odbcinst utility from unixodbc." +msgstr "" +"⤷˾ʤ顢MyODBC Ϥ ODBC ɥ饤ФȤƼưŪϿ졢libmyodbc " +"ѥå줿ݤ onixodbc /usr/bin/odbcinst 桼ƥƥ" +"ƥɥ饤ХꥹȤ鼫ưŪ˺ޤ" --- myodbc-3.51.11.orig/Docs/Makefile +++ myodbc-3.51.11/Docs/Makefile @@ -0,0 +1,562 @@ +# Makefile.in generated by automake 1.7.6 from Makefile.am. +# Docs/Makefile. Generated from Makefile.in by configure. + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +########################################################################## +# Copyright (C) 1995-2002 MySQL AB, www.mysql.com # +# # +# This program is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program; if not, write to the Free Software Foundation # +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +########################################################################## + +########################################################################## +# # +# Makefile.am # +# # +# @description: This is the MyODBC 3.51 driver(Docs) Makefile.am # +# # +# @author : MySQL AB (monty@mysql.com, venu@mysql.com) # +# @date : 2002-10-30 # +# @product : myodbc3 # +# # +########################################################################## +# Normally you do not need to remake the files here. But if you want +# to you will need the GNU TeX-info utilities. To make a Postscript +# files you also need TeX and dvips. To make the PDF file you will +# need pdftex. We use the teTeX distribution for all of these. + +# We avoid default automake rules because of problems with .dvi file +# and BSD makes + +# If you know how to fix any of this more elegantly please mail +# docs@mysql.com + +srcdir = . +top_srcdir = .. + +pkgdatadir = $(datadir)/MyODBC +pkglibdir = $(libdir)/MyODBC +pkgincludedir = $(includedir)/MyODBC +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i386-pc-linux +host_triplet = i386-pc-linux +target_triplet = i386-pc-linux +ACLOCAL = ${SHELL} /home/devel/myodbc/MyODBC-3.51.09/missing --run aclocal-1.7 +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/devel/myodbc/MyODBC-3.51.09/missing --run tar +AR = ar +AS = i386-linux-gcc -c +AUTOCONF = ${SHELL} /home/devel/myodbc/MyODBC-3.51.09/missing --run autoconf +AUTOHEADER = ${SHELL} /home/devel/myodbc/MyODBC-3.51.09/missing --run autoheader +AUTOMAKE = ${SHELL} /home/devel/myodbc/MyODBC-3.51.09/missing --run automake-1.7 +AWK = gawk +CC = i386-linux-gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -O3 -DDBUG_OFF -g -Wall -O2 -I/usr/include/mysql -DBIG_JOINS=1 +CONF_COMMAND = ./configure '--build=i386-linux' '--host=i386-linux' '--prefix=/usr' '--enable-shared' '--enable-thread-safe' '--with-unixODBC=/usr' '--with-mysql-libs=/usr/lib' '--with-mysql-includes=/usr/include/mysql' 'CFLAGS=-g -Wall -O2' 'CPPFLAGS=-D_REENTRANT' 'build_alias=i386-linux' 'host_alias=i386-linux' +CPP = i386-linux-gcc -E +CPPFLAGS = -D_REENTRANT -I/usr/include +CXX = i386-linux-g++ +CXXCPP = i386-linux-g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO = echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = grep -E +EXEEXT = +EXTRA_LDFLAGS = +F77 = i386-linux-g77 +FFLAGS = -g -O2 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +LD = /usr/bin/ld +LDFLAGS = +LIBOBJS = +LIBS = -L/usr/lib -lz -lodbcinst +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LN_S = ln -s +LTLIBOBJS = +MACHINE_TYPE = i386 +MAKEINFO = ${SHELL} /home/devel/myodbc/MyODBC-3.51.09/missing --run makeinfo +MYSQL_LIB = -L/usr/lib -lmysqlclient -lz -lcrypt -lnsl -lm +MYSQL_THREADSAFE_LIB = -L/usr/lib -lmysqlclient_r -lpthread -lz -lcrypt -lnsl -lm -lpthread +OBJEXT = o +ODBC_DM_PATH = --with-unixODBC=/usr +PACKAGE = MyODBC +PACKAGE_BUGREPORT = +PACKAGE_NAME = +PACKAGE_STRING = +PACKAGE_TARNAME = +PACKAGE_VERSION = +PATH_SEPARATOR = : +PERL = /usr/bin/perl +PERL5 = /usr/bin/perl +RANLIB = ranlib +SAVE_CFLAGS = -g -Wall -O2 +SAVE_LDFLAGS = +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +SYSTEM_TYPE = pc-linux +VERSION = 3.51.09 +ac_ct_AR = ar +ac_ct_CC = +ac_ct_CXX = +ac_ct_F77 = +ac_ct_RANLIB = ranlib +ac_ct_STRIP = strip +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__include = include +am__leading_dot = . +am__quote = +bindir = ${exec_prefix}/bin +build = i386-pc-linux +build_alias = i386-linux +build_cpu = i386 +build_os = linux +build_vendor = pc +datadir = ${prefix}/share +exec_prefix = ${prefix} +host = i386-pc-linux +host_alias = i386-linux +host_cpu = i386 +host_os = linux +host_vendor = pc +includedir = ${prefix}/include +infodir = ${prefix}/info +install_sh = /home/devel/myodbc/MyODBC-3.51.09/install-sh +iodbc_conf = +isql = /usr/bin/isql +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localstatedir = ${prefix}/var +mandir = ${prefix}/man +myodbc_docs_dir = +myodbc_samples_dir = samples +myodbc_test_dir = test +myodbc_test_linklib = ../driver_r/libmyodbc3_r.la +myodbc_thread_dir = driver_r +myodbc_version = 3.51.09 +oldincludedir = /usr/include +prefix = /usr +program_transform_name = s,x,x, +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target = i386-pc-linux +target_alias = +target_cpu = i386 +target_os = linux +target_vendor = pc +uname_prog = /bin/uname + +TEXI2HTML_FLAGS = -iso -number +DVIPS = dvips +TEXINFO_TEX = Support/texinfo.tex + +noinst_SCRIPTS = Support/texi2html +info_TEXINFOS = manual.texi + +targets = manual.html faq.html + +BUILT_SOURCES = $(targets) manual_toc.html faq_toc.html include.texi + +# The PostScript and PDF version are so big that they are not included in the +# standard distribution. It is available for download from the home page. +PDFMANUAL = manual.pdf faq.pdf +subdir = Docs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/driver/myconf.h +CONFIG_CLEAN_FILES = +SCRIPTS = $(noinst_SCRIPTS) + +DIST_SOURCES = +am__TEXINFO_TEX_DIR = $(srcdir)/Support +INFO_DEPS = manual.info +DVIS = manual.dvi +PDFS = manual.pdf +PSS = manual.ps +TEXINFOS = manual.texi +DIST_COMMON = Makefile.am Makefile.in +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .dvi .info .pdf .ps .texi +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Docs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool + +.texi.info: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9] + $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ `test -f '$<' || echo '$(srcdir)/'`$< + +.texi.dvi: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$< + +.texi.pdf: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) `test -f '$<' || echo '$(srcdir)/'`$< +manual.dvi: manual.texi +TEXI2DVI = texi2dvi + +TEXI2PDF = $(TEXI2DVI) --pdf --batch +.dvi.ps: + $(DVIPS) -o $@ $< + +uninstall-info-am: + $(PRE_UNINSTALL) + @if (install-info --version && \ + install-info --version | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile"; \ + install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if cd $(DESTDIR)$(infodir); then \ + echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +dist-info: $(INFO_DEPS) + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + for file in $$d/$$base*; do \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f $(distdir)/$$relfile || \ + cp -p $$file $(distdir)/$$relfile; \ + done; \ + done + +mostlyclean-aminfo: + -rm -f manual.aux manual.cp manual.cps manual.fn manual.fns manual.ky \ + manual.kys manual.log manual.pg manual.pgs manual.tmp \ + manual.toc manual.tp manual.tps manual.vr manual.vrs \ + manual.dvi manual.pdf manual.ps + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(INFO_DEPS) $(SCRIPTS) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(infodir) +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: $(DVIS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am + +install-exec-am: + +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(infodir) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ + echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \ + $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \ + else : ; fi; \ + done; \ + done + @$(POST_INSTALL) + @if (install-info --version && \ + install-info --version | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile";\ + install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile || :;\ + done; \ + else : ; fi +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-info distclean distclean-generic distclean-libtool distdir \ + dvi dvi-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic mostlyclean \ + mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-info-am + +#EXTRA_DIST = $(noinst_SCRIPTS) $(BUILT_SOURCES) mysqld_error.txt \ +# INSTALL-BINARY mirrors.texi + +all: $(targets) #txt_files + +#txt_files: ../INSTALL-SOURCE ../COPYING ../COPYING.LIB \ +# ../MIRRORS INSTALL-BINARY + +CLEAN_FILES: $(BUILD_SOURCES) + touch $(BUILD_SOURCES) + rm -f manual_toc.html + rm -f manual.html + rm -f faq.html + rm -f faq_toc.html +paper: manual_a4.ps manual_letter.ps $(PDFMANUAL) + +######################################################################### + +# The Makefile contains the previous version so we can not use that +include.texi: ../configure.in + echo "@c This file is autogenerated by the Makefile" > $@ + echo -n "@set myodbc3_version " >> $@ + grep "AM_INIT_AUTOMAKE(MyODBC," ../configure.in | \ + sed -e 's;AM_INIT_AUTOMAKE(MyODBC,;;' -e 's;);;' >> $@ + +manual.info: manual.texi include.texi + cd $(srcdir) && $(MAKEINFO) --no-split -I $(srcdir) $< + +manual.txt: manual.texi include.texi + cd $(srcdir) && \ + $(MAKEINFO) -I $(srcdir) --no-headers --no-split --output $@ $< + +manual.html: manual.texi include.texi $(srcdir)/Support/texi2html + cd $(srcdir) && /usr/bin/perl $(srcdir)/Support/texi2html $(TEXI2HTML_FLAGS) $< + +manual_toc.html: manual.html + +faq.html: faq.texi include.texi $(srcdir)/Support/texi2html + cd $(srcdir) && /usr/bin/perl $(srcdir)/Support/texi2html $(TEXI2HTML_FLAGS) $< + +faq_toc.html: faq.html + +# Fix: add --output-comment with some interesting info? +# Fix: @image worked with a older version of pdftex. +# Note: @image will work if we first convert all images to pdf ... +# is that worth it? +# Comment: We need to run pdftex 2 times to get the cross references right. +manual.pdf: manual.texi + cat manual.texi | sed -e 's|@image{[^}]*} *||g' > manual-tmp.texi + pdftex --interaction=nonstopmode manual-tmp.texi + texindex manual-tmp.?? + pdftex --interaction=nonstopmode manual-tmp.texi + texindex manual-tmp.?? + pdftex --interaction=nonstopmode manual-tmp.texi + mv manual-tmp.pdf manual.pdf + rm -f manual-tmp.* + touch $@ +faq.pdf: faq.texi + cat faq.texi | sed -e 's|@image{[^}]*} *||g' > faq-tmp.texi + pdftex --interaction=nonstopmode faq-tmp.texi + texindex faq-tmp.?? + pdftex --interaction=nonstopmode faq-tmp.texi + texindex faq-tmp.?? + pdftex --interaction=nonstopmode faq-tmp.texi + mv faq-tmp.pdf faq.pdf + rm -f faq-tmp.* + touch $@ + +# The texi2dvi gives a lot of harmless errors. Just ignore them unless +# you want to help with the typesetting part. +# This is the European papersize version +manual_a4.ps: manual.texi include.texi + TEXINPUTS=$(srcdir):$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' \ + $(TEXI2DVI) --batch --texinfo --quiet '@afourpaper' $< + $(DVIPS) -t a4 manual.dvi -o $@ + touch $@ + +# This is the American papersize version +manual_letter.ps: manual.texi include.texi + TEXINPUTS=$(srcdir):$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' \ + $(TEXI2DVI) --batch $< + $(DVIPS) -t letter manual.dvi -o $@ + touch $@ + +# Don't update the files from bitkeeper +%::SCCS/s.% +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- myodbc-3.51.11.orig/odbc.ini +++ myodbc-3.51.11/odbc.ini @@ -0,0 +1,45 @@ +; +; odbc.ini configuration for MyODBC and MyODBC 3.51 Drivers +; + +[ODBC Data Sources] + +myodbc = MySQL ODBC 2.50 Driver DSN +myodbc3 = MySQL ODBC 3.51 Driver DSN + + +[myodbc] +Driver = MySQL +Description = MySQL ODBC 2.50 Driver DSN +Server = localhost +Port = +User = root +Password = +Database = test +Option = 3 +Socket = + + +[myodbc3] +Driver = MySQL3 +Description = MySQL ODBC 3.51 Driver DSN +Server = localhost +Port = +User = root +Password = +Database = test +Option = 3 +Socket = + + +[Default] +Driver = MySQL +Description = MySQL ODBC 3.51 Driver DSN +Server = localhost +Port = +User = root +Password = +Database = test +Option = 3 +Socket = + --- myodbc-3.51.11.orig/driver/options.c +++ myodbc-3.51.11/driver/options.c @@ -63,13 +63,13 @@ switch(Attribute) { case SQL_ATTR_ASYNC_ENABLE: - if ((SQLUINTEGER)ValuePtr == SQL_ASYNC_ENABLE_ON) + if ((SQLULEN)ValuePtr == SQL_ASYNC_ENABLE_ON) DBUG_RETURN(set_handle_error(HandleType,Handle,MYERR_01S02, "Doesn't support asynchronous, changed to default",0)); break; case SQL_ATTR_CURSOR_SENSITIVITY: - if ((SQLUINTEGER)ValuePtr != SQL_UNSPECIFIED) + if ((SQLULEN)ValuePtr != SQL_UNSPECIFIED) { DBUG_RETURN(set_handle_error(HandleType,Handle,MYERR_01S02, "Option value changed to default cursor sensitivity(unspecified)",0)); @@ -80,13 +80,13 @@ if (((STMT FAR*)Handle)->dbc->flag & FLAG_FORWARD_CURSOR) { options->cursor_type= SQL_CURSOR_FORWARD_ONLY; - if ((SQLUINTEGER) ValuePtr != SQL_CURSOR_FORWARD_ONLY) + if ((SQLULEN) ValuePtr != SQL_CURSOR_FORWARD_ONLY) DBUG_RETURN(set_handle_error(HandleType,Handle,MYERR_01S02, "Forcing the use of forward-only cursor)",0)); } else if (((STMT FAR*)Handle)->dbc->flag & FLAG_DYNAMIC_CURSOR) { - if ((SQLUINTEGER) ValuePtr != SQL_CURSOR_KEYSET_DRIVEN) + if ((SQLULEN) ValuePtr != SQL_CURSOR_KEYSET_DRIVEN) options->cursor_type= (SQLUINTEGER)ValuePtr; else @@ -98,8 +98,8 @@ } else { - if ((SQLUINTEGER) ValuePtr == SQL_CURSOR_FORWARD_ONLY || - (SQLUINTEGER) ValuePtr == SQL_CURSOR_STATIC) + if ((SQLULEN) ValuePtr == SQL_CURSOR_FORWARD_ONLY || + (SQLULEN) ValuePtr == SQL_CURSOR_STATIC) options->cursor_type= (SQLUINTEGER)ValuePtr; else @@ -112,15 +112,15 @@ break; case SQL_ATTR_MAX_LENGTH: - options->max_length= (SQLUINTEGER) ValuePtr; + options->max_length= (SQLINTEGER) ValuePtr; break; case SQL_ATTR_MAX_ROWS: - options->max_rows= (SQLUINTEGER) ValuePtr; + options->max_rows= (SQLINTEGER) ValuePtr; break; case SQL_ATTR_METADATA_ID: - if ((SQLUINTEGER)ValuePtr == SQL_TRUE) + if ((SQLULEN)ValuePtr == SQL_TRUE) DBUG_RETURN(set_handle_error(HandleType,Handle,MYERR_01S02, "Doesn't support SQL_ATTR_METADATA_ID to true, changed to default",0)); break; @@ -134,7 +134,7 @@ break; case SQL_ATTR_SIMULATE_CURSOR: - if ((SQLUINTEGER)ValuePtr != SQL_SC_TRY_UNIQUE) + if ((SQLULEN)ValuePtr != SQL_SC_TRY_UNIQUE) DBUG_RETURN(set_handle_error(HandleType,Handle,MYERR_01S02, "Option value changed to default cursor simulation",0)); break; @@ -292,7 +292,7 @@ break; case SQL_ATTR_AUTOCOMMIT: - if ((SQLUINTEGER)ValuePtr != SQL_AUTOCOMMIT_ON) + if ((SQLULEN)ValuePtr != SQL_AUTOCOMMIT_ON) { if (!dbc->server) /* no connection yet */ { @@ -353,12 +353,12 @@ break; case SQL_ATTR_LOGIN_TIMEOUT: - dbc->login_timeout= (SQLUINTEGER)ValuePtr; + dbc->login_timeout= (SQLULEN)ValuePtr; break; case SQL_ATTR_ODBC_CURSORS: if ((dbc->flag & FLAG_FORWARD_CURSOR) && - (SQLUINTEGER)ValuePtr != SQL_CUR_USE_ODBC) + (SQLULEN)ValuePtr != SQL_CUR_USE_ODBC) DBUG_RETURN(set_conn_error(hdbc,MYERR_01S02, "Forcing the Driver Manager to use ODBC cursor library",0)); break; @@ -558,17 +558,17 @@ switch (Attribute) { case SQL_ATTR_CURSOR_SCROLLABLE: - if ((SQLUINTEGER)ValuePtr == SQL_NONSCROLLABLE && + if ((SQLULEN)ValuePtr == SQL_NONSCROLLABLE && options->cursor_type != SQL_CURSOR_FORWARD_ONLY) options->cursor_type= SQL_CURSOR_FORWARD_ONLY; - else if ((SQLUINTEGER)ValuePtr == SQL_SCROLLABLE && + else if ((SQLULEN)ValuePtr == SQL_SCROLLABLE && options->cursor_type == SQL_CURSOR_FORWARD_ONLY) options->cursor_type= SQL_CURSOR_STATIC; break; case SQL_ATTR_AUTO_IPD: - if ((SQLUINTEGER) ValuePtr != SQL_FALSE) + if ((SQLULEN) ValuePtr != SQL_FALSE) DBUG_RETURN(set_error(hstmt,MYERR_01S02, "Option value changed to default auto ipd",0)); break; @@ -582,7 +582,7 @@ break; case SQL_ATTR_PARAMSET_SIZE: - if ((SQLUINTEGER)ValuePtr != 1) + if ((SQLULEN)ValuePtr != 1) DBUG_RETURN(set_error(hstmt,MYERR_01S02, "Option value changed to default parameter size", 0)); @@ -750,7 +750,7 @@ */ SQLRETURN SQL_API SQLSetConnectOption(SQLHDBC hdbc, SQLUSMALLINT fOption, - SQLUINTEGER vParam) + SQLULEN vParam) { SQLRETURN result= SQL_SUCCESS; DBUG_ENTER("SQLSetConnectOption"); @@ -782,7 +782,7 @@ */ SQLRETURN SQL_API SQLSetStmtOption(SQLHSTMT hstmt,SQLUSMALLINT fOption, - SQLUINTEGER vParam) + SQLROWCOUNT vParam) { SQLRETURN result= SQL_SUCCESS; DBUG_ENTER("SQLSetStmtOption"); @@ -832,7 +832,7 @@ break; case SQL_ATTR_OUTPUT_NTS: - if ((SQLINTEGER)ValuePtr == SQL_TRUE) + if ((SQLLEN)ValuePtr == SQL_TRUE) break; default: --- myodbc-3.51.11.orig/driver/connect.c +++ myodbc-3.51.11/driver/connect.c @@ -38,6 +38,7 @@ * * ****************************************************************************/ +#include #include "myodbc3.h" #ifndef _UNIX_ --- myodbc-3.51.11.orig/driver/prepare.c +++ myodbc-3.51.11/driver/prepare.c @@ -168,11 +168,11 @@ SQLSMALLINT fParamType __attribute__((unused)), SQLSMALLINT fCType, SQLSMALLINT fSqlType, - SQLUINTEGER cbColDef __attribute__((unused)), + SQLULEN cbColDef __attribute__((unused)), SQLSMALLINT ibScale __attribute__((unused)), SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, - SQLINTEGER FAR *pcbValue) + SQLLEN cbValueMax, + SQLLEN FAR *pcbValue) { STMT FAR *stmt= (STMT FAR*) hstmt; PARAM_BIND param; @@ -234,9 +234,9 @@ SQLRETURN SQL_API SQLBindParameter(SQLHSTMT hstmt,SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, - SQLUINTEGER cbColDef, SQLSMALLINT ibScale, - SQLPOINTER rgbValue, SQLINTEGER cbValueMax, - SQLINTEGER FAR *pcbValue) + SQLULEN cbColDef, SQLSMALLINT ibScale, + SQLPOINTER rgbValue, SQLLEN cbValueMax, + SQLLEN FAR *pcbValue) { return my_SQLBindParameter(hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, @@ -254,7 +254,7 @@ SQLDescribeParam(SQLHSTMT hstmt, SQLUSMALLINT ipar __attribute__((unused)), SQLSMALLINT FAR *pfSqlType, - SQLUINTEGER FAR *pcbColDef, + SQLULEN FAR *pcbColDef, SQLSMALLINT FAR *pibScale __attribute__((unused)), SQLSMALLINT FAR *pfNullable) { @@ -276,8 +276,8 @@ */ SQLRETURN SQL_API -SQLParamOptions(SQLHSTMT hstmt, SQLUINTEGER crow, - SQLUINTEGER FAR *pirow __attribute__((unused))) +SQLParamOptions(SQLHSTMT hstmt, SQLULEN crow, + SQLULEN FAR *pirow __attribute__((unused))) { DBUG_ENTER("SQLParamOptions"); @@ -317,7 +317,7 @@ SQLRETURN SQL_API SQLSetScrollOptions(SQLHSTMT hstmt, SQLUSMALLINT fConcurrency __attribute__((unused)), - SQLINTEGER crowKeyset __attribute__((unused)), + SQLLEN crowKeyset __attribute__((unused)), SQLUSMALLINT crowRowset) { STMT FAR *stmt= (STMT FAR*) hstmt; --- myodbc-3.51.11.orig/driver/utility.c +++ myodbc-3.51.11/driver/utility.c @@ -232,7 +232,7 @@ SQLRETURN copy_lresult(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLCHAR FAR *rgbValue, SQLINTEGER cbValueMax, - SQLINTEGER FAR *pcbValue,char *src,long src_length, + SQLLEN FAR *pcbValue,char *src,long src_length, long max_length,long fill_length,ulong *offset, my_bool binary_data) { --- myodbc-3.51.11.orig/driver/cursor.c +++ myodbc-3.51.11/driver/cursor.c @@ -687,7 +687,7 @@ else { char buff[32]; - sprintf(buff," LIMIT %lu",stmt->stmt_options.rows_in_set); + sprintf(buff," LIMIT %u",stmt->stmt_options.rows_in_set); dynstr_append(dynQuery,buff); } return 0; @@ -722,7 +722,7 @@ DYNAMIC_STRING *dynQuery) { PARAM_BIND param; - SQLUINTEGER transfer_length,precision,display_size; + ulong transfer_length,precision,display_size; SQLINTEGER length; uint ncol, ignore_count= 0; MYSQL_FIELD *field; @@ -1031,7 +1031,7 @@ for (ncol= 0; ncol < result->field_count; ncol++) { - SQLUINTEGER transfer_length,precision,display_size; + ulong transfer_length,precision,display_size; MYSQL_FIELD *field= mysql_fetch_field_direct(result,ncol); BIND *bind= stmt->bind+ncol; @@ -1329,7 +1329,7 @@ the result set */ -SQLRETURN SQL_API SQLSetPos(SQLHSTMT hstmt, SQLUSMALLINT irow, +SQLRETURN SQL_API SQLSetPos(SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock) { return my_SQLSetPos(hstmt,irow,fOption,fLock); --- myodbc-3.51.11.orig/driver/execute.c +++ myodbc-3.51.11/driver/execute.c @@ -717,7 +717,7 @@ */ SQLRETURN SQL_API SQLPutData(SQLHSTMT hstmt, SQLPOINTER rgbValue, - SQLINTEGER cbValue) + SQLLEN cbValue) { STMT FAR *stmt= (STMT FAR*) hstmt; PARAM_BIND *param; --- myodbc-3.51.11.orig/driver/results.c +++ myodbc-3.51.11/driver/results.c @@ -55,7 +55,7 @@ SQLRETURN SQL_API sql_get_data(STMT *stm,SQLSMALLINT fCType,MYSQL_FIELD *field, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, - SQLINTEGER FAR *pcbValue, + SQLLEN FAR *pcbValue, char *value,uint length); /*! @@ -215,7 +215,7 @@ SQLSMALLINT cbColNameMax, SQLSMALLINT FAR *pcbColName, SQLSMALLINT FAR *pfSqlType, - SQLUINTEGER FAR *pcbColDef, + SQLULEN FAR *pcbColDef, SQLSMALLINT FAR *pibScale, SQLSMALLINT FAR *pfNullable) { @@ -563,7 +563,7 @@ SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT FAR *pcbDesc, - SQLINTEGER FAR *pfDesc) + SQLLEN FAR *pfDesc) { DBUG_ENTER("SQLColAttributes"); DBUG_RETURN_STATUS(get_col_attr(hstmt, icol, fDescType, rgbDesc, @@ -579,7 +579,7 @@ SQLRETURN SQL_API SQLBindCol(SQLHSTMT hstmt, SQLUSMALLINT icol, SQLSMALLINT fCType, SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, SQLINTEGER FAR *pcbValue) + SQLLEN cbValueMax, SQLLEN FAR *pcbValue) { BIND *bind; STMT FAR *stmt= (STMT FAR*) hstmt; @@ -708,7 +708,7 @@ SQLRETURN SQL_API SQLGetData(SQLHSTMT hstmt,SQLUSMALLINT icol, SQLSMALLINT fCType,SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, SQLINTEGER FAR *pcbValue) + SQLLEN cbValueMax, SQLLEN FAR *pcbValue) { STMT FAR *stmt= (STMT FAR*) hstmt; SQLRETURN result; @@ -775,7 +775,7 @@ MYSQL_FIELD *field, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, - SQLINTEGER FAR *pcbValue, + SQLLEN FAR *pcbValue, char *value, uint length) { @@ -1017,7 +1017,7 @@ or an SQL_UPDATE or SQL_DELETE operation in SQLSetPos */ -SQLRETURN SQL_API SQLRowCount(SQLHSTMT hstmt, SQLINTEGER FAR *pcrow) +SQLRETURN SQL_API SQLRowCount(SQLHSTMT hstmt, SQLLEN FAR *pcrow) { STMT FAR *stmt= (STMT FAR*) hstmt; DBUG_ENTER("SQLRowCount"); @@ -1043,7 +1043,7 @@ */ SQLRETURN SQL_API my_SQLExtendedFetch(SQLHSTMT hstmt, SQLUSMALLINT fFetchType, - SQLINTEGER irow, SQLUINTEGER FAR *pcrow, + SQLROWOFFSET irow, SQLROWSETSIZE FAR *pcrow, SQLUSMALLINT FAR *rgfRowStatus, bool upd_status) { ulong rows_to_fetch; @@ -1229,7 +1229,7 @@ (char*) bind->rgbValue + offset : 0), bind->cbValueMax, (bind->pcbValue ? - (SQLINTEGER*) ((char*) bind->pcbValue + + (SQLLEN*) ((char*) bind->pcbValue + pcb_offset) : 0), *values, (lengths ? *lengths : *values ? @@ -1293,8 +1293,8 @@ SQLRETURN SQL_API SQLExtendedFetch(SQLHSTMT hstmt,SQLUSMALLINT fFetchType, - SQLINTEGER irow, - SQLUINTEGER FAR *pcrow, + SQLROWOFFSET irow, + SQLROWSETSIZE FAR *pcrow, SQLUSMALLINT FAR *rgfRowStatus) { return my_SQLExtendedFetch(hstmt, fFetchType, irow, @@ -1310,9 +1310,9 @@ */ SQLRETURN SQL_API -SQLFetchScroll(SQLHSTMT StatementHandle, - SQLSMALLINT FetchOrientation, - SQLINTEGER FetchOffset) +SQLFetchScroll(SQLHSTMT StatementHandle, + SQLSMALLINT FetchOrientation, + SQLROWOFFSET FetchOffset) { SQLRETURN result; STMT_OPTIONS *options= &((STMT FAR *)StatementHandle)->stmt_options; --- myodbc-3.51.11.orig/driver/myutil.h +++ myodbc-3.51.11/driver/myutil.h @@ -95,7 +95,7 @@ char *add_to_buffer(NET *net,char *to,char *from,ulong length); SQLRETURN copy_lresult(SQLSMALLINT HandleType, SQLHANDLE handle, SQLCHAR FAR *rgbValue, SQLINTEGER cbValueMax, - SQLINTEGER FAR *pcbValue, char *src, + SQLLEN FAR *pcbValue, char *src, long src_length, long max_length, long fill_length,ulong *offset,my_bool binary_data); SQLRETURN copy_binary_result(SQLSMALLINT HandleType, SQLHANDLE handle, @@ -112,13 +112,13 @@ SQLRETURN SQL_API my_SQLBindParameter(SQLHSTMT hstmt,SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, - SQLUINTEGER cbColDef, + SQLULEN cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, - SQLINTEGER FAR *pcbValue); + SQLLEN cbValueMax, + SQLLEN FAR *pcbValue); SQLRETURN SQL_API my_SQLExtendedFetch(SQLHSTMT hstmt, SQLUSMALLINT fFetchType, - SQLINTEGER irow, SQLUINTEGER FAR *pcrow, + SQLROWOFFSET irow, SQLROWSETSIZE FAR *pcrow, SQLUSMALLINT FAR *rgfRowStatus, bool upd_status); SQLRETURN copy_stmt_error(STMT FAR *src, STMT FAR *dst); int unireg_to_c_datatype(MYSQL_FIELD *field); --- myodbc-3.51.11.orig/test/my_param.c +++ myodbc-3.51.11/test/my_param.c @@ -116,7 +116,8 @@ void my_param_update(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id=9, nRowCount; + SQLINTEGER id=9; + SQLLEN nRowCount; SQLCHAR name[]="update"; printf("\nmy_param_update:\n"); @@ -143,7 +144,7 @@ /* check the rows affected by the update statement */ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt,rc); - printf("\n total rows updated:%d\n",nRowCount); + printf("\n total rows updated:%ld\n",nRowCount); assert( nRowCount == 1); /* Free statement param resorces */ @@ -171,7 +172,8 @@ void my_param_delete(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id, nRowCount; + SQLINTEGER id; + SQLLEN nRowCount; printf("\nmy_param_delete:\n"); @@ -189,7 +191,7 @@ /* check the rows affected by the update statement */ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt,rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert( nRowCount == 1); SQLFreeStmt(hstmt, SQL_RESET_PARAMS); @@ -208,7 +210,7 @@ /* check the rows affected by the update statement */ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt,rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert( nRowCount == 1); /* Free statement param resorces */ --- myodbc-3.51.11.orig/test/mytest3.c.save +++ myodbc-3.51.11/test/mytest3.c.save @@ -0,0 +1,6922 @@ +/*************************************************************************** + mytest3.c - description + ------------------- + begin : Wed Aug 8 2001 + copyright : (C) 2003 by Venu, MySQL AB + email : venu@mysql.com + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +#include "mytest3.h" + +/* + Utility function to verify a particular column data +*/ +static void verify_col_data(SQLHSTMT hstmt, const char *table, + const char *col, const char *exp_data) +{ + SQLCHAR data[255], query[255]; + SQLRETURN rc; + + if (table && col) + { + sprintf(query,"SELECT %s FROM %s",col,table); + fprintf(stdout,"\n %s", query); + + rc = SQLExecDirect(hstmt, (char *)query, SQL_NTS); + mystmt(hstmt,rc); + } + + rc = SQLFetch(hstmt); + if (rc == SQL_NO_DATA) + myassert(strcmp(exp_data,"SQL_NO_DATA") ==0 ); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, &data, 255, NULL); + if (rc == SQL_ERROR) + { + fprintf(stdout,"\n *** ERROR: FAILED TO GET THE RESULT ***"); + exit(1); + } + fprintf(stdout,"\n obtained: `%s` (expected: `%s`)", data, exp_data); + myassert(strcmp(data,exp_data) == 0); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); +} + +/** + Simple function to do basic ops with MySQL +*/ +static void t_basic(SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + int nInData = 1; + int nOutData, nRowCount=1; + char szOutData[255]; + + myheader("t_basic"); + + /* CREATE TABLE 'myodbc' */ + SQLExecDirect(hstmt,"drop table tmyodbc ",SQL_NTS); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLExecDirect(hstmt,"create table tmyodbc (col1 int, col2 varchar(30))",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* DIRECT INSERT */ + rc = SQLExecDirect(hstmt,"insert into tmyodbc values(10,'direct-insert')",SQL_NTS); + mystmt(hstmt,rc); + + /* PREPARE INSERT */ + rc = SQLPrepare(hstmt,"insert into tmyodbc values(?,'prepare-insert')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, + 0,0,&nInData,0,NULL); + mystmt(hstmt,rc); + + for (nInData= 100 ; nInData <= 2000; nInData=nInData+50) + { + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + /* FREE THE PARAM BUFFERS */ + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* FETCH RESULT SET */ + rc = SQLExecDirect(hstmt,"SELECT * FROM tmyodbc",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1, SQL_C_LONG, &nOutData,0,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2, SQL_C_CHAR, szOutData,sizeof(szOutData),NULL); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + nInData = 100; + while(SQLFetch(hstmt) == SQL_SUCCESS) + { + nRowCount++; + fprintf(stdout,"\n row %d\t: %d",nRowCount, nOutData); + my_assert( nInData == nOutData); + nInData+= 50; + } + nInData-= 50; + fprintf(stdout,"\n Total rows Found:%d\n",nRowCount); + my_assert( nRowCount == nInData/50); + + /* FREE THE OUTPUT BUFFERS */ + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void tmysql_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + SQLUSMALLINT rgfRowStatus; + + myheader("tmysql_setpos_del"); + + tmysql_exec(hstmt,"drop table tmysql_setpos1"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table tmysql_setpos1(col1 int, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(400,'MySQL4')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,'MySQL5')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,'MySQL6')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,'MySQL7')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,5,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLNumResultCols(hstmt,&rgfRowStatus); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + my_assert( 6 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,5,NULL,NULL); + mystmt(hstmt,rc); + + my_assert(300 == my_fetch_int(hstmt,1)); + my_assert(!strcmp((const char *)"MySQL6", + my_fetch_str(hstmt,szData,2))); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void tmysql_setpos_del1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen, pccol; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("tmysql_setpos_del1"); + + tmysql_exec(hstmt,"drop table tmysql_setpos"); + rc = tmysql_exec(hstmt,"create table tmysql_setpos(col1 int, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(300,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(400,'MySQL2')"); + mystmt(hstmt,rc); + + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,&pccol); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + pccol = SQL_COLUMN_IGNORE; + + rc = SQLSetPos(hstmt,0,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + myassert(nlen == 1); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos"); + mystmt(hstmt,rc); + + my_assert(3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_setpos_del_all(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData[4]; + SQLLEN nlen; + SQLCHAR szData[4][10]; + + myheader("t_setpos_del_all"); + + tmysql_exec(hstmt,"drop table t_sp_del_all"); + rc = tmysql_exec(hstmt,"create table t_sp_del_all(col1 int not null primary key,\ + col2 varchar(20))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(300,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(400,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 4); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_sp_del_all order by col1 asc"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,&szData[0],sizeof(szData[0]),NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_FIRST,1,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," row1 : %d, %s\n",nData[0],szData[0]); + fprintf(stdout," row2 : %d, %s\n",nData[1],szData[1]); + fprintf(stdout," row3 : %d, %s\n",nData[2],szData[2]); + fprintf(stdout," row4 : %d, %s\n",nData[3],szData[3]); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,0,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," total rows deleted: %ld\n",nlen); + myassert(nlen == 4); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_sp_del_all"); + mystmt(hstmt,rc); + + my_assert(0 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 1); + mystmt(hstmt,rc); + +} +static void tmysql_setpos_upd(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("tmysql_setpos_upd"); + + tmysql_exec(hstmt,"drop table tmysql_setpos"); + rc = tmysql_exec(hstmt,"create table tmysql_setpos(col1 int, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(300,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(300,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(400,'MySQL4')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos values(300,'MySQL3')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,3,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + nData = 1000; + strcpy((char *)szData , "updated"); + + rc = SQLSetPos(hstmt,3,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt_err(hstmt,rc == SQL_ERROR,rc); + + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + my_assert(nlen == 1); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos"); + mystmt(hstmt,rc); + + myresult(hstmt); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"DELETE FROM tmysql_setpos WHERE col2 = 'updated'",SQL_NTS); + mystmt(hstmt,rc); + + nlen=0; + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + fprintf(stdout,"\n total rows affected:%ld",nlen); + my_assert(nlen == 1); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos"); + mystmt(hstmt,rc); + + my_assert(5 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void t_setpos_upd_decimal(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER rec; + + myheader("t_setpos_upd_decimal"); + + tmysql_exec(hstmt,"drop table t_setpos_upd_decimal"); + rc = tmysql_exec(hstmt,"create table t_setpos_upd_decimal(record decimal(3,0),\ + num1 float, num2 decimal(6,0),num3 decimal(10,3))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_setpos_upd_decimal values(001,12.3,134,0.100)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* MS SQL Server to work...*/ + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0); + SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE); + + rc = tmysql_exec(hstmt,"select record from t_setpos_upd_decimal"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&rec,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc); + fprintf(stdout," row1: %d",rec); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rec = 100; + + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt_r(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_setpos_upd_decimal"); + mystmt(hstmt,rc); + + myresult(hstmt); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void tmysql_specialcols(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + + myheader("tmysql_specialcols"); + + tmysql_exec(hstmt,"drop table tmysql_specialcols"); + rc = tmysql_exec(hstmt,"create table tmysql_specialcols(col1 int primary key, col2 varchar(30), col3 int)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"create index tmysql_ind1 on tmysql_specialcols(col1)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_specialcols values(100,'venu',1)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_specialcols values(200,'MySQL',2)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_specialcols"); + mystmt(hstmt,rc); + + myresult(hstmt); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSpecialColumns(hstmt, + SQL_BEST_ROWID, + NULL,0, + NULL,0, + "tmysql_specialcols",SQL_NTS, + SQL_SCOPE_SESSION, + SQL_NULLABLE); + mystmt(hstmt,rc); + + myresult(hstmt); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"drop table tmysql_specialcols"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); +} +static void tmysql_bindcol(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + int nodata; + long nlen, nidata = 200, length; + char szodata[20],szidata[20]="MySQL"; + + myheader("tmysql_bindcol"); + + tmysql_exec(hstmt,"drop table tmysql_bindcol"); + + rc = tmysql_exec(hstmt,"create table tmysql_bindcol(col1 int primary key, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_bindcol values(100,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_bindcol values(200,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_prepare(hstmt,"select * from tmysql_bindcol where col2 = ? AND col1 = ?"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nodata,0,&nlen); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szodata,200,&nlen); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_CHAR,SQL_VARCHAR, + 0,0,szidata,0,&length); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, + 0,0,&nidata,20,NULL); + mystmt(hstmt,rc); + + length= SQL_NTS; + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout," outdata: %d, %s(%ld)\n", nodata,szodata,nlen); + my_assert(nodata == 200); + + rc = SQLFetch(hstmt); + + my_assert(rc == SQL_NO_DATA_FOUND); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"drop table tmysql_bindcol"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); +} +static void tmysql_pos_delete(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLUINTEGER pcrow; + SQLUSMALLINT rgfRowStatus; + + myheader("tmysql_pos_delete"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table tmysql_pos_delete"); + rc = tmysql_exec(hstmt,"create table tmysql_pos_delete(col1 int , col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_pos_delete values(100,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_pos_delete values(200,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu_cur",8); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_pos_delete"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt1," DfffELETE FROM tmysql_pos_delete WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt_r(hstmt1,rc); + + rc = SQLExecDirect(hstmt1," DELETE FROM tmysql_pos_delete WHERE CURRENT OF venu_cur curs",SQL_NTS); + mystmt_r(hstmt1,rc); + + rc = SQLExecDirect(hstmt1," DELETE FROM tmysql_pos_delete WHERE ONE CURRENT OF venu_cur",SQL_NTS); + mystmt_r(hstmt1,rc); + + rc = SQLExecDirect(hstmt1," DELETE FROM tmysql_pos_delete WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt(hstmt1,rc); + + SQLNumResultCols(hstmt1,&rgfRowStatus); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + rc = SQLFreeStmt(hstmt1,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_pos_delete"); + mystmt(hstmt,rc); + + my_assert(1 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} +static void tmysql_pos_update(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLUINTEGER pcrow; + SQLUSMALLINT rgfRowStatus; + + myheader("tmysql_pos_update"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table tmysql_pos_delete"); + rc = tmysql_exec(hstmt,"create table tmysql_pos_delete(col1 int , col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_pos_delete values(100,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_pos_delete values(200,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu_cur",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_pos_delete"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt1," UPerrDATE tmysql_pos_delete SET col1= 999, col2 = 'update' WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt_r(hstmt1,rc); + + rc = SQLExecDirect(hstmt1," UPerrDATE tmysql_pos_delete SET col1= 999, col2 = 'update' WHERE CURRENT OF",SQL_NTS); + mystmt_r(hstmt1,rc); + + rc = SQLExecDirect(hstmt1," UPDATE tmysql_pos_delete SET col1= 999, col2 = 'update' WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt(hstmt1,rc); + + SQLNumResultCols(hstmt1,&rgfRowStatus); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + rc = SQLFreeStmt(hstmt1,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_pos_delete"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + { + SQLCHAR szData[20]; + my_assert(999 == my_fetch_int(hstmt,1)); + my_assert(!strcmp("update",my_fetch_str(hstmt,szData,2))); + } + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} +static void tmysql_mtab_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("tmysql_mtab_setpos_del"); + + tmysql_exec(hstmt,"drop table tmysql_t1"); + tmysql_exec(hstmt,"drop table tmysql_t2"); + rc = tmysql_exec(hstmt,"create table tmysql_t1(col1 int, col2 varchar(20))"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"create table tmysql_t2(col1 int, col2 varchar(20))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_t1 values(1,'t1_one')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_t1 values(2,'t1_two')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_t1 values(3,'t1_three')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_t2 values(2,'t2_one')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_t2 values(3,'t2_two')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_t2 values(4,'t2_three')"); + mystmt(hstmt,rc); + + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + /* FULL JOIN */ + rc = tmysql_exec(hstmt,"select tmysql_t1.*,tmysql_t2.* from tmysql_t1,tmysql_t2"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,3,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + /* not yet supported..*/ + rc = SQLSetPos(hstmt,4,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt_err(hstmt,rc==SQL_ERROR,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void tmysql_showkeys(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + + myheader("tmysql_showkeys\n"); + + tmysql_exec(hstmt,"drop table tmysql_spk"); + + rc = tmysql_exec(hstmt,"create table tmysql_spk(col1 int primary key)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"SHOW KEYS FROM tmysql_spk"); + mystmt(hstmt,rc); + + my_assert(1 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void tmysql_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("tmysql_setpos_pkdel"); + + tmysql_exec(hstmt,"drop table tmysql_setpos1"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table tmysql_setpos1(col1 int primary key, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(400,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,4,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt_err(hstmt,rc==SQL_ERROR,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_alias_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("t_alias_setpos_pkdel"); + + tmysql_exec(hstmt,"drop table t_alias_setpos_del"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_alias_setpos_del(col1 int primary key, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(300,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(400,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col1 as id, col2 as name from t_alias_setpos_del"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,4,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_alias_setpos_del"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_alias_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData[4]; + SQLLEN nlen; + SQLCHAR szData[4][10]; + + myheader("t_alias_setpos_del"); + + tmysql_exec(hstmt,"drop table t_alias_setpos_del"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_alias_setpos_del(col1 int, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(300,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_alias_setpos_del values(400,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetStmtOption(hstmt,SQL_ROWSET_SIZE,4); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col1 as id, col2 as name from t_alias_setpos_del"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," row1 : %d, %s\n",nData[0],szData[0]); + fprintf(stdout," row2 : %d, %s\n",nData[1],szData[1]); + fprintf(stdout," row3 : %d, %s\n",nData[2],szData[2]); + fprintf(stdout," row4 : %d, %s\n",nData[3],szData[3]); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_alias_setpos_del"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetStmtOption(hstmt,SQL_ROWSET_SIZE,1); + mystmt(hstmt,rc); + +} + +static void tmysql_setpos_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("tmysql_setpos_pkdel1"); + + tmysql_exec(hstmt,"drop table tmysql_setpos1"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table tmysql_setpos1(col1 int primary key, col3 int,col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(100,10,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(200,20,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,20,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(400,20,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col2,col3 from tmysql_setpos1"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,4,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void tmysql_setpos_pkdel2(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("tmysql_setpos_pkdel2"); + + tmysql_exec(hstmt,"drop table tmysql_setpos1"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table tmysql_setpos1(col1 int, col3 int,col2 varchar(30) primary key)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(100,10,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(200,20,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,20,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(400,20,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col2,col3 from tmysql_setpos1"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&nlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow,NULL); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_refresh(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + + myheader("t_refresh"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table if exists t_refresh"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_refresh(col1 int ,col2 varchar(30)) TYPE = InnoDB"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"insert into t_refresh values(10,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_refresh values(20,'mysql')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_refresh"); + mystmt(hstmt,rc); + + my_assert( 2 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_ON); + mycon(hdbc,rc); +} +static void tmysql_setpos_pkdel3(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("tmysql_setpos_pkdel3"); + + tmysql_exec(hstmt,"drop table tmysql_setpos1"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table tmysql_setpos1(col1 int, col3 int,col2 varchar(30) primary key)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(100,10,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(200,20,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(300,20,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into tmysql_setpos1 values(400,20,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col1 from tmysql_setpos1"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,4,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from tmysql_setpos1"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_mul_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("t_mul_pkdel"); + + tmysql_exec(hstmt,"drop table t_mul_pkdel"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_mul_pkdel(col1 int NOT NULL,col3 int,col2 varchar(30) NOT NULL,primary key(col1,col2))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(100,10,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(200,20,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(300,20,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(400,20,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col1,col2 from t_mul_pkdel"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_UNLOCK); + mystmt_err(hstmt,rc==SQL_ERROR,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_mul_pkdel"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_mul_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("t_mul_pkdel1"); + + tmysql_exec(hstmt,"drop table t_mul_pkdel"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_mul_pkdel(col1 int NOT NULL,col3 int,col2 varchar(30) NOT NULL,primary key(col1,col2))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(100,10,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(200,20,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(300,20,'MySQL3')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_mul_pkdel values(400,20,'MySQL4')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col1 from t_mul_pkdel"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,4,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,4,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt_err(hstmt,rc==SQL_ERROR,rc); + + rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_mul_pkdel"); + mystmt(hstmt,rc); + + my_assert( 3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_max_select(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR szData[255]; + SQLINTEGER i; + + myheader("t_max_select"); + + tmysql_exec(hstmt,"drop table t_max_select"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_max_select(col1 int ,col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_max_select values(?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG, + SQL_INTEGER,0,0,&i,0,NULL); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_CHAR,0,0,szData,sizeof(szData),NULL); + mystmt(hstmt,rc); + + fprintf(stdout," inserting 1000 rows, it will take some time\n"); + for(i = 1; i <= 1000; i++) + { + fprintf(stdout," \r %d", i); + sprintf((char *)szData,"MySQL%d",i); + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + fprintf(stdout,"\n"); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_max_select"); + mystmt(hstmt,rc); + + my_assert( 1000 == myrowcount(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_tran(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + + myheader("t_tran"); + + if (!server_supports_trans(hdbc)) + return; + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table if exists t_tran"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_tran(col1 int ,col2 varchar(30)) TYPE = InnoDB"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"insert into t_tran values(10,'venu')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"insert into t_tran values(20,'mysql')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_ROLLBACK); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_tran"); + mystmt(hstmt,rc); + + my_assert( 1 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_ON); + mycon(hdbc,rc); +} +static void t_max_con(SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER i, max_connections, used_connections, test_connections; + SQLHENV env; + SQLHDBC dbc[101]; + + myheader("t_max_con"); + + /* Get max_connections */ + rc = SQLExecDirect(hstmt, "SHOW VARIABLES like 'max_connections'",SQL_NTS); + mystmt(hstmt, rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt, rc); + + rc = SQLGetData(hstmt, 2, SQL_C_LONG, &max_connections, 0, NULL); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA_FOUND); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + fprintf(stdout,"\n total max connections supported: %d", max_connections); + + /* get number of connections used */ + rc = SQLExecDirect(hstmt, "SHOW STATUS like 'threads_connected'",SQL_NTS); + mystmt(hstmt, rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt, rc); + + rc = SQLGetData(hstmt, 2, SQL_C_LONG, &used_connections, 0, NULL); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA_FOUND); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + + fprintf(stdout,"\n total connections used : %d", used_connections); + + test_connections= max_connections-used_connections; + fprintf(stdout,"\n total connections to be tested : %d", test_connections); + + if (test_connections >= 100) + { + fprintf(stdout,"\n test can't be performed due to max_connections are very high"); + return; + } + + rc = SQLAllocEnv(&env); + myenv(env,rc); + + rc = SQLSetEnvAttr(env,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myenv(env,rc); + + fprintf(stdout,"\n"); + + for (i=0; i <= test_connections; i++) + { + rc = SQLAllocConnect(env, &dbc[i]); + myenv(env,rc); + + fprintf(stdout," %d", i); + rc = SQLConnect(dbc[i], mydsn, SQL_NTS, myuid, SQL_NTS, mypwd, SQL_NTS); + mycon(dbc[i],rc); + } + rc = SQLAllocConnect(env, &dbc[i]); + myenv(env,rc); + + fprintf(stdout,"\n establishing '%d'th connection, it should fail",i); + rc = SQLConnect(dbc[i], mydsn, SQL_NTS, myuid, SQL_NTS, mypwd, SQL_NTS); + myerror(rc, SQL_HANDLE_DBC, dbc[i]); + if (rc != SQL_ERROR) + fprintf(stderr,"\n test failed"); + + rc = SQLFreeHandle(SQL_HANDLE_DBC,dbc[i]); + mycon(dbc[i],rc); + + fprintf(stdout,"\n freeing all connections\n"); + for (i=0; i<= test_connections; i++) + { + fprintf(stdout," %d", i); + + SQLDisconnect(dbc[i]); + SQLFreeHandle(SQL_HANDLE_DBC,dbc[i]); + } + SQLFreeHandle(SQL_HANDLE_ENV,env); + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); +} + +static void t_tstotime(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQL_TIMESTAMP_STRUCT ts; + SQLCHAR szData[50]; + + ts.day = 02; + ts.month = 8; + ts.year = 2001; + ts.hour = 18; + ts.minute = 20; + ts.second = 45; + ts.fraction = 05; + + myheader("t_tstotime"); + + tmysql_exec(hstmt,"drop table t_tstotime"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_tstotime(col1 date ,col2 time, col3 timestamp(14))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* TIMESTAMP TO DATE, TIME and TS CONVERSION */ + rc = SQLPrepare(hstmt,"insert into t_tstotime(col1,col2,col3) values(?,?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_TIMESTAMP, + SQL_DATE,0,0,&ts,sizeof(ts),NULL); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_TIMESTAMP, + SQL_TIME,0,0,&ts,sizeof(ts),NULL); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_TIMESTAMP, + SQL_TIMESTAMP,0,0,&ts,sizeof(ts),NULL); + mystmt(hstmt,rc); + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + ts.day++; + ts.month++; + ts.year++; + ts.hour++; + ts.minute++; + ts.second++; + ts.fraction++; + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_tstotime"); + mystmt(hstmt,rc); + + my_assert( 2 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_tstotime"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout,"\n"); + + my_assert(!strcmp("2001-08-02",my_fetch_str(hstmt,(SQLCHAR *)szData,1))); + my_assert(!strcmp("18:20:45",my_fetch_str(hstmt,(SQLCHAR *)szData,2))); + my_assert(!strcmp("2001-08-02 18:20:45",my_fetch_str(hstmt,(SQLCHAR *)szData,3))); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout,"\n"); + + my_assert(!strcmp("2002-09-03",my_fetch_str(hstmt,(SQLCHAR *)szData,1))); + my_assert(!strcmp("19:21:46",my_fetch_str(hstmt,(SQLCHAR *)szData,2))); + my_assert(!strcmp("2002-09-03 19:21:46",my_fetch_str(hstmt,(SQLCHAR *)szData,3))); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_tstotime1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR ts[40] = "2001-08-02 18:20:45.05", szData[50]; + + myheader("t_tstotime1"); + + tmysql_exec(hstmt,"drop table t_tstotime1"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_tstotime1(col1 date ,col2 time, col3 timestamp(14))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* TIMESTAMP TO DATE, TIME and TS CONVERSION */ + rc = SQLPrepare(hstmt,"insert into t_tstotime1 values(?,?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_DATE,0,0,&ts,sizeof(ts),NULL); + mystmt(hstmt,rc); + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_TIME,0,0,&ts,sizeof(ts),NULL); + mystmt(hstmt,rc); + rc = SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_TIMESTAMP,0,0,&ts,sizeof(ts),NULL); + mystmt(hstmt,rc); + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_tstotime1"); + mystmt(hstmt,rc); + + my_assert( 1 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_tstotime1"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout,"\n"); + + my_assert(!strcmp("2001-08-02",my_fetch_str(hstmt,(SQLCHAR *)szData,1))); + my_assert(!strcmp("2001-08-02 18:20:45",my_fetch_str(hstmt,(SQLCHAR *)szData,3))); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void t_enumset(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR szEnum[40]="MYSQL_E1"; + SQLCHAR szSet[40]="THREE,ONE,TWO"; + + myheader("t_enumset"); + + tmysql_exec(hstmt,"drop table t_enumset"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_enumset(col1 enum('MYSQL_E1','MYSQL_E2'),col2 set('ONE','TWO','THREE'))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_enumset values('MYSQL_E2','TWO,THREE')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_enumset values(?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,0,0,&szEnum,sizeof(szEnum),NULL); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,0,0,&szSet,sizeof(szSet),NULL); + mystmt(hstmt,rc); + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_enumset"); + mystmt(hstmt,rc); + + my_assert( 2 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void t_bigint(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR id[20]="999"; + SQLLEN nlen; + + myheader("t_bingint"); + + tmysql_exec(hstmt,"drop table t_bingint"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_bingint(id int(20) NOT NULL auto_increment,name varchar(20) default 'venu', primary key(id))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* TIMESTAMP TO DATE, TIME and TS CONVERSION */ + rc = tmysql_prepare(hstmt,"insert into t_bingint values(?,'venuxyz')"); + mystmt(hstmt,rc); + + nlen = 4; + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG, + SQL_BIGINT,20,0,&id,0,&nlen); + mystmt(hstmt,rc); + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_bingint values(10,'mysql1')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_bingint values(20,'mysql2')"); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLSpecialColumns(hstmt,SQL_ROWVER,NULL,SQL_NTS,NULL,SQL_NTS, + "t_bingint",SQL_NTS,SQL_SCOPE_TRANSACTION,SQL_NULLABLE); + + mycon(hdbc,rc); + + my_assert( 0 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLColumns(hstmt,NULL,SQL_NTS,NULL,SQL_NTS,"t_bingint",SQL_NTS,NULL,SQL_NTS); + + mycon(hdbc,rc); + + my_assert( 2 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLStatistics(hstmt,NULL,SQL_NTS,NULL,SQL_NTS,"t_bingint",SQL_NTS,SQL_INDEX_ALL,SQL_QUICK); + + mycon(hdbc,rc); + + my_assert( 1 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLGetTypeInfo(hstmt,SQL_BIGINT); + mycon(hdbc,rc); + + my_assert( 4 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLGetTypeInfo(hstmt,SQL_BIGINT); + mycon(hdbc,rc); + + my_assert( 4 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_bingint"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt,1,SQL_C_DEFAULT,&id,10,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout,"\n id:%s,nlen:%ld,%ld\n",id,nlen,sizeof(SQL_BIGINT)); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_odbc3_envattr() +{ + SQLRETURN rc; + SQLHENV henv; + SQLHDBC hdbc; + SQLPOINTER ov_version; + + myheader("t_odbc3_envattr"); + + rc = SQLAllocEnv(&henv); + myenv(henv,rc); + + rc = SQLSetEnvAttr(henv,SQL_ATTR_OUTPUT_NTS,(SQLPOINTER)SQL_FALSE,0); + myenv_err(henv,rc == SQL_ERROR,rc); + + rc = SQLSetEnvAttr(henv,SQL_ATTR_OUTPUT_NTS,(SQLPOINTER)SQL_TRUE,0); + myenv(henv,rc); + + rc = SQLAllocConnect(henv,&hdbc); + myenv(henv,rc); + + rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myenv_err(henv,rc == SQL_ERROR,rc); + + rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&ov_version,0,0); + myenv(henv,rc); + fprintf(stdout,"\n default odbc version:%d",ov_version); + my_assert(ov_version == (SQLPOINTER)SQL_OV_ODBC2); + + rc = SQLFreeConnect(hdbc); + mycon(hdbc,rc); + + rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myenv(henv,rc); + + rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&ov_version,0,0); + myenv(henv,rc); + fprintf(stdout,"\n new odbc version:%d",ov_version); + my_assert(ov_version == (SQLPOINTER)SQL_OV_ODBC3); + + rc = SQLFreeEnv(henv); + myenv(henv,rc); + + rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); + myenv(henv,rc); + + rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myenv(henv,rc); + + rc = SQLAllocConnect(henv,&hdbc); + myenv(henv,rc); + + rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myenv_err(henv,rc == SQL_ERROR,rc); + + rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&ov_version,0,0); + myenv(henv,rc); + fprintf(stdout,"\n default odbc version:%d",ov_version); + my_assert(ov_version == (SQLPOINTER)SQL_OV_ODBC3); + + rc = SQLFreeHandle(SQL_HANDLE_DBC, hdbc); + mycon(hdbc,rc); + + rc = SQLFreeHandle(SQL_HANDLE_ENV, henv); + myenv(henv,rc); +} +static void t_odbc3_handle() +{ + SQLRETURN rc; + SQLHENV henv; + SQLHDBC hdbc; + SQLHSTMT hstmt; + SQLPOINTER ov_version; + + myheader("t_odbc3_handle"); + + rc = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); + myenv(henv,rc); + +#if 0 + rc = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); + myenv_err(henv,rc == SQL_ERROR,rc); + + rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&ov_version,0,0); + myenv(henv,rc); + fprintf(stdout,"\n default odbc version:%d",ov_version); + my_assert(ov_version == (SQLPOINTER)SQL_OV_ODBC2); +#endif + + rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myenv(henv,rc); + + rc = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); + myenv(henv,rc); + + rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myenv_err(henv,rc == SQL_ERROR,rc); + + rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&ov_version,0,0); + myenv(henv,rc); + fprintf(stdout,"\n default odbc version:%d",ov_version); + my_assert(ov_version == (SQLPOINTER)SQL_OV_ODBC3); + + rc = SQLConnect(hdbc, mydsn, SQL_NTS, myuid, SQL_NTS, mypwd, SQL_NTS); + mycon(hdbc,rc); + + rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt); + mycon(hdbc, rc); + + rc = SQLDisconnect(hdbc); + mycon(hdbc, rc); + + rc = SQLFreeHandle(SQL_HANDLE_DBC,hdbc); + mycon(hdbc,rc); + + rc = SQLFreeHandle(SQL_HANDLE_ENV,henv); + myenv(henv,rc); +} +static void t_getcursor(SQLHDBC hdbc) +{ + SQLRETURN rc; + SQLHSTMT hstmt1,hstmt2,hstmt3; + SQLCHAR curname[50]; + SQLSMALLINT nlen; + + myheader("t_getcursor"); + + rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt1); + mycon(hdbc, rc); + rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt2); + mycon(hdbc, rc); + rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt3); + mycon(hdbc, rc); + + rc = SQLGetCursorName(hstmt1,curname,50,&nlen); + if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) + { + fprintf(stdout,"\n default cursor name : %s(%d)",curname,nlen); + myassert(nlen == 8); + myassert(!strcmp(curname,"SQL_CUR0")); + + rc = SQLGetCursorName(hstmt3,curname,50,&nlen); + mystmt(hstmt1,rc); + fprintf(stdout,"\n default cursor name : %s(%d)",curname,nlen); + + rc = SQLGetCursorName(hstmt1,curname,4,&nlen); + mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc); + fprintf(stdout,"\n truncated cursor name: %s(%d)",curname,nlen); + myassert(nlen == 8); + myassert(!strcmp(curname,"SQL")); + + rc = SQLGetCursorName(hstmt1,curname,0,&nlen); + mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc); + fprintf(stdout,"\n untouched cursor name: %s(%d)",curname,nlen); + myassert(nlen == 8); + + rc = SQLGetCursorName(hstmt1,curname,8,&nlen); + mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc); + fprintf(stdout,"\n truncated cursor name: %s(%d)",curname,nlen); + myassert(nlen == 8); + myassert(!strcmp(curname,"SQL_CUR")); + + rc = SQLGetCursorName(hstmt1,curname,9,&nlen); + mystmt(hstmt1,rc); + fprintf(stdout,"\n full cursor name : %s(%d)",curname,nlen); + myassert(nlen == 8); + myassert(!strcmp(curname,"SQL_CUR0")); + } + + rc = SQLSetCursorName(hstmt1,"venucur123",7); + mystmt(hstmt1,rc); + + rc = SQLGetCursorName(hstmt1,curname,8,&nlen); + mystmt(hstmt1,rc); + fprintf(stdout,"\n full setcursor name : %s(%d)",curname,nlen); + myassert(nlen == 7); + myassert(!strcmp(curname,"venucur")); + + rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt1); + mystmt(hstmt1,rc); +} +static void t_getcursor1(SQLHDBC hdbc) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLCHAR curname[50]; + SQLSMALLINT nlen,index;; + + myheader("t_getcursor1"); + + for(index=0; index < 100; index++) + { + rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt1); + mycon(hdbc, rc); + + rc = SQLGetCursorName(hstmt1,curname,50,&nlen); + if (rc != SQL_SUCCESS) + break; + fprintf(stdout,"\n %s(%d) ",curname,nlen); + + rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt1); + mystmt(hstmt1,rc); + } +} +static void t_gettypeinfo(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLSMALLINT pccol; + + myheader("t_gettypeinfo"); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLGetTypeInfo(hstmt,SQL_ALL_TYPES); + mystmt(hstmt,rc); + + rc = SQLNumResultCols(hstmt,&pccol); + mystmt(hstmt,rc); + fprintf(stdout,"\n total columns: %d",pccol); + myassert(pccol == 19); + myresult(hstmt); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_getinfo(SQLHDBC hdbc) +{ + SQLRETURN rc; + SQLCHAR rgbValue[100]; + SQLSMALLINT pcbInfo; + + myheader("t_getinfo"); + + rc = SQLGetInfo(hdbc,SQL_DRIVER_ODBC_VER,rgbValue,100,&pcbInfo); + mycon(hdbc,rc); + fprintf(stdout,"\n SQL_DRIVER_ODBC_VER: %s(%d)",rgbValue,pcbInfo); +} +static void t_stmt_attr_status(SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLUSMALLINT rowStatusPtr[3]; + SQLUINTEGER rowsFetchedPtr; + + myheader("t_stmt_attr_status"); + + tmysql_exec(hstmt,"drop table t_stmtstatus"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_stmtstatus(id int, name char(20))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"insert into t_stmtstatus values(10,'data1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_stmtstatus values(20,'data2')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_CURSOR_SCROLLABLE,(SQLPOINTER)SQL_NONSCROLLABLE,0); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_stmtstatus"); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,&rowsFetchedPtr,0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_STATUS_PTR,&rowStatusPtr,0); + mystmt(hstmt,rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,2); + mystmt_err(hstmt,rc == SQL_ERROR,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_CURSOR_SCROLLABLE,(SQLPOINTER)SQL_SCROLLABLE,0); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_stmtstatus"); + mystmt(hstmt,rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,2); + mystmt(hstmt,rc); + + fprintf(stdout,"\n total rows fetched: %d",rowsFetchedPtr); + fprintf(stdout,"\n row 0 status : %d",rowStatusPtr[0]); + fprintf(stdout,"\n row 1 status : %d",rowStatusPtr[1]); + fprintf(stdout,"\n row 2 status : %d",rowStatusPtr[2]); + myassert(rowsFetchedPtr == 1); + myassert(rowStatusPtr[0] == 0); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,(SQLPOINTER)0,0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_STATUS_PTR,(SQLPOINTER)0,0); + mystmt(hstmt,rc); +} +static void t_max_rows(SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER i; + + myheader("t_max_rows"); + + tmysql_exec(hstmt,"drop table t_max_rows"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"create table t_max_rows(id int)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLPrepare(hstmt,"insert into t_max_rows values(?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_ULONG,SQL_INTEGER,0,0,&i,0,NULL); + mystmt(hstmt,rc); + + for(i=0; i < 10; i++) + { + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)0,0); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select count(*) from t_max_rows"); + mystmt(hstmt,rc); + myassert( 1 == myresult(hstmt) ); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = tmysql_exec(hstmt,"select * from t_max_rows"); + mystmt(hstmt,rc); + myassert( 10 == myresult(hstmt) ); + SQLFreeStmt(hstmt,SQL_CLOSE); + + /* MAX rows through connection attribute */ + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)5,0); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_max_rows"); + mystmt(hstmt,rc); + myassert( 5 == myrowcount(hstmt)); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)15,0); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_max_rows"); + mystmt(hstmt,rc); + myassert( 10 == myrowcount(hstmt)); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)0,0); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_max_rows"); + mystmt(hstmt,rc); + myassert( 10 == myrowcount(hstmt)); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void t_prepare(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + int nodata; + long nlen, nidata = 200; + char szodata[20],szidata[20]="MySQL"; + short pccol; + + myheader("t_prepare"); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + tmysql_exec(hstmt,"drop table t_prepare"); + + rc = tmysql_exec(hstmt,"create table t_prepare(col1 int primary key, col2 varchar(30), col3 set(\"one\", \"two\"))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_prepare values(100,'venu','one')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_prepare values(200,'MySQL','two')"); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"select * from t_prepare where col2 = ? AND col1 = ?",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLNumResultCols(hstmt,&pccol); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nodata,0,&nlen); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szodata,200,&nlen); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_CHAR,SQL_VARCHAR, + 0,0,szidata,20,&nlen); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, + 0,0,&nidata,20,NULL); + mystmt(hstmt,rc); + + nlen= strlen(szidata); + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout," outdata: %d, %s(%d)\n", nodata,szodata,nlen); + my_assert(nodata == 200); + + rc = SQLFetch(hstmt); + my_assert(rc == SQL_NO_DATA_FOUND); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); +} +static void t_prepare1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + long nidata = 1000; + + myheader("t_prepare1"); + + tmysql_exec(hstmt,"drop table t_prepare1"); + + rc = tmysql_exec(hstmt,"create table t_prepare1(col1 int primary key, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_prepare1 values(100,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_prepare1 values(200,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_prepare(hstmt,"insert into t_prepare1(col1) values(?)"); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, + 0,0,&nidata,0,NULL); + mystmt(hstmt,rc); + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"SELECT * FROM t_prepare1",SQL_NTS); + mystmt(hstmt,rc); + + myassert(3 == myresult(hstmt));/* unless prepare is supported..*/ + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void test_diagrec( SQLSMALLINT HandleType,SQLHANDLE Handle, + SQLSMALLINT RecNumber,SQLSMALLINT BufferLength, + SQLRETURN return_value_expected) +{ + SQLRETURN rc; + SQLCHAR sqlstate[6]={0}; + SQLCHAR message[255]={0}; + SQLINTEGER native_err=0; + SQLSMALLINT msglen=0; + + rc = SQLGetDiagRec(HandleType,Handle,RecNumber, + (char *)&sqlstate,&native_err, + (char *)&message,BufferLength,&msglen); + + fprintf(stdout,"\n %d@%s(%d)",rc,message,msglen); + myassert(return_value_expected == rc); +} +static void t_diagrec(SQLHENV henv,SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + + myheader("t_diagrec"); + + fprintf(stdout," ** SQL_HANDLE_STMT ** \n"); + + rc = SQLExecDirect(hstmt,"DROP TABLE ODBC3_NON_EXISTANTi_TAB",SQL_NTS); + myassert(rc == SQL_ERROR); + + test_diagrec(SQL_HANDLE_STMT,hstmt,2,0,SQL_NO_DATA_FOUND); + test_diagrec(SQL_HANDLE_STMT,hstmt,1,255,SQL_SUCCESS); + test_diagrec(SQL_HANDLE_STMT,hstmt,1,0,SQL_SUCCESS_WITH_INFO); + test_diagrec(SQL_HANDLE_STMT,hstmt,1,10,SQL_SUCCESS_WITH_INFO); + test_diagrec(SQL_HANDLE_STMT,hstmt,1,-1,SQL_ERROR); +#if 0 + fprintf(stdout," ** SQL_HANDLE_ENV **\n"); + + rc = SQLFreeEnv(henv); + myassert(rc == SQL_ERROR); + + test_diagrec(SQL_HANDLE_ENV,henv,2,0,SQL_NO_DATA_FOUND); + test_diagrec(SQL_HANDLE_ENV,henv,1,255,SQL_SUCCESS); + test_diagrec(SQL_HANDLE_ENV,henv,1,0,SQL_SUCCESS_WITH_INFO); + test_diagrec(SQL_HANDLE_ENV,henv,1,10,SQL_SUCCESS_WITH_INFO); + test_diagrec(SQL_HANDLE_ENV,henv,1,-1,SQL_ERROR); + + fprintf(stdout," ** SQL_HANDLE_DBC **\n"); + + rc = SQLFreeConnect(hdbc); + myassert(rc == SQL_ERROR); + + test_diagrec(SQL_HANDLE_DBC,hdbc,2,0,SQL_NO_DATA_FOUND); + test_diagrec(SQL_HANDLE_DBC,hdbc,1,255,SQL_SUCCESS); + test_diagrec(SQL_HANDLE_DBC,hdbc,1,0,SQL_SUCCESS_WITH_INFO); + test_diagrec(SQL_HANDLE_DBC,hdbc,1,10,SQL_SUCCESS_WITH_INFO); + test_diagrec(SQL_HANDLE_DBC,hdbc,1,-1,SQL_ERROR); +#endif +} +#if 0 +static void t_diaglist(SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR sqlstate[6]={0}; + SQLCHAR message[255]={0}; + SQLINTEGER native_err=0; + SQLSMALLINT msglen=0; + + myheader("t_diaglist"); + + rc = SQLSetPos(hstmt,100,SQL_DELETE,SQL_LOCK_NO_CHANGE); + myassert(rc == SQL_ERROR); + + rc = SQLGetDiagRec(3,hstmt,1, + (char *)&sqlstate,&native_err, + (char *)&message,255,&msglen); + mystmt(hstmt,rc); + fprintf(stdout,"\n %d@%s(%d)",rc,message,msglen); + + rc = SQLExecDirect(hstmt,"SELECT * FROM tupd",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,3,10,SQL_LOCK_NO_CHANGE); + myassert(rc == SQL_ERROR); + + rc = SQLGetDiagRec(3,hstmt,1, + (char *)&sqlstate,&native_err, + (char *)&message,255,&msglen); + mystmt(hstmt,rc); + fprintf(stdout,"\n %d@%s(%d)",rc,message,msglen); + + SQLFreeStmt(hstmt,SQL_CLOSE); +} +#endif + +static void t_scroll(SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER i; + + myheader("t_scroll"); + + tmysql_exec(hstmt,"drop table t_scroll"); + + rc = tmysql_exec(hstmt,"create table t_scroll(col1 int)"); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_scroll values(?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_ULONG, + SQL_INTEGER,0,0,&i,0,NULL); + mystmt(hstmt,rc); + + for( i = 1; i <= 5; i++ ) + { + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLExecDirect(hstmt,"select * from t_scroll",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&i,0,NULL); + mystmt(hstmt,rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_LAST,0);/* 5 */ + mystmt(hstmt,rc); + my_assert(i == 5); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_PREV,0);/* 4 */ + mystmt(hstmt,rc); + my_assert(i == 4); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,-3);/* 1 */ + mystmt(hstmt,rc); + my_assert(i == 1); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,-1);/* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_PREV,1); /* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_FIRST,-1);/* 0 */ + mystmt(hstmt,rc); + my_assert(i == 1); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,4);/* 4 */ + mystmt(hstmt,rc); + my_assert(i == 4); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,2);/* 4 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_PREV,2);/* last */ + mystmt(hstmt,rc); + my_assert(i == 5); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,2);/* last+1 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,-7);/* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_FIRST,2);/* 1 */ + mystmt(hstmt,rc); + my_assert(i == 1); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_PREV,2);/* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);/* 1*/ + mystmt(hstmt,rc); + my_assert(i == 1); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_PREV,0);/* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,-1); /* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,1); /* 1 */ + mystmt(hstmt,rc); + my_assert(i == 1); /* MyODBC .39 returns 2 instead of 1 */ + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,-1);/* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,1);/* 1 */ + mystmt(hstmt,rc); + my_assert(i == 1); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,1);/* 2 */ + mystmt(hstmt,rc); + my_assert(i == 2); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,-2);/* 0 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_RELATIVE,6);/* last+1 */ + mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_PREV,6);/* last+1 */ + mystmt(hstmt, rc); + my_assert(i == 5); + + SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); +} +static void t_acc_crash(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER id; + SQLCHAR name[20], data[30]; + SQL_TIMESTAMP_STRUCT ts; + + myheader("t_acc_crash"); + + tmysql_exec(hstmt,"drop table if exists t_acc_crash"); + rc = tmysql_exec(hstmt,"create table t_acc_crash(id int(11) not null auto_increment,\ + name char(20),\ + ts date,\ + primary key(id))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_acc_crash(id,name) values(1,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_acc_crash(name) values('monty')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_acc_crash(name) values('mysql')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 1); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_acc_crash order by id asc"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,(SQLCHAR *)&name,20,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,3,SQL_C_DATE,&ts,30,NULL); + mystmt(hstmt,rc); + + rc = SQLFetchScroll(hstmt,SQL_FETCH_FIRST,1); + mystmt(hstmt,rc); + + id = 9; + strcpy(name,"updated"); + ts.year=2010;ts.month=9;ts.day=25; + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_acc_crash order by id desc"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + my_assert(9 == my_fetch_int(hstmt,1)); + my_assert(!strcmp("updated", my_fetch_str(hstmt,data,2))); + my_assert(!strcmp("2010-09-25", my_fetch_str(hstmt,data,3))); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void tmysql_pcbvalue(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nodata; + SQLLEN nlen, slen,tlen; + SQLCHAR szdata[20],sztdata[100]; + + myheader("tmysql_pcbvalue"); + + tmysql_exec(hstmt,"drop table tmysql_pcbvalue"); + + rc = tmysql_exec(hstmt,"create table tmysql_pcbvalue(col1 int primary key, col2 varchar(10),col3 text)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_pcbvalue values(100,'venu','mysql')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into tmysql_pcbvalue values(200,'monty','mysql2')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* MS SQL Server to work...*/ + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN, 0); + + rc = SQLExecDirect(hstmt,"select * from tmysql_pcbvalue",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLSetStmtOption(hstmt,SQL_ROWSET_SIZE,1); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nodata,0,&nlen); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szdata,20,&slen); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,3,SQL_C_CHAR,sztdata,100,&tlen); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_FIRST,1,0,NULL); + mystmt(hstmt,rc); + fprintf(stdout," row1: %d(%ld), %s(%ld), %s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); + + strcpy(szdata,"updated-one"); + + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); + mystmt(hstmt,rc); + + fprintf(stdout," row2: %d(%ld), %s(%ld),%s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); + myassert(rc == SQL_NO_DATA_FOUND); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLExecDirect(hstmt,"select * from tmysql_pcbvalue",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szdata,20,&slen); + mystmt(hstmt,rc); + fprintf(stdout," updated data:%s(%ld)",szdata,slen); + my_assert(slen == 4); + my_assert(strcmp(szdata,"upda")==0); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); +} +static void my_setpos_upd_pk_order(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("my_setpos_upd_pk_order"); + + tmysql_exec(hstmt,"drop table my_setpos_upd_pk_order"); + rc = tmysql_exec(hstmt,"create table my_setpos_upd_pk_order(col1 int not null, col2 varchar(30) NOT NULL, primary key(col2,col1))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into my_setpos_upd_pk_order values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into my_setpos_upd_pk_order values(200,'MySQL2')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from my_setpos_upd_pk_order"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + nData = 1000; + strcpy((char *)szData , "updated"); + + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from my_setpos_upd_pk_order"); + mystmt(hstmt,rc); + + myresult(hstmt); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"DELETE FROM my_setpos_upd_pk_order WHERE col2 = 'updated'",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + fprintf(stdout,"\n total rows affected:%ld",nlen); + my_assert(nlen == 1); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void my_setpos_upd_pk_order1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("my_setpos_upd_pk_order1"); + + tmysql_exec(hstmt,"drop table my_setpos_upd_pk_order"); + rc = tmysql_exec(hstmt,"create table my_setpos_upd_pk_order(col1 int not null, col2 varchar(30) NOT NULL, col3 int not null, primary key(col2,col1,col3))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into my_setpos_upd_pk_order values(100,'MySQL1',1)"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into my_setpos_upd_pk_order values(200,'MySQL2',2)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from my_setpos_upd_pk_order"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + nData = 1000; + strcpy((char *)szData , "updated"); + + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt_err(hstmt,rc == SQL_ERROR, rc); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} +static void tmysql_pos_update_ex(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLUINTEGER pcrow; + SQLUSMALLINT rgfRowStatus; + SQLCHAR cursor[30],sql[100],data[]="updated"; + + myheader("tmysql_pos_update_ex"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table t_pos_updex"); + rc = tmysql_exec(hstmt,"create table t_pos_updex(col1 int NOT NULL primary key, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(100,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(200,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_updex"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,0,0,data,20,NULL); + mystmt(hstmt1,rc); + + rc = SQLGetCursorName(hstmt,cursor,30,NULL); + mystmt(hstmt,rc); + + sprintf(sql,"UPDATE t_pos_updex SET col1= 999, col2 = ? WHERE CURRENT OF %s",cursor); + + rc = SQLExecDirect(hstmt1,sql,SQL_NTS); + mystmt(hstmt1,rc); + + SQLNumResultCols(hstmt1,&rgfRowStatus); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + rc = SQLFreeStmt(hstmt1,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_updex"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + { + SQLCHAR szData[20]; + my_assert(999 == my_fetch_int(hstmt,1)); + my_assert(!strcmp("updated",my_fetch_str(hstmt,szData,2))); + } + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} + +static void tmysql_pos_update_ex1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLUINTEGER pcrow; + SQLUSMALLINT rgfRowStatus; + SQLCHAR cursor[30],sql[100],data[]="updated"; + + myheader("tmysql_pos_update_ex1"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table t_pos_updex"); + rc = tmysql_exec(hstmt,"create table t_pos_updex(col1 int, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(100,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(200,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_updex"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,0,0,data,20,NULL); + mystmt(hstmt1,rc); + + rc = SQLGetCursorName(hstmt,cursor,30,NULL); + mystmt(hstmt,rc); + + sprintf(sql,"UPDATE t_pos_updex SET col1= 999, col2 = ? WHERE CURRENT OF %s",cursor); + + rc = SQLExecDirect(hstmt1,sql,SQL_NTS); + mystmt(hstmt1,rc); + + SQLNumResultCols(hstmt1,&rgfRowStatus); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + rc = SQLFreeStmt(hstmt1,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_updex"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + { + SQLCHAR szData[20]; + my_assert(999 == my_fetch_int(hstmt,1)); + my_assert(!strcmp("updated",my_fetch_str(hstmt,szData,2))); + } + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} + +static void tmysql_pos_update_ex2(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLUINTEGER pcrow; + SQLUSMALLINT rgfRowStatus; + SQLCHAR cursor[30],sql[100],data[]="updated"; + + myheader("tmysql_pos_update_ex2"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table t_pos_updex"); + rc = tmysql_exec(hstmt,"create table t_pos_updex(col1 int NOT NULL, col2 varchar(30), col3 int NOT NULL,primary key(col1,col3))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(100,'venu',1)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(200,'MySQL',2)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select col1,col2 from t_pos_updex"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,0,0,data,20,NULL); + mystmt(hstmt1,rc); + + rc = SQLGetCursorName(hstmt,cursor,30,NULL); + mystmt(hstmt,rc); + + sprintf(sql,"UPDATE t_pos_updex SET col1= 999, col2 = ? WHERE CURRENT OF %s",cursor); + + rc = SQLExecDirect(hstmt1,sql,SQL_NTS); + mystmt(hstmt1,rc); + + SQLNumResultCols(hstmt1,&rgfRowStatus); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + rc = SQLFreeStmt(hstmt1,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_updex"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + { + SQLCHAR szData[20]; + my_assert(999 == my_fetch_int(hstmt,1)); + my_assert(!strcmp("updated",my_fetch_str(hstmt,szData,2))); + } + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} + +static void tmysql_pos_update_ex3(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLUINTEGER pcrow; + SQLCHAR cursor[30],sql[100]; + + myheader("tmysql_pos_update_ex3"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table t_pos_updex"); + rc = tmysql_exec(hstmt,"create table t_pos_updex(col1 int NOT NULL primary key, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(100,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_updex values(200,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_updex"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,2,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLGetCursorName(hstmt,cursor,30,NULL); + mystmt(hstmt,rc); + + sprintf(sql,"UPDATE t_pos_updex SET col1= 999, col2 = ? WHERE CURRENT OF %s",cursor); + + rc = SQLExecDirect(hstmt1,sql,SQL_NTS); + mystmt_err(hstmt1,rc == SQL_ERROR,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} + + +static void t_msdev_bug(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR catalog[30]; + SQLINTEGER len; + + myheader("t_msdev_bug"); + + rc = SQLGetConnectOption(hdbc,SQL_CURRENT_QUALIFIER,&catalog); + mycon(hdbc,rc); + fprintf(stdout," SQL_CURRENT_QUALIFIER:%s\n",catalog); + + rc = SQLGetConnectAttr(hdbc,SQL_ATTR_CURRENT_CATALOG,&catalog,30,&len); + mycon(hdbc,rc); + fprintf(stdout," SQL_ATTR_CURRENT_CATRALOG:%s(%d)\n",catalog,len); +} + +static void t_setpos_position(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER nData = 500; + SQLLEN nlen; + SQLCHAR szData[255]={0}; + SQLUINTEGER pcrow; + + myheader("t_setpos_position"); + + tmysql_exec(hstmt,"drop table t_setpos_position"); + rc = tmysql_exec(hstmt,"create table t_setpos_position(col1 int, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_setpos_position values(100,'MySQL1')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_setpos_position values(200,'MySQL2')"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_setpos_position values(300,'MySQL3')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0); + SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE); + + rc = tmysql_exec(hstmt,"select * from t_setpos_position"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + fprintf(stdout," pcrow:%d\n",pcrow); + fprintf(stdout," row1:%d,%s\n",nData,szData); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + nData = 1000; + strcpy((char *)szData , "updated"); + + rc = SQLSetPos(hstmt,3,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt_err(hstmt,rc == SQL_ERROR,rc); + + rc = SQLSetPos(hstmt,2,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt_err(hstmt,rc == SQL_ERROR,rc); + + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_setpos_position"); + mystmt(hstmt,rc); + + myresult(hstmt); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"DELETE FROM t_setpos_position WHERE col2 = 'updated'",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + fprintf(stdout,"\n total rows affected:%ld",nlen); + my_assert(nlen == 1); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_setpos_position"); + mystmt(hstmt,rc); + + my_assert(2 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void t_error(SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR state[6], errmsg[300]; + SQLINTEGER native; + SQLSMALLINT pclen; + SQLHENV henvl; + + myheader("t_error"); + + if (!server_is_mysql(hdbc)) + return; + + rc = SQLExecDirect(hstmt,"drop table NON_EXISTANT_TABLE_t_error",SQL_NTS); + myassert(rc == SQL_ERROR); + + rc = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, (SQLCHAR *)&state, + &native, (SQLCHAR *)&errmsg,255,&pclen); + mystmt(hstmt,rc); + fprintf(stdout,"\n state : %s\n native : %d\n error : %s\n errlen : %d\n", + state, native, errmsg, pclen); + myassert(strcmp(state,"42S02") == 0); + myassert(native == 1051); + + rc = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, (SQLCHAR *)&state, + &native, (SQLCHAR *)&errmsg,255,&pclen); + mystmt(hstmt,rc); + fprintf(stdout,"\n state : %s\n native : %d\n error : %s\n errlen : %d\n", + state, native, errmsg, pclen); + myassert(strcmp(state,"42S02") == 0); + myassert(native == 1051); + + rc = SQLError(NULL,NULL,hstmt,(SQLCHAR *)&state,&native, + (SQLCHAR *)&errmsg,255,&pclen); + mystmt(hstmt,rc); + fprintf(stdout,"\n state : %s\n native : %d\n error : %s\n errlen : %d\n", + state, native, errmsg, pclen); + myassert(strcmp(state,"42S02") == 0); + myassert(native == 1051); + + rc = SQLError(NULL,NULL,hstmt,(SQLCHAR *)&state,&native, + (SQLCHAR *)&errmsg,255,&pclen); + myassert(rc == SQL_NO_DATA_FOUND); + + SQLFreeStmt(hstmt, SQL_CLOSE); + + /* env and dbc related */ + rc = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henvl); + myassert(rc == SQL_SUCCESS); + + rc = SQLSetEnvAttr(henvl, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); + myassert(rc == SQL_SUCCESS); + + rc = SQLSetEnvAttr(henvl,SQL_ATTR_CP_MATCH, (SQLPOINTER)100,0); + myassert(rc == SQL_ERROR); + + rc = SQLGetDiagRec(SQL_HANDLE_ENV, henvl, 1, (SQLCHAR *)&state, + &native, (SQLCHAR *)&errmsg,255,&pclen); + myassert(rc == SQL_SUCCESS); + fprintf(stdout,"\n state : %s\n native : %d\n error : %s\n errlen : %d\n", + state, native, errmsg, pclen); + myassert(strcmp(state,"HY024") == 0 || strcmp(state,"HYC00")==0); + + rc = SQLGetDiagRec(SQL_HANDLE_ENV, henvl, 1, (SQLCHAR *)&state, + &native, (SQLCHAR *)&errmsg,255,&pclen); + myassert(rc == SQL_SUCCESS); + fprintf(stdout,"\n state : %s\n native : %d\n error : %s\n errlen : %d\n", + state, native, errmsg, pclen); + myassert(strcmp(state,"HY024") == 0 || strcmp(state,"HYC00")==0); + + rc = SQLError(henvl,NULL,NULL,(SQLCHAR *)&state,&native, + (SQLCHAR *)&errmsg,255,&pclen); + myassert(rc == SQL_SUCCESS); + fprintf(stdout,"\n state : %s\n native : %d\n error : %s\n errlen : %d\n", + state, native, errmsg, pclen); + myassert(strcmp(state,"HY024") == 0 || strcmp(state,"HYC00")==0); + + rc = SQLError(NULL,NULL,hstmt,(SQLCHAR *)&state,&native, + (SQLCHAR *)&errmsg,255,&pclen); + myassert(rc == SQL_NO_DATA_FOUND); + SQLFreeEnv(henvl); +} + +static void t_pos_column_ignore(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLCHAR szData[]="updated"; + SQLINTEGER nData, pcrow; + SQLLEN pcbValue, nlen; + + myheader("t_pos_column_ignore"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table t_pos_column_ignore"); + rc = tmysql_exec(hstmt,"create table t_pos_column_ignore(col1 int NOT NULL primary key, col2 varchar(30))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_column_ignore values(10,'venu')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_column_ignore values(100,'MySQL')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN, 0); + + /* ignore all columns */ + rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,&pcbValue); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&pcbValue); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + nData = 99; + strcpy((char *)szData , "updated"); + + pcbValue = SQL_COLUMN_IGNORE; + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + myassert(nlen == 0); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + SQLFreeStmt(hstmt1,SQL_CLOSE); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + { + SQLCHAR szData[20]; + my_assert(10 == my_fetch_int(hstmt,1)); + my_assert(!strcmp("venu",my_fetch_str(hstmt,szData,2))); + } + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* ignore only one column */ + + rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&pcbValue); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL); + mystmt(hstmt,rc); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + nData = 99; + strcpy((char *)szData , "updated"); + + pcbValue = SQL_COLUMN_IGNORE; + rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&nlen); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%ld\n",nlen); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + SQLFreeStmt(hstmt1,SQL_CLOSE); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + { + SQLCHAR szData[20]; + my_assert(99 == my_fetch_int(hstmt,1)); + my_assert(!strcmp("venu",my_fetch_str(hstmt,szData,2))); + } + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} + + +static void t_longlong1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER session_id, ctn; + + myheader("t_longlong1"); + + tmysql_exec(hstmt,"drop table t_longlong"); + rc = tmysql_exec(hstmt,"create table t_longlong (\ + session_id bigint not null,\ + ctn bigint not null)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0); + + rc = SQLPrepare(hstmt,"insert into t_longlong values (?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_UBIGINT, + SQL_BIGINT, 20, 0, &session_id, 20, NULL ); + + rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_UBIGINT, + SQL_BIGINT, 20, 0, &ctn, 20, NULL ); + + for (session_id=50; session_id < 100; session_id++) + { + ctn += session_id; + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_longlong"); + mystmt(hstmt,rc); + + my_assert( 50 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + + +static void t_time(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQL_TIME_STRUCT tm; + SQLCHAR str[20]; + + myheader("t_time"); + + tmysql_exec(hstmt,"drop table t_time"); + rc = tmysql_exec(hstmt,"create table t_time(tm time, ts timestamp(14))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLPrepare(hstmt,"insert into t_time values (?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_TIME, + SQL_TIME, 0, 0, &tm, 0, NULL ); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_TIME, + SQL_TIMESTAMP, 0, 0, &tm, 15, NULL ); + mystmt(hstmt,rc); + + tm.hour = 20; + tm.minute = 59; + tm.second = 45; + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLExecDirect(hstmt,"select tm from t_time",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,100,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n time:%s",str); + my_assert(strcmp(str,"20:59:45")==0); + + rc = SQLFetch(hstmt); + my_assert(rc == SQL_NO_DATA_FOUND); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void t_numeric(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQL_NUMERIC_STRUCT num; + + myheader("t_numeric"); + + tmysql_exec(hstmt,"drop table t_decimal"); + rc = tmysql_exec(hstmt,"create table t_decimal(d1 decimal(10,6))"); + mystmt(hstmt,rc); + rc = tmysql_exec(hstmt,"insert into t_decimal values(10.2)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLPrepare(hstmt,"insert into t_decimal values (?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_NUMERIC, + SQL_DECIMAL, 10, 4, &num, 0, NULL ); + mystmt_r(hstmt,rc); + + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLPrepare(hstmt,"insert into t_decimal values (?),(?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, + SQL_DECIMAL, 10, 4, &rc, 0, NULL ); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_NUMERIC, + SQL_DECIMAL, 10, 4, &num, 0, NULL ); + mystmt_r(hstmt,rc); + + SQLFreeStmt(hstmt, SQL_CLOSE); + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + + rc = SQLBindCol( hstmt, 1, SQL_C_NUMERIC, &num, 0, NULL ); + mystmt_r(hstmt,rc); + + SQLFreeStmt(hstmt, SQL_CLOSE); + SQLFreeStmt(hstmt, SQL_UNBIND); + + rc = SQLExecDirect(hstmt, "select * from t_decimal",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData( hstmt, 1, SQL_C_NUMERIC, &num, 0, NULL ); + mystmt_r(hstmt,rc); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + SQLFreeStmt(hstmt, SQL_CLOSE); +} + +static void t_decimal(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLCHAR str[20],s_data[]="189.4567"; + SQLDOUBLE d_data=189.4567; + SQLINTEGER i_data=189, l_data=-23; + SQLRETURN rc; + + myheader("t_decimal"); + + tmysql_exec(hstmt,"drop table t_decimal"); + rc = tmysql_exec(hstmt,"create table t_decimal(d1 decimal(10,6))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLPrepare(hstmt,"insert into t_decimal values (?),(?),(?),(?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_DOUBLE, + SQL_DECIMAL, 10, 4, &d_data, 0, NULL ); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, + SQL_DECIMAL, 10, 4, &i_data, 0, NULL ); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, + SQL_DECIMAL, 10, 4, &s_data, 9, NULL ); + mystmt(hstmt,rc); + + rc = SQLBindParameter( hstmt, 4, SQL_PARAM_INPUT, SQL_C_LONG, + SQL_DECIMAL, 10, 4, &l_data, 0, NULL ); + mystmt(hstmt,rc); + + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLExecDirect(hstmt,"select d1 from t_decimal",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n decimal(SQL_C_DOUBLE) : %s",str); + my_assert(strncmp(str,"189.4567",8)==0); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n decimal(SQL_C_INTEGER): %s",str); + my_assert(strncmp(str,"189.0000",5)==0); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n decimal(SQL_C_CHAR) : %s",str); + my_assert(strncmp(str,"189.4567",8)==0); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n decimal(SQL_C_LONG) : %s",str); + my_assert(strncmp(str,"-23.00",6)==0); + + rc = SQLFetch(hstmt); + my_assert(rc == SQL_NO_DATA_FOUND); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + + +static void t_warning(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR szData[20]; + SQLLEN pcbValue; + + myheader("t_warning"); + + tmysql_exec(hstmt,"drop table t_warning"); + rc = tmysql_exec(hstmt,"create table t_warning(col2 char(20))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_warning values('venu anuganti')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN, 0); + + /* ignore all columns */ + rc = tmysql_exec(hstmt,"select * from t_warning"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt, rc); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); + mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); + mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); + mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); + + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); + + rc = SQLFetch(hstmt); + mystmt_err(hstmt, rc == SQL_NO_DATA_FOUND, rc); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); +} + +static void t_multistep(SQLHDBC hdbc, SQLHSTMT hstmt) +{ +#ifdef DBUG_OFF + SQLRETURN rc; + SQLCHAR szData[150]; + SQLLEN pcbValue; + SQLINTEGER id; + + myheader("t_multistep"); + + tmysql_exec(hstmt,"drop table t_multistep"); + rc = tmysql_exec(hstmt,"create table t_multistep(col1 int,col2 varchar(200))"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_multistep values(10,'MySQL - Open Source Database')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN, 0); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_multistep"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + fprintf(stdout,"\n id: %ld",id); + myassert(id == 10); + + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n length: %ld", pcbValue); + myassert(pcbValue == 28); + + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n length: %ld", pcbValue); + myassert(pcbValue == 28); + + rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n length: %ld", pcbValue); + myassert(pcbValue == 28); + + rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n length: %ld", pcbValue); + myassert(pcbValue == 28); + + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n length: %ld", pcbValue); + myassert(pcbValue == 28); + + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,10,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n data : %s (%ld)",szData,pcbValue); + myassert(pcbValue == 28); + myassert(strcmp(szData,"MySQL - O") == 0); + + pcbValue= 0; + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,5,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n data : %s (%ld)",szData,pcbValue); + myassert(pcbValue == 19); + myassert(strcmp(szData,"pen ") == 0); + + pcbValue= 0; + szData[0]='A'; + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n data : %s (%ld)",szData,pcbValue); + myassert(pcbValue == 15); + myassert(szData[0] == 'A'); + + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,pcbValue+1,&pcbValue); + mystmt(hstmt,rc); + fprintf(stdout,"\n data : %s (%ld)",szData,pcbValue); + myassert(pcbValue == 15); + myassert(strcmp(szData,"Source Database") == 0); + + pcbValue= 99; + szData[0]='A'; + rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue); + myassert(rc == SQL_SUCCESS_WITH_INFO); + fprintf(stdout,"\n data : %s (%ld)",szData,pcbValue); + myassert(pcbValue == 0); + myassert(szData[0] == 'A'); + + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA_FOUND); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); +#endif +} + +static void t_zerolength(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR szData[100], bData[100], bData1[100]; + SQLLEN pcbValue,pcbValue1,pcbValue2; + + myheader("t_zerolength"); + + tmysql_exec(hstmt,"drop table t_zerolength"); + rc = tmysql_exec(hstmt,"create table t_zerolength(str varchar(20), bin binary(20), blb blob)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_zerolength values('','','')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_zerolength values('venu','mysql','monty')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN, 0); + + rc = tmysql_exec(hstmt,"select * from t_zerolength"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + pcbValue= pcbValue1= 99; + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n length: %ld", pcbValue); + myassert(pcbValue == 0); + + bData[0]=bData[1]='z'; + rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n length: %ld", pcbValue1); + myassert(pcbValue1 == 0); + myassert(bData[0] == 'z'); + myassert(bData[1] == 'z'); + + bData1[0]=bData1[1]='z'; + rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n length: %ld", pcbValue2); + myassert(pcbValue2 == 0); + myassert(bData1[0] == 'z'); + myassert(bData1[1] == 'z'); + + pcbValue= pcbValue1= 99; + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); + myassert(pcbValue == 0); + myassert(szData[0] == '\0'); + + bData[0]=bData[1]='z'; + rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s, length: %ld", bData, pcbValue1); + myassert(pcbValue1 == 0); + myassert(bData[0]== '\0'); + + bData1[0]=bData1[1]='z'; + rc = SQLGetData(hstmt,3,SQL_C_CHAR,bData1,1,&pcbValue2); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s, length: %ld", bData1, pcbValue2); + myassert(pcbValue2 == 0); + myassert(bData1[0] == '\0'); + myassert(bData1[1] == 'z'); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + pcbValue= pcbValue1= 99; + szData[0]= bData[0]= 'z'; + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n length: %ld", pcbValue); + myassert(pcbValue == 4); + myassert(szData[0] == 'z'); + + rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n length: %ld", pcbValue1); + myassert(pcbValue1 == 5); + myassert(bData[0] == 'z'); + + bData[0]=bData1[1]='z'; + rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n length: %ld", pcbValue2); + myassert(pcbValue2 == 5); + + pcbValue= pcbValue1= 99; + szData[0]= szData[1]= bData[0]= bData[1]= 'z'; + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData,pcbValue); + myassert(pcbValue == 4); + myassert(szData[0] == '\0'); + + rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n data; %s, length: %ld", bData, pcbValue1); + myassert(pcbValue1 == 5); + myassert(bData[0] == 'm'); + + bData[0]=bData1[1]='z'; + rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,1,&pcbValue2); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n length: %ld", pcbValue2); + myassert(pcbValue2 == 5); + myassert(bData1[0] == 'm'); + myassert(bData1[1] == 'z'); + + pcbValue= pcbValue1= 99; + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); + myassert(pcbValue == 4); + myassert(strcmp(szData,"ven")==0); + + rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,4,&pcbValue1); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n data: %s, length: %ld", bData, pcbValue1); + myassert(pcbValue1 == 5); + myassert(strncmp(bData,"mysq",4)==0); + + pcbValue= pcbValue1= 99; + rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,5,&pcbValue); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); + myassert(pcbValue == 4); + myassert(strcmp(szData,"venu")==0); + + rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,5,&pcbValue1); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s, length: %ld", bData, pcbValue1); + myassert(pcbValue1 == 5); + myassert(strncmp(bData,"mysql",5)==0); + + szData[0]= 'z'; + rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,0,&pcbValue); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); + myassert(pcbValue == 5 || pcbValue == 10); + myassert(szData[0] == 'z'); + +#if TO_BE_FIXED_IN_DRIVER + szData[0]=szData[1]='z'; + rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,1,&pcbValue); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); + myassert(pcbValue == 10); + myassert(szData[0] == 'm'); + myassert(szData[1] == 'z'); + + rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,4,&pcbValue); + mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); + myassert(pcbValue == 10); + myassert(strncmp(szData,"mont",4) == 0); + + rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,5,&pcbValue); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); + myassert(pcbValue == 10); + myassert(strncmp(szData,"monty",5) == 0); +#endif + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA_FOUND); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); +} + + +static void t_pos_datetime_delete(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLINTEGER int_data, cur_type; + SQLLEN row_count; + + myheader("t_pos_datetime_delete"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table t_pos_delete"); + rc = tmysql_exec(hstmt,"create table t_pos_delete(id int not null default '0',\ + name varchar(20) NOT NULL default '',\ + created datetime NOT NULL default '2000-01-01')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete values(1,'venu','2003-02-10 14:45:39')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete(name) values('')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(2)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_delete"); + mystmt(hstmt,rc); + + my_assert(3 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0); + SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_TRY_UNIQUE); + + SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0); + SQLSetStmtOption(hstmt1,SQL_SIMULATE_CURSOR,SQL_SC_TRY_UNIQUE); + + rc = SQLSetCursorName(hstmt,"venu_cur",8); + mystmt(hstmt,rc); + + rc = SQLGetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, &cur_type, 0, NULL); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_delete"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&int_data,0,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n current_row: %d", int_data); + myassert(int_data == 1); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt(hstmt1,rc); + + rc = SQLRowCount(hstmt1,&row_count); + mystmt(hstmt1,rc); + fprintf(stdout, "\n rows affected: %ld", row_count); + myassert(row_count == 1); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n current_row: %d", int_data); + if (cur_type == SQL_CURSOR_DYNAMIC) + myassert(int_data == 2); + else + myassert(int_data == 0); + + /*rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc);*/ + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt(hstmt1,rc); + + rc = SQLRowCount(hstmt1,&row_count); + mystmt(hstmt1,rc); + fprintf(stdout, "\n rows affected: %ld", row_count); + myassert(row_count == 1); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); + SQLFreeStmt(hstmt1,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_delete"); + mystmt(hstmt,rc); + + my_assert(1 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + if (cur_type == SQL_CURSOR_DYNAMIC) + verify_col_data(hstmt,"t_pos_delete","id","0"); + else + verify_col_data(hstmt,"t_pos_delete","id","2"); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} + + +static void t_pos_datetime_delete1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLHSTMT hstmt1; + SQLLEN row_count; + SQLINTEGER int_data, cur_type; + + myheader("t_pos_datetime_delete1"); + + rc = SQLAllocStmt(hdbc,&hstmt1); + mycon(hdbc,rc); + + tmysql_exec(hstmt,"drop table t_pos_delete"); + rc = tmysql_exec(hstmt,"create table t_pos_delete(id int not null default '0',\ + name varchar(20) NOT NULL default '',\ + created datetime NOT NULL default '2000-01-01')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete values(1,'venu','2003-02-10 14:45:39')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete(name) values('')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(2)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(3)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(4)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(5)"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_delete"); + mystmt(hstmt,rc); + + my_assert(6 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0); + SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE); + + SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); + SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0); + SQLSetStmtOption(hstmt1,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE); + + rc = SQLSetCursorName(hstmt,"venu_cur",8); + mystmt(hstmt,rc); + + rc = SQLGetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, &cur_type, 0, NULL); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_delete"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&int_data,0,NULL); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,3,NULL,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n current_row: %d", int_data); + myassert(int_data == 2); + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt(hstmt1,rc); + + rc = SQLRowCount(hstmt1,&row_count); + mystmt(hstmt1,rc); + fprintf(stdout, "\n rows affected: %ld", row_count); + myassert(row_count == 1); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n current_row: %d", int_data); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc); + fprintf(stdout,"\n current_row: %d", int_data); + + /*rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + mystmt(hstmt,rc);*/ + + rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF venu_cur",SQL_NTS); + mystmt(hstmt1,rc); + + rc = SQLRowCount(hstmt1,&row_count); + mystmt(hstmt1,rc); + fprintf(stdout, "\n rows affected: %ld", row_count); + myassert(row_count == 1); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); + SQLFreeStmt(hstmt1,SQL_CLOSE); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"select * from t_pos_delete"); + mystmt(hstmt,rc); + + my_assert(4 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt1,SQL_DROP); + mystmt(hstmt1,rc); +} + +#define TEST_ODBC_TEXT_LEN 3000 +static void t_text_fetch(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER i, row_count; + SQLLEN length; + SQLCHAR data[TEST_ODBC_TEXT_LEN+1]; + + myheader("t_text_fetch"); + + SQLExecDirect(hstmt,"drop table t_text_fetch",SQL_NTS); + rc = SQLExecDirect(hstmt,"create table t_text_fetch(t1 tinytext, \ + t2 text, \ + t3 mediumtext, \ + t4 longtext)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_text_fetch values(?,?,?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, + 0,0,(char *)data, TEST_ODBC_TEXT_LEN/3, NULL); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, + 0,0,(char *)data, TEST_ODBC_TEXT_LEN/2, NULL); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, + 0,0,(char *)data, + (SQLINTEGER)(TEST_ODBC_TEXT_LEN/1.5), NULL); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, + 0,0,(char *)data, TEST_ODBC_TEXT_LEN-1, NULL); + mystmt(hstmt,rc); + + memset(data,'A',TEST_ODBC_TEXT_LEN); + data[TEST_ODBC_TEXT_LEN]='\0'; + + for (i=0; i < 10; i++) + { + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"SELECT * FROM t_text_fetch",SQL_NTS); + mystmt(hstmt,rc); + + row_count= 0; + rc = SQLFetch(hstmt); + while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) + { + fprintf(stdout,"\n row '%d' (lengths: ", row_count); + rc = SQLGetData(hstmt,1,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); + mystmt(hstmt,rc); + fprintf(stdout,"%ld", length); + myassert(length == 255); + + rc = SQLGetData(hstmt,2,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); + mystmt(hstmt,rc); + fprintf(stdout,",%ld", length); + myassert(length == TEST_ODBC_TEXT_LEN/2); + + rc = SQLGetData(hstmt,3,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); + mystmt(hstmt,rc); + fprintf(stdout,",%ld", length); + myassert(length == (SQLINTEGER)(TEST_ODBC_TEXT_LEN/1.5)); + + rc = SQLGetData(hstmt,4,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); + mystmt(hstmt,rc); + fprintf(stdout,",%ld)", length); + myassert(length == TEST_ODBC_TEXT_LEN-1); + row_count++; + + rc = SQLFetch(hstmt); + } + fprintf(stdout,"\n total rows: %d", row_count); + myassert(row_count == i); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"DROP TABLE t_text_fetch",SQL_NTS); + mystmt(hstmt,rc); +} + +/* To test SQLColumns misc case */ +static void t_columns(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLUSMALLINT NumPrecRadix, DataType, Nullable; + SQLULEN cbColumnSize, cbDecimalDigits, cbNumPrecRadix, + cbDataType, cbNullable; + SQLUINTEGER cbDatabaseName; + SQLRETURN rc; + SQLULEN ColumnSize; + SQLUINTEGER ColumnCount= 7, i; + SQLUSMALLINT DecimalDigits; + SQLCHAR ColumnName[MAX_NAME_LEN], DatabaseName[MAX_NAME_LEN]; + SQLUINTEGER Values[7][5][2]= + { + { {5,2}, {6,4}, {0,2}, {10,2}, {1,2}}, + { {12,2}, {5,4}, {0,-1}, {10,-1}, {1,2}}, + { {12,2}, {20,4}, {0,-1}, {10,-1}, {0,2}}, + { {3,2}, {10,4}, {2,2}, {10,2}, {1,2}}, + { {65530,2}, {4,4}, {0,2}, {10,2}, {0,2}}, + { {4,2}, {11,4}, {0,2}, {10,2}, {0,2}}, + { {65530,2}, {4,4}, {0,2}, {10,2}, {1,2}} + }; + + myheader("t_columns"); + + SQLFreeStmt(hstmt, SQL_CLOSE); + SQLExecDirect(hstmt,"DROP TABLE test_column",SQL_NTS); + + rc = SQLExecDirect(hstmt,"CREATE TABLE test_column(col0 smallint, \ + col1 char(5),\ + col2 varchar(20) not null,\ + col3 decimal(10,2),\ + col4 tinyint not null,\ + col5 integer primary key,\ + col6 tinyint not null unique auto_increment)",SQL_NTS); + mystmt(hstmt,rc); + + mystmt(hstmt,rc); + + rc= SQLSetStmtAttr(hstmt, SQL_ATTR_METADATA_ID, + (SQLPOINTER)SQL_FALSE, SQL_IS_UINTEGER); + mystmt(hstmt,rc); + + SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0); + + rc= SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG,(SQLCHAR *)DatabaseName, + MAX_NAME_LEN, &cbDatabaseName);/* Current Catalog */ + mycon(hdbc,rc); + + for (i=0; i< ColumnCount; i++) + { + sprintf(ColumnName,"col%d",i); + + rc= SQLColumns(hstmt, + (SQLCHAR *)DatabaseName, (SQLUSMALLINT)cbDatabaseName, + SQL_NULL_HANDLE, 0, + (SQLCHAR *)"test_column", SQL_NTS, + (SQLCHAR *)ColumnName, SQL_NTS); + mystmt(hstmt,rc); + + /* 5 -- Data type */ + rc= SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType); + mystmt(hstmt,rc); + + /* 7 -- Column Size */ + rc= SQLBindCol(hstmt, 7, SQL_C_ULONG, &ColumnSize, 0, &cbColumnSize); + mystmt(hstmt,rc); + + /* 9 -- Decimal Digits */ + rc= SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits); + mystmt(hstmt,rc); + + /* 10 -- Num Prec Radix */ + rc= SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix); + mystmt(hstmt,rc); + + /* 11 -- Nullable */ + rc= SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable); + mystmt(hstmt,rc); + + rc= SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout,"\n Column %s:", ColumnName); + fprintf(stdout,"\n\t DataType = %d(%ld)", DataType, cbDataType); + fprintf(stdout,"\n\t ColumnSize = %d(%ld)", ColumnSize, cbColumnSize); + fprintf(stdout,"\n\t DecimalDigits= %d(%ld)", DecimalDigits, cbDecimalDigits); + fprintf(stdout,"\n\t NumPrecRadix = %d(%ld)", NumPrecRadix, cbNumPrecRadix); + fprintf(stdout,"\n\t Nullable = %s(%ld)\n", + Nullable == SQL_NO_NULLS ? "NO": "YES", cbNullable); + + myassert(DataType == Values[i][0][0]); + myassert(cbDataType == Values[i][0][1]); + + myassert(ColumnSize == Values[i][1][0]); + myassert(cbColumnSize == Values[i][1][1]); + + myassert(DecimalDigits == Values[i][2][0]); + myassert(cbDecimalDigits == Values[i][2][1]); + + myassert(NumPrecRadix == Values[i][3][0]); + myassert(cbNumPrecRadix == Values[i][3][1]); + + myassert(Nullable == Values[i][4][0]); + myassert(cbNullable == Values[i][4][1]); + + rc= SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); + } + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"DROP TABLE test_column",SQL_NTS); + mystmt(hstmt,rc); + SQLFreeStmt(hstmt,SQL_CLOSE); +} + + +/* To test a convertion type */ +static void t_convert_type(SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLSMALLINT SqlType, DateType; + SQLCHAR ColName[MAX_NAME_LEN]; + SQLCHAR DbVersion[MAX_NAME_LEN]; + SQLINTEGER OdbcVersion; + + myheader("t_convert_type"); + + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&OdbcVersion,0,NULL); + myenv(henv,rc); + + fprintf(stdout,"\n odbc version:"); + if (OdbcVersion == SQL_OV_ODBC2) + { + fprintf(stdout," SQL_OV_ODBC2"); + DateType= SQL_DATE; + } + else + { + fprintf(stdout," SQL_OV_ODBC3"); + DateType= SQL_TYPE_DATE; + } + + rc = SQLGetInfo(hdbc,SQL_DBMS_VER,(SQLCHAR *)&DbVersion,MAX_NAME_LEN,NULL); + mycon(hdbc,rc); + + SQLExecDirect(hstmt,"DROP TABLE t_convert",SQL_NTS); + + rc = SQLExecDirect(hstmt,"CREATE TABLE t_convert(col0 integer, \ + col1 date,\ + col2 char(10))",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"INSERT INTO t_convert VALUES(10,'2002-10-24','venu')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"INSERT INTO t_convert VALUES(20,'2002-10-23','venu1')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"INSERT INTO t_convert VALUES(30,'2002-10-25','venu2')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"INSERT INTO t_convert VALUES(40,'2002-10-24','venu3')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"SELECT MAX(col0) FROM t_convert",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLDescribeCol(hstmt,1,(SQLCHAR *)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout,"\n MAX(col0): %d", SqlType); + myassert(SqlType == SQL_INTEGER); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"SELECT MAX(col1) FROM t_convert",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLDescribeCol(hstmt,1,(SQLCHAR *)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout,"\n MAX(col1): %d", SqlType); + myassert(SqlType == DateType); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"SELECT MAX(col2) FROM t_convert",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLDescribeCol(hstmt,1,(SQLCHAR *)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout,"\n MAX(col0): %d", SqlType); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + if (strncmp(DbVersion,"4.",2) >= 0) + { + rc = SQLExecDirect(hstmt,"SELECT CAST(MAX(col1) AS DATE) AS col1 FROM t_convert",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLDescribeCol(hstmt,1,(SQLCHAR *)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout,"\n CAST(MAX(col1) AS DATE): %d", SqlType); + myassert(SqlType == DateType); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"SELECT CONVERT(MAX(col1),DATE) AS col1 FROM t_convert",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLDescribeCol(hstmt,1,(SQLCHAR *)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout,"\n CONVERT(MAX(col1),DATE): %d", SqlType); + myassert(SqlType == DateType); + + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"SELECT CAST(MAX(col1) AS CHAR) AS col1 FROM t_convert",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLDescribeCol(hstmt,1,(SQLCHAR *)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL); + mystmt(hstmt,rc); + + fprintf(stdout,"\n CAST(MAX(col1) AS CHAR): %d", SqlType); + myassert(SqlType == SQL_VARCHAR); + + SQLFreeStmt(hstmt,SQL_CLOSE); + } + + rc = SQLExecDirect(hstmt,"DROP TABLE t_convert",SQL_NTS); + mystmt(hstmt,rc); + + SQLFreeStmt(hstmt,SQL_CLOSE); +} + +/* + Test the bug when two stmts are used with the don't cache results +*/ +static void t_cache_bug() +{ + SQLRETURN rc; + SQLHENV henv; + SQLHDBC hdbc; + SQLHSTMT hstmt1, hstmt2; + SQLCHAR conn[MAX_NAME_LEN]; + + myheader("t_cache_bug"); + + sprintf(conn,"DSN=%s;USER=%s;PASSWORD=%s;OPTION=1048579", + mydsn,myuid,mypwd); + mydrvconnect(&henv,&hdbc,&hstmt1,conn); + + tmysql_exec(hstmt1,"drop table t_cache"); + rc = tmysql_exec(hstmt1,"create table t_cache(id int)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(1)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(2)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(3)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(4)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(5)"); + mystmt(hstmt1,rc); + + rc = SQLExecDirect(hstmt1,"select * from t_cache",SQL_NTS); + mystmt(hstmt1,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt1,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt1,rc); + + rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt2); + mycon(hdbc,rc); + + rc = SQLColumns(hstmt2,test_db,SQL_NTS, + NULL,0,"t_cache",SQL_NTS, + NULL,0); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt2); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt1,rc); + + rc = SQLFetch(hstmt2); + myassert(rc == SQL_NO_DATA); + + rc = SQLFetch(hstmt1); + mystmt(hstmt2,rc); + + rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt2); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt1); + myassert(rc == SQL_NO_DATA); + + rc = SQLFreeStmt(hstmt1, SQL_DROP); + mystmt(hstmt1,rc); + + rc = SQLDisconnect(hdbc); + mycon(hdbc,rc); + + rc = SQLFreeConnect(hdbc); + mycon(hdbc,rc); + + rc = SQLFreeEnv(henv); + myenv(henv,rc); +} + +/* + Test the bug when two stmts are used with the don't cache results +*/ +static void t_non_cache_bug() +{ + SQLRETURN rc; + SQLHENV henv; + SQLHDBC hdbc; + SQLHSTMT hstmt1, hstmt2; + SQLCHAR conn[MAX_NAME_LEN]; + + myheader("t_non_cache_bug"); + + sprintf(conn,"DSN=%s;USER=%s;PASSWORD=%s;OPTION=3", + mydsn,myuid,mypwd); + mydrvconnect(&henv,&hdbc,&hstmt1,conn); + + tmysql_exec(hstmt1,"drop table t_cache"); + rc = tmysql_exec(hstmt1,"create table t_cache(id int)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(1)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(2)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(3)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(4)"); + mystmt(hstmt1,rc); + + rc = tmysql_exec(hstmt1,"insert into t_cache values(5)"); + mystmt(hstmt1,rc); + + rc = SQLExecDirect(hstmt1,"select * from t_cache",SQL_NTS); + mystmt(hstmt1,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt1,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt1,rc); + + rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt2); + mycon(hdbc,rc); + + rc = SQLColumns(hstmt2,test_db,SQL_NTS, + NULL,0,"t_cache",SQL_NTS, + NULL,0); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt2); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt1,rc); + + rc = SQLFetch(hstmt2); + myassert(rc == SQL_NO_DATA); + + rc = SQLFetch(hstmt1); + mystmt(hstmt2,rc); + + rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt2); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt1); + mystmt(hstmt2,rc); + + rc = SQLFetch(hstmt1); + myassert(rc == SQL_NO_DATA); + + rc = SQLFreeStmt(hstmt1, SQL_DROP); + mystmt(hstmt1,rc); + + rc = SQLDisconnect(hdbc); + mycon(hdbc,rc); + + rc = SQLFreeConnect(hdbc); + mycon(hdbc,rc); + + rc = SQLFreeEnv(henv); + myenv(henv,rc); +} + +/* + Test the bug when blob size > 8k +*/ +static void t_blob_bug(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLCHAR *data; + SQLLEN length; + SQLINTEGER i; + const SQLINTEGER max_blob_size=1024*100; + + myheader("t_blob_bug"); + + SQLExecDirect(hstmt,"drop table t_blob",SQL_NTS); + rc = SQLExecDirect(hstmt,"create table t_blob(blb long varbinary)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_blob values(?)",SQL_NTS); + mystmt(hstmt,rc); + + if (!(data = (SQLCHAR *)calloc(max_blob_size,sizeof(SQLCHAR)))) + { + SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + SQLFreeStmt(hstmt,SQL_CLOSE); + return; + } + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARBINARY, + 0,0,data,0,&length); + mystmt(hstmt,rc); + + memset(data,'X',max_blob_size); + + fprintf(stdout,"\n inserting %d rows\n", max_blob_size / 1024); + for (length=1024; length <= max_blob_size; length+= 1024) + { + fprintf(stdout,"\r %ld", length/1024); + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"SELECT length(blb) FROM t_blob",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&length,0,NULL); + mystmt(hstmt,rc); + + for (i= 1; i <= max_blob_size/1024; i++) + { + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout,"\n row %d length: %ld", i, length); + myassert(length == i * 1024); + } + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + free(data); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); +} + +/* + Test the bug SQLTables +*/ + +typedef struct t_table_bug +{ + SQLCHAR szColName[MAX_NAME_LEN]; + SQLSMALLINT pcbColName; + SQLSMALLINT pfSqlType; + SQLUINTEGER pcbColDef; + SQLSMALLINT pibScale; + SQLSMALLINT pfNullable; +} t_describe_col; + + +t_describe_col t_tables_bug_data[5] = +{ + {"TABLE_CAT", 9, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE}, + {"TABLE_SCHEM",11, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE}, + {"TABLE_NAME", 10, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE}, + {"TABLE_TYPE", 10, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE}, + {"REMARKS", 7, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE}, +}; + +static void t_tables_bug(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLSMALLINT i, ColumnCount, pcbColName, pfSqlType, pibScale, pfNullable; + SQLULEN pcbColDef; + SQLCHAR szColName[MAX_NAME_LEN]; + + myheader("t_tables_bug"); + + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLTables(hstmt,NULL,0,NULL,0,NULL,0,"'TABLE'",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLNumResultCols(hstmt,&ColumnCount); + mystmt(hstmt,rc); + + fprintf(stdout, "\n total columns in SQLTables: %d", ColumnCount); + myassert(ColumnCount == 5); + + for (i= 1; i <= ColumnCount; i++) + { + rc = SQLDescribeCol(hstmt, (SQLUSMALLINT)i, + szColName,MAX_NAME_LEN,&pcbColName, + &pfSqlType,&pcbColDef,&pibScale,&pfNullable); + mystmt(hstmt,rc); + + fprintf(stdout, "\n Column Number'%d':", i); + fprintf(stdout, "\n\t Column Name : %s", szColName); + fprintf(stdout, "\n\t NameLengh : %d", pcbColName); + fprintf(stdout, "\n\t DataType : %d", pfSqlType); + fprintf(stdout, "\n\t ColumnSize : %ld", pcbColDef); + fprintf(stdout, "\n\t DecimalDigits : %d", pibScale); + fprintf(stdout, "\n\t Nullable : %d", pfNullable); + + myassert(strcmp(t_tables_bug_data[i-1].szColName,szColName) == 0); + myassert(t_tables_bug_data[i-1].pcbColName == pcbColName); + myassert(t_tables_bug_data[i-1].pfSqlType == pfSqlType); + myassert(t_tables_bug_data[i-1].pcbColDef == pcbColDef); + myassert(t_tables_bug_data[i-1].pibScale == pibScale); + myassert(t_tables_bug_data[i-1].pfNullable == pfNullable); + } + SQLFreeStmt(hstmt,SQL_CLOSE); +} + +/* + Test for a simple SQLPutData and SQLParamData handling for longtext +*/ +static void t_putdata(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER pcbLength, c1; + SQLCHAR data[255]; + SQLPOINTER token; + + myheader("t_putdata"); + + + SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS); + rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG, + SQL_INTEGER,0,0,&c1,0,NULL); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_LONGVARCHAR,0,0, + (SQLPOINTER)1,0,&pcbLength); + + pcbLength = SQL_LEN_DATA_AT_EXEC(0); + + c1 = 10; + rc = SQLExecute(hstmt); + myassert(rc == SQL_NEED_DATA); + + rc = SQLParamData(hstmt, &token); + myassert(rc == SQL_NEED_DATA); + + strcpy(data,"mysql ab"); + rc = SQLPutData(hstmt,data,6); + mystmt(hstmt,rc); + + strcpy(data,"- the open source database company"); + rc = SQLPutData(hstmt,data,strlen(data)); + mystmt(hstmt,rc); + + rc = SQLParamData(hstmt, &token); + mystmt(hstmt,rc); + + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + pcbLength= 0; + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s(%d)", data, pcbLength); + myassert(strcmp(data,"mysql - the open source database company")==0); + myassert(pcbLength == 40); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); +} + +/* + Test for a simple SQLPutData and SQLParamData handling for longtext +*/ +static void t_putdata1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER pcbLength, c1; + SQLCHAR data[255]; + SQLPOINTER token; + + myheader("t_putdata1"); + + + SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS); + rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_putdata values(10,'venu')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"update t_putdata set c2= ? where c1 = ?",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_LONGVARCHAR,0,0, + (SQLPOINTER)1,0,&pcbLength); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_LONG, + SQL_INTEGER,0,0,&c1,0,NULL); + + pcbLength = SQL_LEN_DATA_AT_EXEC(0); + + c1 = 10; + rc = SQLExecute(hstmt); + myassert(rc == SQL_NEED_DATA); + + rc = SQLParamData(hstmt, &token); + myassert(rc == SQL_NEED_DATA); + + strcpy(data,"mysql ab"); + rc = SQLPutData(hstmt,data,6); + mystmt(hstmt,rc); + + strcpy(data,"- the open source database company"); + rc = SQLPutData(hstmt,data,strlen(data)); + mystmt(hstmt,rc); + + rc = SQLParamData(hstmt, &token); + mystmt(hstmt,rc); + + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + pcbLength= 0; + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s(%d)", data, pcbLength); + myassert(strcmp(data,"mysql - the open source database company")==0); + myassert(pcbLength == 40); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); +} +/* + Test for a simple SQLPutData and SQLParamData handling for longtext +*/ +static void t_putdata2(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER pcbLength, c1; + SQLCHAR data[255]; + SQLPOINTER token; + + myheader("t_putdata2"); + + SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS); + rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar, c3 long varchar)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG, + SQL_INTEGER,0,0,&c1,0,NULL); + + rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_LONGVARCHAR,0,0, + (SQLPOINTER)1,0,&pcbLength); + + rc = SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR, + SQL_LONGVARCHAR,0,0, + (SQLPOINTER)1,0,&pcbLength); + + pcbLength = SQL_LEN_DATA_AT_EXEC(0); + + c1 = 10; + rc = SQLExecute(hstmt); + myassert(rc == SQL_NEED_DATA); + + rc = SQLParamData(hstmt, &token); + myassert(rc == SQL_NEED_DATA); + + strcpy(data,"mysql ab"); + rc = SQLPutData(hstmt,data,6); + mystmt(hstmt,rc); + + strcpy(data,"- the open source database company"); + rc = SQLPutData(hstmt,data,strlen(data)); + mystmt(hstmt,rc); + + rc = SQLParamData(hstmt, &token); + myassert(rc == SQL_NEED_DATA); + + strcpy(data,"MySQL AB"); + rc = SQLPutData(hstmt,data, 8); + mystmt(hstmt,rc); + + rc = SQLParamData(hstmt, &token); + mystmt(hstmt,rc); + + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"select c2,c3 from t_putdata where c1= 10",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + pcbLength= 0; + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s(%d)", data, pcbLength); + myassert(strcmp(data,"mysql - the open source database company")==0); + myassert(pcbLength == 40); + + pcbLength= 0; + rc = SQLGetData(hstmt, 2, SQL_C_CHAR, data, sizeof(data), &pcbLength); + mystmt(hstmt,rc); + fprintf(stdout,"\n data: %s(%d)", data, pcbLength); + myassert(strcmp(data,"MySQL AB")==0); + myassert(pcbLength == 8); + + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); +} +/* + Test for a simple time struct +*/ +static void t_time1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQL_TIME_STRUCT tt; + SQLCHAR data[30]; + SQLINTEGER length; + + myheader("t_time1"); + + SQLExecDirect(hstmt,"drop table t_time",SQL_NTS); + rc = SQLExecDirect(hstmt,"create table t_time(t time, t1 timestamp, t2 datetime, t3 date)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_time(t) values(?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_TYPE_TIME, + SQL_TIME,0,0,&tt,0,NULL); + + + tt.hour= 00; + tt.minute= 00; + tt.second= 03; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 01; + tt.minute= 00; + tt.second= 00; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 19; + tt.minute= 00; + tt.second= 00; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 01; + tt.minute= 01; + tt.second= 00; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 01; + tt.minute= 00; + tt.second= 01; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 00; + tt.minute= 01; + tt.second= 00; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 00; + tt.minute= 11; + tt.second= 12; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 01; + tt.minute= 01; + tt.second= 01; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 00; + tt.minute= 00; + tt.second= 00; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + tt.hour= 10; + tt.minute= 11; + tt.second= 12; + + rc = SQLExecute(hstmt); + mystmt(hstmt, rc); + + SQLFreeStmt(hstmt, SQL_RESET_PARAMS); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"select t from t_time",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"00:00:03")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"01:00:00")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"19:00:00")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"01:01:00")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"01:00:01")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"00:01:00")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"00:11:12")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"01:01:01")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + + myassert(strcmp(data,"00:00:00")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %s(%d)", data, length); + myassert(strcmp(data,"10:11:12")==0); + myassert(length == 8); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_time(t1) values('2003-05-12 10:11:12')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"select t1 from t_time", SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %d:%d:%d(%d)", tt.hour, tt.minute, tt.second, length); + + myassert(tt.hour == 10 && tt.minute == 11 && tt.second == 12); + myassert(length == sizeof(SQL_TIME_STRUCT)); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_time(t2) values('03-12-28 05:59:59')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"select t2 from t_time", SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %d:%d:%d(%d)", tt.hour, tt.minute, tt.second, length); + myassert(tt.hour == 05 && tt.minute == 59 && tt.second == 59); + myassert(length == sizeof(SQL_TIME_STRUCT)); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_time(t3) values('2003-05-12 10:11:12')",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"select t3 from t_time", SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length); + mystmt(hstmt,rc); + fprintf(stdout,"\n time: %d:%d:%d(%d)", tt.hour, tt.minute, tt.second, length); + myassert(tt.hour == 00 || tt.minute == 00 || tt.second == 00); + myassert(length == sizeof(SQL_TIME_STRUCT)); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); +} + +/* + test for SQL_ATTR_ROW_ARRAY_SIZE +*/ +void t_row_array_size(SQLHDBC hdbc,SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER i,nrows,iarray[15]; + const int max_rows=9; + + myheader("t_row_array_size"); + + SQLExecDirect(hstmt,"drop table t_row_array_size",SQL_NTS); + + rc = SQLExecDirect(hstmt,"create table t_row_array_size(id int)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_row_array_size values(?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_ULONG, + SQL_INTEGER,0,0,&i,0,NULL); + mystmt(hstmt,rc); + + for( i = 1; i <= max_rows; i++ ) + { + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + /* set row_size as 2 */ + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)2,SQL_IS_UINTEGER); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,&nrows,SQL_IS_POINTER); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"select * from t_row_array_size",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&iarray,0,NULL); + mystmt(hstmt,rc); + + /* row 1-2 */ + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + my_assert(nrows == 2); + my_assert(iarray[0]==1); + my_assert(iarray[1]==2); + + /* row 3-4 */ + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + my_assert(nrows == 2); + my_assert(iarray[0]==3); + my_assert(iarray[1]==4); + + /* row 5-6 */ + rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,1);/* 1 */ + mystmt(hstmt,rc); + my_assert(nrows == 2); + my_assert(iarray[0]==5); + my_assert(iarray[1]==6); + + /* row 7-8 */ + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + my_assert(nrows == 2); + my_assert(iarray[0]==7); + my_assert(iarray[1]==8); + + /* row 9 */ + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + my_assert(nrows == 1); + my_assert(iarray[0]==9); + + rc = SQLFetch(hstmt);/* end */ + mystmt_err(hstmt,rc==SQL_NO_DATA_FOUND,rc); + + SQLFreeStmt(hstmt,SQL_UNBIND); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)1,0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,(SQLPOINTER)0,SQL_IS_POINTER); + mystmt(hstmt,rc); +} + +/* + Test for SQL_ATTR_ROWS_FETCHED_PTR +*/ +static void t_rows_fetched_ptr(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLCHAR name[255]; + SQLSMALLINT pccol; + SQLRETURN rc; + SQLINTEGER rows_fetched, data[4], pcb_value[4], i; + SQLUSMALLINT row_status[4]; + + myheader("t_rows_fetched_ptr"); + + SQLExecDirect(hstmt,"drop table t_rows_fetched_ptr",SQL_NTS); + + rc = SQLExecDirect(hstmt,"create table t_rows_fetched_ptr(id int)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"insert into t_rows_fetched_ptr values(?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_ULONG, + SQL_INTEGER,0,0,&i,0,NULL); + mystmt(hstmt,rc); + + for( i = 1; i <= 3; i++ ) + { + rc = SQLExecute(hstmt); + mystmt(hstmt,rc); + } + + SQLFreeStmt(hstmt,SQL_RESET_PARAMS); + SQLFreeStmt(hstmt,SQL_CLOSE); + + rc = SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLExecDirect(hstmt,"select * from t_rows_fetched_ptr",SQL_NTS); + mystmt(hstmt, rc); + + rc = SQLNumResultCols(hstmt, &pccol); + mystmt(hstmt, rc); + fprintf(stdout,"\n total columns: %d", pccol); + myassert(pccol == 1); + + pccol= 0; + rc = SQLColAttribute(hstmt, 1, SQL_DESC_COUNT, 0, 0, 0, &pccol); + mystmt(hstmt, rc); + fprintf(stdout,"\n desc count: %d", pccol); + myassert(pccol == 1); + + rc = SQLColAttribute(hstmt, 1, SQL_DESC_NAME, &name, 255, 0, &pccol); + mystmt(hstmt, rc); + fprintf(stdout,"\n desc name: %s", name); + assert(strcmp(name,"id") ==0 || strcmp(name, "ID") == 0); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rows_fetched, SQL_IS_POINTER); + mystmt(hstmt, rc); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)2, SQL_IS_UINTEGER); + mystmt(hstmt, rc); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_STATUS_PTR, &row_status, SQL_IS_POINTER); + mystmt(hstmt, rc); + + rc = SQLBindCol(hstmt, 1, SQL_C_LONG, (SQLPOINTER)data, 0, (SQLINTEGER *)pcb_value); + mystmt(hstmt, rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt, rc); + + fprintf(stdout,"\n fetched ptr: %d", rows_fetched); + myassert(rows_fetched == 2); + + for( i = 0; i < rows_fetched; i++ ) + { + fprintf(stdout,"\n row[%d]:", i); + fprintf(stdout,"\n\t value : %d (%d)", data[i], pcb_value[i]); + fprintf(stdout,"\n\t status: %d", row_status[i]); + myassert(row_status[i] == SQL_ROW_SUCCESS); + } + + rc = SQLFetch(hstmt); + mystmt(hstmt, rc); + + fprintf(stdout,"\n fetched ptr: %d", rows_fetched); + myassert(rows_fetched == 1); + + for( i = 0; i < rows_fetched; i++ ) + { + fprintf(stdout,"\n row[%d]:", i); + fprintf(stdout,"\n\t value : %d (%d)", data[i], pcb_value[i]); + fprintf(stdout,"\n\t status: %d", row_status[0]); + myassert(row_status[i] == SQL_ROW_SUCCESS); + } + myassert(row_status[1] == SQL_ROW_NOROW); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)1,0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,(SQLPOINTER)0,SQL_IS_POINTER); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_STATUS_PTR,(SQLPOINTER)0,0); + mystmt(hstmt,rc); +} + +static void t_empty_str_bug(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER id, name_len, desc_len; + SQLCHAR name[20], desc[20]; + + myheader("t_empty_str_bug"); + + tmysql_exec(hstmt,"drop table t_empty_str_bug"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"CREATE TABLE t_empty_str_bug(Id int NOT NULL,\ + Name varchar(10) default NULL, \ + Description varchar(10) default NULL, \ + PRIMARY KEY (Id))"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLSetCursorName(hstmt,"venu",SQL_NTS); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_empty_str_bug"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,2,SQL_C_CHAR,&name,100,&name_len); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,3,SQL_C_CHAR,&desc,100,&desc_len); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); + myassert(rc == SQL_NO_DATA_FOUND); + + id= 10; + strcpy(name,"MySQL AB");name_len= SQL_NTS; + strcpy(desc,"");desc_len= SQL_COLUMN_IGNORE; + + rc = SQLSetPos(hstmt,1,SQL_ADD,SQL_LOCK_NO_CHANGE); + mystmt(hstmt,rc); + + rc = SQLRowCount(hstmt,&name_len); + mystmt(hstmt,rc); + + fprintf(stdout," rows affected:%d\n",name_len); + myassert(name_len == 1); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_empty_str_bug"); + mystmt(hstmt,rc); + + my_assert( 1 == myresult(hstmt)); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"select * from t_empty_str_bug"); + mystmt(hstmt,rc); + + rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,1,NULL,NULL); + mystmt(hstmt,rc); + + name[0]='\0'; + my_assert(10 == my_fetch_int(hstmt,1)); + my_assert(!strcmp((const char *)"MySQL AB",my_fetch_str(hstmt,name,2))); + my_assert(!strcmp((const char *)"MySQL AB",my_fetch_str(hstmt,name,3))); /* NULL */ + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +static void t_current_catalog(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLCHAR cur_db[255], db[255]; + SQLRETURN rc; + SQLUINTEGER len; + + myheader("t_current_catalog"); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, 255, &len); + mycon(hdbc,rc); + fprintf(stdout,"\n current_catalog: %s (%ld)", db, len); + myassert(strcmp(db, test_db) == 0 || strlen(test_db) == len); + + rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, SQL_NTS); + mycon(hdbc,rc); + + SQLExecDirect(hstmt, "DROP DATABASE t_odbc_test_cur_catalog", SQL_NTS); + + strcpy(cur_db, "t_odbc_test_cur_catalog"); + rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS); + mycon_r(hdbc,rc); + + rc = SQLExecDirect(hstmt, "CREATE DATABASE t_odbc_test_cur_catalog", SQL_NTS); + mystmt(hstmt,rc); + + strcpy(cur_db, "t_odbc_test_cur_catalog"); + rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS); + mycon(hdbc,rc); + + rc = SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, 255, &len); + mycon(hdbc,rc); + fprintf(stdout,"\n current_catalog: %s (%ld)", db, len); + myassert(strcmp(cur_db, db) == 0 || strlen(cur_db) == len); + + strcpy(cur_db, "t_odbc_test_cur_catalog-test-12455"); + rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS); + mycon_r(hdbc,rc); + + rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, len); + mycon(hdbc,rc); + + /* reset for further tests */ + rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)test_db, SQL_NTS); + mycon(hdbc,rc); + + rc = SQLExecDirect(hstmt, "DROP DATABASE t_odbc_test_cur_catalog", SQL_NTS); + mycon(hstmt,rc); +} + +#if 0 /* to be enabled only for 3.52 which has true prepared statements */ +static void desc_param_check(SQLHSTMT hstmt, + SQLUSMALLINT pno, + SQLSMALLINT dtype, + SQLUINTEGER psize, + SQLSMALLINT ddigits, + SQLSMALLINT lnullable) +{ + SQLRETURN rc; + SQLUINTEGER ParamSize; + SQLSMALLINT ParamType, DecDigits, Nullable; + + rc = SQLDescribeParam(hstmt, pno, &ParamType, &ParamSize, &DecDigits, &Nullable); + mystmt(hstmt,rc); + + fprintf(stdout,"\n\n parameter %d:", pno); + fprintf(stdout,"\n\t type : %d", ParamType); + fprintf(stdout,"\n\t size : %ld", ParamSize); + fprintf(stdout,"\n\t decimals: %d", DecDigits); + fprintf(stdout,"\n\t nullable: %s", Nullable ? "SQL_NULLABLE": "SQL_NO_NULLS"); + + myassert(dtype == ParamType); + myassert(psize == ParamSize); + myassert(ddigits == DecDigits); + myassert(lnullable == Nullable); +} + + +/* To test SQLDescribeParam */ +static void t_desc_param(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLSMALLINT ParamCount; + + myheader("t_desc_param"); + + SQLFreeStmt(hstmt, SQL_CLOSE); + + SQLExecDirect(hstmt,"DROP TABLE t_desc_param",SQL_NTS); + + rc = SQLExecDirect(hstmt,"CREATE TABLE t_desc_param(c1 integer, \ + c2 binary(2) NOT NULL,\ + c3 char(10), \ + c4 varchar(5),\ + c5 decimal(10,3) NOT NULL,\ + c6 tinyint,\ + c7 smallint,\ + c8 numeric(4,2),\ + c9 real,\ + c10 float(5),\ + c11 bigint NOT NULL,\ + c12 varbinary(12))",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLPrepare(hstmt,"INSERT INTO t_desc_param VALUES(?,?,?,?,?,?,?,?,?,?,?,?)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLNumParams(hstmt, &ParamCount); + mystmt(hstmt,rc); + fprintf(stdout,"\n total parameters: %d", ParamCount); + my_assert(ParamCount == 12); + + desc_param_check(hstmt, 1, SQL_INTEGER, 10, 0, SQL_NULLABLE); + desc_param_check(hstmt, 2, SQL_BINARY, 2, 0, SQL_NO_NULLS); + desc_param_check(hstmt, 3, SQL_CHAR, 10, 0, SQL_NULLABLE); + desc_param_check(hstmt, 4, SQL_VARCHAR, 5, 0, SQL_NULLABLE); + desc_param_check(hstmt, 5, SQL_DECIMAL, 10, 3, SQL_NO_NULLS); + desc_param_check(hstmt, 6, SQL_TINYINT, 3, 0, SQL_NULLABLE); + desc_param_check(hstmt, 7, SQL_SMALLINT, 5, 0, SQL_NULLABLE); + desc_param_check(hstmt, 8, SQL_NUMERIC, 4, 2, SQL_NULLABLE); + desc_param_check(hstmt, 9, SQL_REAL, 24, 0, SQL_NULLABLE); + desc_param_check(hstmt, 10, SQL_REAL, 24, 0, SQL_NULLABLE); + desc_param_check(hstmt, 11, SQL_BIGINT, 19, 0, SQL_NO_NULLS); + desc_param_check(hstmt, 12, SQL_VARBINARY, 12, 0, SQL_NULLABLE); + + SQLFreeStmt(hstmt,SQL_CLOSE); +} +#endif + +static void t_rows_fetched_ptr1(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLUINTEGER rowsFetched, i, rowsSize; + + myheader("t_rows_fetched_ptr1"); + + SQLExecDirect(hstmt,"drop table t_rows_fetched_ptr",SQL_NTS); + + rc = SQLExecDirect(hstmt,"create table t_rows_fetched_ptr(a int)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(0)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(1)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(2)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(3)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(4)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(5)",SQL_NTS); + mystmt(hstmt,rc); + + rowsSize= 1; + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS); + mystmt(hstmt,rc); + + i= 0; + rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0); + while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) + { + fprintf(stdout,"\n total rows fetched: %ld", rowsFetched); + myassert(rowsFetched == rowsSize); + i++; rowsFetched= 0; + rc = SQLFetch(hstmt); + } + myassert( i == 6); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rowsSize= 2; + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS); + mystmt(hstmt,rc); + + i= 0; + rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0); + while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) + { + fprintf(stdout,"\n total rows fetched: %ld", rowsFetched); + myassert(rowsFetched == rowsSize); + i++;rowsFetched= 0; + rc = SQLFetch(hstmt); + } + myassert( i == 3); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rowsSize= 3; + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS); + mystmt(hstmt,rc); + + i= 0; + rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0); + while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) + { + fprintf(stdout,"\n total rows fetched: %ld", rowsFetched); + myassert(rowsFetched == rowsSize); + i++;rowsFetched= 0; + rc = SQLFetch(hstmt); + } + myassert( i == 2); + SQLFreeStmt(hstmt, SQL_CLOSE); + + rowsSize= 4; + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0); + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout,"\n total rows fetched: %ld", rowsFetched); + myassert(rowsFetched == rowsSize); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + + fprintf(stdout,"\n total rows fetched: %ld", rowsFetched); + myassert(rowsFetched == 2); + + rc = SQLFetch(hstmt); + myassert(rc == SQL_NO_DATA); + + SQLFreeStmt(hstmt, SQL_CLOSE); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, 0);/* reset */ + mystmt(hstmt,rc); + + rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, NULL, 0); + mystmt(hstmt,rc); +} + +static void desc_col_check(SQLHSTMT hstmt, + SQLUSMALLINT icol, + const char *name, + SQLSMALLINT sql_type, + SQLUINTEGER col_def, + SQLUINTEGER col_def1, + SQLSMALLINT scale, + SQLSMALLINT nullable) +{ + SQLRETURN rc; + SQLSMALLINT pcbColName, pfSqlType, pibScale, pfNullable; + SQLUINTEGER ccccccccccccccccccccccccccccpcbColDef; + SQLCHAR szColName[MAX_NAME_LEN]; + + rc = SQLDescribeCol(hstmt, icol, + szColName,MAX_NAME_LEN,&pcbColName, + &pfSqlType,&pcbColDef,&pibScale,&pfNullable); + mystmt(hstmt,rc); + + fprintf(stdout, "\n\n Column Number'%d':", icol); + + fprintf(stdout, "\n\t Column Name : %s", szColName); + fprintf(stdout, "\n\t NameLengh : %d", pcbColName); + fprintf(stdout, "\n\t DataType : %d", pfSqlType); + fprintf(stdout, "\n\t ColumnSize : %d", pcbColDef); + fprintf(stdout, "\n\t DecimalDigits : %d", pibScale); + fprintf(stdout, "\n\t Nullable : %d", pfNullable); + + myassert(strcmp(name,szColName) == 0); + myassert(sql_type == pfSqlType); + myassert(col_def == pcbColDef || col_def1 == pcbColDef); + myassert(scale == pibScale); + myassert(nullable == pfNullable); +} + +/* To test SQLDescribeCol */ +static void t_desc_col(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLSMALLINT ColumnCount; + + myheader("t_desc_col"); + + SQLFreeStmt(hstmt, SQL_CLOSE); + + SQLExecDirect(hstmt,"DROP TABLE t_desc_col",SQL_NTS); + + rc = SQLExecDirect(hstmt,"CREATE TABLE t_desc_col(c1 integer, \ + c2 binary(2) NOT NULL,\ + c3 char(1), \ + c4 varchar(5),\ + c5 decimal(10,3) NOT NULL,\ + c6 tinyint,\ + c7 smallint,\ + c8 numeric(4,2),\ + c9 real,\ + c10 float(5),\ + c11 bigint NOT NULL,\ + c12 varbinary(12),\ + c13 char(20) NOT NULL,\ + c14 float(10,3),\ + c15 tinytext,\ + c16 text,\ + c17 mediumtext,\ + c18 longtext,\ + c19 tinyblob,\ + c20 blob,\ + c21 mediumblob,\ + c22 longblob,\ + c23 tinyblob)",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLExecDirect(hstmt,"SELECT * FROM t_desc_col",SQL_NTS); + mystmt(hstmt,rc); + + rc = SQLNumResultCols(hstmt, &ColumnCount); + mystmt(hstmt,rc); + + fprintf(stdout,"\n total columns: %d", ColumnCount); + my_assert(ColumnCount == 23); + + desc_col_check(hstmt, 1, "c1", SQL_INTEGER, 10, 11, 0, SQL_NULLABLE); + desc_col_check(hstmt, 2, "c2", SQL_BINARY, 2, 2, 0, SQL_NO_NULLS); + desc_col_check(hstmt, 3, "c3", SQL_CHAR, 1, 1, 0, SQL_NULLABLE); + desc_col_check(hstmt, 4, "c4", SQL_VARCHAR, 5, 5, 0, SQL_NULLABLE); + desc_col_check(hstmt, 5, "c5", SQL_DECIMAL, 10, 10, 3, SQL_NO_NULLS); + desc_col_check(hstmt, 6, "c6", SQL_TINYINT, 3, 4, 0, SQL_NULLABLE); + desc_col_check(hstmt, 7, "c7", SQL_SMALLINT, 5, 6, 0, SQL_NULLABLE); + desc_col_check(hstmt, 8, "c8", SQL_DECIMAL, 4, 4, 2, SQL_NULLABLE); + desc_col_check(hstmt, 9, "c9", SQL_DOUBLE, 22, 24, 31, SQL_NULLABLE); + desc_col_check(hstmt, 10, "c10", SQL_REAL, 12, 24, 31, SQL_NULLABLE); + desc_col_check(hstmt, 11, "c11", SQL_BIGINT, 19, 19, 0, SQL_NO_NULLS); + desc_col_check(hstmt, 12, "c12", SQL_VARBINARY, 12, 12, 0, SQL_NULLABLE); + desc_col_check(hstmt, 13, "c13", SQL_VARCHAR, 20, 20, 0, SQL_NO_NULLS); + desc_col_check(hstmt, 14, "c14", SQL_REAL, 10, 24, 3, SQL_NULLABLE); + desc_col_check(hstmt, 15, "c15", SQL_LONGVARCHAR, 255, 255, 0, SQL_NULLABLE); + desc_col_check(hstmt, 16, "c16", SQL_LONGVARCHAR, 65535, 65535, 0, SQL_NULLABLE); + desc_col_check(hstmt, 17, "c17", SQL_LONGVARCHAR, 16777215, 16777215, 0, SQL_NULLABLE); + desc_col_check(hstmt, 18, "c18", SQL_LONGVARCHAR, 4294967295 , 16777215 , 0, SQL_NULLABLE); + desc_col_check(hstmt, 19, "c19", SQL_LONGVARBINARY, 255, 255, 0, SQL_NULLABLE); + desc_col_check(hstmt, 20, "c20", SQL_LONGVARBINARY, 65535, 65535, 0, SQL_NULLABLE); + desc_col_check(hstmt, 21, "c21", SQL_LONGVARBINARY, 16777215, 16777215, 0, SQL_NULLABLE); + desc_col_check(hstmt, 22, "c22", SQL_LONGVARBINARY, 4294967295 , 16777215 , 0, SQL_NULLABLE); + desc_col_check(hstmt, 23, "c23", SQL_LONGVARBINARY, 255, 5, 0, SQL_NULLABLE); + + SQLFreeStmt(hstmt,SQL_CLOSE); +} + +/* + Test for a simple SQLPutData and SQLParamData handling + bug #1316 +*/ + +static void t_putdata3(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + char buffer[]= "MySQL - The worlds's most popular open source database"; + SQLRETURN rc; + const int MAX_PART_SIZE = 5; + + char *pdata= 0, data[50]; + int dynData; + int commonLen= 20; + + SQLINTEGER id, id1, id2, id3, resId; + SQLINTEGER resUTimeSec; + SQLINTEGER resUTimeMSec; + SQLINTEGER resDataLen; + SQLINTEGER resData; + + + myheader("t_putdata3"); + + + SQLExecDirect(hstmt,"drop table t_putdata3",SQL_NTS); + rc = SQLExecDirect(hstmt,"CREATE TABLE t_putdata3 ( id INT, id1 INT, \ + id2 INT, id3 INT, pdata blob);",SQL_NTS); + mystmt(hstmt,rc); + + dynData = 1; + + rc = SQLPrepare(hstmt, "INSERT INTO t_putdata3 VALUES ( ?, ?, ?, ?, ? )", SQL_NTS); + mystmt(hstmt,rc); + + id= 1, id1= 2, id2= 3, id3= 4; + resId = 0; + resUTimeSec = 0; + resUTimeMSec = 0; + resDataLen = 0; + resData = SQL_LEN_DATA_AT_EXEC(0); + + rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, + SQL_INTEGER, 0, 0, &id, 0, &resId); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, + SQL_INTEGER, 0, 0, &id1, 0, &resUTimeSec); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, + SQL_INTEGER, 0, 0, &id2, 0, &resUTimeMSec); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_SLONG, + SQL_INTEGER, 0, 0, &id3, 0, + &resDataLen); + mystmt(hstmt,rc); + + rc = SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, + SQL_C_BINARY, SQL_LONGVARBINARY, 10, 10, + dynData ? (SQLPOINTER)5 : + pdata, 0, &resData); + mystmt(hstmt,rc); + + rc = SQLExecute(hstmt); + if (rc == SQL_NEED_DATA) + { + int parameter; + if (SQLParamData(hstmt,(void**)¶meter) == SQL_NEED_DATA && parameter == 5) + { + int len = 0; + int partsize; + + /* storing long data by parts */ + while (len < commonLen) + { + partsize = commonLen - len; + if (partsize > MAX_PART_SIZE) + partsize = MAX_PART_SIZE; + + rc = SQLPutData(hstmt, buffer+len, partsize); + mystmt(hstmt,rc); + len += partsize; + } + if (SQLParamData(hstmt,(void**)¶meter) == SQL_ERROR) + { + + } + } + } /* end if (rc == SQL_NEED_DATA) */ + + SQLFreeStmt(hstmt, SQL_UNBIND); + SQLFreeStmt(hstmt, SQL_CLOSE); + + if (mysql_min_version(hdbc, "4.0", 3)) + { + rc = tmysql_exec(hstmt,"select id, id1, id2, id3, convert(pdata,char) from t_putdata3"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + + my_assert(1 == my_fetch_int(hstmt,1)); + my_assert(2 == my_fetch_int(hstmt,2)); + my_assert(3 == my_fetch_int(hstmt,3)); + my_assert(4 == my_fetch_int(hstmt,4)); + + my_assert(strncmp(buffer, my_fetch_str(hstmt,data,5), commonLen) == 0); + } + else + { + rc = tmysql_exec(hstmt,"select id, id1, id2, id3, pdata from t_putdata3"); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + + my_assert(1 == my_fetch_int(hstmt,1)); + my_assert(2 == my_fetch_int(hstmt,2)); + my_assert(3 == my_fetch_int(hstmt,3)); + my_assert(4 == my_fetch_int(hstmt,4)); + my_assert(strncmp("4D7953514C202D2054686520776F726C64732773", + my_fetch_str(hstmt,data,5), commonLen) == 0); + } + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + /* + output: + + ###################################### + t_putdata3 + ###################################### + my_fetch_int: 1 + my_fetch_int: 2 + my_fetch_int: 3 + my_fetch_int: 4 + my_fetch_str: MySQL - The worlds's(20) + */ +} + +/* + Test for misc CONVERT + bug #1082 +*/ +static void t_convert(SQLHDBC hdbc, SQLHSTMT hstmt) +{ + SQLRETURN rc; + SQLINTEGER data_len; + SQLCHAR data[50]; + + myheader("t_convert"); + + tmysql_exec(hstmt,"drop table t_convert"); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = tmysql_exec(hstmt,"CREATE TABLE t_convert(testing tinytext)"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"INSERT INTO t_convert VALUES('record1')"); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"INSERT INTO t_convert VALUES('record2')"); + mystmt(hstmt,rc); + + rc = SQLTransact(NULL,hdbc,SQL_COMMIT); + mycon(hdbc,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); + + rc = tmysql_exec(hstmt,"SELECT CONCAT(testing, '-must be string') FROM t_convert ORDER BY RAND()"); + mystmt(hstmt,rc); + + rc = SQLBindCol(hstmt,1,SQL_C_CHAR, &data, 100, &data_len); + mystmt(hstmt,rc); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + myassert(strcmp(data,"record1-must be string") == 0 || + strcmp(data,"record2-must be string") == 0); + + rc = SQLFetch(hstmt); + mystmt(hstmt,rc); + myassert(strcmp(data,"record1-must be string") == 0 || + strcmp(data,"record2-must be string") == 0); + + rc = SQLFetch(hstmt); + myassert( rc == SQL_NO_DATA); + + rc = SQLFreeStmt(hstmt,SQL_UNBIND); + mystmt(hstmt,rc); + + rc = SQLFreeStmt(hstmt,SQL_CLOSE); + mystmt(hstmt,rc); +} + +/** + mytest rountine to control individual tests +*/ +static void mytest(int tno, SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt) +{ + if( tno == 1 || tno == -1) /* basic and general */ + { + t_basic(hdbc, hstmt); + t_error(hdbc,hstmt); + } + + if( (tno == 2 || tno == -1) && driver_supports_setpos(hdbc)) + { + /* sqlsetpos */ + t_pos_datetime_delete(hdbc,hstmt); + t_pos_datetime_delete1(hdbc,hstmt); + t_setpos_upd_decimal(hdbc,hstmt); + t_pos_column_ignore(hdbc,hstmt); + my_setpos_upd_pk_order(hdbc,hstmt); + my_setpos_upd_pk_order1(hdbc,hstmt); + t_mul_pkdel(hdbc,hstmt); + t_mul_pkdel1(hdbc,hstmt); + tmysql_setpos_pkdel(hdbc,hstmt); + tmysql_setpos_pkdel1(hdbc,hstmt); + tmysql_setpos_pkdel2(hdbc,hstmt); + tmysql_setpos_pkdel3(hdbc,hstmt); + tmysql_setpos_del(hdbc,hstmt); + tmysql_setpos_del1(hdbc,hstmt); + tmysql_setpos_upd(hdbc,hstmt); + tmysql_mtab_setpos_del(hdbc,hstmt); + t_alias_setpos_pkdel(hdbc,hstmt); + t_setpos_position(hdbc,hstmt); + t_pos_column_ignore(hdbc,hstmt); + t_setpos_del_all(hdbc,hstmt); + t_refresh(hdbc,hstmt); + t_empty_str_bug(hdbc, hstmt); + +#if DONT_WORK + t_alias_setpos_del(hdbc,hstmt); /* can't work until 4.1 supports aliases in FIELDS */ +#endif + } + if( (tno == 3 || tno == -1) && driver_supports_setpos(hdbc)) + { + /* positioned updates and deletes */ + tmysql_pos_delete(hdbc,hstmt); + tmysql_pos_update(hdbc,hstmt); /* it doesn't work with 4.1 */ + tmysql_pos_update_ex(hdbc,hstmt); + tmysql_pos_update_ex1(hdbc,hstmt); + tmysql_pos_update_ex2(hdbc,hstmt); + tmysql_pos_update_ex3(hdbc,hstmt); + t_acc_crash(hdbc,hstmt); + tmysql_pcbvalue(hdbc,hstmt); + } + if( tno == 4 || tno == -1) /* catalogs */ + { + tmysql_specialcols(hdbc, hstmt); + } + if( tno == 5 || tno == -1) /* transaction */ + { + t_tran(hdbc,hstmt); + } + if( tno == 6 || tno == -1) /* keys */ + { + tmysql_showkeys(hdbc,hstmt); + } + if( tno == 7 || tno == -1) /* param binding */ + { +#if 0 + t_desc_param(hdbc,hstmt); +#endif + } + if( tno == 8 || tno == -1) /* row binding */ + { + tmysql_bindcol(hdbc,hstmt); + } + if( tno == 9 || tno == -1) /* conversion */ + { + t_convert(hdbc, hstmt); + t_tstotime(hdbc,hstmt); + t_tstotime1(hdbc,hstmt); + } + if( tno == 10 || tno == -1) /* type checking */ + { + t_longlong1(hdbc,hstmt); + t_bigint(hdbc,hstmt); + t_enumset(hdbc,hstmt); + t_gettypeinfo(hdbc,hstmt); + t_getinfo(hdbc); + } + if( tno == 12 || tno == -1) /* myodbc3 tests */ + { + t_putdata3(hdbc, hstmt); + t_time1(hdbc,hstmt); +#if 0 + t_blob_bug(hdbc,hstmt); /* TO BE FIXED IN DEBUG MODE */ +#endif + t_putdata(hdbc,hstmt); + t_putdata1(hdbc,hstmt); + t_putdata2(hdbc,hstmt); + t_tables_bug(hdbc,hstmt); /* To be fixed in 3.52 */ + t_convert_type(henv,hdbc,hstmt); + t_columns(hdbc,hstmt); + t_multistep(hdbc,hstmt); + t_warning(hdbc,hstmt); + t_scroll(hdbc,hstmt); + t_getcursor(hdbc); + t_getcursor1(hdbc); + t_prepare(hdbc,hstmt); + t_prepare1(hdbc,hstmt); + t_msdev_bug(hdbc,hstmt); + t_time(hdbc,hstmt); + t_diagrec(henv,hdbc,hstmt); + t_decimal(hdbc,hstmt); + t_numeric(hdbc,hstmt); + t_zerolength(hdbc,hstmt); + t_odbc3_envattr(); + t_odbc3_handle(); + t_text_fetch(hdbc,hstmt); + t_non_cache_bug(hdbc,hstmt); + t_cache_bug(); + + } + if( tno == 13 || tno == -1) /* stmt attributes */ + { + t_desc_col(hdbc, hstmt); + t_max_rows(hdbc,hstmt); + t_stmt_attr_status(hdbc,hstmt); + t_rows_fetched_ptr(hdbc, hstmt); + t_rows_fetched_ptr1(hdbc, hstmt); + t_row_array_size(hdbc, hstmt); + t_current_catalog(hdbc, hstmt); + } + if( tno == 11 || tno == -1) /* limit tests */ + { + t_max_select(hdbc,hstmt); + t_max_con(hstmt); + } +} + + +/** + main routine to control all tests +*/ +int main(int argc, char *argv[]) +{ + SQLHENV henv; + SQLHDBC hdbc; + SQLHSTMT hstmt; + SQLINTEGER narg, tno = -1; + + /* + * show the usage string when the user asks for this + */ + if (argc < 2 || ( argc == 2 && ((!strcmp (argv[1], "-?") || + !strcmp (argv[1], "--?") || + !strcmp (argv[1], "--h") || + !strcmp (argv[1], "--help") + )) + ) || argc > 5 + ) + { + fprintf(stdout,"------------------------------------------\n"); + fprintf(stdout,"usage: mytest3 testno [DSN] [UID] [PWD] \n\n"); + fprintf(stdout," testno <-- test number\n"); + fprintf(stdout," DSN <-- data source name\n"); + fprintf(stdout," UID <-- user name\n"); + fprintf(stdout," PWD <-- password\n"); + + fprintf(stdout,"\ntestno:\n"); + fprintf(stdout," -1 : all\n"); + fprintf(stdout," 1 : basic, general\n"); + fprintf(stdout," 2 : sqlsetpos\n"); + fprintf(stdout," 3 : positioned update/delete\n"); + fprintf(stdout," 4 : catalog\n"); + fprintf(stdout," 5 : transaction\n"); + fprintf(stdout," 6 : keys\n"); + fprintf(stdout," 7 : param binding\n"); + fprintf(stdout," 8 : row binding\n"); + fprintf(stdout," 9 : type conversion\n"); + fprintf(stdout," 10 : data types\n"); + fprintf(stdout," 11 : limit \n"); + fprintf(stdout," 12 : myodbc3 \n"); + fprintf(stdout," 13 : stmt attributes \n"); + fprintf(stdout,"------------------------------------------\n"); + exit(0); + } + + /* + * if connection string supplied through arguments, overrite + * the default one.. + */ + for(narg = 1; narg < argc; narg++) + { + if ( narg == 1 ) + tno = atoi(argv[1]); + else if ( narg == 2 ) + mydsn = argv[2]; + else if ( narg == 3 ) + myuid = argv[3]; + else if ( narg == 4 ) + mypwd = argv[4]; + + } + + myconnect(&henv,&hdbc,&hstmt); + mytest(tno,henv,hdbc,hstmt); + mydisconnect(&henv,&hdbc,&hstmt); + + fprintf(stdout,"\n\n-- test-end --\n"); + return(0); +} + + + + --- myodbc-3.51.11.orig/test/my_basics.c +++ myodbc-3.51.11/test/my_basics.c @@ -30,7 +30,7 @@ void my_basics(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nRowCount; + SQLLEN nRowCount; printf("\nmy_basics:\n"); @@ -76,7 +76,7 @@ /* get the rows affected by update statement */ rc = SQLRowCount(hstmt,&nRowCount); mystmt(hstmt,rc); - printf(" total rows updated:%d",nRowCount); + printf(" total rows updated:%ld",nRowCount); /* commit the transaction */ rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); @@ -89,7 +89,7 @@ /* get the rows affected by delete statement */ rc = SQLRowCount(hstmt,&nRowCount); mystmt(hstmt,rc); - printf(" total rows deleted:%d",nRowCount); + printf(" total rows deleted:%ld",nRowCount); /* commit the transaction */ rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); --- myodbc-3.51.11.orig/test/my_position.c +++ myodbc-3.51.11/test/my_position.c @@ -23,7 +23,7 @@ { SQLRETURN rc; SQLCHAR txt[100]; - SQLINTEGER len; + SQLLEN len; myheader("t_chunk"); @@ -57,7 +57,7 @@ rc = SQLGetData(hstmt, 2, SQL_C_CHAR, txt, 100, &len); mystmt(hstmt,rc); - myprintf("\ntxt:%s(%d)",txt,len); + myprintf("\ntxt:%s(%ld)",txt,len); SQLFreeStmt(hstmt,SQL_RESET_PARAMS); SQLFreeStmt(hstmt,SQL_UNBIND); --- myodbc-3.51.11.orig/test/my_col_length.c +++ myodbc-3.51.11/test/my_col_length.c @@ -25,7 +25,7 @@ SQLHDBC hdbc; SQLHSTMT hstmt; SQLCHAR data1[25],data2[25]; - SQLINTEGER len1,len2,desc_len; + SQLLEN len1,len2,desc_len; SQLCHAR conn[100]; myheader("t_true_length"); @@ -66,22 +66,22 @@ rc = SQLDescribeCol(hstmt,1,NULL,40,NULL,NULL,&desc_len,NULL,NULL); mystmt(hstmt,rc); - myprintf("desc-col1-length:%d\n",desc_len); + myprintf("desc-col1-length:%ld\n",desc_len); rc = SQLDescribeCol(hstmt,2,NULL,40,NULL,NULL,&desc_len,NULL,NULL); mystmt(hstmt,rc); - myprintf("desc-col2-length:%d\n",desc_len); + myprintf("desc-col2-length:%ld\n",desc_len); rc = SQLFetch(hstmt); mystmt(hstmt,rc); rc = SQLGetData(hstmt,1,SQL_C_CHAR,&data1,20,&len1); mystmt(hstmt,rc); - myprintf("fetch-col1:%s(%d)\n",data1,len1); + myprintf("fetch-col1:%s(%ld)\n",data1,len1); rc = SQLGetData(hstmt,2,SQL_C_CHAR,&data2,20,&len2); mystmt(hstmt,rc); - myprintf("fetch-col2:%s(%d)\n",data2,len2); + myprintf("fetch-col2:%s(%ld)\n",data2,len2); rc = SQLFetch(hstmt); mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); @@ -104,7 +104,7 @@ SQLHDBC hdbc; SQLHSTMT hstmt; SQLCHAR data1[25],data2[25]; - SQLINTEGER len1,len2,desc_len; + SQLLEN len1,len2,desc_len; SQLCHAR conn[100]; myheader("t_max_length"); @@ -145,22 +145,22 @@ rc = SQLDescribeCol(hstmt,1,NULL,40,NULL,NULL,&desc_len,NULL,NULL); mystmt(hstmt,rc); - myprintf("desc-col1-length:%d\n",desc_len); + myprintf("desc-col1-length:%ld\n",desc_len); rc = SQLDescribeCol(hstmt,2,NULL,40,NULL,NULL,&desc_len,NULL,NULL); mystmt(hstmt,rc); - myprintf("desc-col2-length:%d\n",desc_len); + myprintf("desc-col2-length:%ld\n",desc_len); rc = SQLFetch(hstmt); mystmt(hstmt,rc); rc = SQLGetData(hstmt,1,SQL_C_CHAR,&data1,20,&len1); mystmt(hstmt,rc); - myprintf("fetch-col1:%s(%d)\n",data1,len1); + myprintf("fetch-col1:%s(%ld)\n",data1,len1); rc = SQLGetData(hstmt,2,SQL_C_CHAR,&data2,20,&len2); mystmt(hstmt,rc); - myprintf("fetch-col2:%s(%d)\n",data2,len2); + myprintf("fetch-col2:%s(%ld)\n",data2,len2); rc = SQLFetch(hstmt); mystmt_err(hstmt,rc == SQL_NO_DATA_FOUND, rc); --- myodbc-3.51.11.orig/test/mytest3.h +++ myodbc-3.51.11/test/mytest3.h @@ -33,6 +33,7 @@ /* STANDARD C HEADERS */ #include #include +#include #include /* ODBC HEADERS */ @@ -357,7 +358,8 @@ int my_print_non_format_result(SQLHSTMT hstmt) { SQLRETURN rc; - SQLUINTEGER nRowCount=0, pcColDef; + SQLUINTEGER nRowCount=0; + SQLULEN pcColDef; SQLCHAR szColName[MAX_NAME_LEN]; SQLCHAR szData[MAX_COLUMNS][MAX_ROW_DATA_LEN]={0}; SQLSMALLINT nIndex,ncol,pfSqlType, pcbScale, pfNullable; @@ -409,7 +411,8 @@ SQLUINTEGER nRowCount; SQLCHAR ColName[MAX_NAME_LEN+1]; SQLCHAR Data[MAX_ROW_DATA_LEN+1]; - SQLINTEGER size, pcbLength; + SQLINTEGER size; + SQLLEN pcbLength; SQLUSMALLINT nIndex; SQLSMALLINT ncol; @@ -513,10 +516,10 @@ */ const char *my_fetch_str(SQLHSTMT hstmt, SQLCHAR *szData,SQLUSMALLINT irow) { - SQLINTEGER nLen=0; + SQLLEN nLen=0; SQLGetData(hstmt,irow,SQL_CHAR,szData,MAX_ROW_DATA_LEN+1,&nLen); - fprintf(stdout," my_fetch_str: %s(%d)\n",szData,nLen); + fprintf(stdout," my_fetch_str: %s(%ld)\n",szData,nLen); return((const char *)szData); } --- myodbc-3.51.11.orig/test/db_test.c +++ myodbc-3.51.11/test/db_test.c @@ -131,7 +131,7 @@ SQLRETURN rc; SQLHSTMT hstmt; SQLCHAR stmtStr[100]; - SQLUINTEGER valMaxId; + SQLULEN valMaxId; SQLUINTEGER InsertedId; /* Initialize maxId */ --- myodbc-3.51.11.orig/test/my_keys.c +++ myodbc-3.51.11/test/my_keys.c @@ -23,7 +23,8 @@ void my_primary_keys(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData,rowcount; + SQLINTEGER nData; + SQLLEN rowcount; myheader("my_primary_keys"); @@ -76,7 +77,7 @@ rc = SQLRowCount(hstmt,&rowcount); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",rowcount); + myprintf(" rows affected:%ld\n",rowcount); /* myassert(rowcount == 1); */ rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -125,7 +126,8 @@ void my_unique_notnull_keys(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData,rowcount; + SQLINTEGER nData; + SQLLEN rowcount; myheader("my_unique_notnull_keys"); @@ -177,7 +179,7 @@ rc = SQLRowCount(hstmt,&rowcount); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",rowcount); + myprintf(" rows affected:%ld\n",rowcount); myassert(rowcount == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -227,7 +229,8 @@ void my_unique_keys(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData,rowcount; + SQLINTEGER nData; + SQLLEN rowcount; myheader("my_unique_keys"); @@ -279,7 +282,7 @@ rc = SQLRowCount(hstmt,&rowcount); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",rowcount); + myprintf(" rows affected:%ld\n",rowcount); myassert(rowcount == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -328,7 +331,8 @@ void my_notnull_keys(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData,rowcount; + SQLINTEGER nData; + SQLLEN rowcount; myheader("my_notnull_keys"); @@ -380,7 +384,7 @@ rc = SQLRowCount(hstmt,&rowcount); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",rowcount); + myprintf(" rows affected:%ld\n",rowcount); myassert(rowcount == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -429,7 +433,8 @@ void my_no_keys(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData,rowcount; + SQLINTEGER nData; + SQLLEN rowcount; myheader("my_no_keys"); @@ -481,7 +486,7 @@ rc = SQLRowCount(hstmt,&rowcount); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",rowcount); + myprintf(" rows affected:%ld\n",rowcount); myassert(rowcount == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -529,7 +534,8 @@ void my_no_keys_all_dups(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData,rowcount; + SQLINTEGER nData; + SQLLEN rowcount; myheader("my_no_keys_all_dups"); @@ -580,7 +586,7 @@ rc = SQLRowCount(hstmt,&rowcount); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",rowcount); + myprintf(" rows affected:%ld\n",rowcount); myassert(rowcount == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); --- myodbc-3.51.11.orig/test/mytest3.c +++ myodbc-3.51.11/test/mytest3.c @@ -142,7 +142,8 @@ static void tmysql_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; SQLUSMALLINT rgfRowStatus; @@ -206,7 +207,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -238,7 +239,8 @@ static void tmysql_setpos_del1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen, pccol; + SQLINTEGER nData = 500; + SQLLEN nlen, pccol; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -291,7 +293,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); myassert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -311,7 +313,8 @@ static void t_setpos_del_all(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData[4], nlen; + SQLINTEGER nData[4]; + SQLLEN nlen; SQLCHAR szData[4][10]; myheader("t_setpos_del_all"); @@ -368,7 +371,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," total rows deleted: %d\n",nlen); + fprintf(stdout," total rows deleted: %ld\n",nlen); myassert(nlen == 4); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -392,7 +395,8 @@ static void tmysql_setpos_upd(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -455,7 +459,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -478,7 +482,7 @@ nlen=0; rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout,"\n total rows affceted:%d",nlen); + fprintf(stdout,"\n total rows affected:%ld",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); @@ -657,7 +661,7 @@ rc = SQLFetch(hstmt); mystmt(hstmt,rc); - fprintf(stdout," outdata: %d, %s(%d)\n", nodata,szodata,nlen); + fprintf(stdout," outdata: %d, %s(%ld)\n", nodata,szodata,nlen); my_assert(nodata == 200); rc = SQLFetch(hstmt); @@ -827,7 +831,8 @@ static void tmysql_mtab_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -919,7 +924,8 @@ static void tmysql_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -982,7 +988,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1001,7 +1007,8 @@ static void t_alias_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1058,7 +1065,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1077,7 +1084,8 @@ static void t_alias_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData[4], nlen; + SQLINTEGER nData[4]; + SQLLEN nlen; SQLCHAR szData[4][10]; myheader("t_alias_setpos_del"); @@ -1137,7 +1145,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1161,7 +1169,8 @@ static void tmysql_setpos_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1218,7 +1227,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1237,7 +1246,8 @@ static void tmysql_setpos_pkdel2(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1300,7 +1310,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1365,7 +1375,8 @@ static void tmysql_setpos_pkdel3(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1416,7 +1427,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1435,7 +1446,8 @@ static void t_mul_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1492,7 +1504,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1511,7 +1523,8 @@ static void t_mul_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1565,7 +1578,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2036,7 +2049,7 @@ { SQLRETURN rc; SQLCHAR id[20]="999"; - SQLINTEGER nlen; + SQLLEN nlen; myheader("t_bingint"); @@ -2140,7 +2153,7 @@ rc = SQLGetData(hstmt,1,SQL_C_DEFAULT,&id,10,&nlen); mystmt(hstmt,rc); - fprintf(stdout,"\n id:%s,nlen:%d,%d\n",id,nlen,sizeof(SQL_BIGINT)); + fprintf(stdout,"\n id:%s,nlen:%ld,%ld\n",id,nlen,sizeof(SQL_BIGINT)); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2961,7 +2974,7 @@ { SQLRETURN rc; SQLINTEGER nodata; - SQLINTEGER nlen, slen,tlen; + SQLLEN nlen, slen,tlen; SQLCHAR szdata[20],sztdata[100]; myheader("tmysql_pcbvalue"); @@ -3004,7 +3017,7 @@ rc = SQLExtendedFetch(hstmt,SQL_FETCH_FIRST,1,0,NULL); mystmt(hstmt,rc); - fprintf(stdout," row1: %d(%d), %s(%d), %s(%d)\n", nodata,nlen,szdata,slen,sztdata,tlen); + fprintf(stdout," row1: %d(%ld), %s(%ld), %s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); strcpy(szdata,"updated-one"); @@ -3014,7 +3027,7 @@ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); mystmt(hstmt,rc); - fprintf(stdout," row2: %d(%d), %s(%d),%s(%d)\n", nodata,nlen,szdata,slen,sztdata,tlen); + fprintf(stdout," row2: %d(%ld), %s(%ld),%s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); myassert(rc == SQL_NO_DATA_FOUND); @@ -3036,7 +3049,7 @@ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szdata,20,&slen); mystmt(hstmt,rc); - fprintf(stdout," updated data:%s(%d)",szdata,slen); + fprintf(stdout," updated data:%s(%ld)",szdata,slen); my_assert(slen == 4); my_assert(strcmp(szdata,"upda")==0); @@ -3052,7 +3065,8 @@ static void my_setpos_upd_pk_order(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -3104,7 +3118,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3123,9 +3137,9 @@ rc = SQLExecDirect(hstmt,"DELETE FROM my_setpos_upd_pk_order WHERE col2 = 'updated'",SQL_NTS); mystmt(hstmt,rc); - rc = SQLRowCount(hstmt,(SQLINTEGER *)&nlen); + rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout,"\n total rows affceted:%d",nlen); + fprintf(stdout,"\n total rows affected:%ld",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); @@ -3496,7 +3510,8 @@ static void t_setpos_position(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -3562,7 +3577,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3583,7 +3598,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout,"\n total rows affceted:%d",nlen); + fprintf(stdout,"\n total rows affected:%ld",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); @@ -3689,7 +3704,8 @@ SQLRETURN rc; SQLHSTMT hstmt1; SQLCHAR szData[]="updated"; - SQLINTEGER nData,pcbValue, nlen, pcrow; + SQLINTEGER nData, pcrow; + SQLLEN pcbValue, nlen; myheader("t_pos_column_ignore"); @@ -3741,7 +3757,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); myassert(nlen == 0); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -3794,7 +3810,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - fprintf(stdout," rows affected:%d\n",nlen); + fprintf(stdout," rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -4100,7 +4116,7 @@ { SQLRETURN rc; SQLCHAR szData[20]; - SQLINTEGER pcbValue; + SQLLEN pcbValue; myheader("t_warning"); @@ -4129,19 +4145,19 @@ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc); - fprintf(stdout,"\n data: %s(%d)",szData,pcbValue); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc); - fprintf(stdout,"\n data: %s(%d)",szData,pcbValue); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc); - fprintf(stdout,"\n data: %s(%d)",szData,pcbValue); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); mystmt(hstmt,rc); - fprintf(stdout,"\n data: %s(%d)",szData,pcbValue); + fprintf(stdout,"\n data: %s(%ld)",szData,pcbValue); rc = SQLFetch(hstmt); mystmt_err(hstmt, rc == SQL_NO_DATA_FOUND, rc); @@ -4155,7 +4171,8 @@ #ifdef DBUG_OFF SQLRETURN rc; SQLCHAR szData[150]; - SQLINTEGER pcbValue,id; + SQLLEN pcbValue; + SQLINTEGER id; myheader("t_multistep"); @@ -4259,7 +4276,7 @@ { SQLRETURN rc; SQLCHAR szData[100], bData[100], bData1[100]; - SQLINTEGER pcbValue,pcbValue1,pcbValue2; + SQLLEN pcbValue,pcbValue1,pcbValue2; myheader("t_zerolength"); @@ -4291,13 +4308,13 @@ pcbValue= pcbValue1= 99; rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n length: %d", pcbValue); + fprintf(stdout,"\n length: %ld", pcbValue); myassert(pcbValue == 0); bData[0]=bData[1]='z'; rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n length: %d", pcbValue1); + fprintf(stdout,"\n length: %ld", pcbValue1); myassert(pcbValue1 == 0); myassert(bData[0] == 'z'); myassert(bData[1] == 'z'); @@ -4305,7 +4322,7 @@ bData1[0]=bData1[1]='z'; rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n length: %d", pcbValue2); + fprintf(stdout,"\n length: %ld", pcbValue2); myassert(pcbValue2 == 0); myassert(bData1[0] == 'z'); myassert(bData1[1] == 'z'); @@ -4313,21 +4330,21 @@ pcbValue= pcbValue1= 99; rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue); mystmt(hstmt,rc); - fprintf(stdout,"\n data: %s, length: %d", szData, pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); myassert(pcbValue == 0); myassert(szData[0] == '\0'); bData[0]=bData[1]='z'; rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1); mystmt(hstmt,rc); - fprintf(stdout,"\n data: %s, length: %d", bData, pcbValue1); + fprintf(stdout,"\n data: %s, length: %ld", bData, pcbValue1); myassert(pcbValue1 == 0); myassert(bData[0]== '\0'); bData1[0]=bData1[1]='z'; rc = SQLGetData(hstmt,3,SQL_C_CHAR,bData1,1,&pcbValue2); mystmt(hstmt,rc); - fprintf(stdout,"\n data: %s, length: %d", bData1, pcbValue2); + fprintf(stdout,"\n data: %s, length: %ld", bData1, pcbValue2); myassert(pcbValue2 == 0); myassert(bData1[0] == '\0'); myassert(bData1[1] == 'z'); @@ -4339,40 +4356,40 @@ szData[0]= bData[0]= 'z'; rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n length: %d", pcbValue); + fprintf(stdout,"\n length: %ld", pcbValue); myassert(pcbValue == 4); myassert(szData[0] == 'z'); rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n length: %d", pcbValue1); + fprintf(stdout,"\n length: %ld", pcbValue1); myassert(pcbValue1 == 5); myassert(bData[0] == 'z'); bData[0]=bData1[1]='z'; rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n length: %d", pcbValue2); + fprintf(stdout,"\n length: %ld", pcbValue2); myassert(pcbValue2 == 5); pcbValue= pcbValue1= 99; szData[0]= szData[1]= bData[0]= bData[1]= 'z'; rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n data: %s, length: %d", szData,pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData,pcbValue); myassert(pcbValue == 4); myassert(szData[0] == '\0'); rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n data; %s, length: %d", bData, pcbValue1); + fprintf(stdout,"\n data; %s, length: %ld", bData, pcbValue1); myassert(pcbValue1 == 5); myassert(bData[0] == 'm'); bData[0]=bData1[1]='z'; rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,1,&pcbValue2); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n length: %d", pcbValue2); + fprintf(stdout,"\n length: %ld", pcbValue2); myassert(pcbValue2 == 5); myassert(bData1[0] == 'm'); myassert(bData1[1] == 'z'); @@ -4380,33 +4397,33 @@ pcbValue= pcbValue1= 99; rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n data: %s, length: %d", szData, pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); myassert(pcbValue == 4); myassert(strcmp(szData,"ven")==0); rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,4,&pcbValue1); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n data: %s, length: %d", bData, pcbValue1); + fprintf(stdout,"\n data: %s, length: %ld", bData, pcbValue1); myassert(pcbValue1 == 5); myassert(strncmp(bData,"mysq",4)==0); pcbValue= pcbValue1= 99; rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,5,&pcbValue); mystmt(hstmt,rc); - fprintf(stdout,"\n data: %s, length: %d", szData, pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); myassert(pcbValue == 4); myassert(strcmp(szData,"venu")==0); rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,5,&pcbValue1); mystmt(hstmt,rc); - fprintf(stdout,"\n data: %s, length: %d", bData, pcbValue1); + fprintf(stdout,"\n data: %s, length: %ld", bData, pcbValue1); myassert(pcbValue1 == 5); myassert(strncmp(bData,"mysql",5)==0); szData[0]= 'z'; rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,0,&pcbValue); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n data: %s, length: %d", szData, pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); myassert(pcbValue == 5 || pcbValue == 10); myassert(szData[0] == 'z'); @@ -4414,20 +4431,20 @@ szData[0]=szData[1]='z'; rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,1,&pcbValue); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n data: %s, length: %d", szData, pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); myassert(pcbValue == 10); myassert(szData[0] == 'm'); myassert(szData[1] == 'z'); rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,4,&pcbValue); mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc); - fprintf(stdout,"\n data: %s, length: %d", szData, pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); myassert(pcbValue == 10); myassert(strncmp(szData,"mont",4) == 0); rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,5,&pcbValue); mystmt(hstmt,rc); - fprintf(stdout,"\n data: %s, length: %d", szData, pcbValue); + fprintf(stdout,"\n data: %s, length: %ld", szData, pcbValue); myassert(pcbValue == 10); myassert(strncmp(szData,"monty",5) == 0); #endif @@ -4444,7 +4461,8 @@ { SQLRETURN rc; SQLHSTMT hstmt1; - SQLINTEGER row_count, int_data, cur_type; + SQLINTEGER int_data, cur_type; + SQLLEN row_count; myheader("t_pos_datetime_delete"); @@ -4513,7 +4531,7 @@ rc = SQLRowCount(hstmt1,&row_count); mystmt(hstmt1,rc); - fprintf(stdout, "\n rows affected: %d", row_count); + fprintf(stdout, "\n rows affected: %ld", row_count); myassert(row_count == 1); rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); @@ -4535,7 +4553,7 @@ rc = SQLRowCount(hstmt1,&row_count); mystmt(hstmt1,rc); - fprintf(stdout, "\n rows affected: %d", row_count); + fprintf(stdout, "\n rows affected: %ld", row_count); myassert(row_count == 1); SQLFreeStmt(hstmt,SQL_UNBIND); @@ -4567,7 +4585,8 @@ { SQLRETURN rc; SQLHSTMT hstmt1; - SQLINTEGER row_count, int_data, cur_type; + SQLLEN row_count; + SQLINTEGER int_data, cur_type; myheader("t_pos_datetime_delete1"); @@ -4645,7 +4664,7 @@ rc = SQLRowCount(hstmt1,&row_count); mystmt(hstmt1,rc); - fprintf(stdout, "\n rows affected: %d", row_count); + fprintf(stdout, "\n rows affected: %ld", row_count); myassert(row_count == 1); rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL); @@ -4667,7 +4686,7 @@ rc = SQLRowCount(hstmt1,&row_count); mystmt(hstmt1,rc); - fprintf(stdout, "\n rows affected: %d", row_count); + fprintf(stdout, "\n rows affected: %ld", row_count); myassert(row_count == 1); SQLFreeStmt(hstmt,SQL_UNBIND); @@ -4693,7 +4712,8 @@ static void t_text_fetch(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER i, row_count, length; + SQLINTEGER i, row_count; + SQLLEN length; SQLCHAR data[TEST_ODBC_TEXT_LEN+1]; myheader("t_text_fetch"); @@ -4747,22 +4767,22 @@ fprintf(stdout,"\n row '%d' (lengths: ", row_count); rc = SQLGetData(hstmt,1,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); mystmt(hstmt,rc); - fprintf(stdout,"%d", length); + fprintf(stdout,"%ld", length); myassert(length == 255); rc = SQLGetData(hstmt,2,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); mystmt(hstmt,rc); - fprintf(stdout,",%d", length); + fprintf(stdout,",%ld", length); myassert(length == TEST_ODBC_TEXT_LEN/2); rc = SQLGetData(hstmt,3,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); mystmt(hstmt,rc); - fprintf(stdout,",%d", length); + fprintf(stdout,",%ld", length); myassert(length == (SQLINTEGER)(TEST_ODBC_TEXT_LEN/1.5)); rc = SQLGetData(hstmt,4,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length); mystmt(hstmt,rc); - fprintf(stdout,",%d)", length); + fprintf(stdout,",%ld)", length); myassert(length == TEST_ODBC_TEXT_LEN-1); row_count++; @@ -4782,8 +4802,9 @@ static void t_columns(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLUSMALLINT NumPrecRadix, DataType, Nullable; - SQLUINTEGER cbColumnSize, cbDecimalDigits, cbNumPrecRadix, - cbDatabaseName, cbDataType, cbNullable; + SQLULEN cbColumnSize, cbDecimalDigits, cbNumPrecRadix, + cbDataType, cbNullable; + SQLUINTEGER cbDatabaseName; SQLRETURN rc; SQLUINTEGER ColumnSize, i; SQLUINTEGER ColumnCount= 7; @@ -4861,11 +4882,11 @@ mystmt(hstmt,rc); fprintf(stdout,"\n Column %s:", ColumnName); - fprintf(stdout,"\n\t DataType = %d(%d)", DataType, cbDataType); - fprintf(stdout,"\n\t ColumnSize = %d(%d)", ColumnSize, cbColumnSize); - fprintf(stdout,"\n\t DecimalDigits= %d(%d)", DecimalDigits, cbDecimalDigits); - fprintf(stdout,"\n\t NumPrecRadix = %d(%d)", NumPrecRadix, cbNumPrecRadix); - fprintf(stdout,"\n\t Nullable = %s(%d)\n", + fprintf(stdout,"\n\t DataType = %d(%ld)", DataType, cbDataType); + fprintf(stdout,"\n\t ColumnSize = %d(%ld)", ColumnSize, cbColumnSize); + fprintf(stdout,"\n\t DecimalDigits= %d(%ld)", DecimalDigits, cbDecimalDigits); + fprintf(stdout,"\n\t NumPrecRadix = %d(%ld)", NumPrecRadix, cbNumPrecRadix); + fprintf(stdout,"\n\t Nullable = %s(%ld)\n", Nullable == SQL_NO_NULLS ? "NO": "YES", cbNullable); myassert(DataType == Values[i][0][0]); @@ -5204,7 +5225,8 @@ { SQLRETURN rc; SQLCHAR *data; - SQLINTEGER length, i; + SQLLEN length; + SQLINTEGER i; const SQLINTEGER max_blob_size=1024*100; myheader("t_blob_bug"); @@ -5232,7 +5254,7 @@ fprintf(stdout,"\n inserting %d rows\n", max_blob_size / 1024); for (length=1024; length <= max_blob_size; length+= 1024) { - fprintf(stdout,"\r %d", length/1024); + fprintf(stdout,"\r %ld", length/1024); rc = SQLExecute(hstmt); mystmt(hstmt,rc); } @@ -5251,7 +5273,7 @@ rc = SQLFetch(hstmt); mystmt(hstmt,rc); - fprintf(stdout,"\n row %d length: %d", i, length); + fprintf(stdout,"\n row %d length: %ld", i, length); myassert(length == i * 1024); } rc = SQLFetch(hstmt); @@ -5291,7 +5313,7 @@ { SQLRETURN rc; SQLSMALLINT i, ColumnCount, pcbColName, pfSqlType, pibScale, pfNullable; - SQLUINTEGER pcbColDef; + SQLULEN pcbColDef; SQLCHAR szColName[MAX_NAME_LEN]; myheader("t_tables_bug"); @@ -5318,7 +5340,7 @@ fprintf(stdout, "\n\t Column Name : %s", szColName); fprintf(stdout, "\n\t NameLengh : %d", pcbColName); fprintf(stdout, "\n\t DataType : %d", pfSqlType); - fprintf(stdout, "\n\t ColumnSize : %d", pcbColDef); + fprintf(stdout, "\n\t ColumnSize : %ld", pcbColDef); fprintf(stdout, "\n\t DecimalDigits : %d", pibScale); fprintf(stdout, "\n\t Nullable : %d", pfNullable); --- myodbc-3.51.11.orig/test/my_cursor.c +++ myodbc-3.51.11/test/my_cursor.c @@ -23,6 +23,7 @@ ***************************************************************************/ #include "mytest3.h" /* MyODBC 3.51 sample utility header */ +#include /******************************************************** * initialize tables * @@ -103,7 +104,7 @@ void my_positioned_cursor(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nRowCount; + SQLLEN nRowCount; SQLHSTMT hstmt_pos; printf("\nmy_positioned_cursor:\n"); @@ -135,7 +136,7 @@ rc = SQLRowCount(hstmt_pos, &nRowCount); mystmt(hstmt_pos, rc); - printf(" total rows updated:%d\n",nRowCount); + printf(" total rows updated:%ld\n",nRowCount); assert(nRowCount == 1); /* Free statement cursor resorces */ @@ -164,7 +165,7 @@ rc = SQLRowCount(hstmt_pos, &nRowCount); mystmt(hstmt_pos, rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert(nRowCount == 1); /* free the statement cursor */ @@ -188,7 +189,8 @@ void my_setpos_cursor(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id, nRowCount; + SQLINTEGER id; + SQLLEN nRowCount; SQLCHAR name[50]; printf("\nmy_setpos_cursor:\n"); @@ -217,7 +219,7 @@ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt, rc); - printf(" total rows updated:%d\n",nRowCount); + printf(" total rows updated:%ld\n",nRowCount); assert(nRowCount == 1); /* position to second row and delete it ..*/ @@ -231,7 +233,7 @@ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt, rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert(nRowCount == 1); /* Free statement cursor resorces */ --- myodbc-3.51.11.orig/test/mytest.c +++ myodbc-3.51.11/test/mytest.c @@ -103,7 +103,8 @@ void tmysql_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; SQLUSMALLINT rgfRowStatus; @@ -167,7 +168,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -199,7 +200,8 @@ void tmysql_setpos_del1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -250,7 +252,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); myassert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -270,7 +272,8 @@ void tmysql_setpos_del_all(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -326,7 +329,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -345,7 +348,8 @@ void tmysql_setpos_upd(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -408,7 +412,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -427,9 +431,9 @@ rc = SQLExecDirect(hstmt,"DELETE FROM tmysql_setpos WHERE col2 = 'updated'",SQL_NTS); mystmt(hstmt,rc); - rc = SQLRowCount(hstmt,(SQLINTEGER *)&nlen); + rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("\n total rows affceted:%d",nlen); + myprintf("\n total rows affected:%ld",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); @@ -449,7 +453,8 @@ void tmysql_setpos_add(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -494,7 +499,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new2"); rc = SQLSetPos(hstmt,1,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -503,7 +508,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new3"); rc = SQLSetPos(hstmt,0,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -512,7 +517,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new4"); rc = SQLSetPos(hstmt,10,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -521,7 +526,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -707,7 +712,7 @@ rc = SQLFetch(hstmt); mystmt(hstmt,rc); - myprintf(" outdata: %d, %s(%d)\n", nodata,szodata,nlen); + myprintf(" outdata: %d, %s(%ld)\n", nodata,szodata,nlen); my_assert(nodata == 200); rc = SQLFetch(hstmt); @@ -733,7 +738,7 @@ { SQLRETURN rc; int nodata; - SQLINTEGER nlen, slen,tlen; + SQLLEN nlen, slen,tlen; char szdata[20],sztdata[100]; SQLUSMALLINT rgfRowStatus[20]; @@ -776,7 +781,7 @@ rc = SQLExtendedFetch(hstmt,SQL_FETCH_FIRST,1,0,(SQLUSMALLINT *)&rgfRowStatus); mystmt(hstmt,rc); - myprintf("row1: %d(%d), %s(%d),%s(%d)\n", nodata,nlen,szdata,slen,sztdata,tlen); + myprintf("row1: %d(%ld), %s(%ld),%s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); strcpy(szdata,"updated-one"); @@ -786,7 +791,7 @@ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); mystmt(hstmt,rc); - myprintf("row2: %d(%d), %s(%d),%s(%d)\n", nodata,nlen,szdata,slen,sztdata,tlen); + myprintf("row2: %d(%ld), %s(%ld),%s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); myassert(rc == SQL_NO_DATA_FOUND); @@ -808,7 +813,7 @@ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szdata,20,&slen); mystmt(hstmt,rc); - myprintf("updated data:%s(%d)",szdata,slen); + myprintf("updated data:%s(%ld)",szdata,slen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -873,7 +878,7 @@ rc = SQLFetch(hstmt); mystmt(hstmt,rc); - myprintf(" outdata: %d, %s(%d)\n", nodata,szodata,nlen); + myprintf(" outdata: %d, %s(%ld)\n", nodata,szodata,nlen); my_assert(nodata == 200); rc = SQLFetch(hstmt); @@ -989,7 +994,7 @@ SQLCHAR sqlerr[30]="error"; SQLCHAR fixerr[30]= "fixerr"; SQLCHAR progerr[30]="progerr"; - SQLINTEGER pcbParamDef; + SQLLEN pcbParamDef; SQLFreeStmt(hstmt,SQL_CLOSE); rc = SQLPrepare(hstmt,"insert into sqlerr (TD, NODE, TAG, SQLNAME, SQL_ERR, FIX_ERR, PROG_ERR)\ @@ -1007,7 +1012,7 @@ rc = SQLDescribeParam(hstmt,index,&pfSqlType,&pcbParamDef,&pibScale,&pfNullable); mystmt(hstmt,rc); - myprintf("descparam[%d]:%d,%d,%d,%d\n",index,pfSqlType,pcbParamDef,pibScale,pfNullable); + myprintf("descparam[%d]:%d,%ld,%d,%d\n",index,pfSqlType,pcbParamDef,pibScale,pfNullable); } rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,11,12,0,0,td,100,0); @@ -1633,7 +1638,8 @@ void tmysql_mtab_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1725,7 +1731,8 @@ void tmysql_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1782,7 +1789,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1801,7 +1808,8 @@ void t_alias_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1858,7 +1866,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1878,7 +1886,8 @@ void t_alias_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; SQLUSMALLINT rgfRowStatus; @@ -1936,7 +1945,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1956,7 +1965,8 @@ void tmysql_setpos_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2013,7 +2023,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2032,7 +2042,8 @@ void tmysql_setpos_pkdel2(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2085,7 +2096,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2244,7 +2255,8 @@ void tmysql_setpos_pkdel3(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2295,7 +2307,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2314,7 +2326,8 @@ void t_mul_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2365,7 +2378,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2384,7 +2397,8 @@ void t_mul_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2433,7 +2447,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2817,7 +2831,7 @@ SQLRETURN rc; SQLCHAR colname[20]; SQLSMALLINT collen,datatype,decptr,nullable; - SQLUINTEGER colsize; + SQLULEN colsize; myheader("t_desccol"); @@ -2849,15 +2863,15 @@ rc = SQLDescribeCol(hstmt,1,(char *)colname,20,&collen,&datatype,&colsize,&decptr,&nullable); mystmt(hstmt,rc); - myprintf("1: %s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; + myprintf("1: %s,%d,%d,%ld,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; rc = SQLDescribeCol(hstmt,2,(char *)colname,20,&collen,&datatype,&colsize,&decptr,&nullable); mystmt(hstmt,rc); - myprintf("2: %s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; + myprintf("2: %s,%d,%d,%ld,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; rc = SQLDescribeCol(hstmt,3,(char *)colname,20,&collen,&datatype,&colsize,&decptr,&nullable); mystmt(hstmt,rc); - myprintf("3: %s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; + myprintf("3: %s,%d,%d,%ld,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2873,7 +2887,7 @@ SQLCHAR lcname[254]; SQLSMALLINT lclen; SQLSMALLINT lsqltype; - SQLUINTEGER lsize; + SQLULEN lsize; SQLSMALLINT lscale; SQLSMALLINT lisNull; SQLCHAR select[255]; @@ -2891,7 +2905,7 @@ mystmt(hstmt,rc); myprintf("\n name : %s (%d)",lcname,lclen); - myprintf("\n sqltype: %d, size: %d, scale: %d, null: %d\n",lsqltype,lsize,lscale,lisNull); + myprintf("\n sqltype: %d, size: %ld, scale: %d, null: %d\n",lsqltype,lsize,lscale,lisNull); myassert(strcmp(lcname,cname)==0); myassert(lclen == clen); @@ -3021,7 +3035,7 @@ { SQLRETURN rc =0; SQLCHAR lsptr[40]; - SQLINTEGER lnptr; + SQLLEN lnptr; SQLSMALLINT lslen; SQLFreeStmt(hstmt,SQL_CLOSE); @@ -3040,7 +3054,7 @@ } else { - myprintf("%d(%d)\n",lnptr,lslen); + myprintf("%ld(%d)\n",lnptr,lslen); myassert(lnptr == nptr); } @@ -3135,7 +3149,7 @@ { SQLRETURN rc; SQLCHAR id[20]="999"; - SQLINTEGER nlen; + SQLLEN nlen; myheader("t_bigint"); @@ -3239,7 +3253,7 @@ rc = SQLGetData(hstmt,1,SQL_C_DEFAULT,&id,10,&nlen); mystmt(hstmt,rc); - myprintf("\n id:%s,nlen:%d,%d\n",id,nlen,sizeof(SQL_BIGINT)); + myprintf("\n id:%s,nlen:%ld,%ld\n",id,nlen,sizeof(SQL_BIGINT)); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3250,7 +3264,8 @@ void t_setpos_upd_bug1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id, len,id_len,f_len,l_len,ts_len; + SQLINTEGER id; + SQLLEN len,id_len,f_len,l_len,ts_len; SQLCHAR fname[21],lname[21],ts[17],szTable[256]; SQLUSMALLINT pccol; @@ -3315,7 +3330,7 @@ rc = SQLRowCount(hstmt,&len); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",len); + myprintf(" rows affected:%ld\n",len); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3334,9 +3349,9 @@ rc = SQLExecDirect(hstmt,"DELETE FROM t_setpos_upd_bug1 WHERE fname = 'update'",SQL_NTS); mystmt(hstmt,rc); - rc = SQLRowCount(hstmt,(SQLINTEGER *)&len); + rc = SQLRowCount(hstmt,&len); mystmt(hstmt,rc); - myprintf("\n total rows affceted:%d",len); + myprintf("\n total rows affected:%ld",len); my_assert(len == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); @@ -3357,7 +3372,7 @@ { SQLRETURN rc; SQLINTEGER id,id1; - SQLINTEGER pcrow; + SQLLEN pcrow; SQLHSTMT hstmt1; myheader("t_acc_update"); @@ -3420,7 +3435,7 @@ rc = SQLRowCount(hstmt1,&pcrow); mystmt(hstmt1,rc); - myprintf("rows affected:%d\n",pcrow); + myprintf("rows affected:%ld\n",pcrow); SQLFreeStmt(hstmt1,SQL_RESET_PARAMS); rc = SQLFreeStmt(hstmt1,SQL_DROP); @@ -3444,7 +3459,7 @@ rc = SQLGetCursorName(hstmt,getCurName,20,&getLen); mystmt(hstmt,rc); - myprintf("\ngetcursor:%s(%d)\n",getCurName,strlen(getCurName)); + myprintf("\ngetcursor:%s(%ld)\n",getCurName,strlen(getCurName)); } void tmy_cursor1(SQLHSTMT hstmt) @@ -3595,7 +3610,7 @@ SQLCHAR ColumnName[255]; SQLSMALLINT ColumnNameSize; SQLSMALLINT ColumnSQLDataType; - SQLUINTEGER ColumnSize; + SQLULEN ColumnSize; SQLSMALLINT ColumnDecimals; SQLSMALLINT ColumnNullable; SQLSMALLINT index, pccol; @@ -3614,7 +3629,7 @@ &ColumnDecimals, &ColumnNullable); mystmt(hstmt,rc); - myprintf("\n%-6s %4d %4d %7d %4d %4d", ColumnName, ColumnNameSize, + myprintf("\n%-6s %4d %4d %7ld %4d %4d", ColumnName, ColumnNameSize, ColumnSQLDataType, ColumnSize, ColumnDecimals, ColumnNullable); } @@ -3773,7 +3788,8 @@ void my_setpos_upd_pk_order(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -3820,7 +3836,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3839,9 +3855,9 @@ rc = SQLExecDirect(hstmt,"DELETE FROM my_setpos_upd_pk_order WHERE col2 = 'updated'",SQL_NTS); mystmt(hstmt,rc); - rc = SQLRowCount(hstmt,(SQLINTEGER *)&nlen); + rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("\n total rows affceted:%d",nlen); + myprintf("\n total rows affected:%ld",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); --- myodbc-3.51.11.orig/test/my_result.c +++ myodbc-3.51.11/test/my_result.c @@ -30,7 +30,8 @@ void my_resultset(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLUINTEGER nRowCount=0, pcColDef; + SQLUINTEGER nRowCount=0; + SQLULEN pcColDef; SQLCHAR szColName[MAX_NAME_LEN]; SQLCHAR szData[MAX_ROW_DATA_LEN+1]; SQLSMALLINT nIndex,ncol,pfSqlType, pcbScale, pfNullable; --- myodbc-3.51.11.orig/test/mytest2.c +++ myodbc-3.51.11/test/mytest2.c @@ -103,7 +103,8 @@ void tmysql_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; SQLUSMALLINT rgfRowStatus; @@ -170,7 +171,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -202,7 +203,8 @@ void tmysql_setpos_del1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -256,7 +258,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -275,7 +277,8 @@ void tmysql_setpos_del_all(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -335,7 +338,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -354,7 +357,8 @@ void tmysql_setpos_upd(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -417,7 +421,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -436,9 +440,9 @@ rc = SQLExecDirect(hstmt,"DELETE FROM tmysql_setpos WHERE col2 = 'updated'",SQL_NTS); mystmt(hstmt,rc); - rc = SQLRowCount(hstmt,(SQLINTEGER *)&nlen); + rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("\n total rows affceted:%d",nlen); + myprintf("\n total rows affected:%ld",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); @@ -458,7 +462,8 @@ void tmysql_setpos_add(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -503,7 +508,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new2"); rc = SQLSetPos(hstmt,1,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -512,7 +517,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new3"); rc = SQLSetPos(hstmt,0,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -521,7 +526,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new4"); rc = SQLSetPos(hstmt,10,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -530,7 +535,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -735,7 +740,7 @@ { SQLRETURN rc; int nodata; - SQLINTEGER nlen, slen,tlen; + SQLLEN nlen, slen,tlen; char szdata[20],sztdata[100]; SQLUSMALLINT rgfRowStatus[20]; @@ -778,7 +783,7 @@ rc = SQLExtendedFetch(hstmt,SQL_FETCH_FIRST,1,0,(SQLUSMALLINT *)&rgfRowStatus); mystmt(hstmt,rc); - myprintf("row1: %d(%d), %s(%d),%s(%d)\n", nodata,nlen,szdata,slen,sztdata,tlen); + myprintf("row1: %d(%ld), %s(%ld),%s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); strcpy(szdata,"updated-one"); @@ -790,7 +795,7 @@ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); mystmt(hstmt,rc); - myprintf("row2: %d(%d), %s(%d),%s(%d)\n", nodata,nlen,szdata,slen,sztdata,tlen); + myprintf("row2: %d(%ld), %s(%ld),%s(%ld)\n", nodata,nlen,szdata,slen,sztdata,tlen); rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,0,0); myassert(rc == SQL_NO_DATA_FOUND); @@ -812,7 +817,7 @@ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szdata,20,&slen); mystmt(hstmt,rc); - myprintf("updated data:%s(%d)",szdata,slen); + myprintf("updated data:%s(%ld)",szdata,slen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -992,7 +997,7 @@ SQLCHAR sqlerr[30]="error"; SQLCHAR fixerr[30]= "fixerr"; SQLCHAR progerr[30]="progerr"; - SQLINTEGER pcbParamDef; + SQLLEN pcbParamDef; SQLFreeStmt(hstmt,SQL_CLOSE); rc = SQLPrepare(hstmt,"insert into sqlerr (TD, NODE, TAG, SQLNAME, SQL_ERR, FIX_ERR, PROG_ERR)\ @@ -1010,7 +1015,7 @@ rc = SQLDescribeParam(hstmt,index,&pfSqlType,&pcbParamDef,&pibScale,&pfNullable); mystmt(hstmt,rc); - myprintf("descparam[%d]:%d,%d,%d,%d\n",index,pfSqlType,pcbParamDef,pibScale,pfNullable); + myprintf("descparam[%d]:%d,%ld,%d,%d\n",index,pfSqlType,pcbParamDef,pibScale,pfNullable); } rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,11,12,0,0,td,100,0); @@ -1625,7 +1630,8 @@ void tmysql_mtab_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1716,7 +1722,8 @@ void tmysql_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1773,7 +1780,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1792,7 +1799,8 @@ void t_alias_setpos_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1849,7 +1857,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1868,7 +1876,8 @@ void t_alias_setpos_del(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -1925,7 +1934,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -1945,7 +1954,8 @@ void tmysql_setpos_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2002,7 +2012,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2021,7 +2031,8 @@ void tmysql_setpos_pkdel2(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2078,7 +2089,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2243,7 +2254,8 @@ void tmysql_setpos_pkdel3(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2295,7 +2307,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2314,7 +2326,8 @@ void t_mul_pkdel(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2366,7 +2379,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2385,7 +2398,8 @@ void t_mul_pkdel1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -2437,7 +2451,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2818,7 +2832,7 @@ SQLRETURN rc; SQLCHAR colname[20]; SQLSMALLINT collen,datatype,decptr,nullable; - SQLUINTEGER colsize; + SQLULEN colsize; myheader("t_desccol"); @@ -2850,15 +2864,15 @@ rc = SQLDescribeCol(hstmt,1,(char *)colname,20,&collen,&datatype,&colsize,&decptr,&nullable); mystmt(hstmt,rc); - myprintf("1: %s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; + myprintf("1: %s,%d,%d,%ld,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; rc = SQLDescribeCol(hstmt,2,(char *)colname,20,&collen,&datatype,&colsize,&decptr,&nullable); mystmt(hstmt,rc); - myprintf("2: %s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; + myprintf("2: %s,%d,%d,%ld,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; rc = SQLDescribeCol(hstmt,3,(char *)colname,20,&collen,&datatype,&colsize,&decptr,&nullable); mystmt(hstmt,rc); - myprintf("3: %s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; + myprintf("3: %s,%d,%d,%ld,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);; rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -2874,7 +2888,7 @@ SQLCHAR lcname[254]; SQLSMALLINT lclen; SQLSMALLINT lsqltype; - SQLUINTEGER lsize; + SQLULEN lsize; SQLSMALLINT lscale; SQLSMALLINT lisNull; SQLCHAR select[100]; @@ -2892,7 +2906,7 @@ mystmt(hstmt,rc); myprintf("\n name : %s (%d)",lcname,lclen); - myprintf("\n sqltype: %d, size: %d, scale: %d, null: %d\n",lsqltype,lsize,lscale,lisNull); + myprintf("\n sqltype: %d, size: %ld, scale: %d, null: %d\n",lsqltype,lsize,lscale,lisNull); myassert(strcmp(lcname,cname)==0); myassert(lclen == clen); @@ -3022,7 +3036,7 @@ { SQLRETURN rc =0; SQLCHAR lsptr[40]; - SQLINTEGER lnptr; + SQLLEN lnptr; SQLSMALLINT lslen; SQLFreeStmt(hstmt,SQL_CLOSE); @@ -3041,7 +3055,7 @@ } else { - myprintf("%d(%d)\n",lnptr,lslen); + myprintf("%ld(%d)\n",lnptr,lslen); myassert(lnptr == nptr); } @@ -3136,7 +3150,7 @@ { SQLRETURN rc; SQLCHAR id[20]="999"; - SQLINTEGER nlen; + SQLLEN nlen; myheader("t_bingint"); @@ -3241,7 +3255,7 @@ rc = SQLGetData(hstmt,1,SQL_C_DEFAULT,&id,10,&nlen); mystmt(hstmt,rc); - myprintf("\n id:%s,nlen:%d,%d\n",id,nlen,sizeof(SQL_BIGINT)); + myprintf("\n id:%s,nlen:%ld,%ld\n",id,nlen,sizeof(SQL_BIGINT)); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3252,7 +3266,8 @@ void t_setpos_upd_bug1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id, len,id_len,f_len,l_len,ts_len; + SQLINTEGER id; + SQLLEN len,id_len,f_len,l_len,ts_len; SQLCHAR fname[21],lname[21],ts[17],szTable[256]; SQLUSMALLINT pccol; @@ -3317,7 +3332,7 @@ rc = SQLRowCount(hstmt,&len); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",len); + myprintf(" rows affected:%ld\n",len); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3336,9 +3351,9 @@ rc = SQLExecDirect(hstmt,"DELETE FROM t_setpos_upd_bug1 WHERE fname = 'update'",SQL_NTS); mystmt(hstmt,rc); - rc = SQLRowCount(hstmt,(SQLINTEGER *)&len); + rc = SQLRowCount(hstmt,&len); mystmt(hstmt,rc); - myprintf("\n total rows affceted:%d",len); + myprintf("\n total rows affected:%ld",len); my_assert(len == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); @@ -3359,7 +3374,7 @@ { SQLRETURN rc; SQLINTEGER id,id1; - SQLINTEGER pcrow; + SQLLEN pcrow; SQLHSTMT hstmt1; myheader("t_acc_update"); @@ -3421,7 +3436,7 @@ rc = SQLRowCount(hstmt1,&pcrow); mystmt(hstmt1,rc); - myprintf("rows affected:%d\n",pcrow); + myprintf("rows affected:%ld\n",pcrow); SQLFreeStmt(hstmt1,SQL_RESET_PARAMS); rc = SQLFreeStmt(hstmt1,SQL_DROP); @@ -3596,7 +3611,7 @@ SQLCHAR ColumnName[255]; SQLSMALLINT ColumnNameSize; SQLSMALLINT ColumnSQLDataType; - SQLUINTEGER ColumnSize; + SQLULEN ColumnSize; SQLSMALLINT ColumnDecimals; SQLSMALLINT ColumnNullable; SQLSMALLINT index, pccol; @@ -3615,7 +3630,7 @@ &ColumnDecimals, &ColumnNullable); mystmt(hstmt,rc); - myprintf("\n%-6s %4d %4d %7d %4d %4d", ColumnName, ColumnNameSize, + myprintf("\n%-6s %4d %4d %7ld %4d %4d", ColumnName, ColumnNameSize, ColumnSQLDataType, ColumnSize, ColumnDecimals, ColumnNullable); } @@ -3774,7 +3789,8 @@ void my_setpos_upd_pk_order(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER pcrow; @@ -3824,7 +3840,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -3843,9 +3859,9 @@ rc = SQLExecDirect(hstmt,"DELETE FROM my_setpos_upd_pk_order WHERE col2 = 'updated'",SQL_NTS); mystmt(hstmt,rc); - rc = SQLRowCount(hstmt,(SQLINTEGER *)&nlen); + rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("\n total rows affceted:%d",nlen); + myprintf("\n total rows affected:%ld",nlen); my_assert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_CLOSE); --- myodbc-3.51.11.orig/test/my_blob.c +++ myodbc-3.51.11/test/my_blob.c @@ -22,7 +22,7 @@ void t_blob(SQLHDBC hdbc, SQLHSTMT hstmt, SQLUINTEGER blob_size) { SQLRETURN rc; - SQLUINTEGER cbValue; + SQLULEN cbValue; SQLUINTEGER j= 0; SQLINTEGER l; SQLCHAR* blobbuf; @@ -130,7 +130,8 @@ void t_1piecewrite2(HDBC hdbc, HSTMT hstmt) { SQLRETURN rc; - SQLINTEGER cbValue,cbValue2,l; + SQLINTEGER cbValue,l; + SQLLEN cbValue2; SQLCHAR* blobbuf; size_t i; --- myodbc-3.51.11.orig/test/my_dyn_cursor.c +++ myodbc-3.51.11/test/my_dyn_cursor.c @@ -22,7 +22,7 @@ void my_dynamic_pos_cursor(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nRowCount; + SQLLEN nRowCount; SQLHSTMT hstmt_pos; SQLINTEGER nData = 500; SQLCHAR szData[255]={0}; @@ -85,7 +85,7 @@ rc = SQLRowCount(hstmt_pos, &nRowCount); mystmt(hstmt_pos, rc); - printf(" total rows updated:%d\n",nRowCount); + printf(" total rows updated:%ld\n",nRowCount); assert(nRowCount == 1); /* Now delete the newly updated record */ @@ -104,7 +104,7 @@ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt, rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert(nRowCount == 1); /* Free statement cursor resorces */ @@ -157,7 +157,7 @@ void my_dynamic_pos_cursor1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nRowCount; + SQLLEN nRowCount; SQLHSTMT hstmt_pos; SQLINTEGER i,nData[15]; SQLCHAR data[30],szData[15][10]={0}; @@ -231,7 +231,7 @@ rc = SQLRowCount(hstmt_pos, &nRowCount); mystmt(hstmt_pos, rc); - printf(" total rows updated:%d\n",nRowCount); + printf(" total rows updated:%ld\n",nRowCount); assert(nRowCount == 1); strcpy(szData[1],"updated"); nData[1] = 999; @@ -242,7 +242,7 @@ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt, rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert(nRowCount == 1); /* Free statement cursor resorces */ @@ -311,7 +311,7 @@ void my_setpos_delete_ignore(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nlen; + SQLLEN nlen; SQLCHAR szData[255]={0}; myheader("my_setpos_delete_ignore"); @@ -361,7 +361,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -383,7 +383,7 @@ void my_setpos_update_ignore(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nlen; + SQLLEN nlen; SQLCHAR szData[255]={0}; myheader("my_setpos_update_ignore"); @@ -433,7 +433,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -456,7 +456,7 @@ void my_setpos_update_ignore1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nlen; + SQLLEN nlen; SQLCHAR szData[255]={0}; myheader("my_setpos_update_ignore1"); @@ -506,7 +506,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); @@ -529,10 +529,10 @@ void my_position(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nlen; + SQLLEN nlen; SQLCHAR szData[255]={0}; SQLUINTEGER nData; - SQLINTEGER nrow; + SQLLEN nrow; myheader("my_position"); @@ -588,7 +588,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf(" rows affected:%d\n",nlen); + myprintf(" rows affected:%ld\n",nlen); myassert(nlen == 1); rc = SQLFreeStmt(hstmt,SQL_UNBIND); @@ -636,9 +636,9 @@ void my_position1(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nlen[15]; + SQLLEN nlen[15], nrow[15]; SQLCHAR szData[15][15]={0}; - SQLINTEGER nData[15], nrow[15]; + SQLINTEGER nData[15]; myheader("my_position1"); @@ -744,9 +744,10 @@ void my_zero_irow_update(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nlen[15]; + SQLLEN nlen[15]; SQLCHAR szData[15][15]={0}; - SQLUINTEGER nData[15], nrow[15]; + SQLUINTEGER nData[15]; + SQLULEN nrow[15]; myheader("my_zero_irow_update"); @@ -836,9 +837,10 @@ void my_zero_irow_delete(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nlen[15]; + SQLLEN nlen[15]; SQLCHAR szData[15][15]={0}; - SQLUINTEGER nData[15], nrow[15]; + SQLUINTEGER nData[15]; + SQLULEN nrow[15]; myheader("my_zero_irow_delete"); @@ -924,7 +926,8 @@ void my_dynamic_cursor(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nData = 500, nlen; + SQLINTEGER nData = 500; + SQLLEN nlen; SQLCHAR szData[255]={0}; myheader("my_dynamic_cursor"); @@ -975,7 +978,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new2"); rc = SQLSetPos(hstmt,1,SQL_ADD,SQL_LOCK_NO_CHANGE); mystmt(hstmt,rc); @@ -983,7 +986,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new3"); rc = SQLSetPos(hstmt,0,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -992,7 +995,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); strcpy((char *)szData , "insert-new4"); rc = SQLSetPos(hstmt,10,SQL_ADD,SQL_LOCK_NO_CHANGE); @@ -1001,7 +1004,7 @@ rc = SQLRowCount(hstmt,&nlen); mystmt(hstmt,rc); - myprintf("rows affected:%d\n",nlen); + myprintf("rows affected:%ld\n",nlen); rc = SQLFreeStmt(hstmt,SQL_UNBIND); mystmt(hstmt,rc); --- myodbc-3.51.11.orig/samples/my_param.c +++ myodbc-3.51.11/samples/my_param.c @@ -72,7 +72,8 @@ int my_print_resultset(SQLHSTMT hstmt) { SQLRETURN rc; - SQLUINTEGER nRowCount=0, pcColDef; + SQLUINTEGER nRowCount=0; + SQLULEN pcColDef; SQLCHAR szColName[MAX_NAME_LEN]; SQLCHAR szData[MAX_COLUMNS][MAX_ROW_DATA_LEN]={0}; SQLSMALLINT nIndex,ncol,pfSqlType, pcbScale, pfNullable; @@ -184,7 +185,8 @@ void my_param_update(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id=9, nRowCount; + SQLINTEGER id=9; + SQLLEN nRowCount; SQLCHAR name[]="update"; printf("\nmy_param_update:\n"); @@ -213,7 +215,7 @@ /* check the rows affected by the update statement */ rc= SQLRowCount(hstmt, &nRowCount); mystmt(hstmt,rc); - printf("\n total rows updated:%d\n",nRowCount); + printf("\n total rows updated:%ld\n",nRowCount); assert(nRowCount == 1); /* Free statement param resorces */ @@ -242,7 +244,8 @@ void my_param_delete(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id, nRowCount; + SQLINTEGER id; + SQLLEN nRowCount; printf("\nmy_param_delete:\n"); @@ -262,7 +265,7 @@ /* check the rows affected by the update statement */ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt,rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert( nRowCount == 1); /* execute the DELETE STATEMENT to delete 8th row */ @@ -275,7 +278,7 @@ /* check the rows affected by the update statement */ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt,rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert( nRowCount == 1); /* Free statement param resorces */ --- myodbc-3.51.11.orig/samples/my_basics.c +++ myodbc-3.51.11/samples/my_basics.c @@ -37,7 +37,7 @@ void my_basics(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nRowCount; + SQLLEN nRowCount; printf("\nmy_basics:\n"); @@ -91,7 +91,7 @@ /* get the rows affected by update statement */ rc = SQLRowCount(hstmt,&nRowCount); mystmt(hstmt,rc); - printf(" total rows updated:%d",nRowCount); + printf(" total rows updated:%ld",nRowCount); /* commit the transaction */ rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); @@ -106,7 +106,7 @@ /* get the rows affected by delete statement */ rc = SQLRowCount(hstmt,&nRowCount); mystmt(hstmt,rc); - printf(" total rows deleted: %d\n",nRowCount); + printf(" total rows deleted: %ld\n",nRowCount); /* commit the transaction */ rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); --- myodbc-3.51.11.orig/samples/my_cursor.c +++ myodbc-3.51.11/samples/my_cursor.c @@ -29,6 +29,7 @@ ***************************************************************************/ #include "my_utility.h" /* MyODBC 3.51 sample utility header */ +#include /******************************************************** * prints the statement resultset * @@ -36,7 +37,8 @@ int my_print_resultset(SQLHSTMT hstmt) { SQLRETURN rc; - SQLUINTEGER nRowCount=0, pcColDef; + SQLUINTEGER nRowCount=0; + SQLULEN pcColDef; SQLCHAR szColName[MAX_NAME_LEN]; SQLCHAR szData[MAX_COLUMNS][MAX_ROW_DATA_LEN]={0}; SQLSMALLINT nIndex,ncol,pfSqlType, pcbScale, pfNullable; @@ -172,7 +174,7 @@ void my_positioned_cursor(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER nRowCount; + SQLLEN nRowCount; SQLHSTMT hstmt_pos; printf("\nmy_positioned_cursor:\n"); @@ -207,7 +209,7 @@ rc = SQLRowCount(hstmt_pos, &nRowCount); mystmt(hstmt_pos, rc); - printf(" total rows updated:%d\n",nRowCount); + printf(" total rows updated:%ld\n",nRowCount); assert(nRowCount == 1); /* Free statement cursor resorces */ @@ -239,7 +241,7 @@ rc = SQLRowCount(hstmt_pos, &nRowCount); mystmt(hstmt_pos, rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert(nRowCount == 1); /* free the statement cursor */ @@ -264,7 +266,8 @@ void my_setpos_cursor(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLINTEGER id, nRowCount; + SQLINTEGER id; + SQLLEN nRowCount; SQLCHAR name[50]; printf("\nmy_setpos_cursor:\n"); @@ -294,7 +297,7 @@ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt, rc); - printf(" total rows updated:%d\n",nRowCount); + printf(" total rows updated:%ld\n",nRowCount); assert(nRowCount == 1); /* position to second row and delete it ..*/ @@ -308,7 +311,7 @@ rc = SQLRowCount(hstmt, &nRowCount); mystmt(hstmt, rc); - printf(" total rows deleted:%d\n",nRowCount); + printf(" total rows deleted:%ld\n",nRowCount); assert(nRowCount == 1); /* Free statement cursor resorces */ --- myodbc-3.51.11.orig/samples/my_result.c +++ myodbc-3.51.11/samples/my_result.c @@ -37,7 +37,8 @@ void my_resultset(SQLHDBC hdbc, SQLHSTMT hstmt) { SQLRETURN rc; - SQLUINTEGER nRowCount=0, pcColDef; + SQLUINTEGER nRowCount=0; + SQLULEN pcColDef; SQLCHAR szColName[MAX_NAME_LEN]; SQLCHAR szData[MAX_COLUMNS][MAX_ROW_DATA_LEN]={0}; SQLSMALLINT nIndex,ncol,pfSqlType, pcbScale, pfNullable; --- myodbc-3.51.11.orig/scripts/makerpm +++ myodbc-3.51.11/scripts/makerpm @@ -0,0 +1,101 @@ +#!/bin/sh + +# +# Configure function +# + +function configure_driver +{ + aclocal; autoheader; aclocal; automake; autoconf + ./configure \ + --prefix=${RPM_BUILD_ROOT}%{prefix} \ + --with-mysql-libs=%{MYSQL_LIBS} \ + --with-mysql-includes=%{MYSQL_INCLUDES} \ + ${ODBC_DM_PATH} \ + --enable-thread-safe \ + --enable-shared=yes \ + --enable-static=yes \ + --without-debug \ + --without-docs \ + --without-samples + make dist; +} + +# +# MyODBC 3.51 rpm build script +# + +RELEASE=3.51.09 +SPEC_FILE=myodbc-3.51.09.spec +ARCH=`uname -m | perl -p -e 's/i[0-9]{3}/i386/'` +SOURCE=MyODBC + +# +# This script must run from MyODBC top directory +# + +if [ ! -f "./driver/myodbc3.c" ]; +then + echo "ERROR : You must run this script from the MyODBC top-level directory" + exit 1 +fi + +ODBC_DM_PATH="--with-unixODBC=/usr" +MYSQL_LIBS="@MYSQL_USED_LIB_PATH@" +MYSQL_INCLUDES="@MYSQL_USED_INCLUDE_PATH@" +MyODBC_ROOT=`pwd` + +# +# Find the RPM build area +# + +if [ -d /usr/src/redhat ] +then + RPM_BUILD_AREA=/usr/src/redhat +else if [ -d /usr/src/packages ] +then + RPM_BUILD_AREA=/usr/src/packages +fi +fi + +# +# setup the src tar ball +# + +SRC_FILE=$SOURCE-${RELEASE} +SRC_TAR_ARCH=$SRC_FILE.tar.gz + +if [ ! -f "$SRC_TAR_ARCH" ]; +then + echo "Tarball file '$SRC_TAR_ARCH' does not exist, please make one first" + exit 1 +fi + +if [ ! -f "./scripts/${SPEC_FILE}" ]; +then + echo "Spec file '${SPEC_FILE}' does not exist, please make one first" + exit 1 +fi + +echo "Building RPM for MyODBC version ${RELEASE}" + +cp ./scripts/${SPEC_FILE} ${RPM_BUILD_AREA}/SPECS/ +cp $SRC_TAR_ARCH ${RPM_BUILD_AREA}/SOURCES/ + +cd ${RPM_BUILD_AREA}/SPECS + +# +# Generate RPMs +# + +echo "Running the spec file from '${RPM_BUILD_AREA}/SPECS'" + +rpm -ba ${SPEC_FILE} +if test $? -eq 0 +then + ln -s ${RPM_BUILD_AREA}/RPMS/${ARCH}/$SRC_FILE-1.${ARCH}.rpm $SRC_FILE-1.${ARCH}.rpm + ln -s ${RPM_BUILD_AREA}/SRPMS/$SRC_FILE-1.src.rpm $SRC_FILE-1.src.rpm +else + echo "ERROR: rpm build failed for '$SRC_FILE'" +fi +