Make the regression test output independent of some settings.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 27 Nov 2014 13:32:09 +0000 (15:32 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 27 Nov 2014 13:35:22 +0000 (15:35 +0200)
Namely, UseServerSidePrepare, UseDeclareFetch and Protocol.

test/expected/cursor-movement_1.out [new file with mode: 0644]
test/expected/insertreturning.out
test/expected/params_1.out [new file with mode: 0644]
test/src/common.h
test/src/declare-fetch-commit-test.c
test/src/insertreturning-test.c
test/src/params-test.c

diff --git a/test/expected/cursor-movement_1.out b/test/expected/cursor-movement_1.out
new file mode 100644 (file)
index 0000000..f24c809
--- /dev/null
@@ -0,0 +1,58 @@
+\! "./src/cursor-movement-test"
+connected
+SQL_CURSOR_COMMIT_BEHAVIOR: SQL_CB_PRESERVE
+SQL_CURSOR_ROLLBACK_BEHAVIOR: SQL_CB_CLOSE
+
+fetched: foo1
+fetched: foo2
+fetched: foo3
+fetched: foo4
+fetched: foo5
+fetched: foo6
+fetched: foo7
+fetched: foo8
+fetched: foo9
+fetched: foo10
+Testing SQL_FETCH_NEXT...
+fetched: foo11
+fetched: foo12
+Testing SQL_FETCH_PRIOR...
+fetched: foo11
+Testing SQL_FETCH_ABSOLUTE (5)...
+fetched: foo5
+Testing SQL_FETCH_RELATIVE (+2)...
+fetched: foo7
+Testing SQL_FETCH_RELATIVE (-2)...
+fetched: foo5
+Testing SQL_FETCH_RELATIVE (+1)...
+fetched: foo6
+Testing SQL_FETCH_RELATIVE (0, no movement)...
+fetched: foo6
+Testing SQL_FETCH_FIRST...
+fetched: foo1
+Testing SQL_FETCH_PRIOR before first row...
+Fetch: no data found
+Fetch: no data found
+Testing SQL_FETCH_NEXT...
+fetched: foo1
+Testing SQL_FETCH_LAST...
+fetched: foo3210
+Testing SQL_FETCH_LAST...
+fetched: foo3210
+Testing SQL_FETCH_NEXT at the end of result set
+Fetch: no data found
+Testing SQL_FETCH_NEXT at the end of result set
+Fetch: no data found
+And SQL_FETCH_PRIOR...
+fetched: foo3210
+Testing SQL_FETCH_RELATIVE (+10)...
+Fetch: no data found
+And SQL_FETCH_PRIOR...
+fetched: foo3210
+Testing negative SQL_FETCH_ABSOLUTE (-5)...
+fetched: foo3206
+Testing negative SQL_FETCH_ABSOLUTE, before start...
+Fetch: no data found
+Testing  SQL_FETCH_ABSOLUTE, beoynd end...
+Fetch: no data found
+disconnecting
index 4aec9545a05df2f4048fd04e54b2e2eecb421add..fb88477437feb394a34746dfd42115e00ec890c7 100644 (file)
@@ -1,4 +1,5 @@
 \! "./src/insertreturning-test"
+Testing with UseServerSidePrepare=1
 connected
 # of result cols before SQLExecute: 1, after: 1
 Result set:
@@ -301,3 +302,306 @@ foobar 98
 Result set:
 foobar 99
 disconnecting
+Testing with UseServerSidePrepare=0
+connected
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 0
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 1
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 2
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 3
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 4
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 5
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 6
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 7
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 8
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 9
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 10
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 11
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 12
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 13
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 14
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 15
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 16
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 17
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 18
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 19
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 20
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 21
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 22
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 23
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 24
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 25
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 26
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 27
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 28
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 29
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 30
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 31
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 32
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 33
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 34
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 35
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 36
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 37
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 38
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 39
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 40
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 41
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 42
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 43
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 44
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 45
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 46
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 47
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 48
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 49
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 50
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 51
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 52
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 53
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 54
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 55
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 56
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 57
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 58
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 59
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 60
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 61
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 62
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 63
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 64
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 65
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 66
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 67
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 68
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 69
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 70
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 71
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 72
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 73
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 74
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 75
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 76
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 77
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 78
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 79
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 80
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 81
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 82
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 83
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 84
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 85
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 86
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 87
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 88
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 89
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 90
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 91
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 92
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 93
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 94
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 95
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 96
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 97
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 98
+# of result cols before SQLExecute: 0, after: 1
+Result set:
+foobar 99
+disconnecting
diff --git a/test/expected/params_1.out b/test/expected/params_1.out
new file mode 100644 (file)
index 0000000..00d6ad0
--- /dev/null
@@ -0,0 +1,17 @@
+\! "./src/params-test"
+connected
+# of result cols: 2
+Result set:
+1  0102030405060708
+
+Testing SQLBindParameter with SQLExecDirect...
+Result set:
+foo
+bar
+
+Testing SQLDescribeParam...
+Skipped, SQLDescribeParam is not supported
+# of result cols: 2
+Result set:
+3  foobar
+disconnecting
index 34ad156029767b289a7c3dd0c0f13d4f526c73ef..8803b0d18f23665bf471dc34ef133bac4d9dc651 100644 (file)
@@ -23,6 +23,13 @@ extern SQLHDBC conn;
        exit(1);                                    \
     }
 
+#define CHECK_CONN_RESULT(rc, msg, hconn)  \
+   if (!SQL_SUCCEEDED(rc)) \
+   { \
+       print_diag(msg, SQL_HANDLE_DBC, hconn); \
+       exit(1);                                    \
+    }
+
 extern void print_diag(char *msg, SQLSMALLINT htype, SQLHANDLE handle);
 extern void test_connect_ext(char *extraparams);
 extern void test_connect(void);
index 48e012bc92b6a6396d770e671151ce46f57921b0..5eb11aa53088ad341dd3badcd0da9b436d52ce5e 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Test what happens when the transaction is committed while fetching from a result
- * set.
+ * Test what happens when the transaction is committed while fetching from a
+ * result set.
  */
 
 #include <string.h>
@@ -17,9 +17,10 @@ int main(int argc, char **argv)
 
    /****
      * Run this test with UseDeclareFetch = 1 and Fetch=1, so that we fetch
-     * one row at a time
+     * one row at a time. Protocol=-2 is required so that the cursors survives
+    * the commit.
      */
-   test_connect_ext("UseDeclareFetch=1;Fetch=1");
+   test_connect_ext("UseDeclareFetch=1;Fetch=1;Protocol=7.4-2");
 
    rc = SQLAllocHandle(SQL_HANDLE_STMT, conn, &hstmt);
    if (!SQL_SUCCEEDED(rc))
index ef839e7f1ef932f204fab6f9d7c619d358286e05..0914e57aa7993fcaeaaa3ff6c61c1c4c70f7cd00 100644 (file)
@@ -6,7 +6,31 @@
 
 #include "common.h"
 
+static void run_test();
+
 int main(int argc, char **argv)
+{
+   /*
+    * SQLNumResultCols(), when run after SQLPrepare but before SQLExecute,
+    * return 0 in UseServerSidePrepare=0 mode. Run the test in both modes,
+    * mainly to make the output predictable regardless of the default
+    * UseServerSidePrepare mode in effect.
+    */
+   printf("Testing with UseServerSidePrepare=1\n");
+   test_connect_ext("UseServerSidePrepare=1");
+   run_test();
+   test_disconnect();
+
+   printf("Testing with UseServerSidePrepare=0\n");
+   test_connect_ext("UseServerSidePrepare=0");
+   run_test();
+   test_disconnect();
+
+   return 0;
+}
+
+static void
+run_test()
 {
    SQLRETURN rc;
    HSTMT hstmt = SQL_NULL_HSTMT;
@@ -16,8 +40,6 @@ int main(int argc, char **argv)
    SQLCHAR *sql;
    int i;
 
-   test_connect();
-
    rc = SQLAllocHandle(SQL_HANDLE_STMT, conn, &hstmt);
    if (!SQL_SUCCEEDED(rc))
    {
@@ -81,9 +103,4 @@ int main(int argc, char **argv)
        print_diag("SQLFreeHandle failed", SQL_HANDLE_STMT, hstmt);
        exit(1);
    }
-
-   /* Clean up */
-   test_disconnect();
-
-   return 0;
 }
index 772a62760cc27d9de4ea9685a73b09e654aaa43c..ef19cc341eae49d307065f854060b4a4e455e8a9 100644 (file)
@@ -14,6 +14,7 @@ int main(int argc, char **argv)
    SQLULEN paramSize;
    SQLSMALLINT decDigits;
    SQLSMALLINT nullable;
+   SQLUSMALLINT supported;
 
    test_connect();
 
@@ -90,10 +91,22 @@ int main(int argc, char **argv)
    rc = SQLPrepare(hstmt, (SQLCHAR *) "SELECT id, t FROM testtab1 WHERE id = ?", SQL_NTS);
    CHECK_STMT_RESULT(rc, "SQLPrepare failed", hstmt);
 
-   rc = SQLDescribeParam(hstmt, 1, &dataType, &paramSize, &decDigits, &nullable);
-   CHECK_STMT_RESULT(rc, "SQLDescribeParams failed", hstmt);
-   printf("Param 1: type %s; size %u; dec digits %d; %s\n",
-          datatype_str(dataType), (unsigned int) paramSize, decDigits, nullable_str(nullable));
+   /*
+    * SQLDescribeParam is not supported in UseServerSidePrepare=0 mode, so
+    * check for IM001 result and continue the test if we get that.
+    */
+   rc = SQLGetFunctions(conn, SQL_API_SQLDESCRIBEPARAM, &supported);
+   CHECK_CONN_RESULT(rc, "SQLGetFunctions failed", conn);
+   if (supported)
+   {
+       rc = SQLDescribeParam(hstmt, 1, &dataType, &paramSize, &decDigits, &nullable);
+       CHECK_STMT_RESULT(rc, "SQLDescribeParam failed", hstmt);
+       printf("Param 1: type %s; size %u; dec digits %d; %s\n",
+              datatype_str(dataType), (unsigned int) paramSize, decDigits, nullable_str(nullable));
+   }
+   else
+       printf("Skipped, SQLDescribeParam is not supported\n");
+
    /* bind param  */
    strcpy(param1, "3");
    cbParam1 = SQL_NTS;