|
|
Open a connection to the database.
void Ns_PdDbOpen (void *handle, char *openArgs);
This function opens a connection to the database based on the openArgs passed in. The handle passed in is the handle that was returned by Ns_PdDbInit, and will usually be cast to some driver-specific data structure. If the open operation is successful, this function should call Ns_PdSendString with OK_STATUS. On failure, the function should use Ns_PdSendString to return an error string.
/* Things italicized would be your DBMS-specific structures and
calls. */
void
Ns_PdDbOpen(void *handle, char *openArgs) {
DBMSState *state = (DBMSState *) handle;
int status = NS_ERROR;
char errbuf[ERRBUF_SIZE];
Ns_PdLog(Trace, "open:");
Ns_PdParseOpenArgs(openArgs, &state->datasource,
&state->user, &state->password,
&state->param);
Ns_PdLog(Notice,
"Connecting to datasource '%s' as user '%s' with password
'%s' and param '%s'",
state->datasource == NULL ? "NULL" : state->datasource,
state->user == NULL ? "NULL" : state->user,
state->password == NULL ? "NULL" : state->password,
state->param == NULL ? "NULL" : state->param);
errbuf[0] = '\0';
if (state->datasource == NULL) {
sprintf(errbuf, "Illustra proxy daemon received NULL
datasource");
Ns_PdLog(Error, "NULL datasource in openargs");
} else if ((sep = strchr(state->datasource, ':')) == NULL) {
sprintf(errbuf, "Illustra proxy daemon received malformed
datasource: %s",
state->datasource);
Ns_PdLog(Error, "Malformed datasource: %s",
state->datasource);
} else {
/*initialize the state and open a connection to the database*/
/* ... */
if (status == NS_OK) {
Ns_PdSendString(OK_STATUS);
} else if (errbuf[0] != '\0') {
Ns_PdSendString(errbuf);
} else {
Ns_PdSendException(state->exceptionCode,
state->exceptionMsg);
}
}