void Ns_PdDbExec(char *handle, char *sql);
This function executes a SQL query. If the SQL is executed successfully, this function should call Ns_PdSendString with OK_STATUS followed by either Ns_PdSendString(EXEC_RET_ROWS) or Ns_PdSendString(EXEC_RET_DML), depending on whether the SQL returned rows or was a DML statement. On failure, the function should use Ns_PdSendException to return an error.
/* Things italicized would be your DBMS-specific structures and calls. */ void Ns_PdDbExec(void *handle, char *sql) { DBMSState *state = (DBMSState *) handle; int execRet; Ns_PdLog(Trace, "exec(%s):", sql); execRet = DBMSExec(state, sql); if (execRet == NS_ERROR) { Ns_PdSendException(state->exceptionCode, state->exceptionMsg); } else { Ns_PdSendString(OK_STATUS); execRet == DB_ROWS ? Ns_PdSendString(EXEC_RET_ROWS) : Ns_PdSendString(EXEC_RET_DML); } }