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]

Reply via email to