summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Linnakangas2014-03-18 19:35:29 +0000
committerHeikki Linnakangas2014-03-18 19:35:29 +0000
commite3d578fd901bde1b462e725613bd7ef826b0b432 (patch)
treeafc85ab46392c3fa08e579d0df78d1150aa80ef6
parent02dbf707424e2d58bf5845b6e418947349e19eea (diff)
Add more test cases for ODBC catalog functions.
Michael Paquier
-rw-r--r--test/expected/catalogfunctions.out182
-rw-r--r--test/expected/sampletables.out10
-rw-r--r--test/sql/sampletables.sql12
-rw-r--r--test/src/catalogfunctions-test.c167
-rw-r--r--test/src/common.c68
-rw-r--r--test/src/common.h6
6 files changed, 420 insertions, 25 deletions
diff --git a/test/expected/catalogfunctions.out b/test/expected/catalogfunctions.out
index 914a8a1..dba7d55 100644
--- a/test/expected/catalogfunctions.out
+++ b/test/expected/catalogfunctions.out
@@ -1,10 +1,192 @@
\! ./src/catalogfunctions-test
connected
+Check for SQLTypeInfo
+Result set metadata:
+TYPE_NAME: VARCHAR(128) digits: 0, nullable
+DATA_TYPE: SMALLINT(5) digits: 0, nullable
+PRECISION: INTEGER(10) digits: 0, nullable
+LITERAL_PREFIX: VARCHAR(128) digits: 0, nullable
+LITERAL_SUFFIX: VARCHAR(128) digits: 0, nullable
+CREATE_PARAMS: VARCHAR(128) digits: 0, nullable
+NULLABLE: SMALLINT(5) digits: 0, nullable
+CASE_SENSITIVE: SMALLINT(5) digits: 0, nullable
+SEARCHABLE: SMALLINT(5) digits: 0, nullable
+UNSIGNED_ATTRIBUTE: SMALLINT(5) digits: 0, nullable
+MONEY: SMALLINT(5) digits: 0, nullable
+AUTO_INCREMENT: SMALLINT(5) digits: 0, nullable
+LOCAL_TYPE_NAME: VARCHAR(128) digits: 0, nullable
+MINIMUM_SCALE: SMALLINT(5) digits: 0, nullable
+MAXIMUM_SCALE: SMALLINT(5) digits: 0, nullable
+SQL_DATA_TYPE: SMALLINT(5) digits: 0, nullable
+SQL_DATETIME_SUB: SMALLINT(5) digits: 0, nullable
+NUM_PREC_RADIX: INTEGER(10) digits: 0, nullable
+INTERVAL_PRECISION: SMALLINT(5) digits: 0, nullable
+Result set:
+varchar 12 255 ' ' max. length 1 1 3 NULL 0 NULL NULL NULL NULL 12 NULL NULL 0
+Check for SQLTables
+Result set metadata:
+TABLE_QUALIFIER: VARCHAR(128) digits: 0, nullable
+TABLE_OWNER: VARCHAR(128) digits: 0, nullable
+TABLE_NAME: VARCHAR(128) digits: 0, nullable
+TABLE_TYPE: VARCHAR(128) digits: 0, nullable
+REMARKS: VARCHAR(254) digits: 0, nullable
Result set:
contrib_regression public booltab TABLE
contrib_regression public byteatab TABLE
contrib_regression public intervaltable TABLE
contrib_regression public testtab1 TABLE
+contrib_regression public testtab_fk TABLE
+Check for SQLColumns
+Result set metadata:
+TABLE_QUALIFIER: VARCHAR(128) digits: 0, nullable
+TABLE_OWNER: VARCHAR(128) digits: 0, nullable
+TABLE_NAME: VARCHAR(128) digits: 0, nullable
+COLUMN_NAME: VARCHAR(128) digits: 0, nullable
+DATA_TYPE: SMALLINT(5) digits: 0, nullable
+TYPE_NAME: VARCHAR(128) digits: 0, nullable
+PRECISION: INTEGER(10) digits: 0, nullable
+LENGTH: INTEGER(10) digits: 0, nullable
+SCALE: SMALLINT(5) digits: 0, nullable
+RADIX: SMALLINT(5) digits: 0, nullable
+NULLABLE: SMALLINT(5) digits: 0, nullable
+REMARKS: VARCHAR(254) digits: 0, nullable
+COLUMN_DEF: VARCHAR(254) digits: 0, nullable
+SQL_DATA_TYPE: SMALLINT(5) digits: 0, nullable
+SQL_DATETIME_SUB: SMALLINT(5) digits: 0, nullable
+CHAR_OCTET_LENGTH: INTEGER(10) digits: 0, nullable
+ORDINAL_POSITION: INTEGER(10) digits: 0, nullable
+IS_NULLABLE: VARCHAR(254) digits: 0, nullable
+DISPLAY_SIZE: INTEGER(10) digits: 0, nullable
+FIELD_TYPE: INTEGER(10) digits: 0, nullable
+AUTO_INCREMENT: INTEGER(10) digits: 0, nullable
+PHYSICAL NUMBER: SMALLINT(5) digits: 0, nullable
+TABLE OID: INTEGER(10) digits: 0, nullable
+BASE TYPEID: INTEGER(10) digits: 0, nullable
+TYPMOD: INTEGER(10) digits: 0, nullable
+Result set:
+contrib_regression public booltab id 4 int4
+contrib_regression public booltab t 12 varchar
+contrib_regression public booltab b 12 bool
+contrib_regression public byteatab id 4 int4
+contrib_regression public byteatab t -3 bytea
+contrib_regression public intervaltable id 4 int4
+contrib_regression public intervaltable iv 12 interval
+contrib_regression public intervaltable d 12 varchar
+contrib_regression public testtab1 id 4 int4
+contrib_regression public testtab1 t 12 varchar
+contrib_regression public testtab1_pkey id 4 int4
+contrib_regression public testtab_fk id 4 int4
+contrib_regression public testtab_fk t 12 varchar
+Check for SQLSpecialColumns
+Result set metadata:
+SCOPE: SMALLINT(5) digits: 0, nullable
+COLUMN_NAME: VARCHAR(128) digits: 0, nullable
+DATA_TYPE: SMALLINT(5) digits: 0, nullable
+TYPE_NAME: VARCHAR(128) digits: 0, nullable
+PRECISION: INTEGER(10) digits: 0, nullable
+LENGTH: INTEGER(10) digits: 0, nullable
+SCALE: SMALLINT(5) digits: 0, nullable
+PSEUDO_COLUMN: SMALLINT(5) digits: 0, nullable
+Result set:
+NULL xmin 4 xid 10 4 0 2
+Check for SQLStatistics
+Result set metadata:
+TABLE_QUALIFIER: VARCHAR(128) digits: 0, nullable
+TABLE_OWNER: VARCHAR(128) digits: 0, nullable
+TABLE_NAME: VARCHAR(128) digits: 0, nullable
+NON_UNIQUE: SMALLINT(5) digits: 0, nullable
+INDEX_QUALIFIER: VARCHAR(128) digits: 0, nullable
+INDEX_NAME: VARCHAR(128) digits: 0, nullable
+TYPE: SMALLINT(5) digits: 0, nullable
+SEQ_IN_INDEX: SMALLINT(5) digits: 0, nullable
+COLUMN_NAME: VARCHAR(128) digits: 0, nullable
+COLLATION: CHAR(1) digits: 0, nullable
+CARDINALITY: INTEGER(10) digits: 0, nullable
+PAGES: INTEGER(10) digits: 0, nullable
+FILTER_CONDITION: VARCHAR(128) digits: 0, nullable
+Result set:
+contrib_regression public testtab1 0 public testtab1_pkey 3 1 id A NULL NULL NULL
+Check for SQLPrimaryKeys
+Result set metadata:
+TABLE_QUALIFIER: VARCHAR(128) digits: 0, nullable
+TABLE_OWNER: VARCHAR(128) digits: 0, nullable
+TABLE_NAME: VARCHAR(128) digits: 0, nullable
+COLUMN_NAME: VARCHAR(128) digits: 0, nullable
+KEY_SEQ: SMALLINT(5) digits: 0, nullable
+PK_NAME: VARCHAR(128) digits: 0, nullable
+Result set:
+contrib_regression public testtab1 id 1 testtab1_pkey
+Check for SQLForeignKeys
+Result set metadata:
+pktable_cat: VARCHAR(64) digits: 0, nullable
+pktable_schem: VARCHAR(64) digits: 0, not nullable
+pktable_name: VARCHAR(64) digits: 0, not nullable
+pkcolumn_name: VARCHAR(64) digits: 0, not nullable
+fktable_cat: VARCHAR(64) digits: 0, nullable
+fktable_schem: VARCHAR(64) digits: 0, not nullable
+fktable_name: VARCHAR(64) digits: 0, not nullable
+fkcolumn_name: VARCHAR(64) digits: 0, not nullable
+key_seq: SMALLINT(5) digits: 0, nullable
+update_rule: SMALLINT(5) digits: 0, nullable
+delete_rule: SMALLINT(5) digits: 0, nullable
+fk_name: VARCHAR(64) digits: 0, not nullable
+pk_name: VARCHAR(64) digits: 0, not nullable
+deferrablity: SMALLINT(5) digits: 0, nullable
+Result set:
+contrib_regression public testtab1 id contrib_regression public testtab_fk id 1 3 3 testtab_fk_id_fkey testtab1_pkey 7
+Check for SQLProcedures
+Result set metadata:
+procedure_cat: VARCHAR(255) digits: 0, nullable
+procedure_schem: VARCHAR(64) digits: 0, not nullable
+procedure_name: VARCHAR(64) digits: 0, not nullable
+num_input_params: VARCHAR(255) digits: 0, nullable
+num_output_params: VARCHAR(255) digits: 0, nullable
+num_result_sets: VARCHAR(255) digits: 0, nullable
+remarks: VARCHAR(255) digits: 0, nullable
+procedure_type: SMALLINT(5) digits: 0, nullable
+Result set:
+ public simple_add 2
+Check for SQLProcedureColumns
+Result set metadata:
+PROCEDURE_CAT: VARCHAR(128) digits: 0, nullable
+PROCEDUR_SCHEM: VARCHAR(128) digits: 0, nullable
+PROCEDURE_NAME: VARCHAR(128) digits: 0, nullable
+COLUMN_NAME: VARCHAR(128) digits: 0, nullable
+COLUMN_TYPE: SMALLINT(5) digits: 0, nullable
+DATA_TYPE: SMALLINT(5) digits: 0, nullable
+TYPE_NAME: VARCHAR(128) digits: 0, nullable
+COLUMN_SIZE: INTEGER(10) digits: 0, nullable
+BUFFER_LENGTH: INTEGER(10) digits: 0, nullable
+DECIMAL_DIGITS: SMALLINT(5) digits: 0, nullable
+NUM_PREC_RADIX: SMALLINT(5) digits: 0, nullable
+NULLABLE: SMALLINT(5) digits: 0, nullable
+REMARKS: VARCHAR(128) digits: 0, nullable
+COLUMN_DEF: VARCHAR(128) digits: 0, nullable
+SQL_DATA_TYPE: SMALLINT(5) digits: 0, nullable
+SQL_DATETIME_SUB: SMALLINT(5) digits: 0, nullable
+CHAR_OCTET_LENGTH: INTEGER(10) digits: 0, nullable
+ORDINAL_POSITION: INTEGER(10) digits: 0, nullable
+IS_NULLABLE: VARCHAR(128) digits: 0, nullable
+Result set:
+contrib_regression public simple_add 1 4 int4 10 4 0 10 2 NULL NULL 4 NULL NULL 1
+contrib_regression public simple_add 1 4 int4 10 4 0 10 2 NULL NULL 4 NULL NULL 2
+contrib_regression public simple_add 4 4 int4 10 4 0 10 2 NULL NULL 4 NULL NULL 3
+Check for SQLTablePrivileges
+Result set metadata:
+TABLE_CAT: VARCHAR(128) digits: 0, nullable
+TABLE_SCHEM: VARCHAR(128) digits: 0, nullable
+TABLE_NAME: VARCHAR(128) digits: 0, nullable
+GRANTOR: VARCHAR(128) digits: 0, nullable
+GRANTEE: VARCHAR(128) digits: 0, nullable
+PRIVILEGE: VARCHAR(128) digits: 0, nullable
+IS_GRANTABLE: VARCHAR(128) digits: 0, nullable
+Result set:
+contrib_regression public testtab1 _SYSTEM INSERT YES
+contrib_regression public testtab1 _SYSTEM SELECT YES
+contrib_regression public testtab1 _SYSTEM UPDATE YES
+contrib_regression public testtab1 _SYSTEM DELETE YES
+contrib_regression public testtab1 _SYSTEM REFERENCES YES
Result set:
contrib_regression public testtab1 TABLE
+contrib_regression public testtab_fk TABLE
disconnecting
diff --git a/test/expected/sampletables.out b/test/expected/sampletables.out
index 51b9073..e4fcb71 100644
--- a/test/expected/sampletables.out
+++ b/test/expected/sampletables.out
@@ -1,8 +1,12 @@
-- This file creates some tables to be used in the tests
-CREATE TABLE testtab1 (id integer, t varchar(20));
+CREATE TABLE testtab1 (id integer PRIMARY KEY, t varchar(20));
INSERT INTO testtab1 VALUES (1, 'foo');
INSERT INTO testtab1 VALUES (2, 'bar');
INSERT INTO testtab1 VALUES (3, 'foobar');
+CREATE TABLE testtab_fk (id integer REFERENCES testtab1, t varchar(20));
+INSERT INTO testtab_fk VALUES (1, 'hoge');
+INSERT INTO testtab_fk VALUES (2, 'pogno');
+INSERT INTO testtab_fk VALUES (3, 'poco');
CREATE TABLE byteatab (id integer, t bytea);
INSERT INTO byteatab VALUES (1, E'\\001\\002\\003\\004\\005\\006\\007\\010'::bytea);
INSERT INTO byteatab VALUES (2, 'bar');
@@ -19,3 +23,7 @@ INSERT INTO booltab VALUES (2, 'yes', true);
INSERT INTO booltab VALUES (3, 'true', true);
INSERT INTO booltab VALUES (4, 'false', false);
INSERT INTO booltab VALUES (5, 'not', false);
+-- Procedure for catalog function checks
+CREATE FUNCTION simple_add(in int, in int, out int)
+AS $$ SELECT $1 + $2;
+$$ LANGUAGE SQL;
diff --git a/test/sql/sampletables.sql b/test/sql/sampletables.sql
index 78a7eb6..a917de7 100644
--- a/test/sql/sampletables.sql
+++ b/test/sql/sampletables.sql
@@ -1,10 +1,15 @@
-- This file creates some tables to be used in the tests
-CREATE TABLE testtab1 (id integer, t varchar(20));
+CREATE TABLE testtab1 (id integer PRIMARY KEY, t varchar(20));
INSERT INTO testtab1 VALUES (1, 'foo');
INSERT INTO testtab1 VALUES (2, 'bar');
INSERT INTO testtab1 VALUES (3, 'foobar');
+CREATE TABLE testtab_fk (id integer REFERENCES testtab1, t varchar(20));
+INSERT INTO testtab_fk VALUES (1, 'hoge');
+INSERT INTO testtab_fk VALUES (2, 'pogno');
+INSERT INTO testtab_fk VALUES (3, 'poco');
+
CREATE TABLE byteatab (id integer, t bytea);
INSERT INTO byteatab VALUES (1, E'\\001\\002\\003\\004\\005\\006\\007\\010'::bytea);
INSERT INTO byteatab VALUES (2, 'bar');
@@ -23,3 +28,8 @@ INSERT INTO booltab VALUES (2, 'yes', true);
INSERT INTO booltab VALUES (3, 'true', true);
INSERT INTO booltab VALUES (4, 'false', false);
INSERT INTO booltab VALUES (5, 'not', false);
+
+-- Procedure for catalog function checks
+CREATE FUNCTION simple_add(in int, in int, out int)
+AS $$ SELECT $1 + $2;
+$$ LANGUAGE SQL;
diff --git a/test/src/catalogfunctions-test.c b/test/src/catalogfunctions-test.c
index 180d1f1..3d2d9ac 100644
--- a/test/src/catalogfunctions-test.c
+++ b/test/src/catalogfunctions-test.c
@@ -1,16 +1,35 @@
+/*
+ * This test is used to check the output and processing of the catalog
+ * functions listed as below:
+ * - SQLGetTypeInfo
+ * - SQLTables
+ * - SQLColumns
+ * - SQLSpecialColumns
+ * - SQLStatistics
+ * - SQLPrimaryKeys
+ * - SQLForeignKeys
+ * - SQLProcedureColumns
+ * - SQLTablePrivileges
+ * - SQLColumnPrivileges
+ * - SQLProcedures
+ */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "common.h"
-int main(int argc, char **argv)
+int
+main(int argc, char **argv)
{
int rc;
HSTMT hstmt = SQL_NULL_HSTMT;
char sql[100000];
char *sqlend;
int i;
+ /* Cases where output is limited to relevant information only */
+ SQLSMALLINT sql_tab_privileges_ids[6] = {1, 2, 3, 4, 6, 7};
+ SQLSMALLINT sql_column_ids[6] = {1, 2, 3, 4, 5, 6};
test_connect();
@@ -21,22 +40,158 @@ int main(int argc, char **argv)
exit(1);
}
- rc = SQLTables(hstmt, "", SQL_NTS,
- "public", SQL_NTS,
- "%", SQL_NTS,
- "TABLE", SQL_NTS);
+ /* Check for SQLGetTypeInfo */
+ printf("Check for SQLTypeInfo\n");
+ rc = SQLGetTypeInfo(hstmt, SQL_VARCHAR);
+ CHECK_STMT_RESULT(rc, "SQLGetTypeInfo failed", hstmt);
+ print_result_meta(hstmt);
+ print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+ /* Check for SQLTables */
+ printf("Check for SQLTables\n");
+ rc = SQLTables(hstmt, NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "%", SQL_NTS,
+ (SQLCHAR *) "TABLE", SQL_NTS);
CHECK_STMT_RESULT(rc, "SQLTables failed", hstmt);
+ print_result_meta(hstmt);
+ print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /* Check for SQLColumns */
+ printf("Check for SQLColumns\n");
+ rc = SQLColumns(hstmt,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "%", SQL_NTS,
+ NULL, 0);
+ CHECK_STMT_RESULT(rc, "SQLColumns failed", hstmt);
+ print_result_meta(hstmt);
+ /*
+ * Print only the 6 first columns, we do not want for example
+ * to get the OID in output, and this information looks to be
+ * enough.
+ */
+ print_result_series(hstmt, sql_column_ids, 6);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /* Check for SQLColumnPrivileges */
+ //printf("Check for SQLColumnPrivileges\n");
+ //rc = SQLColumnPrivileges(hstmt,
+ // NULL, 0,
+ // (SQLCHAR *) "public", SQL_NTS,
+ // (SQLCHAR *) "testtab1", SQL_NTS,
+ // (SQLCHAR *) "id", SQL_NTS);
+ //CHECK_STMT_RESULT(rc, "SQLColumnPrivileges failed", hstmt);
+ //print_result_meta(hstmt);
+ //print_result(hstmt);
+ //rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ //CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /* Check for SQLSpecialColumns */
+ printf("Check for SQLSpecialColumns\n");
+ rc = SQLSpecialColumns(hstmt, SQL_ROWVER,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "testtab1", SQL_NTS,
+ SQL_SCOPE_SESSION,
+ SQL_NO_NULLS);
+ CHECK_STMT_RESULT(rc, "SQLSpecialColumns failed", hstmt);
+ print_result_meta(hstmt);
+ print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /*
+ * Check for SQLStatistics. It is important to note that this function
+ * returns statistics like the number of pages used and the number of
+ * index scans.
+ */
+ printf("Check for SQLStatistics\n");
+ rc = SQLStatistics(hstmt,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "testtab1", SQL_NTS,
+ 0, 0);
+ CHECK_STMT_RESULT(rc, "SQLStatistics failed", hstmt);
+ print_result_meta(hstmt);
+ print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /* Check for SQLPrimaryKeys */
+ printf("Check for SQLPrimaryKeys\n");
+ rc = SQLPrimaryKeys(hstmt,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "testtab1", SQL_NTS);
+ CHECK_STMT_RESULT(rc, "SQLPrimaryKeys failed", hstmt);
+ print_result_meta(hstmt);
+ print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /* Check for SQLForeignKeys */
+ printf("Check for SQLForeignKeys\n");
+ rc = SQLForeignKeys(hstmt,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "testtab1", SQL_NTS,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "testtab_fk", SQL_NTS);
+ CHECK_STMT_RESULT(rc, "SQLForeignKeys failed", hstmt);
+ print_result_meta(hstmt);
+ print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /* Check for SQLProcedures */
+ printf("Check for SQLProcedures\n");
+ rc = SQLProcedures(hstmt,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "simple_add", SQL_NTS);
+ CHECK_STMT_RESULT(rc, "SQLProcedures failed", hstmt);
+ print_result_meta(hstmt);
+ print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+
+ /* Check for SQLProcedureColumns */
+ printf("Check for SQLProcedureColumns\n");
+ rc = SQLProcedureColumns(hstmt,
+ NULL, 0,
+ (SQLCHAR *) "public", SQL_NTS,
+ (SQLCHAR *) "simple_add", SQL_NTS,
+ NULL, 0);
+ CHECK_STMT_RESULT(rc, "SQLProcedureColumns failed", hstmt);
+ print_result_meta(hstmt);
print_result(hstmt);
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
+ /* Check for SQLTablePrivileges */
+ printf("Check for SQLTablePrivileges\n");
+ rc = SQLTablePrivileges(hstmt,
+ NULL, 0,
+ (SQLCHAR *) "public", 0,
+ (SQLCHAR *) "testtab1", SQL_NTS);
+ CHECK_STMT_RESULT(rc, "SQLTablePrivileges failed", hstmt);
+ print_result_meta(hstmt);
+ print_result_series(hstmt, sql_tab_privileges_ids, 6);
rc = SQLFreeStmt(hstmt, SQL_CLOSE);
CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
/*
+ * Extra tests.
* Older versions of the driver had a bug in handling table-types lists
* longer than 32 entries. Check for that.
*/
-
rc = SQLTables(hstmt, "", SQL_NTS,
"public", SQL_NTS,
"testtab%", SQL_NTS,
diff --git a/test/src/common.c b/test/src/common.c
index 962d7d3..091dd1a 100644
--- a/test/src/common.c
+++ b/test/src/common.c
@@ -163,23 +163,17 @@ const char *nullable_str(SQLSMALLINT nullable)
}
void
-print_result_meta(HSTMT hstmt)
+print_result_meta_series(HSTMT hstmt,
+ SQLSMALLINT *colids,
+ SQLSMALLINT numcols)
{
- SQLRETURN rc;
- SQLSMALLINT numcols;
int i;
- rc = SQLNumResultCols(hstmt, &numcols);
- if (!SQL_SUCCEEDED(rc))
- {
- print_diag("SQLNumResultCols failed", SQL_HANDLE_STMT, hstmt);
- return;
- }
-
printf("Result set metadata:\n");
- for (i = 1; i <= numcols; i++)
+ for (i = 0; i < numcols; i++)
{
+ SQLRETURN rc;
SQLCHAR colname[50];
SQLSMALLINT colnamelen;
SQLSMALLINT datatype;
@@ -187,7 +181,7 @@ print_result_meta(HSTMT hstmt)
SQLSMALLINT decdigits;
SQLSMALLINT nullable;
- rc = SQLDescribeCol(hstmt, i,
+ rc = SQLDescribeCol(hstmt, colids[i],
colname, sizeof(colname),
&colnamelen,
&datatype,
@@ -206,10 +200,11 @@ print_result_meta(HSTMT hstmt)
}
void
-print_result(HSTMT hstmt)
+print_result_meta(HSTMT hstmt)
{
SQLRETURN rc;
- SQLSMALLINT numcols;
+ SQLSMALLINT numcols, i;
+ SQLSMALLINT *colids;
rc = SQLNumResultCols(hstmt, &numcols);
if (!SQL_SUCCEEDED(rc))
@@ -218,6 +213,21 @@ print_result(HSTMT hstmt)
return;
}
+ colids = (SQLSMALLINT *) malloc(numcols * sizeof(SQLSMALLINT));
+ for (i = 0; i < numcols; i++)
+ colids[i] = i + 1;
+ print_result_meta_series(hstmt, colids, numcols);
+ free(colids);
+}
+
+/*
+ * Print result only for the selected columns.
+ */
+void
+print_result_series(HSTMT hstmt, SQLSMALLINT *colids, SQLSMALLINT numcols)
+{
+ SQLRETURN rc;
+
printf("Result set:\n");
while(1)
{
@@ -230,9 +240,9 @@ print_result(HSTMT hstmt)
int i;
SQLLEN ind;
- for (i = 1; i <= numcols; i++)
+ for (i = 0; i < numcols; i++)
{
- rc = SQLGetData(hstmt,i, SQL_C_CHAR, buf, sizeof(buf), &ind);
+ rc = SQLGetData(hstmt, colids[i], SQL_C_CHAR, buf, sizeof(buf), &ind);
if (!SQL_SUCCEEDED(rc))
{
print_diag("SQLGetData failed", SQL_HANDLE_STMT, hstmt);
@@ -240,7 +250,7 @@ print_result(HSTMT hstmt)
}
if (ind == SQL_NULL_DATA)
strcpy(buf, "NULL");
- printf("%s%s", (i > 1) ? "\t" : "", buf);
+ printf("%s%s", (i > 0) ? "\t" : "", buf);
}
printf("\n");
}
@@ -251,3 +261,27 @@ print_result(HSTMT hstmt)
}
}
}
+
+/*
+ * Print result on all the columns
+ */
+void
+print_result(HSTMT hstmt)
+{
+ SQLRETURN rc;
+ SQLSMALLINT numcols, i;
+ SQLSMALLINT *colids;
+
+ rc = SQLNumResultCols(hstmt, &numcols);
+ if (!SQL_SUCCEEDED(rc))
+ {
+ print_diag("SQLNumResultCols failed", SQL_HANDLE_STMT, hstmt);
+ return;
+ }
+
+ colids = (SQLSMALLINT *) malloc(numcols * sizeof(SQLSMALLINT));
+ for (i = 0; i < numcols; i++)
+ colids[i] = i + 1;
+ print_result_series(hstmt, colids, numcols);
+ free(colids);
+}
diff --git a/test/src/common.h b/test/src/common.h
index 2feceb9..34ad156 100644
--- a/test/src/common.h
+++ b/test/src/common.h
@@ -27,6 +27,12 @@ extern void print_diag(char *msg, SQLSMALLINT htype, SQLHANDLE handle);
extern void test_connect_ext(char *extraparams);
extern void test_connect(void);
extern void test_disconnect(void);
+extern void print_result_meta_series(HSTMT hstmt,
+ SQLSMALLINT *colids,
+ SQLSMALLINT numcols);
+extern void print_result_series(HSTMT hstmt,
+ SQLSMALLINT *colids,
+ SQLSMALLINT numcols);
extern void print_result_meta(HSTMT hstmt);
extern void print_result(HSTMT hstmt);
extern const char *datatype_str(SQLSMALLINT datatype);