Modified:
branches/guffert/
branches/guffert/ChangeLog
branches/guffert/driver/connect.c
branches/guffert/driver/driver.h
branches/guffert/driver/execute.c
branches/guffert/driver/results.c
branches/guffert/driver/utility.c
branches/guffert/setup/MYODBCSetupDataSourceDialog.cpp
branches/guffert/setup/MYODBCSetupDataSourceTab3.cpp
branches/guffert/setup/MYODBCSetupDataSourceTab3c.cpp
branches/guffert/setup/MYODBCSetupDataSourceTab3c.h
branches/guffert/test/my_blob.c
branches/guffert/test/my_catalog.c
branches/guffert/test/my_keys.c
branches/guffert/test/my_prepare.c
branches/guffert/test/my_result.c
branches/guffert/test/my_scroll.c
branches/guffert/test/my_types.c
Log:
Merged revisions 810-857 via svnmerge from
svn+ssh://bk-internal/connectors-svnroot/connector-odbc3/trunk
.......
r810 | jwinstead | 2007-10-05 16:52:42 -0700 (Fri, 05 Oct 2007) | 2 lines
Bump version to 3.51.22
.......
r815 | jwinstead | 2007-10-11 11:00:01 -0700 (Thu, 11 Oct 2007) | 4 lines
Added FLAG_COLUMN_SIZE_S32 to limit the reported column size to a
signed 32-bit integer. This option is automatically enabled for ADO
applications, in order to work around a bug in ADO. (Bug #13776)
.......
r816 | jwinstead | 2007-10-11 11:02:47 -0700 (Thu, 11 Oct 2007) | 2 lines
Fix all warnings in my_result.c, and fix one test case incorrectly set as TODO.
.......
r817 | jwinstead | 2007-10-11 12:15:57 -0700 (Thu, 11 Oct 2007) | 3 lines
Clean up warnings in my_prepare, backport using_dm from 5.1 tree so we can
skip test in my_info that fails (correctly) with unixODBC.
.......
r818 | jwinstead | 2007-10-11 16:24:38 -0700 (Thu, 11 Oct 2007) | 2 lines
Clean up warnings in my_blob.c
.......
r838 | jwinstead | 2007-11-08 10:48:41 -0800 (Thu, 08 Nov 2007) | 3 lines
Remove workaround for bug #10491 in the server, which has now been
fixed in MySQL Server 5.0.48 and 5.1.21.
.......
r839 | jwinstead | 2007-11-08 16:08:57 -0800 (Thu, 08 Nov 2007) | 2 lines
Fix warnings, skip stored proc test on pre-5.0 servers
.......
r840 | jwinstead | 2007-11-08 16:10:25 -0800 (Thu, 08 Nov 2007) | 2 lines
Remove dead code from test
.......
r841 | jwinstead | 2007-11-08 16:11:13 -0800 (Thu, 08 Nov 2007) | 2 lines
Remove unused variable
.......
r842 | jwinstead | 2007-11-08 16:14:20 -0800 (Thu, 08 Nov 2007) | 2 lines
Fix warnings about unused variables and sign mismatches
.......
r843 | jwinstead | 2007-11-08 16:15:41 -0800 (Thu, 08 Nov 2007) | 2 lines
Add cast for converting unsigned long to SQLSMALLINT
.......
r844 | jwinstead | 2007-11-08 16:16:31 -0800 (Thu, 08 Nov 2007) | 2 lines
Add cast of SQLINTEGER to SQLSMALLINT
.......
r848 | jwinstead | 2007-11-09 14:31:38 -0800 (Fri, 09 Nov 2007) | 2 lines
Fix type of variable used in both SQLGetConnectAttr() and SQLColumns()
.......
r852 | jwinstead | 2007-11-12 11:00:26 -0800 (Mon, 12 Nov 2007) | 3 lines
The wrong result was returned by SQLGetData() when the data was an
empty string and a zero-sized buffer was specified. (Bug #30958)
.......
r854 | jwinstead | 2007-11-13 08:59:40 -0800 (Tue, 13 Nov 2007) | 3 lines
Unsigned integer values greater than the maximum value of a signed
integer were handled incorrectly. (Bug #32171)
.......
r855 | jwinstead | 2007-11-13 09:01:55 -0800 (Tue, 13 Nov 2007) | 3 lines
The non-portable "English" locale was used for handling of decimal
and floating-point values instead of "C". (Bug #32294)
.......
r856 | jwinstead | 2007-11-13 09:02:25 -0800 (Tue, 13 Nov 2007) | 2 lines
SQLGetInfo() reported that UNION was not supported. (Bug #32253)
.......
r857 | jwinstead | 2007-11-13 17:31:23 -0800 (Tue, 13 Nov 2007) | 2 lines
Get ready for release
.......
Property changes on: branches/guffert
___________________________________________________________________
Name: svnmerge-integrated
- /trunk:1-808
+ /trunk:1-808,810-857
Modified: branches/guffert/ChangeLog
===================================================================
--- branches/guffert/ChangeLog 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/ChangeLog 2007-11-14 19:01:01 UTC (rev 861)
@@ -40,7 +40,7 @@
* Fixed handling of NULL pointers passed to SQLGetInfo.
* Parse Password - Unable to Connect. (Bug #16178)
- Includes changes from Connector/ODBC 3.51.21.
+ Includes changes from Connector/ODBC 3.51.21 and 3.51.22.
----
@@ -53,6 +53,26 @@
----
+3.51.22 (13-Nov-2007)
+
+ Functionality added or changed:
+ * Removed workaround for bug #10491 in the server, which has now been
+ fixed in MySQL Server 5.0.48 and 5.1.21.
+ * Added FLAG_COLUMN_SIZE_S32 to limit the reported column size to a
+ signed 32-bit integer. This option is automatically enabled for ADO
+ applications, in order to work around a bug in ADO. (Bug #13776)
+
+ Bugs fixed:
+ * SQLGetInfo() reported that UNION was not supported. (Bug #32253)
+ * The non-portable "English" locale was used for handling of decimal
+ and floating-point values instead of "C". (Bug #32294)
+ * Unsigned integer values greater than the maximum value of a signed
+ integer were handled incorrectly. (Bug #32171)
+ * The wrong result was returned by SQLGetData() when the data was an
+ empty string and a zero-sized buffer was specified. (Bug #30958)
+
+----
+
3.51.21 (5-Oct-2007)
Bugs fixed:
Modified: branches/guffert/driver/connect.c
===================================================================
--- branches/guffert/driver/connect.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/driver/connect.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -155,6 +155,15 @@
options= sqlwchartoul(ds->option);
+#ifdef WIN32
+ /*
+ Detect if we are running with ADO present, and force on the
+ FLAG_COLUMN_SIZE_S32 option if we are.
+ */
+ if (GetModuleHandle("msado15.dll") != NULL)
+ options|= FLAG_COLUMN_SIZE_S32;
+#endif
+
mysql_init(mysql);
flags= get_client_flags(options);
Modified: branches/guffert/driver/driver.h
===================================================================
--- branches/guffert/driver/driver.h 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/driver/driver.h 2007-11-14 19:01:01 UTC (rev 861)
@@ -144,6 +144,7 @@
#define FLAG_ZERO_DATE_TO_MIN (1 << 24) /* Convert XXXX-00-00 date to ODBC min date
on results */
#define FLAG_MIN_DATE_TO_ZERO (1 << 25) /* Convert ODBC min date to 0000-00-00 on
query */
#define FLAG_MULTI_STATEMENTS (1 << 26) /* Allow multiple statements in a query */
+#define FLAG_COLUMN_SIZE_S32 (1 << 27) /* Limit column size to a signed 32-bit
value (automatically set for ADO) */
/* We don't make any assumption about what the default may be. */
#ifndef DEFAULT_TXN_ISOLATION
Modified: branches/guffert/driver/execute.c
===================================================================
--- branches/guffert/driver/execute.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/driver/execute.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -188,7 +188,7 @@
net= &stmt->dbc->mysql.net;
to= (char*) net->buff;
if ( !(stmt->dbc->flag & FLAG_NO_LOCALE) )
- setlocale(LC_NUMERIC,"English"); /* force use of '.' as decimal point */
+ setlocale(LC_NUMERIC, "C"); /* force use of '.' as decimal point */
for ( i= 0; i < stmt->param_count; i++ )
{
DESCREC *aprec= desc_get_rec(stmt->apd, i, FALSE);
@@ -292,7 +292,7 @@
*/
else if (*(aprec->octet_length_ptr) == SQL_COLUMN_IGNORE ||
(*(aprec->octet_length_ptr) == 0 &&
- aprec->concise_type == SQL_C_DEFAULT &&
+ aprec->concise_type == 0 &&
aprec->par.value == NULL))
{
if (is_minimum_version(dbc->mysql.server_version, "4.0.3", 5))
Modified: branches/guffert/driver/results.c
===================================================================
--- branches/guffert/driver/results.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/driver/results.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -207,7 +207,7 @@
case SQL_C_ULONG:
if (rgbValue)
- *((SQLUINTEGER *)rgbValue)= (SQLUINTEGER)atol(value);
+ *((SQLUINTEGER *)rgbValue)= (SQLUINTEGER)strtoul(value, NULL, 10);
*pcbValue= sizeof(SQLUINTEGER);
break;
@@ -527,7 +527,12 @@
if (type)
*type= get_sql_data_type(stmt, field, NULL);
if (size)
- *size= get_column_size(stmt, field, FALSE);
+ {
+ SQLULEN csize= get_column_size(stmt, field, FALSE);
+ if ((stmt->dbc->flag & FLAG_COLUMN_SIZE_S32) && csize >
INT_MAX32)
+ csize= INT_MAX32;
+ *size= csize;
+ }
if (scale)
*scale= (SQLSMALLINT)max(0, get_decimal_digits(stmt, field));
if (nullable)
@@ -973,7 +978,7 @@
}
if ( !(stmt->dbc->flag & FLAG_NO_LOCALE) )
- setlocale(LC_NUMERIC,"English");
+ setlocale(LC_NUMERIC, "C");
result= sql_get_data( stmt,
(SQLSMALLINT) (fCType == SQL_C_DEFAULT ?
stmt->odbc_types[icol] : fCType),
stmt->result->fields+icol,
@@ -1245,7 +1250,7 @@
}
if ( !(stmt->dbc->flag & FLAG_NO_LOCALE) )
- setlocale(LC_NUMERIC,"English");
+ setlocale(LC_NUMERIC, "C");
res= SQL_SUCCESS;
for ( i= 0 ; i < rows_to_fetch ; i++ )
{
Modified: branches/guffert/driver/utility.c
===================================================================
--- branches/guffert/driver/utility.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/driver/utility.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -312,6 +312,13 @@
if (!avail_bytes)
avail_bytes= &bytes;
+ if (!result_bytes && !stmt->getdata.source)
+ {
+ *avail_bytes= src_bytes;
+ set_stmt_error(stmt, "01004", NULL, 0);
+ return SQL_SUCCESS_WITH_INFO;
+ }
+
if (result_bytes)
result_bytes--;
@@ -477,20 +484,25 @@
if (result)
*result= 0;
- if (stmt->getdata.dst_bytes == (ulong)~0L)
+ if (result_bytes && stmt->getdata.dst_bytes == (ulong)~0L)
{
stmt->getdata.dst_bytes= used_bytes;
stmt->getdata.dst_offset= 0;
}
if (avail_bytes)
- *avail_bytes= stmt->getdata.dst_bytes - stmt->getdata.dst_offset;
+ {
+ if (stmt->getdata.dst_bytes != (ulong)~0L)
+ *avail_bytes= stmt->getdata.dst_bytes - stmt->getdata.dst_offset;
+ else
+ *avail_bytes= used_bytes;
+ }
stmt->getdata.dst_offset+= min((ulong)(result_bytes ? result_bytes - 1 : 0),
used_bytes);
/* Did we truncate the data? */
- if (stmt->getdata.dst_bytes > stmt->getdata.dst_offset)
+ if (!result_bytes || stmt->getdata.dst_bytes > stmt->getdata.dst_offset)
{
set_stmt_error(stmt, "01004", NULL, 0);
rc= SQL_SUCCESS_WITH_INFO;
@@ -689,20 +701,25 @@
if (result)
*result= 0;
- if (stmt->getdata.dst_bytes == (ulong)~0L)
+ if (result_len && stmt->getdata.dst_bytes == (ulong)~0L)
{
stmt->getdata.dst_bytes= used_chars * sizeof(SQLWCHAR);
stmt->getdata.dst_offset= 0;
}
if (avail_bytes)
- *avail_bytes= stmt->getdata.dst_bytes - stmt->getdata.dst_offset;
+ {
+ if (result_len)
+ *avail_bytes= stmt->getdata.dst_bytes - stmt->getdata.dst_offset;
+ else
+ *avail_bytes= used_chars * sizeof(SQLWCHAR);
+ }
stmt->getdata.dst_offset+= min((ulong)(result_len ? result_len - 1 : 0),
used_chars) * sizeof(SQLWCHAR);
/* Did we truncate the data? */
- if (stmt->getdata.dst_bytes > stmt->getdata.dst_offset)
+ if (!result_len || stmt->getdata.dst_bytes > stmt->getdata.dst_offset)
{
set_stmt_error(stmt, "01004", NULL, 0);
rc= SQL_SUCCESS_WITH_INFO;
@@ -924,19 +941,10 @@
*/
case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
-#ifdef SERVER_BUG_10491_FIXED
- /**
- @todo Re-enable this when Bug #10491 is fixed in the server.
- */
if (buff)
(void)strmov(buff, field_is_binary ? "varbinary" : "varchar");
return field_is_binary ? SQL_VARBINARY : SQL_VARCHAR;
-#else
- if (buff)
- (void)strmov(buff, "varchar");
- return SQL_VARCHAR;
-#endif
case MYSQL_TYPE_TINY_BLOB:
if (buff)
Modified: branches/guffert/setup/MYODBCSetupDataSourceDialog.cpp
===================================================================
--- branches/guffert/setup/MYODBCSetupDataSourceDialog.cpp 2007-11-14 09:48:01 UTC (rev
860)
+++ branches/guffert/setup/MYODBCSetupDataSourceDialog.cpp 2007-11-14 19:01:01 UTC (rev
861)
@@ -425,6 +425,7 @@
ptab3->ptab3a->pcheckboxEnableReconnect->setChecked( nOptions & (1
<< 22) ? TRUE : FALSE );
ptab3->ptab3a->pcheckboxAutoIncrementIsNull->setChecked( nOptions &
(1 << 23) ? TRUE : FALSE );
ptab3->ptab3c->pcheckboxMultiStatements->setChecked( nOptions & (1
<< 26) ? TRUE : FALSE );
+ ptab3->ptab3c->pcheckboxCapColumnSize->setChecked( nOptions & (1
<< 27) ? TRUE : FALSE );
}
connect( ppushbuttonTest, SIGNAL(clicked()), SLOT(slotTest()) );
@@ -475,6 +476,7 @@
connect( ptab3->ptab3c->pcheckboxDisableTransactions,
SIGNAL(signalAssistText(const QString&)), ptextbrowserAssist, SLOT(setHtml(const
QString&)) );
connect( ptab3->ptab3c->pcheckboxForceUseOfForwardOnlyCursors,
SIGNAL(signalAssistText(const QString&)), ptextbrowserAssist, SLOT(setHtml(const
QString&)) );
connect( ptab3->ptab3c->pcheckboxMultiStatements, SIGNAL(signalAssistText(const
QString&)), ptextbrowserAssist, SLOT(setHtml(const QString&)) );
+ connect( ptab3->ptab3c->pcheckboxCapColumnSize, SIGNAL(signalAssistText(const
QString&)), ptextbrowserAssist, SLOT(setHtml(const QString&)) );
connect( ptab3->ptab3d->pcheckboxSaveQueries, SIGNAL(signalAssistText(const
QString&)), ptextbrowserAssist, SLOT(setHtml(const QString&)) );
doApplyMode();
Modified: branches/guffert/setup/MYODBCSetupDataSourceTab3.cpp
===================================================================
--- branches/guffert/setup/MYODBCSetupDataSourceTab3.cpp 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/setup/MYODBCSetupDataSourceTab3.cpp 2007-11-14 19:01:01 UTC (rev 861)
@@ -96,6 +96,8 @@
nFlags |= 1 << 23;
if ( ptab3c->pcheckboxMultiStatements->isChecked() )
nFlags |= 1 << 26;
+ if ( ptab3c->pcheckboxCapColumnSize->isChecked() )
+ nFlags |= 1 << 27;
return nFlags;
}
Modified: branches/guffert/setup/MYODBCSetupDataSourceTab3c.cpp
===================================================================
--- branches/guffert/setup/MYODBCSetupDataSourceTab3c.cpp 2007-11-14 09:48:01 UTC (rev
860)
+++ branches/guffert/setup/MYODBCSetupDataSourceTab3c.cpp 2007-11-14 19:01:01 UTC (rev
861)
@@ -31,6 +31,7 @@
QString stringDisableTransactions( tr("Disable transactions.") );
QString stringForceUseOfForwardOnlyCursors( tr("Force the use of Forward-only
cursor type. In case of applications setting the default static/dynamic cursor type, and
one wants driver to use non-cache result sets, then this option will ensure the
forward-only cursor behavior.") );
QString stringMultiStatements( tr("Allow multiple statements in a single
query.") );
+ QString stringCapColumnSize( tr("Limit reported column size to signed 32-bit
integer (possible workaround for some applications, automatically enabled for
applications using ADO)") );
#if QT_VERSION >= 0x040000
QVBoxLayout *playoutFields = new QVBoxLayout;
@@ -115,6 +116,15 @@
QToolTip::add( pcheckboxMultiStatements, stringMultiStatements );
#endif
+ pcheckboxCapColumnSize = new MYODBCSetupCheckBox( tr("Limit column size to signed
32-bit range"), this );
+ pcheckboxCapColumnSize->setAssistText( stringCapColumnSize );
+ playoutFields->addWidget( pcheckboxCapColumnSize );
+#if QT_VERSION >= 0x040000
+ pcheckboxCapColumnSize->setToolTip( stringCapColumnSize );
+#else
+ QToolTip::add( pcheckboxCapColumnSize, stringCapColumnSize );
+#endif
+
playoutFields->addStretch( 10 );
}
Modified: branches/guffert/setup/MYODBCSetupDataSourceTab3c.h
===================================================================
--- branches/guffert/setup/MYODBCSetupDataSourceTab3c.h 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/setup/MYODBCSetupDataSourceTab3c.h 2007-11-14 19:01:01 UTC (rev 861)
@@ -49,6 +49,7 @@
MYODBCSetupCheckBox *pcheckboxDisableTransactions;
MYODBCSetupCheckBox *pcheckboxForceUseOfForwardOnlyCursors;
MYODBCSetupCheckBox *pcheckboxMultiStatements;
+ MYODBCSetupCheckBox *pcheckboxCapColumnSize;
};
#endif
Modified: branches/guffert/test/my_blob.c
===================================================================
--- branches/guffert/test/my_blob.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/test/my_blob.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -28,7 +28,7 @@
SQLUINTEGER j= 0;
SQLINTEGER l;
SQLLEN cbValue;
- char *blobbuf;
+ SQLCHAR *blobbuf;
SQLUINTEGER blobbuf_size = 1024 * 1 * 6L;
SQLUINTEGER blob_read;
SQLPOINTER token;
@@ -39,25 +39,18 @@
rc = SQLSetConnectOption(hdbc, SQL_AUTOCOMMIT, 0L);
mycon(hdbc,rc);
- rc = SQLExecDirect(hstmt,
- "DROP TABLE TBLOB",
- SQL_NTS);
- rc = SQLTransact(NULL, hdbc, SQL_COMMIT);
+ ok_sql(hstmt, "DROP TABLE IF EXISTS TBLOB");
+ ok_sql(hstmt, "CREATE TABLE TBLOB (I INTEGER NOT NULL PRIMARY KEY,"
+ "B LONGBLOB)");
- rc = SQLExecDirect(hstmt,
- "CREATE TABLE TBLOB (I INTEGER NOT NULL PRIMARY KEY, B LONGBLOB)",
- SQL_NTS);
- mystmt(hstmt,rc);
- rc = SQLTransact(NULL, hdbc, SQL_COMMIT);
- mycon(hdbc,rc);
-
cbValue = 0;
- rc = SQLPrepare(hstmt, "INSERT INTO TBLOB VALUES (1, ?)", SQL_NTS);
- mystmt(hstmt,rc);
- rc = SQLBindParameter(hstmt,SQL_PARAM_INPUT, 1, SQL_C_BINARY, SQL_LONGVARBINARY,
- blob_size, 0, NULL, 0, &cbValue);
- mystmt(hstmt,rc);
- cbValue = SQL_DATA_AT_EXEC;
+ ok_stmt(hstmt, SQLPrepare(hstmt,
+ (SQLCHAR *)"INSERT INTO TBLOB VALUES (1, ?)",
+ SQL_NTS));
+ ok_stmt(hstmt, SQLBindParameter(hstmt, SQL_PARAM_INPUT, 1, SQL_C_BINARY,
+ SQL_LONGVARBINARY, blob_size, 0, NULL,
+ 0, &cbValue));
+ cbValue = SQL_DATA_AT_EXEC;
blobbuf = (SQLCHAR *)malloc(blobbuf_size);
memset(blobbuf, 'A', blobbuf_size);
@@ -87,9 +80,9 @@
finish = clock();
duration = (finish-start)/CLOCKS_PER_SEC;
- printMessage("\n j: %d\n", j);
+ printMessage("j: %d", j);
myassert(j == blob_size);
- printMessage("Wrote %ld bytes in %3.3lf seconds (%lg bytes/s)\n",
+ printMessage("Wrote %ld bytes in %3.3lf seconds (%lg bytes/s)",
j, duration, duration == 0.0 ? 9.99e99 : j / duration);
rc = SQLTransact(NULL, hdbc, SQL_COMMIT);
@@ -100,8 +93,9 @@
memset(blobbuf, ~0, 100);
- rc = SQLPrepare(hstmt, "SELECT I, B FROM TBLOB WHERE I = 1", SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt, SQLPrepare(hstmt,
+ (SQLCHAR *)"SELECT I, B FROM TBLOB WHERE I = 1",
+ SQL_NTS));
start = clock();
@@ -123,8 +117,9 @@
myassert(blob_read == blob_size);
finish = clock();
duration = (finish-start)/CLOCKS_PER_SEC;
- printMessage("Read %ld bytes in %3.3lf seconds (%lg bytes/s)\n",
- blob_read, duration, duration == 0.0 ? 9.99e99 : blob_read / duration);
+ printMessage("Read %ld bytes in %3.3lf seconds (%lg bytes/s)",
+ blob_read, duration, duration == 0.0 ? 9.99e99 :
+ blob_read / duration);
rc = SQLFreeStmt(hstmt, SQL_CLOSE);
mystmt(hstmt,rc);
@@ -143,18 +138,10 @@
SQLCHAR* blobbuf;
size_t i;
- rc = SQLExecDirect(hstmt,
- "DROP TABLE TBLOB",
- SQL_NTS);
- rc = SQLTransact(NULL, hdbc, SQL_COMMIT);
+ ok_sql(hstmt, "DROP TABLE IF EXISTS TBLOB");
+ ok_sql(hstmt, "CREATE TABLE TBLOB (I INTEGER NOT NULL PRIMARY KEY,"
+ "B LONG VARCHAR NOT NULL)");
- rc = SQLExecDirect(hstmt,
- "CREATE TABLE TBLOB (I INTEGER NOT NULL PRIMARY KEY, B LONG
VARCHAR NOT NULL)",
- SQL_NTS);
- mystmt(hstmt,rc);
- rc = SQLTransact(NULL, hdbc, SQL_COMMIT);
- mycon(hdbc,rc);
-
cbValue = 3510L;
blobbuf = (SQLCHAR *)malloc((size_t)cbValue + 1);
@@ -168,14 +155,14 @@
mystmt(hstmt,rc);
rc = SQLBindParameter(hstmt,SQL_PARAM_INPUT, 2, SQL_C_CHAR, SQL_LONGVARCHAR, 0, 0,
blobbuf,cbValue, NULL);
mystmt(hstmt,rc);
- rc = SQLExecDirect(hstmt, "INSERT INTO TBLOB VALUES (1,?)", SQL_NTS);
+ ok_sql(hstmt, "INSERT INTO TBLOB VALUES (1,?)");
mystmt(hstmt,rc);
rc = SQLTransact(NULL, hdbc, SQL_COMMIT);
mycon(hdbc,rc);
memset(blobbuf, 1, (size_t)cbValue);
rc = SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
mystmt(hstmt,rc);
- rc = SQLExecDirect(hstmt, "SELECT B FROM TBLOB WHERE I = 1", SQL_NTS);
+ ok_sql(hstmt, "SELECT B FROM TBLOB WHERE I = 1");
mystmt(hstmt,rc);
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
@@ -207,12 +194,12 @@
SQLCHAR data[255];
SQLPOINTER token;
- 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);
+ ok_sql(hstmt, "DROP TABLE IF EXISTS t_putdata");
+ ok_sql(hstmt, "CREATE TABLE t_putdata (c1 INT, c2 LONG VARCHAR)");
- rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt, SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_putdata values(?,?)",
+ SQL_NTS));
rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
SQL_INTEGER,0,0,&c1,0,NULL);
@@ -230,12 +217,12 @@
rc = SQLParamData(hstmt, &token);
myassert(rc == SQL_NEED_DATA);
- strcpy(data,"mysql ab");
+ strcpy((char *)data,"mysql ab");
rc = SQLPutData(hstmt,data,6);
mystmt(hstmt,rc);
- strcpy(data,"- the open source database company");
- rc = SQLPutData(hstmt,data,strlen(data));
+ strcpy((char *)data,"- the open source database company");
+ rc = SQLPutData(hstmt,data,strlen((char *)data));
mystmt(hstmt,rc);
rc = SQLParamData(hstmt, &token);
@@ -244,7 +231,7 @@
SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
SQLFreeStmt(hstmt, SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS);
+ ok_sql(hstmt, "select c2 from t_putdata where c1= 10");
mystmt(hstmt,rc);
rc = SQLFetch(hstmt);
@@ -253,8 +240,8 @@
pcbLength= 0;
rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"mysql - the open source database company")==0);
+ printMessage("data: %s(%ld)", data, pcbLength);
+ is_str(data, "mysql - the open source database company", 40);
myassert(pcbLength == 40);
SQLFreeStmt(hstmt, SQL_UNBIND);
@@ -275,16 +262,15 @@
SQLCHAR data[255];
SQLPOINTER token;
- 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);
+ ok_sql(hstmt, "DROP TABLE IF EXISTS t_putdata");
+ ok_sql(hstmt, "CREATE TABLE t_putdata (c1 INT, c2 LONG VARCHAR)");
+ ok_sql(hstmt, "INSERT INTO t_putdata VALUES (10,'venu')");
- rc = SQLExecDirect(hstmt,"insert into t_putdata values(10,'venu')",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"UPDATE t_putdata SET c2= ? WHERE c1 = ?",
+ SQL_NTS));
- 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);
@@ -301,12 +287,12 @@
rc = SQLParamData(hstmt, &token);
myassert(rc == SQL_NEED_DATA);
- strcpy(data,"mysql ab");
+ strcpy((char *)data,"mysql ab");
rc = SQLPutData(hstmt,data,6);
mystmt(hstmt,rc);
- strcpy(data,"- the open source database company");
- rc = SQLPutData(hstmt,data,strlen(data));
+ strcpy((char *)data,"- the open source database company");
+ rc = SQLPutData(hstmt,data,strlen((char *)data));
mystmt(hstmt,rc);
rc = SQLParamData(hstmt, &token);
@@ -315,7 +301,7 @@
SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
SQLFreeStmt(hstmt, SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS);
+ ok_sql(hstmt, "select c2 from t_putdata where c1= 10");
mystmt(hstmt,rc);
rc = SQLFetch(hstmt);
@@ -324,8 +310,8 @@
pcbLength= 0;
rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"mysql - the open source database company")==0);
+ printMessage("data: %s(%ld)", data, pcbLength);
+ is_str(data,"mysql - the open source database company", 40);
myassert(pcbLength == 40);
SQLFreeStmt(hstmt, SQL_UNBIND);
@@ -346,12 +332,13 @@
SQLCHAR data[255];
SQLPOINTER token;
- 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);
+ ok_sql(hstmt, "DROP TABLE IF EXISTS t_putdata");
+ ok_sql(hstmt, "CREATE TABLE t_putdata (c1 INT, c2 LONG VARCHAR,"
+ "c3 LONG VARCHAR)");
- rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?,?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt, SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_putdata values(?,?,?)",
+ SQL_NTS));
rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
SQL_INTEGER,0,0,&c1,0,NULL);
@@ -373,18 +360,18 @@
rc = SQLParamData(hstmt, &token);
myassert(rc == SQL_NEED_DATA);
- strcpy(data,"mysql ab");
+ strcpy((char *)data,"mysql ab");
rc = SQLPutData(hstmt,data,6);
mystmt(hstmt,rc);
- strcpy(data,"- the open source database company");
- rc = SQLPutData(hstmt,data,strlen(data));
+ strcpy((char *)data,"- the open source database company");
+ rc = SQLPutData(hstmt,data,strlen((char *)data));
mystmt(hstmt,rc);
rc = SQLParamData(hstmt, &token);
myassert(rc == SQL_NEED_DATA);
- strcpy(data,"MySQL AB");
+ strcpy((char *)data,"MySQL AB");
rc = SQLPutData(hstmt,data, 8);
mystmt(hstmt,rc);
@@ -394,7 +381,7 @@
SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
SQLFreeStmt(hstmt, SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"select c2,c3 from t_putdata where c1= 10",SQL_NTS);
+ ok_sql(hstmt, "select c2,c3 from t_putdata where c1= 10");
mystmt(hstmt,rc);
rc = SQLFetch(hstmt);
@@ -403,15 +390,15 @@
pcbLength= 0;
rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"mysql - the open source database company")==0);
+ printMessage("data: %s(%ld)", data, pcbLength);
+ is_str(data, "mysql - the open source database company", 40);
myassert(pcbLength == 40);
pcbLength= 0;
rc = SQLGetData(hstmt, 2, SQL_C_CHAR, data, sizeof(data), &pcbLength);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"MySQL AB")==0);
+ printMessage("data: %s(%ld)", data, pcbLength);
+ is_str(data, "MySQL AB", 8);
myassert(pcbLength == 8);
SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
@@ -431,10 +418,10 @@
SQLINTEGER id, id1, id2, id3;
SQLLEN resId, resUTimeSec, resUTimeMSec, resDataLen, resData;
- char buffer[]= "MySQL - The worlds's most popular open source database";
+ SQLCHAR buffer[]= "MySQL - The worlds's most popular open source database";
const int MAX_PART_SIZE = 5;
- char *pdata= 0, data[50];
+ SQLCHAR data[50];
int commonLen= 20;
ok_sql(hstmt, "DROP TABLE IF EXISTS t_putdata3");
@@ -542,12 +529,12 @@
SQLLEN length;
const SQLINTEGER max_blob_size=1024*100;
- SQLExecDirect(hstmt,"drop table t_blob",SQL_NTS);
- rc = SQLExecDirect(hstmt,"create table t_blob(blb long varbinary)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "DROP TABLE IF EXISTS t_blob");
+ ok_sql(hstmt, "CREATE TABLE t_blob (blb LONG VARBINARY)");
- rc = SQLPrepare(hstmt,"insert into t_blob values(?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"INSERT INTO t_blob VALUES (?)",SQL_NTS));
if (!(data = (SQLCHAR *)calloc(max_blob_size,sizeof(SQLCHAR))))
{
@@ -562,10 +549,8 @@
memset(data,'X',max_blob_size);
- fprintf(stdout,"inserting %d rows\n\n", max_blob_size / 1024);
for (length=1024; length <= max_blob_size; length+= 1024)
{
- fprintf(stdout,"\r %d", length/1024);
rc = SQLExecute(hstmt);
mystmt(hstmt,rc);
}
@@ -573,8 +558,7 @@
SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
SQLFreeStmt(hstmt,SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"SELECT length(blb) FROM t_blob",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "SELECT length(blb) FROM t_blob");
rc = SQLBindCol(hstmt,1,SQL_C_LONG,&val,0,NULL);
mystmt(hstmt,rc);
@@ -584,7 +568,7 @@
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
- fprintf(stdout,"row %d length: %d\n", i, val);
+ printMessage("row %d length: %d", i, val);
myassert(val == i * 1024);
}
rc = SQLFetch(hstmt);
@@ -609,15 +593,14 @@
SQLLEN row_count, length;
SQLCHAR data[TEST_ODBC_TEXT_LEN+1];
- 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);
+ ok_sql(hstmt, "DROP TABLE IF EXISTS t_text_fetch");
+ ok_sql(hstmt, "CREATE TABLE t_text_fetch(t1 tinytext,"
+ "t2 text, t3 mediumtext, t4 longtext)");
- rc = SQLPrepare(hstmt,"insert into t_text_fetch values(?,?,?,?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_text_fetch values(?,?,?,?)",
+ SQL_NTS));
rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
0,0,(char *)data, TEST_ODBC_TEXT_LEN/3, NULL);
@@ -648,45 +631,43 @@
SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
SQLFreeStmt(hstmt, SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"SELECT * FROM t_text_fetch",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "SELECT * FROM t_text_fetch");
row_count= 0;
rc = SQLFetch(hstmt);
while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
{
- fprintf(stdout,"row '%d' (lengths: \n", row_count);
+ printf("# row '%ld' (lengths:", row_count);
rc = SQLGetData(hstmt,1,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
mystmt(hstmt,rc);
- fprintf(stdout,"%d", length);
+ printf("%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);
+ printf(",%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);
+ printf(",%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);
+ printf(",%ld)\n", length);
myassert(length == TEST_ODBC_TEXT_LEN-1);
row_count++;
rc = SQLFetch(hstmt);
}
- fprintf(stdout,"total rows: %d\n", row_count);
+ printMessage("total rows: %ld", 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);
+ ok_sql(hstmt, "DROP TABLE t_text_fetch");
return OK;
}
@@ -761,7 +742,7 @@
ok_sql(hstmt, "create table t_bug10562 ( id int not null primary key, mb longblob )");
ok_sql(hstmt, "insert into t_bug10562 (mb) values ('zzzzzzzzzz')");
- ok_stmt(hstmt, SQLExecDirect(hstmt, "select id, mb from t_bug10562", SQL_NTS));
+ ok_sql(hstmt, "select id, mb from t_bug10562");
ok_stmt(hstmt, SQLFetch(hstmt));
ok_stmt(hstmt, SQLBindCol(hstmt, 2, SQL_C_BINARY, blob, bsize, &bsize));
ok_stmt(hstmt, SQLSetPos(hstmt, 1, SQL_UPDATE, SQL_LOCK_NO_CHANGE));
Modified: branches/guffert/test/my_catalog.c
===================================================================
--- branches/guffert/test/my_catalog.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/test/my_catalog.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -301,10 +301,11 @@
return OK;
}
+
DECLARE_TEST(t_sqlprocedures)
{
- SQLRETURN rc;
- /** @todo check server version */
+ if (!mysql_min_version(hdbc, "5.0", 3))
+ skip("server does not support stored procedures");
/* avoid errors in case binary log is activated */
ok_sql(hstmt, "SET GLOBAL log_bin_trust_function_creators = 1");
@@ -493,7 +494,7 @@
printMessage("checking column `%s`", (char *)ColumnName);
ok_stmt(hstmt, SQLColumns(hstmt,
- DatabaseName, cbDatabaseName,
+ DatabaseName, (SQLSMALLINT)cbDatabaseName,
(SQLCHAR *)"", SQL_NTS,
(SQLCHAR *)"t_columns", SQL_NTS,
ColumnName, SQL_NTS));
Modified: branches/guffert/test/my_keys.c
===================================================================
--- branches/guffert/test/my_keys.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/test/my_keys.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -27,7 +27,6 @@
DECLARE_TEST(my_no_keys)
{
SQLRETURN rc;
- SQLROWCOUNT rowcount;
SQLINTEGER nData;
ok_sql(hstmt, "DROP TABLE IF EXISTS my_no_keys");
@@ -73,17 +72,6 @@
nData = 999;
- /* TO BE FIXED LATER
-
- rc = SQLSetPos(hstmt,2,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLRowCount(hstmt,&rowcount);
- mystmt(hstmt,rc);
-
- printMessage(" rows affected:%d\n",rowcount);
- myassert(rowcount == 1); */
-
rc = SQLFreeStmt(hstmt,SQL_UNBIND);
mystmt(hstmt,rc);
@@ -99,18 +87,12 @@
mystmt(hstmt,rc);
rc = SQLExecDirect(hstmt,"select * from my_no_keys",SQL_NTS);
- mystmt(hstmt,rc);
+ mystmt(hstmt,rc);
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
myassert(3000 == my_fetch_int(hstmt,4));
- /* TO BE FIXED LATER (SEE ABOVE)
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
- myassert(999 == my_fetch_int(hstmt,4)); */
-
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
myassert(3000 == my_fetch_int(hstmt,4));
@@ -119,11 +101,6 @@
mystmt(hstmt,rc);
myassert(3000 == my_fetch_int(hstmt,4));
- /* TO BE FIXED LATER (SEE ABOVE)
-
- rc = SQLFetch(hstmt);
- mystmt_err(hstmt,rc==SQL_NO_DATA_FOUND,rc); */
-
SQLFreeStmt(hstmt,SQL_UNBIND);
SQLFreeStmt(hstmt,SQL_CLOSE);
Modified: branches/guffert/test/my_prepare.c
===================================================================
--- branches/guffert/test/my_prepare.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/test/my_prepare.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -33,11 +33,12 @@
ok_sql(hstmt, "DROP TABLE IF EXISTS t_prep_basic");
- rc = SQLExecDirect(hstmt,"create table t_prep_basic(a int, b char(4))",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "create table t_prep_basic(a int, b char(4))");
- rc = SQLPrepare(hstmt, "insert into t_prep_basic values(?,'venu')",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_prep_basic values(?,'venu')",
+ SQL_NTS));
rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0,
&id, 0, NULL);
mystmt(hstmt,rc);
@@ -55,11 +56,10 @@
SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
SQLFreeStmt(hstmt,SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"select * from t_prep_basic",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "select * from t_prep_basic");
rc = SQLBindCol(hstmt, 1, SQL_C_LONG, &id, 0, &length1);
- mystmt(hstmt,rc);
+ mystmt(hstmt,rc);
rc = SQLBindCol(hstmt, 2, SQL_C_CHAR, name, 5, &length2);
mystmt(hstmt,rc);
@@ -90,19 +90,20 @@
/* to test buffer length */
DECLARE_TEST(t_prep_buffer_length)
{
- SQLLEN length;
- char buffer[20];
+ SQLLEN length;
+ SQLCHAR buffer[20];
ok_sql(hstmt, "DROP TABLE IF EXISTS t_prep_buffer_length");
- rc = SQLExecDirect(hstmt,"create table t_prep_buffer_length(a varchar(20))",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "create table t_prep_buffer_length(a varchar(20))");
- rc = SQLPrepare(hstmt, "insert into t_prep_buffer_length values(?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_prep_buffer_length values(?)",
+ SQL_NTS));
- length= 0;
- strcpy(buffer,"abcdefghij");
+ length= 0;
+ strcpy((char *)buffer, "abcdefghij");
rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 15, 10,
buffer, 4, &length);
mystmt(hstmt,rc);
@@ -125,7 +126,7 @@
rc = SQLExecute(hstmt);
mystmt(hstmt,rc);
- length= SQL_NTS;
+ length= SQL_NTS;
rc = SQLExecute(hstmt);
mystmt(hstmt,rc);
@@ -133,8 +134,7 @@
SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
SQLFreeStmt(hstmt,SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"select * from t_prep_buffer_length",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "select * from t_prep_buffer_length");
rc = SQLBindCol(hstmt, 1, SQL_C_CHAR, buffer, 15, &length);
mystmt(hstmt,rc);
@@ -143,31 +143,36 @@
mystmt(hstmt,rc);
printMessage( "outdata: %s (%ld)\n", buffer, length);
- myassert(buffer[0] == '\0' && length == 0);
+ is_num(length, 0);
+ is_num(buffer[0], '\0');
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
printMessage("outdata: %s (%ld)\n", buffer, length);
- myassert(strcmp(buffer,"abc") == 0 && length == 3);
+ is_num(length, 3);
+ is_str(buffer, "abc", 10);
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
printMessage("outdata: %s (%ld)\n", buffer, length);
- myassert(strcmp(buffer,"abcdefghij") == 0 && length == 10);
+ is_num(length, 10);
+ is_str(buffer, "abcdefghij", 10);
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
printMessage("outdata: %s (%ld)\n", buffer, length);
- myassert(strcmp(buffer,"abcdefghi") == 0 && length == 9);
+ is_num(length, 9);
+ is_str(buffer, "abcdefghi", 9);
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
printMessage("outdata: %s (%ld)\n", buffer, length);
- myassert(strcmp(buffer,"abcdefghij") == 0 && length == 10);
+ is_num(length, 10);
+ is_str(buffer, "abcdefghij", 10);
rc = SQLFetch(hstmt);
myassert(rc == SQL_NO_DATA_FOUND);
@@ -192,13 +197,14 @@
ok_sql(hstmt, "DROP TABLE IF EXISTS t_prep_truncate");
- rc = SQLExecDirect(hstmt,"create table t_prep_truncate(a int, b char(4), c
binary(4))",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "create table t_prep_truncate(a int, b char(4), c binary(4))");
- rc = SQLPrepare(hstmt, "insert into t_prep_truncate
values(500,'venu','venu')",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_prep_truncate "
+ "values(500,'venu','venu')", SQL_NTS));
- strcpy(name,"venu");
+ strcpy((char *)name,"venu");
rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 10, name,
5, NULL);
mystmt(hstmt,rc);
@@ -217,8 +223,7 @@
SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
SQLFreeStmt(hstmt,SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"select b,c from t_prep_truncate",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "select b,c from t_prep_truncate");
rc = SQLBindCol(hstmt, 1, SQL_C_CHAR, name, 2, &length);
mystmt(hstmt,rc);
@@ -230,13 +235,13 @@
mystmt(hstmt,rc);
printMessage("str outdata: %s(%d)\n",name,length);
- myassert(strcmp(name,"v")==0);
- myassert(length == 4);
+ is_num(length, 4);
+ is_str(bin, "v", 1);
bin[4]='M';
printMessage("bin outdata: %s(%d)\n",bin,length1);
- myassert(strncmp(bin,"venuM",5)==0);
- myassert(length == 4);
+ is_num(length, 4);
+ is_str(bin, "venuM", 5);
rc = SQLFetch(hstmt);
myassert(rc == SQL_NO_DATA_FOUND);
@@ -332,11 +337,12 @@
ok_sql(hstmt, "DROP TABLE IF EXISTS t_prep_getdata");
- rc = SQLExecDirect(hstmt,"create table t_prep_getdata(a tinyint, b int, c
char(4))",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "create table t_prep_getdata(a tinyint, b int, c char(4))");
- rc = SQLPrepare(hstmt,"insert into t_prep_getdata values(?,?,?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_prep_getdata values(?,?,?)",
+ SQL_NTS));
rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,SQL_TINYINT,
0,0,&data,0,NULL);
@@ -348,7 +354,7 @@
10,10,name,6,NULL);
mystmt(hstmt,rc);
- sprintf(name,"venu"); data = 10;
+ sprintf((char *)name,"venu"); data = 10;
rc = SQLExecute(hstmt);
mystmt(hstmt,rc);
@@ -360,7 +366,7 @@
SQLFreeStmt(hstmt,SQL_CLOSE);
data= 0;
- rc = SQLExecDirect(hstmt,"select * from t_prep_getdata",SQL_NTS);
+ ok_sql(hstmt, "select * from t_prep_getdata");
mystmt(hstmt,rc);
rc = SQLBindCol(hstmt, 1,SQL_C_TINYINT, &tiny, 0, NULL);
@@ -387,13 +393,14 @@
printMessage("record 3 : %s(%ld)\n", name, (long)length);
- myassert(strcmp(name,"venu")== 0 && length == 4);
+ is_num(length, 4);
+ is_str(name, "venu", 4);
data = 0;
rc = SQLGetData(hstmt,1,SQL_C_LONG,&data,0,NULL);
mystmt(hstmt,rc);
- printMessage("record 1 : %ld\n", data);
+ printMessage("record 1 : %ld", data);
myassert( data == 10);
rc = SQLFreeStmt(hstmt,SQL_UNBIND);
@@ -416,16 +423,13 @@
ok_sql(hstmt, "DROP TABLE IF EXISTS t_prep_getdata");
- rc = SQLExecDirect(hstmt,"create table t_prep_getdata(a char(10), b int)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "create table t_prep_getdata(a char(10), b int)");
- rc = SQLExecDirect(hstmt,"insert into t_prep_getdata
values('abcdefghij',12345)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "insert into t_prep_getdata values('abcdefghij',12345)");
- SQLFreeStmt(hstmt,SQL_CLOSE);
+ ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
- rc = SQLExecDirect(hstmt,"select * from t_prep_getdata",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "select * from t_prep_getdata");
rc = SQLFetch(hstmt);
mystmt(hstmt, rc);
@@ -435,44 +439,51 @@
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"M") == 0 && length == 10);
+ is_num(length, 10);
+ is_str(data, "M", 1);
rc = SQLGetData(hstmt,1,SQL_C_CHAR,data,4,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"abc") == 0 && length == 10);
+ is_num(length, 10);
+ is_str(data, "abc", 3);
rc = SQLGetData(hstmt,1,SQL_C_CHAR,data,4,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"def") == 0 && length == 7);
+ is_num(length, 7);
+ is_str(data, "def", 3);
rc = SQLGetData(hstmt,1,SQL_C_CHAR,data,4,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"ghi") == 0 && length == 4);
+ is_num(length, 4);
+ is_str(data, "ghi", 3);
data[0]= 'M';
rc = SQLGetData(hstmt,1,SQL_C_CHAR,data,0,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(data[0] == 'M' && length == 1);
+ is_num(length, 1);
+ is_str(data, "M", 1);
rc = SQLGetData(hstmt,1,SQL_C_CHAR,data,1,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(data[0] == '\0' && length == 1);
+ is_num(length, 1);
+ is_num(data[0], '\0');
rc = SQLGetData(hstmt,1,SQL_C_CHAR,data,2,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"j") == 0 && length == 1);
+ is_num(length, 1);
+ is_str(data, "j", 1);
rc = SQLGetData(hstmt,1,SQL_C_CHAR,data,2,&length);
myassert(rc == SQL_NO_DATA);
@@ -482,44 +493,52 @@
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"M") == 0 && length == 5);
+ is_num(length, 5);
+ is_str(data, "M", 2);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,data,3,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"12") == 0 && length == 5);
+ is_num(length, 5);
+ is_str(data, "12", 2);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,data,2,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"3") == 0 && length == 3);
+ is_num(length, 3);
+ is_str(data, "3", 1);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,data,2,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"4") == 0 && length == 2);
+ is_num(length, 2);
+ is_str(data, "4", 1);
data[0]= 'M';
rc = SQLGetData(hstmt,2,SQL_C_CHAR,data,0,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(data[0] == 'M' && length == 1);
+ is_num(length, 1);
+ is_str(data, "M", 1);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,data,1,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
myassert(data[0] == '\0' && length == 1);
+ is_num(length, 1);
+ is_num(data[0], '\0');
rc = SQLGetData(hstmt,2,SQL_C_CHAR,data,2,&length);
mystmt(hstmt,rc);
printMessage("data: %s (%ld)\n", data, length);
- myassert(strcmp(data,"5") == 0 && length == 1);
+ is_num(length, 1);
+ is_str(data, "5", 1);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,data,2,&length);
myassert(rc == SQL_NO_DATA);
@@ -543,10 +562,10 @@
ok_sql(hstmt, "DROP TABLE IF EXISTS t_prep_catalog");
- rc = SQLExecDirect(hstmt,"create table t_prep_catalog(a int default 100)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "create table t_prep_catalog(a int default 100)");
- rc = SQLTables(hstmt,NULL,0,NULL,0,"t_prep_catalog",14,"TABLE",5);
+ rc = SQLTables(hstmt,NULL,0,NULL,0,(SQLCHAR *)"t_prep_catalog",14,
+ (SQLCHAR *)"TABLE",5);
mystmt(hstmt,rc);
rc = SQLFetch(hstmt);
@@ -558,7 +577,8 @@
rc = SQLGetData(hstmt,3,SQL_C_CHAR,table,15,&length);
mystmt(hstmt,rc);
- myassert(strcmp(table,"t_prep_catalog") == 0 && length == 14);
+ is_num(length, 14);
+ is_str(table, "t_prep_catalog", 14);
rc = SQLFetch(hstmt);
myassert(rc == SQL_NO_DATA);
@@ -569,7 +589,7 @@
rc = SQLFreeStmt(hstmt,SQL_CLOSE);
mystmt(hstmt,rc);
- rc = SQLColumns(hstmt,NULL,0,NULL,0,"t_prep_catalog",14,NULL,0);
+ rc = SQLColumns(hstmt,NULL,0,NULL,0,(SQLCHAR *)"t_prep_catalog",14,NULL,0);
mystmt(hstmt,rc);
rc = SQLFetch(hstmt);
@@ -586,12 +606,14 @@
rc = SQLGetData(hstmt,4,SQL_C_CHAR,table,2,&length);
mystmt(hstmt,rc);
- myassert(strcmp(table,"a") == 0 && length == 1);
+ is_num(length, 1);
+ is_str(table, "a", 1);
rc = SQLGetData(hstmt,13,SQL_C_CHAR,table,10,&length);
mystmt(hstmt,rc);
printMessage("table: %s(%d)\n", table, length);
- myassert(strcmp(table,"100") == 0 && length == 3);
+ is_num(length, 3);
+ is_str(table, "100", 3);
rc = SQLFetch(hstmt);
myassert(rc == SQL_NO_DATA);
@@ -614,28 +636,18 @@
SQLLEN length, length1;
char b[]= "abcdefghij", b1[10];
-/*
- if (!mysql_min_version(hdbc, "5.0",3))
- {
- printMessage("server doesn't support stored procedures..skipped\n");
- return;
- }
-*/
+ if (!mysql_min_version(hdbc, "5.0", 3))
+ skip("server does not support stored procedures");
ok_sql(hstmt, "DROP TABLE IF EXISTS t_tabsp");
ok_sql(hstmt, "DROP PROCEDURE IF EXISTS t_sp");
- rc = SQLExecDirect(hstmt,"create table t_tabsp(a int, b varchar(10))",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "create table t_tabsp(a int, b varchar(10))");
- rc = SQLExecDirect(hstmt,"create procedure t_sp(x int, y char(10)) \
- begin \
- insert into t_tabsp values(x, y); \
- end;",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt,"create procedure t_sp(x int, y char(10)) "
+ "begin insert into t_tabsp values(x, y); end;");
- rc = SQLPrepare(hstmt,"call t_sp(?,?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt, SQLPrepare(hstmt, (SQLCHAR *)"call t_sp(?,?)", SQL_NTS));
rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,
0,0,&a,0,NULL);
@@ -653,8 +665,7 @@
SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
SQLFreeStmt(hstmt, SQL_CLOSE);
- rc = SQLExecDirect(hstmt,"select * from t_tabsp",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "select * from t_tabsp");
rc = SQLBindCol(hstmt,1,SQL_C_LONG,&a,0,NULL);
mystmt(hstmt,rc);
@@ -701,8 +712,8 @@
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);
+ ok_stmt(hstmt, SQLPrepare(hstmt, (SQLCHAR *)"select * from t_prepare "
+ "where col2 = ? AND col1 = ?",SQL_NTS));
rc = SQLNumResultCols(hstmt,&pccol);
mystmt(hstmt,rc);
@@ -729,7 +740,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);
@@ -791,8 +802,7 @@
rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
mystmt(hstmt,rc);
- rc = SQLExecDirect(hstmt,"SELECT * FROM t_prepare1",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "SELECT * FROM t_prepare1");
myassert(3 == myresult(hstmt));/* unless prepare is supported..*/
@@ -975,8 +985,10 @@
mystmt(hstmt,rc);
- rc = SQLPrepare(hstmt,"select id from t_acc_update where id = ?",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt,
+ SQLPrepare(hstmt,
+ (SQLCHAR *)"select id from t_acc_update where id = ?",
+ SQL_NTS));
rc =
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER,11,0,&id,0,NULL);
mystmt(hstmt,rc);
@@ -1012,8 +1024,7 @@
rc =
SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER,11,0,&id1,0,NULL);
mystmt(hstmt1,rc);
- rc = SQLExecDirect(hstmt1,"UPDATE t_acc_update SET id = ? WHERE id = ?",SQL_NTS);
- mystmt(hstmt1,rc);
+ ok_sql(hstmt1, "UPDATE t_acc_update SET id = ? WHERE id = ?");
rc = SQLRowCount(hstmt1,&pcrow);
mystmt(hstmt1,rc);
@@ -1035,24 +1046,23 @@
}
+/**
+ Bug #29871: MyODBC problem with MS Query ('Memory allocation error')
+*/
DECLARE_TEST(t_bug29871)
{
- SQLCHAR *param= "1";
+ SQLCHAR *param= (SQLCHAR *)"1";
- skip("skipping this test for a while due to DM-related issues");
-
ok_sql(hstmt, "DROP TABLE IF EXISTS t_bug29871");
ok_sql(hstmt, "CREATE TABLE t_bug29871 (a INT)");
-
+
/* The bug is related to calling deprecated SQLSetParam */
- ok_stmt(hstmt, SQLSetParam(hstmt, 1, SQL_C_CHAR, SQL_INTEGER, 10, 0,
+ ok_stmt(hstmt, SQLSetParam(hstmt, 1, SQL_C_CHAR, SQL_INTEGER, 10, 0,
param, 0));
- ok_stmt(hstmt, SQLExecDirect(hstmt,"INSERT INTO t_bug29871 VALUES (?)",
- SQL_NTS));
- ok_stmt(hstmt, SQLSetParam(hstmt, 1, SQL_C_CHAR, SQL_INTEGER, 10, 0,
+ ok_sql(hstmt, "INSERT INTO t_bug29871 VALUES (?)");
+ ok_stmt(hstmt, SQLSetParam(hstmt, 1, SQL_C_CHAR, SQL_INTEGER, 10, 0,
param, 0));
- ok_stmt(hstmt, SQLExecDirect(hstmt,"SELECT * FROM t_bug29871 WHERE a=?",
- SQL_NTS));
+ ok_sql(hstmt, "SELECT * FROM t_bug29871 WHERE a=?");
ok_sql(hstmt, "DROP TABLE t_bug29871");
return OK;
}
Modified: branches/guffert/test/my_result.c
===================================================================
--- branches/guffert/test/my_result.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/test/my_result.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -33,53 +33,43 @@
SQLSMALLINT nIndex,ncol,pfSqlType, pcbScale, pfNullable;
/* drop table 'myodbc3_demo_result' if it already exists */
- rc = SQLExecDirect(hstmt,"DROP TABLE if exists myodbc3_demo_result",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "DROP TABLE if exists myodbc3_demo_result");
/* commit the transaction */
- rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
+ rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
mycon(hdbc,rc);
/* create the table 'myodbc3_demo_result' */
- rc = SQLExecDirect(hstmt,"CREATE TABLE myodbc3_demo_result(\
- id int primary key auto_increment,\
- name varchar(20))",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt,"CREATE TABLE myodbc3_demo_result("
+ "id int primary key auto_increment,name varchar(20))");
rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
- mycon(hdbc,rc);
+ mycon(hdbc,rc);
- /* insert 2 rows of data */
- rc = SQLExecDirect(hstmt,"INSERT INTO myodbc3_demo_result values(\
- 1,'MySQL')",SQL_NTS);
- mystmt(hstmt,rc);
+ /* insert 2 rows of data */
+ ok_sql(hstmt, "INSERT INTO myodbc3_demo_result values(1,'MySQL')");
+ ok_sql(hstmt, "INSERT INTO myodbc3_demo_result values(2,'MyODBC')");
- rc = SQLExecDirect(hstmt,"INSERT INTO myodbc3_demo_result values(\
- 2,'MyODBC')",SQL_NTS);
- mystmt(hstmt,rc);
-
/* commit the transaction */
- rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
+ rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
mycon(hdbc,rc);
- /* update second row */
- rc = SQLExecDirect(hstmt,"UPDATE myodbc3_demo_result set name=\
- 'MyODBC 3.51' where id=2",SQL_NTS);
- mystmt(hstmt,rc);
+ /* update second row */
+ ok_sql(hstmt, "UPDATE myodbc3_demo_result set name="
+ "'MyODBC 3.51' where id=2");
/* commit the transaction */
- rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
+ rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
mycon(hdbc,rc);
- /* now fetch back..*/
- rc = SQLExecDirect(hstmt,"SELECT * from myodbc3_demo_result",SQL_NTS);
- mystmt(hstmt,rc);
+ /* now fetch back..*/
+ ok_sql(hstmt, "SELECT * from myodbc3_demo_result");
/* get total number of columns from the resultset */
rc = SQLNumResultCols(hstmt,&ncol);
mystmt(hstmt,rc);
- printMessage(" total columns in resultset:%d\n\n",ncol);
+ printMessage("total columns in resultset:%d",ncol);
/* print the column names and do the row bind */
for (nIndex = 1; nIndex <= ncol; nIndex++)
@@ -88,12 +78,11 @@
&pfSqlType,&pcColDef,&pcbScale,&pfNullable);
mystmt(hstmt,rc);
- printMessage(" %s\t",szColName);
+ printf("%s\t",szColName);
}
+ printf("\n");
- printMessage("\n--------------------\n");
-
/* now fetch row by row */
rc = SQLFetch(hstmt);
while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
@@ -104,15 +93,15 @@
rc = SQLGetData(hstmt,nIndex, SQL_C_CHAR, szData,
MAX_ROW_DATA_LEN,NULL);
mystmt(hstmt,rc);
- printMessage(" %s\t",szData);
+ printf("%s\t",szData);
}
- printMessage("\n");
+ printf("\n");
rc = SQLFetch(hstmt);
}
SQLFreeStmt(hstmt,SQL_UNBIND);
- printMessage("\n total rows fetched:%d\n",nRowCount);
+ printMessage("total rows fetched:%d",nRowCount);
/* free the statement row bind resources */
rc = SQLFreeStmt(hstmt, SQL_UNBIND);
@@ -122,8 +111,7 @@
rc = SQLFreeStmt(hstmt, SQL_CLOSE);
mystmt(hstmt,rc);
- rc = SQLExecDirect(hstmt, "DROP TABLE myodbc3_demo_result", SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "DROP TABLE myodbc3_demo_result");
return OK;
}
@@ -141,103 +129,89 @@
rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&OdbcVersion,0,NULL);
myenv(henv,rc);
- fprintf(stdout,"odbc version:\n");
+ fprintf(stdout,"# odbc version:");
if (OdbcVersion == SQL_OV_ODBC2)
{
- fprintf(stdout," SQL_OV_ODBC2");
+ fprintf(stdout," SQL_OV_ODBC2\n");
DateType= SQL_DATE;
}
else
{
- fprintf(stdout," SQL_OV_ODBC3");
+ fprintf(stdout," SQL_OV_ODBC3\n");
DateType= SQL_TYPE_DATE;
}
- rc = SQLGetInfo(hdbc,SQL_DBMS_VER,(SQLCHAR *)&DbVersion,MAX_NAME_LEN,NULL);
+ rc = SQLGetInfo(hdbc,SQL_DBMS_VER,DbVersion,MAX_NAME_LEN,NULL);
mycon(hdbc,rc);
ok_sql(hstmt, "DROP TABLE IF EXISTS t_convert");
- rc = SQLExecDirect(hstmt,"CREATE TABLE t_convert(col0 integer, \
- col1 date,\
- col2 char(10))",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "CREATE TABLE t_convert(col0 int, col1 date, col2 char(10))");
- rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(10,'2002-10-24','venu')",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "INSERT INTO t_convert VALUES(10,'2002-10-24','venu')");
+ ok_sql(hstmt, "INSERT INTO t_convert VALUES(20,'2002-10-23','venu1')");
+ ok_sql(hstmt, "INSERT INTO t_convert VALUES(30,'2002-10-25','venu2')");
+ ok_sql(hstmt, "INSERT INTO t_convert VALUES(40,'2002-10-24','venu3')");
- rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(20,'2002-10-23','venu1')",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt, "SELECT MAX(col0) FROM t_convert");
- rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(30,'2002-10-25','venu2')",SQL_NTS);
+ rc = SQLDescribeCol(hstmt,1,ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
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,"MAX(col0): %d\n", SqlType);
+ printMessage("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);
+ ok_sql(hstmt, "SELECT MAX(col1) FROM t_convert");
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ rc = SQLDescribeCol(hstmt,1,ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
mystmt(hstmt,rc);
- fprintf(stdout,"MAX(col1): %d\n", SqlType);
+ printMessage("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);
+ ok_sql(hstmt, "SELECT MAX(col2) FROM t_convert");
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ rc = SQLDescribeCol(hstmt,1,ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
mystmt(hstmt,rc);
- fprintf(stdout,"MAX(col0): %d\n", SqlType);
+ printMessage("MAX(col0): %d", SqlType);
SQLFreeStmt(hstmt,SQL_CLOSE);
- if (strncmp(DbVersion,"4.",2) >= 0)
+ if (strncmp((char *)DbVersion,"4.",2) >= 0)
{
- rc = SQLExecDirect(hstmt,"SELECT CAST(MAX(col1) AS DATE) AS col1 FROM
t_convert",SQL_NTS);
+ ok_sql(hstmt, "SELECT CAST(MAX(col1) AS DATE) AS col1 FROM t_convert");
mystmt(hstmt,rc);
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ rc = SQLDescribeCol(hstmt,1,ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
mystmt(hstmt,rc);
- fprintf(stdout,"CAST(MAX(col1) AS DATE): %d\n", SqlType);
+ printMessage("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);
+ ok_sql(hstmt, "SELECT CONVERT(MAX(col1),DATE) AS col1 FROM t_convert");
mystmt(hstmt,rc);
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ rc = SQLDescribeCol(hstmt,1,ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
mystmt(hstmt,rc);
- fprintf(stdout,"CONVERT(MAX(col1),DATE): %d\n", SqlType);
+ printMessage("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);
+ ok_sql(hstmt,"SELECT CAST(MAX(col1) AS CHAR) AS col1 FROM t_convert");
rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
mystmt(hstmt,rc);
- fprintf(stdout,"CAST(MAX(col1) AS CHAR): %d\n", SqlType);
+ printMessage("CAST(MAX(col1) AS CHAR): %d", SqlType);
myassert(SqlType == SQL_VARCHAR || SqlType == SQL_LONGVARCHAR);
SQLFreeStmt(hstmt,SQL_CLOSE);
@@ -268,14 +242,14 @@
&pfSqlType,&pcbColDef,&pibScale,&pfNullable);
mystmt(hstmt,rc);
- fprintf(stdout, "\n\n Column Number'%d':", icol);
+ printMessage("Column Number'%d':", icol);
- fprintf(stdout, "\t Column Name : %s\n", szColName);
- fprintf(stdout, "\t NameLengh : %d\n", pcbColName);
- fprintf(stdout, "\t DataType : %d\n", pfSqlType);
- fprintf(stdout, "\t ColumnSize : %d\n", pcbColDef);
- fprintf(stdout, "\t DecimalDigits : %d\n", pibScale);
- fprintf(stdout, "\t Nullable : %d\n", pfNullable);
+ printMessage(" Column Name : %s", szColName);
+ printMessage(" NameLengh : %d", pcbColName);
+ printMessage(" DataType : %d", pfSqlType);
+ printMessage(" ColumnSize : %d", pcbColDef);
+ printMessage(" DecimalDigits : %d", pibScale);
+ printMessage(" Nullable : %d", pfNullable);
is_str(szColName, name, pcbColName);
is_num(pfSqlType, sql_type);
@@ -337,7 +311,7 @@
is(desc_col_check(hstmt, 10, "c10", SQL_REAL, 7, 7, 0, SQL_NULLABLE) == OK);
is(desc_col_check(hstmt, 11, "c11", SQL_BIGINT, 19, 19, 0, SQL_NO_NULLS) == OK);
- is(desc_col_check(hstmt, 12, "c12", SQL_VARCHAR, 12, 12, 0, SQL_NULLABLE) == OK);
+ is(desc_col_check(hstmt, 12, "c12", SQL_VARBINARY, 12, 12, 0, SQL_NULLABLE) == OK);
is(desc_col_check(hstmt, 13, "c13", SQL_CHAR, 20, 20, 0, SQL_NO_NULLS) == OK);
is(desc_col_check(hstmt, 14, "c14", SQL_REAL, 7, 7, 0, SQL_NULLABLE) == OK);
@@ -391,13 +365,13 @@
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
- myassert(strcmp(data,"record1-must be string") == 0 ||
- strcmp(data,"record2-must be string") == 0);
+ myassert(strcmp((char *)data,"record1-must be string") == 0 ||
+ strcmp((char *)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);
+ myassert(strcmp((char *)data,"record1-must be string") == 0 ||
+ strcmp((char *)data,"record2-must be string") == 0);
rc = SQLFetch(hstmt);
myassert( rc == SQL_NO_DATA);
@@ -430,8 +404,9 @@
rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
mycon(hdbc,rc);
- rc = SQLPrepare(hstmt,"insert into t_max_rows values(?)",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt, SQLPrepare(hstmt,
+ (SQLCHAR *)"insert into t_max_rows values(?)",
+ SQL_NTS));
rc =
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_ULONG,SQL_INTEGER,0,0,&i,0,NULL);
mystmt(hstmt,rc);
@@ -536,66 +511,66 @@
rc = SQLFetch(hstmt);
mystmt(hstmt,rc);
- fprintf(stdout,"id: %ld\n",id);
+ printMessage("id: %ld",id);
myassert(id == 10);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
+ printMessage("length: %ld", pcbValue);
myassert(pcbValue == 28);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
+ printMessage("length: %ld", pcbValue);
myassert(pcbValue == 28);
rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
+ printMessage("length: %ld", pcbValue);
myassert(pcbValue == 28);
rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
+ printMessage("length: %ld", pcbValue);
myassert(pcbValue == 28);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
- myassert(pcbValue == 28);
+ printMessage("length: %ld", pcbValue);
+ is_num(pcbValue, 28);
rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,10,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 28);
- myassert(strcmp(szData,"MySQL - O") == 0);
+ printMessage("data : %s (%ld)",szData,pcbValue);
+ is_num(pcbValue, 28);
+ is_str(szData, "MySQL - O", 10);
pcbValue= 0;
rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,5,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 19);
- myassert(strcmp(szData,"pen ") == 0);
+ printMessage("data : %s (%ld)",szData,pcbValue);
+ is_num(pcbValue, 19);
+ is_str(szData, "pen ", 5);
pcbValue= 0;
szData[0]='A';
rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
+ printMessage("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,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 15);
- myassert(strcmp(szData,"Source Database") == 0);
+ printMessage("data : %s (%ld)",szData,pcbValue);
+ is_num(pcbValue, 15);
+ is_str(szData,"Source Database", 16);
pcbValue= 99;
szData[0]='A';
expect_stmt(hstmt, SQLGetData(hstmt, 2, SQL_C_CHAR, szData, 0, &pcbValue),
SQL_NO_DATA_FOUND);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
+ printMessage("data : %s (%ld)",szData,pcbValue);
myassert(pcbValue == 99);
myassert(szData[0] == 'A');
@@ -643,19 +618,19 @@
pcbValue= pcbValue1= 99;
ok_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, szData, 0, &pcbValue));
- fprintf(stdout,"length: %d\n", pcbValue);
+ printMessage("length: %d", pcbValue);
myassert(pcbValue == 0);
bData[0]=bData[1]='z';
ok_stmt(hstmt, SQLGetData(hstmt, 2, SQL_C_BINARY, bData, 0, &pcbValue1));
- fprintf(stdout,"length: %d\n", pcbValue1);
+ printMessage("length: %d", pcbValue1);
myassert(pcbValue1 == 0);
myassert(bData[0] == 'z');
myassert(bData[1] == 'z');
bData1[0]=bData1[1]='z';
ok_stmt(hstmt, SQLGetData(hstmt, 3, SQL_C_BINARY, bData1, 0, &pcbValue2));
- fprintf(stdout,"length: %d\n", pcbValue2);
+ printMessage("length: %d", pcbValue2);
myassert(pcbValue2 == 0);
myassert(bData1[0] == 'z');
myassert(bData1[1] == 'z');
@@ -663,20 +638,20 @@
pcbValue= pcbValue1= 99;
rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ printMessage("data: %s, length: %d", 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,"data: %s, length: %d\n", bData, pcbValue1);
+ printMessage("data: %s, length: %d", bData, pcbValue1);
myassert(pcbValue1 == 0);
bData1[0]=bData1[1]='z';
rc = SQLGetData(hstmt,3,SQL_C_CHAR,bData1,1,&pcbValue2);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", bData1, pcbValue2);
+ printMessage("data: %s, length: %d", bData1, pcbValue2);
myassert(pcbValue2 == 0);
myassert(bData1[0] == '\0');
myassert(bData1[1] == 'z');
@@ -688,40 +663,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,"length: %d\n", pcbValue);
+ printMessage("length: %d", 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,"length: %d\n", pcbValue1);
+ printMessage("length: %d", 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,"length: %d\n", pcbValue2);
+ printMessage("length: %d", 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,"data: %s, length: %d\n", szData,pcbValue);
+ printMessage("data: %s, length: %d", 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,"data; %s, length: %d\n", bData, pcbValue1);
+ printMessage("data; %s, length: %d", 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,"length: %d\n", pcbValue2);
+ printMessage("length: %d", pcbValue2);
myassert(pcbValue2 == 5);
myassert(bData1[0] == 'm');
myassert(bData1[1] == 'z');
@@ -729,33 +704,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,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 4);
- myassert(strcmp(szData,"ven")==0);
+ printMessage("data: %s, length: %d", szData, pcbValue);
+ is_num(pcbValue, 4);
+ is_str(szData,"ven", 3);
rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,4,&pcbValue1);
mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
- myassert(pcbValue1 == 5);
- myassert(strncmp(bData,"mysq",4)==0);
+ printMessage("data: %s, length: %d", bData, pcbValue1);
+ is_num(pcbValue1, 5);
+ is_str(bData, "mysq", 4);
pcbValue= pcbValue1= 99;
rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,5,&pcbValue);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 4);
- myassert(strcmp(szData,"venu")==0);
+ printMessage("data: %s, length: %d", szData, pcbValue);
+ is_num(pcbValue, 4);
+ is_str(szData, "venu", 4);
rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,5,&pcbValue1);
mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
- myassert(pcbValue1 == 5);
- myassert(strncmp(bData,"mysql",5)==0);
+ printMessage("data: %s, length: %d", bData, pcbValue1);
+ is_num(pcbValue1, 5);
+ is_str(bData, "mysql", 5);
szData[0]= 'z';
rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,0,&pcbValue);
mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ printMessage("data: %s, length: %d", szData, pcbValue);
myassert(pcbValue == 5 || pcbValue == 10);
myassert(szData[0] == 'z');
@@ -763,20 +738,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,"data: %s, length: %d\n", szData, pcbValue);
+ printMessage("data: %s, length: %d", 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,"data: %s, length: %d\n", szData, pcbValue);
+ printMessage("data: %s, length: %d", 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,"data: %s, length: %d\n", szData, pcbValue);
+ printMessage("data: %s, length: %d", szData, pcbValue);
myassert(pcbValue == 10);
myassert(strncmp(szData,"monty",5) == 0);
#endif
@@ -939,8 +914,7 @@
rc = SQLFreeStmt(hstmt,SQL_CLOSE);
mystmt(hstmt,rc);
- rc = SQLSetCursorName(hstmt,"venu",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt, SQLSetCursorName(hstmt, (SQLCHAR *)"venu", SQL_NTS));
rc = tmysql_exec(hstmt,"select * from t_empty_str_bug");
mystmt(hstmt,rc);
@@ -958,8 +932,10 @@
myassert(rc == SQL_NO_DATA_FOUND);
id= 10;
- strcpy(name,"MySQL AB");name_len= SQL_NTS;
- strcpy(desc,"");desc_len= SQL_COLUMN_IGNORE;
+ strcpy((char *)name,"MySQL AB");
+ name_len= SQL_NTS;
+ strcpy((char *)desc,"");
+ desc_len= SQL_COLUMN_IGNORE;
rc = SQLSetPos(hstmt,1,SQL_ADD,SQL_LOCK_NO_CHANGE);
mystmt(hstmt,rc);
@@ -967,7 +943,7 @@
rc = SQLRowCount(hstmt,&name_len);
mystmt(hstmt,rc);
- fprintf(stdout," rows affected:%d\n",name_len);
+ printMessage("rows affected: %d",name_len);
myassert(name_len == 1);
rc = SQLFreeStmt(hstmt,SQL_UNBIND);
@@ -1027,8 +1003,7 @@
rc = SQLFreeStmt(hstmt,SQL_CLOSE);
mystmt(hstmt,rc);
- rc = SQLExecDirect(hstmt,"insert into t_desccol values(10,'venu','mysql')",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_sql(hstmt,"insert into t_desccol values(10,'venu','mysql')");
rc = SQLFreeStmt(hstmt,SQL_CLOSE);
mystmt(hstmt,rc);
@@ -1039,17 +1014,17 @@
rc = tmysql_exec(hstmt,"select * from t_desccol");
mystmt(hstmt,rc);
- rc = SQLDescribeCol(hstmt,1,(char
*)colname,20,&collen,&datatype,&colsize,&decptr,&nullable);
+ rc =
SQLDescribeCol(hstmt,1,colname,20,&collen,&datatype,&colsize,&decptr,&nullable);
mystmt(hstmt,rc);
- printMessage("1:
%s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);;
+ printMessage("1:
%s,%d,%d,%d,%d,%d",colname,collen,datatype,colsize,decptr,nullable);;
- rc = SQLDescribeCol(hstmt,2,(char
*)colname,20,&collen,&datatype,&colsize,&decptr,&nullable);
+ rc =
SQLDescribeCol(hstmt,2,colname,20,&collen,&datatype,&colsize,&decptr,&nullable);
mystmt(hstmt,rc);
- printMessage("2:
%s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);;
+ printMessage("2:
%s,%d,%d,%d,%d,%d",colname,collen,datatype,colsize,decptr,nullable);;
- rc = SQLDescribeCol(hstmt,3,(char
*)colname,20,&collen,&datatype,&colsize,&decptr,&nullable);
+ rc =
SQLDescribeCol(hstmt,3,colname,20,&collen,&datatype,&colsize,&decptr,&nullable);
mystmt(hstmt,rc);
- printMessage("3:
%s,%d,%d,%d,%d,%d\n",colname,collen,datatype,colsize,decptr,nullable);;
+ printMessage("3:
%s,%d,%d,%d,%d,%d",colname,collen,datatype,colsize,decptr,nullable);;
rc = SQLFreeStmt(hstmt,SQL_UNBIND);
mystmt(hstmt,rc);
@@ -1063,7 +1038,7 @@
}
-int desccol(SQLHSTMT hstmt, SQLCHAR *cname, SQLSMALLINT clen,
+int desccol(SQLHSTMT hstmt, char *cname, SQLSMALLINT clen,
SQLSMALLINT sqltype, SQLULEN size,
SQLSMALLINT scale, SQLSMALLINT isNull)
{
@@ -1078,8 +1053,8 @@
SQLFreeStmt(hstmt,SQL_CLOSE);
- sprintf(select,"select %s from t_desccolext",cname);
- printMessage("\n%s",select);
+ sprintf((char *)select,"select %s from t_desccolext",cname);
+ printMessage("%s",select);
rc = SQLExecDirect(hstmt,select,SQL_NTS);
mystmt(hstmt,rc);
@@ -1088,10 +1063,10 @@
&lsqltype,&lsize,&lscale,&lisNull);
mystmt(hstmt,rc);
- printMessage("\n name: %s (%d)",lcname,lclen);
- printMessage("\n sqltype: %d, size: %d, scale: %d, null:
%d\n",lsqltype,lsize,lscale,lisNull);
+ printMessage("name: %s (%d)",lcname,lclen);
+ printMessage(" sqltype: %d, size: %d, scale: %d, null:
%d\n",lsqltype,lsize,lscale,lisNull);
- myassert(strcmp(lcname,cname)==0);
+ is_str(lcname, cname, clen);
myassert(lclen == clen);
myassert(lsqltype == sqltype);
myassert(lsize == size);
@@ -1107,14 +1082,10 @@
DECLARE_TEST(t_desccolext)
{
SQLRETURN rc;
- SQLCHAR *sql;
ok_sql(hstmt, "DROP TABLE IF EXISTS t_desccolext");
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- sql= "create table t_desccolext\
+ ok_sql(hstmt, "create table t_desccolext\
( t1 tinyint,\
t2 tinyint(10),\
t3 tinyint unsigned,\
@@ -1169,14 +1140,8 @@
txt3 mediumtext,\
txt4 longtext,\
en enum('v1','v2'),\
- st set('1','2','3'))";
+ st set('1','2','3'))");
- rc = tmysql_exec(hstmt,sql);
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
rc = SQLFreeStmt(hstmt,SQL_CLOSE);
mystmt(hstmt,rc);
@@ -1225,7 +1190,7 @@
SQLRETURN rc;
ok_sql(hstmt, "DROP TABLE IF EXISTS t_desccol1");
- rc = SQLExecDirect(hstmt,"create table t_desccol1\
+ rc = SQLExecDirect(hstmt,(SQLCHAR *)"create table t_desccol1\
( record decimal(8,0),\
title varchar(250),\
num1 float,\
@@ -1258,9 +1223,9 @@
rc = SQLNumResultCols(hstmt,(SQLSMALLINT *)&pccol);
mystmt(hstmt,rc);
- printMessage("total columns:%d\n",pccol);
+ printMessage("total columns:%d",pccol);
- printMessage("Name nlen type size decs null\n");
+ printMessage("Name nlen type size decs null");
for ( index = 1; index <= pccol; index++)
{
rc = SQLDescribeCol(hstmt, index, ColumnName,
@@ -1270,7 +1235,7 @@
&ColumnDecimals, &ColumnNullable);
mystmt(hstmt,rc);
- printMessage("%-6s %4d %4d %7ld %4d %4d\n", ColumnName,
+ printMessage("%-6s %4d %4d %7ld %4d %4d", ColumnName,
ColumnNameSize, ColumnSQLDataType, ColumnSize,
ColumnDecimals, ColumnNullable);
}
@@ -1380,7 +1345,8 @@
rc = tmysql_exec(hstmt,"create table t_exfetch(col1 int)");
mystmt(hstmt,rc);
- rc = SQLPrepare(hstmt,"insert into t_exfetch values(?)",SQL_NTS);
+ rc = SQLPrepare(hstmt, (SQLCHAR *)"insert into t_exfetch values (?)",
+ SQL_NTS);
mystmt(hstmt,rc);
rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_ULONG,
@@ -1399,7 +1365,7 @@
rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
mycon(hdbc,rc);
- rc = SQLExecDirect(hstmt,"select * from t_exfetch",SQL_NTS);
+ rc = SQLExecDirect(hstmt, (SQLCHAR *)"select * from t_exfetch",SQL_NTS);
mystmt(hstmt,rc);
rc = SQLBindCol(hstmt,1,SQL_C_LONG,&i,0,NULL);
@@ -1505,11 +1471,9 @@
SQLINTEGER nData= 555;
SQLCHAR szData[255] = "setpos-update";
- rc = SQLAllocStmt(hdbc,&hstmt1);
- mycon(hdbc,rc);
+ ok_con(hdbc, SQLAllocStmt(hdbc, &hstmt1));
- rc = SQLSetCursorName(hstmt,"venu_cur",SQL_NTS);
- mystmt(hstmt,rc);
+ ok_stmt(hstmt, SQLSetCursorName(hstmt, (SQLCHAR *)"venu_cur", SQL_NTS));
ok_sql(hstmt, "DROP TABLE IF EXISTS tmysql_rowstatus");
rc = tmysql_exec(hstmt,"create table tmysql_rowstatus(col1 int , col2 varchar(30))");
@@ -1561,8 +1525,9 @@
rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
mystmt(hstmt,rc);
- rc = SQLExecDirect(hstmt1,"UPDATE tmysql_rowstatus SET col1= 999, col2 = 'pos-update'
WHERE CURRENT OF venu_cur",SQL_NTS);
- mystmt(hstmt1,rc);
+ ok_sql(hstmt1,
+ "UPDATE tmysql_rowstatus SET col1 = 999,"
+ "col2 = 'pos-update' WHERE CURRENT OF venu_cur");
rc = SQLExtendedFetch(hstmt,SQL_FETCH_LAST,1,NULL,NULL);
mystmt(hstmt,rc);
@@ -1570,7 +1535,7 @@
rc = SQLSetPos(hstmt,1,SQL_DELETE,SQL_LOCK_NO_CHANGE);
mystmt(hstmt,rc);
- printMessage("\nrgfRowStatus[0]:%d",rgfRowStatus[0]);
+ printMessage("rgfRowStatus[0]:%d",rgfRowStatus[0]);
SQLFreeStmt(hstmt,SQL_CLOSE);
@@ -1802,7 +1767,7 @@
DECLARE_TEST(t_bug30958)
{
SQLCHAR outbuf[20]= "bug";
- SQLINTEGER outlen;
+ SQLLEN outlen;
SQLINTEGER outmax= 0;
ok_sql(hstmt, "drop table if exists bug30958");
@@ -1813,8 +1778,8 @@
ok_stmt(hstmt, SQLFetch(hstmt));
/*
- check first that we get truncation, with zero bytes
- available in out buffer, outbuffer should be untouched
+ check first that we get truncation, with zero bytes
+ available in out buffer, outbuffer should be untouched
*/
outlen= 99;
expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax,
@@ -1823,7 +1788,7 @@
is_num(outlen, 0);
is(check_sqlstate(hstmt, "01004") == OK);
- /* exact the same result, and not SQL_NO_DATA */
+ /* expect the same result, and not SQL_NO_DATA */
outlen= 99;
expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax,
&outlen), SQL_SUCCESS_WITH_INFO);
@@ -1845,19 +1810,140 @@
expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax,
&outlen), SQL_NO_DATA);
+ ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
+
ok_sql(hstmt, "drop table if exists bug30958");
+
+ return OK;
}
+/**
+ A variant of the above test, with charset != ansi charset
+*/
+DECLARE_TEST(t_bug30958_ansi)
+{
+ SQLCHAR outbuf[20]= "bug";
+ SQLLEN outlen;
+ SQLINTEGER outmax= 0;
+
+ ok_sql(hstmt, "drop table if exists bug30958");
+ ok_sql(hstmt, "CREATE TABLE bug30958 (tt_textfield TEXT CHARACTER SET cp1251 NOT
NULL)");
+ ok_sql(hstmt, "INSERT INTO bug30958 (tt_textfield) VALUES ('')");
+
+ ok_sql(hstmt, "select tt_textfield from bug30958");
+ ok_stmt(hstmt, SQLFetch(hstmt));
+
+ /*
+ check first that we get truncation, with zero bytes
+ available in out buffer, outbuffer should be untouched
+ */
+ outlen= 99;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax,
+ &outlen), SQL_SUCCESS_WITH_INFO);
+ is_str(outbuf, "bug", 3);
+ is_num(outlen, 0);
+ is(check_sqlstate(hstmt, "01004") == OK);
+
+ /* expect the same result, and not SQL_NO_DATA */
+ outlen= 99;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax,
+ &outlen), SQL_SUCCESS_WITH_INFO);
+ is_str(outbuf, "bug", 3);
+ is_num(outlen, 0);
+ is(check_sqlstate(hstmt, "01004") == OK);
+
+ /* now provide a space to read the data */
+ outmax= 1;
+ ok_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax, &outlen));
+ is_num(outbuf[0], 0);
+ is_num(outlen, 0);
+
+ /* only now is it unavailable (test with empty and non-empty out buffer) */
+ outmax= 0;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax,
+ &outlen), SQL_NO_DATA);
+ outmax= 1;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_CHAR, outbuf, outmax,
+ &outlen), SQL_NO_DATA);
+
+ ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
+
+ ok_sql(hstmt, "drop table if exists bug30958");
+
+ return OK;
+}
+
+
+/**
+ A variant of the above tests using SQLWVARCHAR
+*/
+DECLARE_TEST(t_bug30958_wchar)
+{
+ SQLCHAR outbuf[20]= "bug";
+ SQLLEN outlen;
+ SQLINTEGER outmax= 0;
+
+ ok_sql(hstmt, "drop table if exists bug30958");
+ ok_sql(hstmt, "CREATE TABLE bug30958 (tt_textfield TEXT NOT NULL)");
+ ok_sql(hstmt, "INSERT INTO bug30958 (tt_textfield) VALUES ('')");
+
+ ok_sql(hstmt, "select tt_textfield from bug30958");
+ ok_stmt(hstmt, SQLFetch(hstmt));
+
+ /*
+ check first that we get truncation, with zero bytes
+ available in out buffer, outbuffer should be untouched
+ */
+ outlen= 99;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_WCHAR, outbuf, outmax,
+ &outlen), SQL_SUCCESS_WITH_INFO);
+ is_str(outbuf, "bug", 3);
+ is_num(outlen, 0);
+ is(check_sqlstate(hstmt, "01004") == OK);
+
+ /* expect the same result, and not SQL_NO_DATA */
+ outlen= 99;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_WCHAR, outbuf, outmax,
+ &outlen), SQL_SUCCESS_WITH_INFO);
+ is_str(outbuf, "bug", 3);
+ is_num(outlen, 0);
+ is(check_sqlstate(hstmt, "01004") == OK);
+
+ /* now provide a space to read the data */
+ outmax= 2;
+ ok_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_WCHAR, outbuf, outmax, &outlen));
+ is_num(outbuf[0], 0);
+ is_num(outlen, 0);
+
+ /* only now is it unavailable (test with empty and non-empty out buffer) */
+ outmax= 0;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_WCHAR, outbuf, outmax,
+ &outlen), SQL_NO_DATA);
+ outmax= 1;
+ expect_stmt(hstmt, SQLGetData(hstmt, 1, SQL_C_WCHAR, outbuf, outmax,
+ &outlen), SQL_NO_DATA);
+
+ ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
+
+ ok_sql(hstmt, "drop table if exists bug30958");
+
+ return OK;
+}
+
+
+/**
+ Bug #31246: Opening rowset with extra fields leads to incorrect SQL INSERT
+*/
DECLARE_TEST(t_bug31246)
{
SQLSMALLINT ncol;
- SQLCHAR *buf = "Key1";
+ SQLCHAR *buf= (SQLCHAR *)"Key1";
SQLCHAR field1[20];
SQLINTEGER field2;
SQLCHAR field3[20];
SQLRETURN rc;
-
+
ok_sql(hstmt, "DROP TABLE IF EXISTS t_bug31246");
ok_sql(hstmt, "CREATE TABLE t_bug31246 ("
"field1 VARCHAR(50) NOT NULL PRIMARY KEY, "
@@ -1870,7 +1956,8 @@
is_num(ncol, 3);
/* Bind only one column instead of three ones */
- ok_stmt(hstmt, SQLBindCol(hstmt, 1, SQL_C_CHAR, buf, strlen(buf), NULL));
+ ok_stmt(hstmt, SQLBindCol(hstmt, 1, SQL_C_CHAR,
+ buf, strlen((char *)buf), NULL));
/* Expect SQL_NO_DATA_FOUND result from the empty table */
rc= SQLExtendedFetch(hstmt, SQL_FETCH_NEXT, 1, NULL, NULL);
@@ -1884,14 +1971,14 @@
/* Check whether the row was inserted with the default values*/
ok_sql(hstmt, "SELECT * FROM t_bug31246 WHERE field1=\"Key1\"");
- ok_stmt(hstmt, SQLBindCol(hstmt, 1, SQL_C_CHAR, field1,
+ ok_stmt(hstmt, SQLBindCol(hstmt, 1, SQL_C_CHAR, field1,
sizeof(field1), NULL));
- ok_stmt(hstmt, SQLBindCol(hstmt, 2, SQL_C_LONG, &field2,
+ ok_stmt(hstmt, SQLBindCol(hstmt, 2, SQL_C_LONG, &field2,
sizeof(SQLINTEGER), NULL));
- ok_stmt(hstmt, SQLBindCol(hstmt, 3, SQL_C_CHAR, field3,
+ ok_stmt(hstmt, SQLBindCol(hstmt, 3, SQL_C_CHAR, field3,
sizeof(field3), NULL));
ok_stmt(hstmt, SQLFetch(hstmt));
-
+
/* Clean-up */
ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
ok_sql(hstmt, "DROP TABLE t_bug31246");
@@ -1899,6 +1986,115 @@
}
+/**
+ Bug #13776: Invalid string or buffer length error
+*/
+DECLARE_TEST(t_bug13776)
+{
+ SQLHENV henv1;
+ SQLHDBC hdbc1;
+ SQLHSTMT hstmt1;
+
+ SQLULEN pcColSz;
+ SQLCHAR szColName[MAX_NAME_LEN];
+ SQLSMALLINT pfSqlType, pcbScale, pfNullable;
+
+ SET_DSN_OPTION(1 << 27);
+
+ /* Establish the new connection */
+ alloc_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ ok_sql(hstmt1, "DROP TABLE IF EXISTS t_bug13776");
+ ok_sql(hstmt1, "CREATE TABLE t_bug13776(ltext LONGTEXT)");
+ ok_sql(hstmt1, "INSERT INTO t_bug13776 VALUES ('long text test')");
+ ok_sql(hstmt1, "SELECT * FROM t_bug13776");
+ ok_stmt(hstmt1, SQLDescribeCol(hstmt1, 1, szColName, MAX_NAME_LEN+1, NULL,
+ &pfSqlType, &pcColSz, &pcbScale,
&pfNullable));
+
+ /* Size of LONGTEXT should have been capped to 1 << 31. */
+ is_num(pcColSz, 2147483647L);
+
+ ok_stmt(hstmt1, SQLFreeStmt(hstmt1, SQL_CLOSE));
+
+ ok_sql(hstmt1, "DROP TABLE IF EXISTS t_bug13776");
+
+ free_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ SET_DSN_OPTION(0);
+
+ return OK;
+}
+
+
+/**
+ Test that FLAG_COLUMN_SIZE_S32 is automatically enabled when ADO library
+ is loaded.
+*/
+DECLARE_TEST(t_bug13776_auto)
+{
+#ifdef WIN32
+ SQLHENV henv1;
+ SQLHDBC hdbc1;
+ SQLHSTMT hstmt1;
+ HMODULE ado_dll;
+
+ SQLULEN pcColSz;
+ SQLCHAR szColName[MAX_NAME_LEN];
+ SQLSMALLINT pfSqlType, pcbScale, pfNullable;
+ SQLCHAR *env_path= NULL;
+ SQLCHAR szFileToLoad[255];
+
+ /** @todo get the full path to the library using getenv */
+ env_path= getenv("CommonProgramFiles(x86)");
+ if (!env_path)
+ env_path= getenv("CommonProgramFiles");
+
+ if (!env_path)
+ {
+ printf("# No path for CommonProgramFiles in %s on line %d\n",
+ __FILE__, __LINE__);
+ return FAIL;
+ }
+
+ sprintf(szFileToLoad, "%s\\System\\ado\\msado15.dll", env_path);
+
+ ado_dll= LoadLibrary(szFileToLoad);
+ if (!ado_dll)
+ {
+ printf("# Could not load %s in %s on line %d\n",
+ szFileToLoad, __FILE__, __LINE__);
+ return FAIL;
+ }
+
+ /* Establish the new connection */
+ alloc_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ ok_sql(hstmt1, "DROP TABLE IF EXISTS t_bug13776");
+ ok_sql(hstmt1, "CREATE TABLE t_bug13776(ltext LONGTEXT)");
+ ok_sql(hstmt1, "INSERT INTO t_bug13776 VALUES ('long text test')");
+ ok_sql(hstmt1, "SELECT * FROM t_bug13776");
+ ok_stmt(hstmt1, SQLDescribeCol(hstmt1, 1, szColName, MAX_NAME_LEN+1, NULL,
+ &pfSqlType, &pcColSz, &pcbScale,
&pfNullable));
+
+ /*
+ IF adodb15.dll is loaded SQLDescribeCol should return the length of
+ LONGTEXT columns as 2G instead of 4G
+ */
+ is_num(pcColSz, 2147483647L);
+
+ ok_stmt(hstmt1, SQLFreeStmt(hstmt1, SQL_CLOSE));
+
+ ok_sql(hstmt1, "DROP TABLE IF EXISTS t_bug13776");
+
+ free_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ FreeLibrary(ado_dll);
+#endif
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(my_resultset)
ADD_TEST(t_convert_type)
@@ -1922,8 +2118,12 @@
ADD_TEST(bug6157)
ADD_TEST(t_binary_collation)
ADD_TODO(t_bug29239)
- ADD_TODO(t_bug30958)
- ADD_TODO(t_bug31246)
+ ADD_TEST(t_bug30958)
+ ADD_TEST(t_bug30958_ansi)
+ ADD_TEST(t_bug30958_wchar)
+ ADD_TEST(t_bug31246)
+ ADD_TEST(t_bug13776)
+ ADD_TEST(t_bug13776_auto)
END_TESTS
Modified: branches/guffert/test/my_scroll.c
===================================================================
--- branches/guffert/test/my_scroll.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/test/my_scroll.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -25,8 +25,7 @@
/* Testing basic scrolling feature */
DECLARE_TEST(t_scroll)
{
- SQLRETURN rc;
- SQLUINTEGER i;
+ SQLUINTEGER i;
ok_sql(hstmt, "DROP TABLE IF EXISTS t_scroll");
ok_sql(hstmt, "CREATE TABLE t_scroll (col1 INT)");
@@ -122,8 +121,8 @@
{
SQLRETURN rc;
SQLINTEGER iarray[15];
- SQLLEN nrows;
- SQLUINTEGER i,index;
+ SQLLEN nrows, index;
+ SQLUINTEGER i;
char name[21];
ok_stmt(hstmt, SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE,
@@ -270,7 +269,7 @@
SQLRETURN rc;
SQLLEN nrows;
SQLUINTEGER i;
- const int max_rows=10;
+ const SQLUINTEGER max_rows=10;
ok_stmt(hstmt, SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE,
(SQLPOINTER)SQL_CURSOR_STATIC, 0));
@@ -482,7 +481,7 @@
SQLUINTEGER i;
SQLLEN nrows;
SQLINTEGER iarray[15];
- const int max_rows=10;
+ const SQLUINTEGER max_rows=10;
ok_stmt(hstmt, SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE,
(SQLPOINTER)SQL_CURSOR_STATIC, 0));
@@ -795,7 +794,7 @@
SQLRETURN rc;
SQLLEN nrows;
SQLUINTEGER i;
- const int max_rows=10;
+ const SQLUINTEGER max_rows=10;
ok_stmt(hstmt, SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE,
(SQLPOINTER)SQL_CURSOR_STATIC, 0));
@@ -981,7 +980,7 @@
SQLRETURN rc;
SQLLEN nrows;
SQLINTEGER iarray[15];
- const int max_rows=10;
+ const SQLUINTEGER max_rows=10;
SQLUINTEGER i;
ok_stmt(hstmt, SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE,
Modified: branches/guffert/test/my_types.c
===================================================================
--- branches/guffert/test/my_types.c 2007-11-14 09:48:01 UTC (rev 860)
+++ branches/guffert/test/my_types.c 2007-11-14 19:01:01 UTC (rev 861)
@@ -690,6 +690,37 @@
}
+/**
+ Bug #32171: ODBC Driver incorrectly parses large Unsigned Integers
+*/
+DECLARE_TEST(t_bug32171)
+{
+ SQLUINTEGER in= 4255080020, out;
+ SQLCHAR buff[128];
+
+ ok_sql(hstmt, "DROP TABLE IF EXISTS t_bug32171");
+ ok_sql(hstmt, "CREATE TABLE t_bug32171 (a INT UNSIGNED)");
+
+ sprintf((char *)buff, "INSERT INTO t_bug32171 VALUES ('%lu')", in);
+ ok_stmt(hstmt, SQLExecDirect(hstmt, buff, SQL_NTS));
+
+ ok_sql(hstmt, "SELECT * FROM t_bug32171");
+
+ ok_stmt(hstmt, SQLBindCol(hstmt, 1, SQL_C_ULONG, &out, 0, NULL));
+ ok_stmt(hstmt, SQLFetch(hstmt));
+
+ is_num(out, in);
+
+ expect_stmt(hstmt, SQLFetch(hstmt), SQL_NO_DATA);
+
+ ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
+
+ ok_sql(hstmt, "DROP TABLE IF EXISTS t_bug32171");
+
+ return OK;
+}
+
+
/** Test passing an SQL_C_CHAR to a SQL_WCHAR field. */
DECLARE_TEST(sqlwchar)
{
@@ -771,6 +802,7 @@
ADD_TEST(binary_suffix)
ADD_TEST(float_scale)
ADD_TEST(bit)
+ ADD_TEST(t_bug32171)
ADD_TEST(sqlwchar)
END_TESTS
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r861 - in branches/guffert: . driver setup test | jwinstead | 14 Nov |