#include <stdio.h>
#include <sql.h>
#include <sqlext.h>
void printError(SQLHANDLE handle) {
char message[256];
SQLSMALLINT i = 0;
while (SQLGetDiagRec(SQL_HANDLE_DBC, handle, ++i, NULL, NULL, (SQLCHAR*)message, sizeof(message), NULL) != SQL_NO_DATA) {
printf("%s\n", message);
}
}
BOOL runQuery(SQLHSTMT stmt, char* query) {
SQLRETURN ret = SQLExecDirect(stmt, (SQLCHAR*)query, SQL_NTS);
printf("Query: %s\n", query);
return SQL_SUCCEEDED(ret);
}
int main(int argc, const char * argv[]) {
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
char* connStr = "Driver=/usr/local/Cellar/psqlodbc/HEAD/lib/psqlodbcw.so;Server=localhost;Database=postgres";
if (SQLDriverConnect(dbc, NULL, (SQLCHAR*)connStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT) != SQL_SUCCESS) {
printf("Unable to connect to database\n");
return 1;
}
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
for (int i = 0; i < 3; ++i) {
char query[50];
sprintf(query, "SELECT * FROM t%d", i);
if (!runQuery(stmt, query)) {
printError(dbc); // this always prints 'ERROR: relation "t0" does not exist' - that's wrong!
}
}
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}