void tsc_bm (int ctype, int kssz, int ac) { long bm1; int bmfill = 0; int bm_no; int c; option_t opts [] = {{SQL_USE_BOOKMARKS, 1}, {-1, 0L}}; long bm[N_BMS]; long a_row_no[N_BMS + 10]; long b_row_no[N_BMS + 10]; char * t = "select A.ROW_NO, A.STRING1, B.STRING1, '--', B.ROW_NO " "from T1 A join T1 B on B.ROW_NO between A.ROW_NO - 2 and A.ROW_NO + 2 order by a.row_no, b.row_no"; printf ("========== Bookmark Fetch cr=%s, keyset=%d AC=%d\n", cr_type_name (ctype), kssz, ac); bm_expected (a_row_no, b_row_no); SQLSetConnectOption (hdbc1, SQL_AUTOCOMMIT, ac); t1_window (&tw1, "CR1", hdbc1, t, ctype, kssz, 3, SQL_CONCUR_READ_ONLY, opts); tw_fetch (&tw1, SQL_FETCH_NEXT, 0); for (c = 0; c < N_BMS / 3; c++) { SQLGetStmtOption (tw1.tw_stmt, SQL_GET_BOOKMARK, &bm[bmfill]); SQLGetStmtOption (tw1.tw_stmt, SQL_GET_BOOKMARK, &bm1); if (bm1 != bm[bmfill]) fprintf (stderr, "Two consecutive bookmarks different for same row\n"); tw_set_pos (&tw1, 2, SQL_POSITION); SQLGetStmtOption (tw1.tw_stmt, SQL_GET_BOOKMARK, &bm[bmfill + 1]); tw_set_pos (&tw1, 3, SQL_POSITION); SQLGetStmtOption (tw1.tw_stmt, SQL_GET_BOOKMARK, &bm[bmfill + 2]); T_ICOL (&tw1, 0, t1_row_no, a_row_no[bmfill]); T_ICOL (&tw1, 0, t1_fi2, b_row_no[bmfill]); bmfill += 3; tw_fetch (&tw1, SQL_FETCH_NEXT, 0); } for (bm_no = 2; bm_no < bmfill; bm_no += 2) { tw_fetch (&tw1, SQL_FETCH_BOOKMARK, bm[bm_no]); T_ICOL (&tw1, 0, t1_row_no, a_row_no[bm_no]); T_ICOL (&tw1, 0, t1_fi2, b_row_no[bm_no]); } SQLTransact (SQL_NULL_HENV, tw1.tw_hdbc, SQL_COMMIT); tw_close (&tw1); }
static int odbc_dispatch11(void) { unsigned long retval; PWord rval; int rtype; PWord arg1; int type1; PWord arg2; int type2; PWord arg3; int type3; PWord arg4; int type4; PWord arg5; int type5; PI_getan(&arg1,&type1,1); if (type1 != PI_INT) if (!CI_get_integer((unsigned long *)&arg1,type1)) PI_FAIL; PI_getan(&arg2,&type2,2); if (type2 != PI_INT) if (!CI_get_integer((unsigned long *)&arg2,type2)) PI_FAIL; PI_getan(&arg3,&type3,3); if (type3 != PI_INT) if (!CI_get_integer((unsigned long *)&arg3,type3)) PI_FAIL; PI_getan(&arg4,&type4,4); if (type4 != PI_INT) if (!CI_get_integer((unsigned long *)&arg4,type4)) PI_FAIL; PI_getan(&arg5,&type5,5); switch(arg1) { case 0: retval = (unsigned long) SQLAllocHandleStd(((SQLSMALLINT ) arg2),((SQLHANDLE ) arg3),((SQLHANDLE * ) arg4)); break; case 1: retval = (unsigned long) SQLParamOptions(((SQLHSTMT ) arg2),((SQLUINTEGER ) arg3),((SQLUINTEGER * ) arg4)); break; case 2: retval = (unsigned long) SQLTransact(((SQLHENV ) arg2),((SQLHDBC ) arg3),((SQLUSMALLINT ) arg4)); break; case 3: retval = (unsigned long) SQLSetStmtOption(((SQLHSTMT ) arg2),((SQLUSMALLINT ) arg3),((SQLUINTEGER ) arg4)); break; case 4: retval = (unsigned long) SQLSetConnectOption(((SQLHDBC ) arg2),((SQLUSMALLINT ) arg3),((SQLUINTEGER ) arg4)); break; case 5: retval = (unsigned long) SQLPutData(((SQLHSTMT ) arg2),((SQLPOINTER ) arg3),((SQLINTEGER ) arg4)); break; case 6: retval = (unsigned long) SQLGetStmtOption(((SQLHSTMT ) arg2),((SQLUSMALLINT ) arg3),((SQLPOINTER ) arg4)); break; case 7: retval = (unsigned long) SQLGetFunctions(((SQLHDBC ) arg2),((SQLUSMALLINT ) arg3),((SQLUSMALLINT * ) arg4)); break; case 8: retval = (unsigned long) SQLGetConnectOption(((SQLHDBC ) arg2),((SQLUSMALLINT ) arg3),((SQLPOINTER ) arg4)); break; case 9: retval = (unsigned long) SQLFetchScroll(((SQLHSTMT ) arg2),((SQLSMALLINT ) arg3),((SQLINTEGER ) arg4)); break; case 10: retval = (unsigned long) SQLEndTran(((SQLSMALLINT ) arg2),((SQLHANDLE ) arg3),((SQLSMALLINT ) arg4)); break; case 11: retval = (unsigned long) SQLAllocHandle(((SQLSMALLINT ) arg2),((SQLHANDLE ) arg3),((SQLHANDLE * ) arg4)); break; default: PI_FAIL; } PI_makedouble(&rval,&rtype,(double) retval); if (PI_unify(arg5,type5,rval,rtype)) PI_SUCCEED; PI_FAIL; }