Line data Source code
1 : #include "common.h"
2 :
3 : static SQLLEN cnamesize;
4 : static char output[256];
5 :
6 : static void
7 48 : ReadCol(int i)
8 : {
9 48 : memset(output, 'x', sizeof(output));
10 48 : strcpy(output, "NULL");
11 48 : CHKGetData(i, SQL_C_CHAR, output, sizeof(output), &cnamesize, "S");
12 48 : }
13 :
14 : static const char *proc = "stat_proc";
15 : static const char *table = "stat_proc";
16 : static const char *column = "@t";
17 :
18 : #define LEN(x) (x) ? strlen(x) : 0
19 :
20 : static void
21 16 : TestProc(const char *catalog, const char *type, const char *expected)
22 : {
23 : char sql[256];
24 16 : char *schema = NULL;
25 :
26 16 : odbc_command("IF OBJECT_ID('stat_proc') IS NOT NULL DROP PROC stat_proc");
27 :
28 16 : sprintf(sql, "CREATE PROC stat_proc(@t %s) AS RETURN 0", type);
29 16 : odbc_command(sql);
30 :
31 16 : column = "@t";
32 16 : CHKProcedureColumns(T(catalog), LEN(catalog), T(schema), LEN(schema), T(proc), LEN(proc), T(column), LEN(column), "SI");
33 :
34 16 : CHKFetch("SI");
35 :
36 16 : ReadCol(6);
37 16 : if (strcmp(output, expected) != 0) {
38 0 : fprintf(stderr, "Got \"%s\" expected \"%s\"\n", output, expected);
39 0 : odbc_disconnect();
40 0 : exit(1);
41 : }
42 :
43 16 : CHKCloseCursor("SI");
44 16 : ODBC_FREE();
45 16 : }
46 :
47 : static void
48 32 : TestTable(const char *catalog, const char *type, const char *expected)
49 : {
50 : char sql[256];
51 32 : char *schema = NULL;
52 :
53 32 : if (catalog) {
54 16 : schema = "dbo";
55 16 : sprintf(sql, "IF OBJECT_ID('%s.%s.stat_t') IS NOT NULL DROP TABLE %s.%s.stat_t", catalog, schema, catalog, schema);
56 16 : odbc_command(sql);
57 16 : sprintf(sql, "CREATE TABLE %s.%s.stat_t(t %s)", catalog, schema, type);
58 : } else {
59 16 : odbc_command("IF OBJECT_ID('stat_t') IS NOT NULL DROP TABLE stat_t");
60 16 : sprintf(sql, "CREATE TABLE stat_t(t %s)", type);
61 : }
62 :
63 32 : odbc_command(sql);
64 :
65 32 : column = "t";
66 32 : table = "stat_t";
67 32 : CHKColumns(T(catalog), LEN(catalog), T(schema), LEN(schema), T(table), LEN(table), T(column), LEN(column), "SI");
68 :
69 32 : CHKFetch("SI");
70 :
71 32 : ReadCol(5);
72 32 : if (strcmp(output, expected) != 0) {
73 0 : fprintf(stderr, "Got \"%s\" expected \"%s\"\n", output, expected);
74 0 : odbc_disconnect();
75 0 : exit(1);
76 : }
77 :
78 32 : CHKCloseCursor("SI");
79 32 : ODBC_FREE();
80 32 : }
81 :
82 :
83 : #define STR(n) str(int_buf, n)
84 :
85 : static const char *
86 : str(char *buf, int n)
87 : {
88 48 : sprintf(buf, "%d", n);
89 : return buf;
90 : }
91 :
92 : static void
93 16 : set_dbname(const char *dbname)
94 : {
95 16 : CHKSetConnectAttr(SQL_ATTR_CURRENT_CATALOG, (SQLPOINTER) T(dbname), strlen(dbname)*sizeof(SQLTCHAR), "SI");
96 16 : }
97 :
98 : int
99 8 : main(void)
100 : {
101 : char int_buf[32];
102 :
103 8 : odbc_use_version3 = 0;
104 8 : odbc_connect();
105 :
106 8 : TestProc(NULL, "DATETIME", STR(SQL_TIMESTAMP));
107 8 : TestTable(NULL, "DATETIME", STR(SQL_TIMESTAMP));
108 8 : set_dbname("master");
109 8 : TestTable(odbc_database, "DATETIME", STR(SQL_TIMESTAMP));
110 :
111 8 : odbc_disconnect();
112 :
113 :
114 8 : odbc_use_version3 = 1;
115 8 : odbc_connect();
116 :
117 8 : TestProc(NULL, "DATETIME", STR(SQL_TYPE_TIMESTAMP));
118 8 : TestTable(NULL, "DATETIME", STR(SQL_TYPE_TIMESTAMP));
119 8 : set_dbname("master");
120 8 : TestTable(odbc_database, "DATETIME", STR(SQL_TYPE_TIMESTAMP));
121 :
122 8 : odbc_disconnect();
123 :
124 8 : printf("Done.\n");
125 : return 0;
126 : }
|