Modified:
trunk/include/odbctest.h
trunk/testsuites/t_jbalint/catalog.c
trunk/testsuites/t_jbalint/t_jbalint.h
trunk/testsuites/t_jbalint/t_jbalint_suite.c
Log:
changed param name in CHECK_SQL_RC macro so it won't clash with outer code (eg, if
x->rc)
cleaned up SQLSpecialColumns() test and added new tests
Modified: trunk/include/odbctest.h
===================================================================
--- trunk/include/odbctest.h 2007-03-06 14:14:10 UTC (rev 35)
+++ trunk/include/odbctest.h 2007-03-07 07:22:55 UTC (rev 36)
@@ -147,10 +147,10 @@
* CuTest test-case pointer in the current scope.
*/
#define CHECK_SQL_S(x, hnd) {\
- SQLRETURN rc = (x); \
- test_sql_return(rc, #x, __FILE__, __LINE__, __FUNCTION__, \
+ SQLRETURN rcX = (x); \
+ test_sql_return(rcX, #x, __FILE__, __LINE__, __FUNCTION__, \
hnd, SQL_HANDLE_STMT, SQL_SUCCESS); \
- CuAssertIntEquals_Msg(tc, "SQLRETURN", SQL_SUCCESS, rc); \
+ CuAssertIntEquals_Msg(tc, "SQLRETURN", SQL_SUCCESS, rcX); \
}
/*
Modified: trunk/testsuites/t_jbalint/catalog.c
===================================================================
--- trunk/testsuites/t_jbalint/catalog.c 2007-03-06 14:14:10 UTC (rev 35)
+++ trunk/testsuites/t_jbalint/catalog.c 2007-03-07 07:22:55 UTC (rev 36)
@@ -191,42 +191,127 @@
free_statement(stmt);
}
+/* struct for representing a row returns from SQLSpecialColumns() */
+typedef struct
+{
+ SQLINTEGER scope;
+ SQLCHAR *colname;
+ SQLINTEGER type;
+ SQLCHAR *typestr;
+ SQLINTEGER colsize;
+ SQLINTEGER buflen;
+ SQLINTEGER decdigits;
+ SQLINTEGER pseudocol;
+} sc_row;
+
+void specialcolumns_check(CuTest *tc, SQLHANDLE stmt, sc_row *specialcols)
+{
+ SQLRETURN rc;
+ int i = 0;
+ sc_row tr;
+ SQLCHAR tcol[STRLEN];
+ SQLCHAR ttype[STRLEN];
+ tr.colname = tcol;
+ tr.typestr = ttype;
+
+ CHECK_SQL_S(SQLBindCol(stmt, 1, SQL_C_SLONG, &tr.scope, 0, NULL), stmt);
+ CHECK_SQL_S(SQLBindCol(stmt, 2, SQL_C_CHAR,
+ tr.colname, STRLEN, NULL), stmt);
+ CHECK_SQL_S(SQLBindCol(stmt, 3, SQL_C_SLONG, &tr.type, 0, NULL), stmt);
+ CHECK_SQL_S(SQLBindCol(stmt, 4, SQL_C_CHAR,
+ tr.typestr, STRLEN, NULL), stmt);
+ CHECK_SQL_S(SQLBindCol(stmt, 5, SQL_C_SLONG, &tr.colsize, 0, NULL), stmt);
+ CHECK_SQL_S(SQLBindCol(stmt, 6, SQL_C_SLONG, &tr.buflen, 0, NULL), stmt);
+ CHECK_SQL_S(SQLBindCol(stmt, 7, SQL_C_SLONG, &tr.decdigits, 0, NULL), stmt);
+ CHECK_SQL_S(SQLBindCol(stmt, 8, SQL_C_SLONG, &tr.pseudocol, 0, NULL), stmt);
+
+ while((rc = SQLFetch(stmt)) == SQL_SUCCESS)
+ {
+ sc_row d = specialcols[i++];
+ test_printf("fld=%s,type=%s,scope=%d\n",
+ tr.colname, tr.typestr, tr.scope);
+ OT_ASSERT_INT_MSG("rowid scope should be what we requested",
+ d.scope, tr.scope);
+ OT_ASSERT_STR_MSG("should be one rowid", d.colname, tr.colname);
+ OT_ASSERT_INT_MSG("id type", d.type, tr.type);
+ OT_ASSERT_STR_MSG("type name", d.typestr, tr.typestr);
+ OT_ASSERT_INT_MSG("column size", d.colsize, tr.colsize); /* ?? */
+ OT_ASSERT_INT_MSG("buffer length", d.buflen, tr.buflen);
+ OT_ASSERT_INT_MSG("decimal digits", d.decdigits, tr.decdigits);
+ OT_ASSERT_INT_MSG("pseudo column", d.pseudocol, tr.pseudocol);
+ }
+
+ CHECK_SQL_RC(rc, stmt, SQL_HANDLE_STMT, SQL_NO_DATA);
+ OT_ASSERT_INT_MSG("SQLFetch() ran to completion", SQL_NO_DATA, rc);
+}
+
/* Test getting primary keys using the rowid param. */
OT_TEST_METHOD(specialcolumns_pk_as_rowid)
{
SQLHANDLE stmt = get_statement();
- SQLINTEGER vint;
- SQLCHAR vstr[STRLEN];
+ sc_row specialcols[] = {{SQL_SCOPE_SESSION, "rowid",
+ SQL_INTEGER, "integer", 11, 11, 0, SQL_PC_NOT_PSEUDO}};
CHECK_SQL_S(SQLSpecialColumns(stmt, SQL_BEST_ROWID,
NULL, SQL_NTS, NULL, SQL_NTS, "simple1", SQL_NTS,
/* scope is ignored in the driver */
SQL_SCOPE_SESSION, SQL_NULLABLE), stmt);
- CHECK_SQL_S(SQLFetch(stmt), stmt);
- CHECK_SQL_S(SQLGetData(stmt, 1, SQL_C_SLONG, &vint, 0, NULL), stmt);
- OT_ASSERT_INT_MSG("rowid scope should be what we requested",
- SQL_SCOPE_SESSION, vint);
- CHECK_SQL_S(SQLGetData(stmt, 2, SQL_C_CHAR, vstr, STRLEN, NULL), stmt);
- OT_ASSERT_STR_MSG("should be one rowid", "rowid", vstr);
- CHECK_SQL_S(SQLGetData(stmt, 3, SQL_C_SLONG, &vint, 0, NULL), stmt);
- OT_ASSERT_INT_MSG("id type", SQL_INTEGER, vint);
- CHECK_SQL_S(SQLGetData(stmt, 4, SQL_C_CHAR, vstr, STRLEN, NULL), stmt);
- OT_ASSERT_STR_MSG("type name", "integer", vstr);
- CHECK_SQL_S(SQLGetData(stmt, 5, SQL_C_SLONG, &vint, 0, NULL), stmt);
- OT_ASSERT_INT_MSG("column size", 11, vint); /* ?? */
- CHECK_SQL_S(SQLGetData(stmt, 6, SQL_C_SLONG, &vint, 0, NULL), stmt);
- OT_ASSERT_INT_MSG("buffer length", 11, vint);
- CHECK_SQL_S(SQLGetData(stmt, 7, SQL_C_SLONG, &vint, 0, NULL), stmt);
- OT_ASSERT_INT_MSG("decimal digits", 0, vint);
- CHECK_SQL_S(SQLGetData(stmt, 8, SQL_C_SLONG, &vint, 0, NULL), stmt);
- OT_ASSERT_INT_MSG("pseudo column", SQL_PC_NOT_PSEUDO, vint);
+ test_printf("\tTest single PK as rowid\n");
+ specialcolumns_check(tc, stmt, specialcols);
- CHECK_SQL_RC(SQLFetch(stmt), stmt, SQL_HANDLE_STMT, SQL_NO_DATA);
+ free_statement(stmt);
+}
+/* Test retrieving a unique index column as the row id. */
+OT_TEST_METHOD(specialcolumns_uidx_as_rowid)
+{
+ SQLHANDLE stmt = get_statement();
+ const char *crtqry = "create table tst_rowid (a int not null, unique(a))";
+ const char *drpqry = "drop table if exists tst_rowid";
+ sc_row specialcols[] = {{SQL_SCOPE_SESSION, "a",
+ SQL_INTEGER, "integer", 11, 11, 0, SQL_PC_NOT_PSEUDO}};
+
+ CHECK_SQL_S(SQLExecDirect(stmt, (SQLCHAR *)drpqry, SQL_NTS), stmt);
+ CHECK_SQL_S(SQLExecDirect(stmt, (SQLCHAR *)crtqry, SQL_NTS), stmt);
+
+ CHECK_SQL_S(SQLSpecialColumns(stmt, SQL_BEST_ROWID, NULL, SQL_NTS,
+ NULL, SQL_NTS, "tst_rowid", SQL_NTS,
+ SQL_SCOPE_SESSION, SQL_NULLABLE), stmt);
+
+ test_printf("\tTest single-col unique idx (non-pk) as rowid\n");
+ specialcolumns_check(tc, stmt, specialcols);
+
free_statement(stmt);
}
+/* Test recognizing a multi-column unique index as row id. */
+OT_TEST_METHOD(specialcolumns_multicol_uidx_as_rowid)
+{
+ SQLHANDLE stmt = get_statement();
+ const char *crtqry = "create table tst_rowid ("
+ "a int not null, b int not null, unique(a, b))";
+ const char *drpqry = "drop table if exists tst_rowid";
+ sc_row specialcols[] = {
+ {SQL_SCOPE_SESSION, "a",
+ SQL_INTEGER, "integer", 11, 11, 0, SQL_PC_NOT_PSEUDO},
+ {SQL_SCOPE_SESSION, "b",
+ SQL_INTEGER, "integer", 11, 11, 0, SQL_PC_NOT_PSEUDO},
+ };
+
+ CHECK_SQL_S(SQLExecDirect(stmt, (SQLCHAR *)drpqry, SQL_NTS), stmt);
+ CHECK_SQL_S(SQLExecDirect(stmt, (SQLCHAR *)crtqry, SQL_NTS), stmt);
+
+ CHECK_SQL_S(SQLSpecialColumns(stmt, SQL_BEST_ROWID, NULL, SQL_NTS,
+ NULL, SQL_NTS, "tst_rowid", SQL_NTS,
+ SQL_SCOPE_SESSION, SQL_NULLABLE), stmt);
+
+ test_printf("\tTest multi-col unique idx (non-pk) as rowid\n");
+ specialcolumns_check(tc, stmt, specialcols);
+
+ free_statement(stmt);
+}
+
/*
* Test basic use of SQLPrimaryKeys.
*
Modified: trunk/testsuites/t_jbalint/t_jbalint.h
===================================================================
--- trunk/testsuites/t_jbalint/t_jbalint.h 2007-03-06 14:14:10 UTC (rev 35)
+++ trunk/testsuites/t_jbalint/t_jbalint.h 2007-03-07 07:22:55 UTC (rev 36)
@@ -28,6 +28,8 @@
OT_TEST_METHOD(describecol_alltypes);
OT_TEST_METHOD(specialcolumns_nonulls);
OT_TEST_METHOD(specialcolumns_pk_as_rowid);
+OT_TEST_METHOD(specialcolumns_uidx_as_rowid);
+OT_TEST_METHOD(specialcolumns_multicol_uidx_as_rowid);
OT_TEST_METHOD(primarykeys);
OT_TEST_METHOD(statistics);
OT_TEST_METHOD(columns);
Modified: trunk/testsuites/t_jbalint/t_jbalint_suite.c
===================================================================
--- trunk/testsuites/t_jbalint/t_jbalint_suite.c 2007-03-06 14:14:10 UTC (rev 35)
+++ trunk/testsuites/t_jbalint/t_jbalint_suite.c 2007-03-07 07:22:55 UTC (rev 36)
@@ -29,6 +29,8 @@
OT_SUITE_ADD_TEST(describecol_alltypes, NULL, NULL);
OT_SUITE_ADD_TEST(specialcolumns_nonulls, NULL, NULL);
OT_SUITE_ADD_TEST(specialcolumns_pk_as_rowid, NULL, NULL);
+ OT_SUITE_ADD_TEST(specialcolumns_uidx_as_rowid, NULL, NULL);
+ OT_SUITE_ADD_TEST(specialcolumns_multicol_uidx_as_rowid, NULL, NULL);
OT_SUITE_ADD_TEST(primarykeys, NULL, NULL);
OT_SUITE_ADD_TEST(statistics, NULL, NULL);
OT_SUITE_ADD_TEST(columns, NULL, NULL);
| Thread |
|---|
| • ODBC C-tests commit: r36 - in trunk: include testsuites/t_jbalint | jbalint | 7 Mar |