Changeset: 69cb7319fd6a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/69cb7319fd6a
Added Files:
sql/odbc/tests/Tests/All
sql/odbc/tests/Tests/ODBCStmtAttr.SQL.bat
sql/odbc/tests/Tests/ODBCStmtAttr.SQL.sh
Modified Files:
clients/odbc/tests/ODBCStmtAttr.c
Branch: default
Log Message:
Enable ODBC test program for SQLGetStmtAttr() and SQLSetStmtAttr().
diffs (211 lines):
diff --git a/clients/odbc/tests/ODBCStmtAttr.c
b/clients/odbc/tests/ODBCStmtAttr.c
--- a/clients/odbc/tests/ODBCStmtAttr.c
+++ b/clients/odbc/tests/ODBCStmtAttr.c
@@ -12,6 +12,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
+#include <string.h>
#include <sql.h>
#include <sqlext.h>
@@ -31,7 +32,12 @@ prerr(SQLSMALLINT tpe, SQLHANDLE hnd, co
fprintf(stderr, "(message truncated)\n");
/* fall through */
case SQL_SUCCESS:
- fprintf(stderr, "%s: %s: SQLstate %s, Errnr %d, Message %s\n",
func, pref, (char*)state, (int)errnr, (char*)msg);
+ if ((strcmp(func,"SQLSetStmtAttr") != 0)
+ || (strcmp(pref,"Info") != 0)
+ || (strcmp((char*)state,"01S02") != 0)
+ || errnr != 0
+ || (strncmp((char*)msg,"[MonetDB][ODBC Driver 11.", 25) != 0))
+ fprintf(stderr, "%s: %s: SQLstate %s, Errnr %d, Message
%s\n", func, pref, (char*)state, (int)errnr, (char*)msg);
break;
case SQL_INVALID_HANDLE:
fprintf(stderr, "%s: %s, invalid handle passed to error
function\n", func, pref);
@@ -70,31 +76,59 @@ check(SQLRETURN ret, SQLSMALLINT tpe, SQ
}
}
+static const char *
+StmtAttribute2name(SQLINTEGER attribute)
+{
+ switch (attribute) {
+ case SQL_ATTR_MAX_LENGTH:
+ return "SQL_ATTR_MAX_LENGTH";
+ case SQL_ATTR_MAX_ROWS:
+ return "SQL_ATTR_MAX_ROWS";
+ case SQL_ATTR_QUERY_TIMEOUT:
+ return "SQL_ATTR_QUERY_TIMEOUT";
+ default:
+ fprintf(stderr, "StmtAttribute2name: Unexpected value %d\n",
attribute);
+ return "NOT YET IMPLEMENTED";
+ }
+}
+
static void
-GetSetReGetStmtAttr(SQLHANDLE stmt, SQLINTEGER attribute, const char *
attr_name, SQLULEN value)
+GetSetReGetStmtAttr(SQLHANDLE stmt, SQLINTEGER attribute, SQLULEN value, const
char * expected)
{
SQLRETURN ret;
SQLULEN ul;
SQLINTEGER resultlen;
+ size_t expct_len = strlen(expected);
+ size_t outp_len = expct_len + 1000;
+ char * outp = malloc(outp_len);
+ size_t pos = 0;
+ const char * attr_name = StmtAttribute2name(attribute);
// first get the actual value from the server
ret = SQLGetStmtAttr(stmt, attribute, &ul, sizeof(ul), &resultlen);
- fprintf(stderr, "Get %s: %lu\n", attr_name, (long unsigned int) ul);
+ pos += snprintf(outp + pos, outp_len - pos, "Get %s: %lu\n", attr_name,
(long unsigned int) ul);
check(ret, SQL_HANDLE_STMT, stmt, "SQLGetStmtAttr");
// next change the value on the server
ret = SQLSetStmtAttr(stmt, attribute, &value, 0);
- fprintf(stderr, "Set %s: %lu\n", attr_name, (long unsigned int) value);
- check(ret, SQL_HANDLE_STMT, stmt, "SQLSetStmtAttr");
+ pos += snprintf(outp + pos, outp_len - pos, "Set %s: %lu\n", attr_name,
(long unsigned int) value);
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLSetStmtAttr"); // this
produces: SQLSetStmtAttr: Info: SQLstate 01S02, Errnr 0, Message [MonetDB][ODBC
Driver 11.44.0]Option value changed
// next re-get the value from the server, should be the same as the set
value
ul = 123456789;
ret = SQLGetStmtAttr(stmt, attribute, &ul, sizeof(ul), &resultlen);
check(ret, SQL_HANDLE_STMT, stmt, "SQLGetStmtAttr");
- fprintf(stderr, "Get changed %s: %lu", attr_name, (long unsigned int)
ul);
+ pos += snprintf(outp + pos, outp_len - pos, "Get %s: %lu\n", attr_name,
(long unsigned int) ul);
if (ul != value)
- fprintf(stderr, " which is different from %lu !!", (long
unsigned int) value);
- fprintf(stderr, "\n\n");
+ pos += snprintf(outp + pos, outp_len - pos, " which is
different from %lu !!\n", (long unsigned int) value);
+
+ if (strcmp(expected, outp) != 0) {
+ fprintf(stderr, "Testing %s\nExpected:\n%s\nGotten:\n%s\n",
+ attr_name, expected, outp);
+ }
+
+ /* cleanup */
+ free(outp);
}
int
@@ -138,20 +172,66 @@ main(int argc, char **argv)
check(ret, SQL_HANDLE_DBC, dbc, "SQLAllocHandle (STMT)");
/* run actual tests */
- GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT,
"SQL_ATTR_QUERY_TIMEOUT", -1); /* test also what happens with a negative
value */
- GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT,
"SQL_ATTR_QUERY_TIMEOUT", 0);
- GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT,
"SQL_ATTR_QUERY_TIMEOUT", 3600);
- GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT,
"SQL_ATTR_QUERY_TIMEOUT", 2147483647);
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, 0,
+ "Get SQL_ATTR_MAX_LENGTH: 0\n"
+ "Set SQL_ATTR_MAX_LENGTH: 0\n"
+ "Get SQL_ATTR_MAX_LENGTH: 0\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, 65535,
+ "Get SQL_ATTR_MAX_LENGTH: 0\n"
+ "Set SQL_ATTR_MAX_LENGTH: 65535\n"
+ "Get SQL_ATTR_MAX_LENGTH: 0\n"
+ " which is different from 65535 !!\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, 2147483641,
+ "Get SQL_ATTR_MAX_LENGTH: 0\n"
+ "Set SQL_ATTR_MAX_LENGTH: 2147483641\n"
+ "Get SQL_ATTR_MAX_LENGTH: 0\n"
+ " which is different from 2147483641 !!\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, -1, /* test also
what happens with a negative value */
+ "Get SQL_ATTR_MAX_LENGTH: 0\n"
+ "Set SQL_ATTR_MAX_LENGTH: 18446744073709551615\n"
+ "Get SQL_ATTR_MAX_LENGTH: 0\n"
+ " which is different from 18446744073709551615 !!\n");
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, "SQL_ATTR_MAX_LENGTH",
-2); /* test also what happens with a negative value */
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, "SQL_ATTR_MAX_LENGTH",
0);
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, "SQL_ATTR_MAX_LENGTH",
65535);
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_LENGTH, "SQL_ATTR_MAX_LENGTH",
2147483647);
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, 0,
+ "Get SQL_ATTR_MAX_ROWS: 0\n"
+ "Set SQL_ATTR_MAX_ROWS: 0\n"
+ "Get SQL_ATTR_MAX_ROWS: 0\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, 100000,
+ "Get SQL_ATTR_MAX_ROWS: 0\n"
+ "Set SQL_ATTR_MAX_ROWS: 100000\n"
+ "Get SQL_ATTR_MAX_ROWS: 0\n"
+ " which is different from 100000 !!\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, 2147483642,
+ "Get SQL_ATTR_MAX_ROWS: 0\n"
+ "Set SQL_ATTR_MAX_ROWS: 2147483642\n"
+ "Get SQL_ATTR_MAX_ROWS: 0\n"
+ " which is different from 2147483642 !!\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, -2, /* test also
what happens with a negative value */
+ "Get SQL_ATTR_MAX_ROWS: 0\n"
+ "Set SQL_ATTR_MAX_ROWS: 18446744073709551614\n"
+ "Get SQL_ATTR_MAX_ROWS: 0\n"
+ " which is different from 18446744073709551614 !!\n");
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, "SQL_ATTR_MAX_ROWS", -3);
/* test also what happens with a negative value */
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, "SQL_ATTR_MAX_ROWS", 0);
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, "SQL_ATTR_MAX_ROWS",
100000);
- GetSetReGetStmtAttr(stmt, SQL_ATTR_MAX_ROWS, "SQL_ATTR_MAX_ROWS",
2147483647);
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT, 0,
+ "Get SQL_ATTR_QUERY_TIMEOUT: 0\n"
+ "Set SQL_ATTR_QUERY_TIMEOUT: 0\n"
+ "Get SQL_ATTR_QUERY_TIMEOUT: 2147483647\n"
+ " which is different from 0 !!\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT, 3600,
+ "Get SQL_ATTR_QUERY_TIMEOUT: 2147483647\n"
+ "Set SQL_ATTR_QUERY_TIMEOUT: 3600\n"
+ "Get SQL_ATTR_QUERY_TIMEOUT: 2147483647\n"
+ " which is different from 3600 !!\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT, 2147483643,
+ "Get SQL_ATTR_QUERY_TIMEOUT: 2147483647\n"
+ "Set SQL_ATTR_QUERY_TIMEOUT: 2147483643\n"
+ "Get SQL_ATTR_QUERY_TIMEOUT: 2147483647\n"
+ " which is different from 2147483643 !!\n");
+ GetSetReGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT, -3, /* test also
what happens with a negative value */
+ "Get SQL_ATTR_QUERY_TIMEOUT: 2147483647\n"
+ "Set SQL_ATTR_QUERY_TIMEOUT: 18446744073709551613\n"
+ "Get SQL_ATTR_QUERY_TIMEOUT: 2147483647\n"
+ " which is different from 18446744073709551613 !!\n");
ret = SQLFreeHandle(SQL_HANDLE_STMT, stmt);
check(ret, SQL_HANDLE_STMT, stmt, "SQLFreeHandle (STMT)");
diff --git a/sql/odbc/tests/Tests/All b/sql/odbc/tests/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/odbc/tests/Tests/All
@@ -0,0 +1,1 @@
+HAVE_ODBC&NOT_WIN32?ODBCStmtAttr
diff --git a/sql/odbc/tests/Tests/ODBCStmtAttr.SQL.bat
b/sql/odbc/tests/Tests/ODBCStmtAttr.SQL.bat
new file mode 100755
--- /dev/null
+++ b/sql/odbc/tests/Tests/ODBCStmtAttr.SQL.bat
@@ -0,0 +1,5 @@
+@echo off
+
+prompt # $t $g
+
+ODBCStmtAttr.exe
diff --git a/sql/odbc/tests/Tests/ODBCStmtAttr.SQL.sh
b/sql/odbc/tests/Tests/ODBCStmtAttr.SQL.sh
new file mode 100755
--- /dev/null
+++ b/sql/odbc/tests/Tests/ODBCStmtAttr.SQL.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+ODBCINI=$PWD/odbc.ini
+trap "rm $ODBCINI" 0 15
+cat > $ODBCINI <<EOF
+[MonetDB-Test]
+Description = Test MonetDB Data Source
+Driver = $LIBDIR/libMonetODBC.so
+Setup = $LIBDIR/libMonetODBCs.so
+Host = localhost
+Port = $MAPIPORT
+Database = $TSTDB
+User = monetdb
+Password = monetdb
+Debug =
+
+EOF
+export ODBCINI
+eval ODBCStmtAttr MonetDB-Test
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]