SQLRETURN SQLGetEnvAttr(SQLHENV env, SQLINTEGER attr, SQLPOINTER valueBuf, SQLINTEGER valueBufLen, SQLINTEGER* valueResLen) { using namespace odbc; using namespace type_traits; using app::ApplicationDataBuffer; LOG_MSG("SQLGetEnvAttr called"); Environment *environment = reinterpret_cast<Environment*>(env); if (!environment) return SQL_INVALID_HANDLE; SqlLen outResLen; ApplicationDataBuffer outBuffer(OdbcNativeType::AI_DEFAULT, valueBuf, static_cast<int32_t>(valueBufLen), &outResLen); environment->GetAttribute(attr, outBuffer); if (valueResLen) *valueResLen = static_cast<SQLSMALLINT>(outResLen); return environment->GetDiagnosticRecords().GetReturnCode(); }
SQLRETURN SQLEndTran(SQLSMALLINT handleType, SQLHANDLE handle, SQLSMALLINT completionType) { using namespace odbc; LOG_MSG("SQLEndTran called"); SQLRETURN result; switch (handleType) { case SQL_HANDLE_ENV: { Environment *env = reinterpret_cast<Environment*>(handle); if (!env) return SQL_INVALID_HANDLE; if (completionType == SQL_COMMIT) env->TransactionCommit(); else env->TransactionRollback(); result = env->GetDiagnosticRecords().GetReturnCode(); break; } case SQL_HANDLE_DBC: { Connection *conn = reinterpret_cast<Connection*>(handle); if (!conn) return SQL_INVALID_HANDLE; if (completionType == SQL_COMMIT) conn->TransactionCommit(); else conn->TransactionRollback(); result = conn->GetDiagnosticRecords().GetReturnCode(); break; } default: { result = SQL_INVALID_HANDLE; break; } } return result; }
SQLRETURN SQLSetEnvAttr(SQLHENV env, SQLINTEGER attr, SQLPOINTER value, SQLINTEGER valueLen) { using odbc::Environment; LOG_MSG("SQLSetEnvAttr called"); Environment *environment = reinterpret_cast<Environment*>(env); if (!environment) return SQL_INVALID_HANDLE; environment->SetAttribute(attr, value, valueLen); return environment->GetDiagnosticRecords().GetReturnCode(); }
SQLRETURN SQLAllocConnect(SQLHENV env, SQLHDBC* conn) { using odbc::Environment; using odbc::Connection; LOG_MSG("SQLAllocConnect called"); *conn = SQL_NULL_HDBC; Environment *environment = reinterpret_cast<Environment*>(env); if (!environment) return SQL_INVALID_HANDLE; Connection *connection = environment->CreateConnection(); if (!connection) return environment->GetDiagnosticRecords().GetReturnCode(); *conn = reinterpret_cast<SQLHDBC>(connection); return SQL_SUCCESS; }