in src/failover/failover_service.cc [354:386]
bool FailoverService::is_connected_to_reader(SQLHDBC hdbc) {
if (SQL_NULL_HDBC == hdbc) {
LOG(WARNING) << "[Failover Service] null HDBC passed to reader check.";
return false;
}
SQLHSTMT stmt = SQL_NULL_HANDLE;
bool is_reader = false;
if (!odbc_helper_->AllocateHandle(SQL_HANDLE_STMT, hdbc, stmt, "[Failover Service] reader check failed to allocate handle")) {
return false;
}
if (!odbc_helper_->ExecuteQuery(stmt, AS_SQLTCHAR(dialect_->GetIsReaderQuery().c_str()),
"[Failover Service] reader check failed to execute topology query")) {
return false;
}
SQLLEN rt = 0;
SQLRETURN rc = SQLBindCol(stmt, 1, SQL_BIT, &is_reader, sizeof(is_reader), &rt);
if (!OdbcHelper::CheckResult(rc, "[Failover Service] reader check failed to bind is_reader column", stmt, SQL_HANDLE_STMT)) {
OdbcHelper::Cleanup(SQL_NULL_HANDLE, SQL_NULL_HANDLE, stmt);
return false;
}
if (!odbc_helper_->FetchResults(stmt, "[Failover Service] failed to fetch if is_reader from results")) {
return false;
}
LOG(INFO) << "[Failover Service] check reader queried: " << is_reader;
OdbcHelper::Cleanup(SQL_NULL_HANDLE, SQL_NULL_HANDLE, stmt);
return is_reader;
}