#include #include #include #define STRLEN 128 int main() { SQLHENV env; SQLHDBC dbc; SQLHANDLE stmt; SQLHANDLE stmt2; SQLHANDLE stmt3; SQLRETURN ret; /* ODBC API return status */ SQLCHAR outstr[1024]; SQLSMALLINT outstrlen; SQLLEN len; SQLRETURN rc; int i; /* Allocate an environment handle */ SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); /* We want ODBC 3 support */ SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0); /* Allocate a connection handle */ SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); /* Connect to the DSN mydsn */ ret = SQLDriverConnect(dbc, NULL, "DSN=mysqldb;", SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_COMPLETE); if (!SQL_SUCCEEDED(ret)) { fprintf(stderr, "Failed to connect\n"); exit (1); } printf("Connected\n"); printf("Returned connection string was:\n\t%s\n", outstr); if (ret == SQL_SUCCESS_WITH_INFO) { printf("Driver reported the following diagnostics\n"); } stmt= NULL; stmt2=NULL; stmt3=NULL; SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); SQLExecDirect(stmt, "create table if not exists bug28817(id serial, vchr varchar(100), txt text, chr char(100), primary key(id))", SQL_NTS); SQLExecDirect(stmt, "insert into bug28817(vchr,txt,chr) values ('café au laît','café au laît','café au laît')", SQL_NTS); SQLExecDirect(stmt, "insert into bug28817(vchr,txt,chr) values ('kühles ähriges Möpkenbier','kühles ähriges Möpkenbier','kühles äriges Möpkenbier')", SQL_NTS); SQLExecDirect(stmt, "insert into bug28817(vchr,txt,chr) values ('SÃO PAULO','SÃO PAULO','SÃO PAULO')", SQL_NTS); SQLExecDirect(stmt, "insert into bug28817(vchr,txt,chr) values ('JACAREÍ','JACAREÍ','JACAREÍ')", SQL_NTS); SQLExecDirect(stmt, "insert into bug28817(vchr,txt,chr) values ('bongårdgarden','bongårdgarden','bongårdgarden')", SQL_NTS); SQLExecDirect(stmt, "insert into bug28817(vchr,txt,chr) values ('São','São','São')", SQL_NTS); SQLExecDirect(stmt, "insert into bug28817(vchr,txt,chr) values ('test','test','test')", SQL_NTS); rc=SQLExecDirect(stmt, "select id, vchr, txt, chr from bug28817", SQL_NTS); printf("\n SQLRETURN of SQLExecDirect from the select: %d\n", rc); for(i= 0; SQL_SUCCEEDED(ret = SQLFetch(stmt)); ++i) { int id = 0; char vchr[100]; char txt[100]; char chr[100]; SQLGetData(stmt, 1, SQL_C_LONG, &id, 0, &len); SQLGetData(stmt, 2, SQL_C_CHAR, vchr, STRLEN, &len); SQLGetData(stmt, 3, SQL_C_CHAR, txt, STRLEN, &len); SQLGetData(stmt, 4, SQL_C_CHAR, chr, STRLEN, &len); printf("result of select: id: %u, vchr: %s, txt: %s, chr: %s\n",id,vchr,txt,chr); } SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt3); rc=SQLExecDirect(stmt3, "update bug28817 set vchr='abc', txt='abc', chr='abc' where txt like '%test%')", SQL_NTS); printf("\n SQLRETURN of SQLExecDirect from the update: %d\n", rc); rc=SQLExecDirect(stmt3, "update bug28817 set vchr='Çeçile', txt='Çeçile', chr='Çeçile' where txt like '%café au laît%')", SQL_NTS); printf("\n SQLRETURN of SQLExecDirect from the update: %d\n", rc); rc=SQLExecDirect(stmt3, "update bug28817 set vchr='Çeçile', txt='Çeçile', chr='Çeçile' where vchr like '%kühles ähriges Möpkenbier%')", SQL_NTS); printf("\n SQLRETURN of SQLExecDirect from the update: %d\n", rc); rc=SQLExecDirect(stmt3, "update bug28817 set vchr='Çeçile', txt='Çeçile', chr='Çeçile' where chr like '%bongårdgarden%')", SQL_NTS); printf("\n SQLRETURN of SQLExecDirect from the update: %d\n", rc); rc=SQLExecDirect(stmt3, "select id, vchr, txt, chr from bug28817", SQL_NTS); printf("\n SQLRETURN of SQLExecDirect from the select: %d\n", rc); for(i= 0; SQL_SUCCEEDED(ret = SQLFetch(stmt3)); ++i) { int id = 0; char vchr[100]; char txt[100]; char chr[100]; SQLGetData(stmt3, 1, SQL_C_LONG, &id, 0, &len); SQLGetData(stmt3, 2, SQL_C_CHAR, vchr, STRLEN, &len); SQLGetData(stmt3, 3, SQL_C_CHAR, txt, STRLEN, &len); SQLGetData(stmt3, 4, SQL_C_CHAR, chr, STRLEN, &len); printf("result of select: id: %u, vchr: %s, txt: %s, chr: %s\n",id,vchr,txt,chr); } SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt2); /*rc=SQLExecDirect(stmt2, "drop table if exists bug28817", SQL_NTS); printf("\n SQLRETURN of SQLExecDirect from the select: %d\n", rc);*/ SQLDisconnect(dbc); /* disconnect from driver */ /* free up allocated handles */ SQLFreeHandle(SQL_HANDLE_DBC, dbc); SQLFreeHandle(SQL_HANDLE_ENV, env); return (0); }