bool FailoverService::is_connected_to_writer()

in src/failover/failover_service.cc [388:413]


bool FailoverService::is_connected_to_writer(SQLHDBC hdbc) {
    SQLHSTMT stmt = SQL_NULL_HANDLE;
    SQLTCHAR writer_id[BUFFER_SIZE];

    if (!odbc_helper_->AllocateHandle(SQL_HANDLE_STMT, hdbc, stmt, "[Failover Service] writer failed to allocate handle")) {
        return false;
    }

    if (!odbc_helper_->ExecuteQuery(stmt, AS_SQLTCHAR(dialect_->GetWriterIdQuery().c_str()),
                                  "[Failover Service] writer failed to execute writer query")) {
        return false;
    }

    SQLLEN rt = 0;
    SQLRETURN rc = SQLBindCol(stmt, 1, SQL_C_SLONG, &writer_id, sizeof(writer_id), &rt);
    if (!OdbcHelper::CheckResult(rc, "[Failover Service] writer failed to bind writer_id column", stmt, SQL_HANDLE_STMT)) {
        OdbcHelper::Cleanup(SQL_NULL_HANDLE, SQL_NULL_HANDLE, stmt);
        return false;
    }

    if (!odbc_helper_->FetchResults(stmt, "[Failover Service] writer failed to fetch writer from results")) {
        return false;
    }

    return writer_id[0] != TEXT('\0');
}