Line data Source code
1 : #include "common.h"
2 :
3 : /*
4 : * Test setting current "catalog" before and after connection using
5 : * either SQLConnect and SQLDriverConnect
6 : */
7 :
8 : static int failed = 0;
9 :
10 : static void init_connect(void);
11 :
12 : static void
13 40 : init_connect(void)
14 : {
15 40 : CHKAllocEnv(&odbc_env, "S");
16 40 : CHKAllocConnect(&odbc_conn, "S");
17 40 : }
18 :
19 : static void
20 20 : normal_connect(void)
21 : {
22 20 : CHKConnect(T(odbc_server), SQL_NTS, T(odbc_user), SQL_NTS, T(odbc_password), SQL_NTS, "SI");
23 20 : }
24 :
25 : static void
26 20 : driver_connect(const char *conn_str)
27 : {
28 : SQLTCHAR tmp[1024];
29 : SQLSMALLINT len;
30 :
31 20 : CHKDriverConnect(NULL, T(conn_str), SQL_NTS, tmp, TDS_VECTOR_SIZE(tmp), &len, SQL_DRIVER_NOPROMPT, "SI");
32 20 : }
33 :
34 : static void
35 60 : check_dbname(const char *dbname)
36 : {
37 : SQLINTEGER len;
38 : SQLTCHAR out[512];
39 : char sql[1024];
40 :
41 60 : len = sizeof(out);
42 60 : CHKGetConnectAttr(SQL_ATTR_CURRENT_CATALOG, (SQLPOINTER) out, sizeof(out), &len, "SI");
43 :
44 60 : if (strcmp(C(out), dbname) != 0) {
45 0 : fprintf(stderr, "Current database (%s) is not %s\n", C(out), dbname);
46 0 : failed = 1;
47 : }
48 :
49 60 : sprintf(sql, "IF DB_NAME() <> '%s' SELECT 1", dbname);
50 60 : CHKAllocStmt(&odbc_stmt, "S");
51 60 : odbc_check_no_row(sql);
52 60 : SQLFreeStmt(odbc_stmt, SQL_DROP);
53 60 : odbc_stmt = SQL_NULL_HSTMT;
54 60 : }
55 :
56 : static void
57 50 : set_dbname(const char *dbname)
58 : {
59 50 : CHKSetConnectAttr(SQL_ATTR_CURRENT_CATALOG, (SQLPOINTER) T(dbname), strlen(dbname)*sizeof(SQLTCHAR), "SI");
60 50 : }
61 :
62 : int
63 10 : main(void)
64 : {
65 : char tmp[1024*3];
66 :
67 10 : if (odbc_read_login_info())
68 0 : exit(1);
69 :
70 : /* try setting db name before connect */
71 10 : printf("SQLConnect before 1..\n");
72 10 : init_connect();
73 10 : set_dbname("master");
74 10 : normal_connect();
75 10 : check_dbname("master");
76 :
77 : /* check change after connection */
78 10 : printf("SQLConnect after..\n");
79 10 : set_dbname("tempdb");
80 10 : check_dbname("tempdb");
81 :
82 10 : printf("SQLConnect after not existing..\n");
83 10 : strcpy(tmp, "IDontExist");
84 10 : CHKSetConnectAttr(SQL_ATTR_CURRENT_CATALOG, (SQLPOINTER) tmp, strlen(tmp), "E");
85 10 : check_dbname("tempdb");
86 :
87 10 : odbc_disconnect();
88 :
89 : /* try setting db name before connect */
90 10 : printf("SQLConnect before 2..\n");
91 10 : init_connect();
92 10 : set_dbname("tempdb");
93 10 : normal_connect();
94 10 : check_dbname("tempdb");
95 10 : odbc_disconnect();
96 :
97 : /* try connect string with using DSN */
98 10 : printf("SQLDriverConnect before 1..\n");
99 10 : sprintf(tmp, "DSN=%s;UID=%s;PWD=%s;DATABASE=%s;", odbc_server, odbc_user, odbc_password, odbc_database);
100 10 : init_connect();
101 10 : set_dbname("master");
102 10 : driver_connect(tmp);
103 10 : check_dbname(odbc_database);
104 10 : odbc_disconnect();
105 :
106 : /* try connect string with using DSN */
107 10 : printf("SQLDriverConnect before 2..\n");
108 10 : sprintf(tmp, "DSN=%s;UID=%s;PWD=%s;", odbc_server, odbc_user, odbc_password);
109 10 : init_connect();
110 10 : set_dbname("tempdb");
111 10 : driver_connect(tmp);
112 10 : check_dbname("tempdb");
113 10 : odbc_disconnect();
114 :
115 10 : if (failed) {
116 0 : printf("Some tests failed\n");
117 0 : return 1;
118 : }
119 :
120 10 : printf("Done.\n");
121 10 : return 0;
122 : }
|