Send to client a row associated with the column count.
void Ns_PdDbGetRow(void *handle, char *columnCount);
This function should retrieve from the DBMS the row associated with the columnCount column and send this data to the client. For example:
if (status == DB_END_DATA) { Ns_PdSendData(END_DATA, strlen(END_DATA)); } else { Ns_PdSendRowInfo(rowInfo); }
If the get-row operation was successful, this function should call Ns_PdSendString with an OK_STATUS and then send the data with Ns_PdDbSendData. On failure, the function should use Ns_PdSendString to return an error.
/* Things italicized would be your DBMS-specific structures and calls. */ void Ns_PdDbGetRow(void *handle, char *columnCount) { DBMSState *state = (DBMSState *) handle; Ns_PdRowInfo *rowInfo; int ncols; Ns_PdLog(Trace, "getrow(%s):", columnCount); ncols = atoi(columnCount); if ((rowInfo = Ns_PdNewRowInfo(ncols)) == NULL) { char errbuf[ERRBUF_SIZE]; sprintf(errbuf, "DBMS proxy daemon could not allocate memory for row(%d)", ncols); Ns_PdSendString(errbuf); } else { int status; Ns_PdSetRowInfoNumColumns(rowInfo, ncols); if ((status = DBMSGetRow(state, rowInfo)) == NS_ERROR) { Ns_PdSendException(state->exceptionCode, state->exceptionMsg); } else { Ns_PdSendString(OK_STATUS); if (status == DB_END_DATA) { Ns_PdSendData(END_DATA, strlen(END_DATA)); } else { Ns_PdSendRowInfo(rowInfo); } } Ns_PdFreeRowInfo(rowInfo, 0); } }