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