static cell_t SQL_IsFieldNull(IPluginContext *pContext, const cell_t *params) { IQuery *query; HandleError err; if ((err = ReadQueryHndl(params[1], pContext, &query)) != HandleError_None) { return pContext->ThrowNativeError("Invalid query Handle %x (error: %d)", params[1], err); } IResultSet *rs = query->GetResultSet(); if (!rs) { return pContext->ThrowNativeError("No current result set"); } IResultRow *row = rs->CurrentRow(); if (!row) { return pContext->ThrowNativeError("Current result set has no fetched rows"); } if ((unsigned)params[2] >= rs->GetFieldCount()) { return pContext->ThrowNativeError("Invalid field index %d", params[2]); } return row->IsNull(params[2]) ? 1 : 0; }
static cell AMX_NATIVE_CALL SQL_IsNull(AMX *amx, cell *params) { AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query); if (!qInfo) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]); return 0; } IResultSet *rs = qInfo->info.rs; if (!rs || rs->IsDone()) { MF_LogError(amx, AMX_ERR_NATIVE, "No result set in this query!"); return 0; } unsigned int col = static_cast<unsigned int>(params[2]); if (col >= rs->FieldCount()) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid column: %d", col); return 0; } IResultRow *rr = rs->GetRow(); return rr->IsNull(col) ? 1 : 0; }