1 /*
2  * Purpose: Test check dbcolinfo/dbtableinfo informations
3  * Functions: dbresults dbsqlexec dbtablecolinfo
4  */
5 
6 #include "common.h"
7 
8 static int failed = 0;
9 
10 static void
check_is(const char * value,const char * expected)11 check_is(const char *value, const char *expected)
12 {
13 	if (strcmp(value, expected) == 0)
14 		return;
15 
16 	failed = 1;
17 	fprintf(stderr, "Wrong value, got \"%s\" expected \"%s\"\n", value, expected);
18 }
19 
20 static void
check_contains(const char * value,const char * expected)21 check_contains(const char *value, const char *expected)
22 {
23 	if (strstr(value, expected) != NULL)
24 		return;
25 
26 	failed = 1;
27 	fprintf(stderr, "Wrong value, got \"%s\" expected to contains \"%s\"\n", value, expected);
28 }
29 
30 int
main(int argc,char ** argv)31 main(int argc, char **argv)
32 {
33 	LOGINREC *login;
34 	DBPROCESS *dbproc;
35 	int n_col;
36 	DBCOL2 col2;
37 
38 	set_malloc_options();
39 
40 	read_login_info(argc, argv);
41 
42 	printf("Starting %s\n", argv[0]);
43 
44 	dbinit();
45 
46 	dberrhandle(syb_err_handler);
47 	dbmsghandle(syb_msg_handler);
48 
49 	printf("About to logon\n");
50 
51 	login = dblogin();
52 	DBSETLPWD(login, PASSWORD);
53 	DBSETLUSER(login, USER);
54 	DBSETLAPP(login, "colinfo");
55 
56 	printf("About to open\n");
57 
58 	dbproc = dbopen(login, SERVER);
59 	if (strlen(DATABASE))
60 		dbuse(dbproc, DATABASE);
61 	dbloginfree(login);
62 
63 	printf("creating tables\n");
64 	sql_cmd(dbproc);
65 	dbsqlexec(dbproc);
66 	while (dbresults(dbproc) != NO_MORE_RESULTS) {
67 		/* nop */
68 	}
69 
70 	sql_cmd(dbproc); /* select */
71 	dbsqlexec(dbproc);
72 
73 	if (dbresults(dbproc) != SUCCEED) {
74 		printf("Was expecting a result set.");
75 		exit(1);
76 	}
77 
78 	for (n_col = 1; n_col <= 3; ++n_col) {
79 		col2.SizeOfStruct = sizeof(col2);
80 		if (dbtablecolinfo(dbproc, n_col, (DBCOL *) &col2) != SUCCEED) {
81 			fprintf(stderr, "dbtablecolinfo failed for col %d\n", n_col);
82 			failed = 1;
83 			continue;
84 		}
85 
86 		if (n_col == 1) {
87 			check_is(col2.Name, "number");
88 			check_contains(col2.TableName, "#colinfo_table");
89 		} else if (n_col == 2) {
90 			check_is(col2.Name, "is_a_string");
91 			check_contains(col2.TableName, "#colinfo_table");
92 		} else if (n_col == 3) {
93 			check_is(col2.Name, "dollars");
94 			check_contains(col2.TableName, "#test_table");
95 		}
96 	}
97 
98 	dbexit();
99 
100 	printf("%s %s\n", __FILE__, (failed ? "failed!" : "OK"));
101 	return failed ? 1 : 0;
102 }
103