DB_ROW zbx_db_fetch(DB_RESULT result) { #if defined(HAVE_IBM_DB2) int i; #elif defined(HAVE_ORACLE) sword rc; static char errbuf[512]; sb4 errcode; #endif if (NULL == result) return NULL; #if defined(HAVE_IBM_DB2) if (SUCCEED != zbx_ibm_db2_success(SQLFetch(result->hstmt))) /* e.g., SQL_NO_DATA_FOUND */ return NULL; for (i = 0; i < result->ncolumn; i++) { result->values[i] = (SQL_NULL_DATA == result->values_len[i] ? NULL : result->values_cli[i]); } return result->values; #elif defined(HAVE_MYSQL) return mysql_fetch_row(result); #elif defined(HAVE_ORACLE) if (OCI_NO_DATA == (rc = OCIStmtFetch2(result->stmthp, oracle.errhp, 1, OCI_FETCH_NEXT, 0, OCI_DEFAULT))) return NULL; if (OCI_SUCCESS == rc) return result->values; if (OCI_SUCCESS != (rc = OCIErrorGet((dvoid *)oracle.errhp, (ub4)1, (text *)NULL, &errcode, (text *)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR))) { zabbix_errlog(ERR_Z3006, rc, zbx_oci_error(rc)); return NULL; } switch (errcode) { case 3113: /* ORA-03113: end-of-file on communication channel */ case 3114: /* ORA-03114: not connected to ORACLE */ zabbix_errlog(ERR_Z3006, errcode, errbuf); return NULL; } return result->values; #elif defined(HAVE_POSTGRESQL) /* free old data */ if (NULL != result->values) zbx_free(result->values); /* EOF */ if (result->cursor == result->row_num) return NULL; /* init result */ result->fld_num = PQnfields(result->pg_result); if (result->fld_num > 0) { int i; result->values = zbx_malloc(result->values, sizeof(char *) * result->fld_num); for (i = 0; i < result->fld_num; i++) { if (PQgetisnull(result->pg_result, result->cursor, i)) { result->values[i] = NULL; } else { result->values[i] = PQgetvalue(result->pg_result, result->cursor, i); if (PQftype(result->pg_result, i) == ZBX_PG_BYTEAOID) /* binary data type BYTEAOID */ zbx_pg_unescape_bytea((u_char *)result->values[i]); } } } result->cursor++; return result->values; #elif defined(HAVE_SQLITE3) /* EOF */ if (result->curow >= result->nrow) return NULL; if (NULL == result->data) return NULL; result->curow++; /* NOTE: first row == header row */ return &(result->data[result->curow * result->ncolumn]); #endif }
DB_ROW zbx_db_fetch(DB_RESULT result) { #ifdef HAVE_MYSQL if(!result) return NULL; return mysql_fetch_row(result); #endif #ifdef HAVE_POSTGRESQL int i; /* EOF */ if(!result) return NULL; /* free old data */ if(result->values) { zbx_free(result->values); result->values = NULL; } /* EOF */ if(result->cursor == result->row_num) return NULL; /* init result */ result->fld_num = PQnfields(result->pg_result); if(result->fld_num > 0) { result->values = zbx_malloc(result->values, sizeof(char*) * result->fld_num); for(i = 0; i < result->fld_num; i++) { if(PQgetisnull(result->pg_result, result->cursor, i)) { result->values[i] = NULL; } else { result->values[i] = PQgetvalue(result->pg_result, result->cursor, i); if(PQftype(result->pg_result,i) == ZBX_PG_BYTEAOID) /* binary data type BYTEAOID */ zbx_pg_unescape_bytea((u_char *)result->values[i]); } } } result->cursor++; return result->values; #endif #ifdef HAVE_ORACLE int res; res = sqlo_fetch(result, 1); if(SQLO_SUCCESS == res) { return (DB_ROW)sqlo_values(result, NULL, 1); } else if(SQLO_NO_DATA == res) { return NULL; } zabbix_errlog(ERR_Z3006, 0, sqlo_geterror(oracle)); exit(FAIL); return NULL; #endif #ifdef HAVE_SQLITE3 /* EOF */ if(!result) return NULL; /* EOF */ if(result->curow >= result->nrow) return NULL; if(!result->data) return NULL; result->curow++; /* NOTE: First row == header row */ return &(result->data[result->curow * result->ncolumn]); #endif return NULL; }