PHP_RSHUTDOWN_FUNCTION(oci);
PHP_MINFO_FUNCTION(oci);
+static ub4 oci_handle_error(oci_connection *connection, ub4 errcode);
static ub4 oci_error(OCIError *err_p, char *what, sword status);
static int oci_ping(oci_server *server);
static void oci_debug(const char *format, ...);
}
/* }}} */
+
+static ub4
+oci_handle_error(oci_connection *connection, ub4 errcode)
+{
+ switch (errcode) {
+ case 0:
+ return 0;
+ break;
+ case 22: /* ORA-00022 Invalid session id */
+ case 1012: /* ORA-01012: */
+ case 3113: /* ORA-03113: end-of-file on communication channel */
+ connection->open = 0;
+ connection->session->open = 0;
+ connection->session->server->open = 0;
+ return 0;
+ break;
+ default:
+ return 0;
+ break;
+ }
+}
+
/* {{{ oci_error() */
static ub4
(dvoid **) 0);
if (OCI(error)) {
- oci_error(OCI(pError),"OCIDescriptorAlloc %d",OCI(error));
+ ub4 error;
+ error = oci_error(OCI(pError),"OCIDescriptorAlloc %d",OCI(error));
+ oci_handle_error(connection, error);
return 0;
}
0,
OCI_ATTR_PREFETCH_MEMORY,
statement->pError));
+ if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
+ }
prefetch = size;
statement->error =
oci_error(statement->pError,
0,
OCI_ATTR_PREFETCH_ROWS,
statement->pError));
+ if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
+ }
return 1;
}
OCIHandleFree(statement->pStmt, OCI_HTYPE_STMT);
OCIHandleFree(statement->pError, OCI_HTYPE_ERROR);
efree(statement);
+ oci_handle_error(connection, connection->error);
return 0;
}
}
statement->pError));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0;
}
NULL,
NULL,
mode));
-
if (statement->binds) {
zend_hash_apply(statement->binds, (int (*)(void *)) _oci_bind_post_exec);
}
-
- switch (statement->error) {
- case 0:
- break;
-
- case 3113: /* ORA-03113: end-of-file on communication channel */
- statement->conn->open = 0;
- statement->conn->session->open = 0;
- statement->conn->session->server->open = 0;
- return 0;
- break;
-
- default:
- return 0;
- break;
- }
+ oci_handle_error(statement->conn, statement->error);
+ return 0;
}
if (stmttype == OCI_STMT_SELECT && (statement->executed == 0)) {
OCI_ATTR_PARAM_COUNT,
statement->pError));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we loose memory!!! */
}
(dvoid**)¶m,
counter));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we loose memory!!! */
}
OCI_ATTR_DATA_TYPE,
statement->pError));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we loose memory!!! */
}
OCI_ATTR_DATA_SIZE,
statement->pError));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we loose memory!!! */
}
OCI_ATTR_SCALE,
statement->pError));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we lose memory!!! */
}
OCI_ATTR_PRECISION,
statement->pError));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we lose memory!!! */
}
(ub4)OCI_ATTR_NAME,
statement->pError));
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we loose memory!!! */
}
OCI_DEFAULT)); /* IN mode (OCI_DEFAULT, OCI_DYNAMIC_FETCH) */
}
if (statement->error) {
+ oci_handle_error(statement->conn, statement->error);
return 0; /* XXX we loose memory!!! */
}
}
}
oci_error(statement->pError, func, statement->error);
+ oci_handle_error(statement->conn, statement->error);
return 0;
}
OCI_FILE_READONLY);
if (connection->error) {
oci_error(connection->pError, "OCILobFileOpen",connection->error);
+ oci_handle_error(connection, connection->error);
return -1;
}
}
if (connection->error) {
oci_error(connection->pError, "OCILobFileOpen",connection->error);
+ oci_handle_error(connection, connection->error);
return -1;
}
if (connection->error) {
oci_error(connection->pError, "OCILobRead", connection->error);
+ oci_handle_error(connection, connection->error);
efree(buf);
return -1;
}
mydescr->ocidescr);
if (connection->error) {
oci_error(connection->pError, "OCILobFileClose", connection->error);
+ oci_handle_error(connection, connection->error);
efree(buf);
return -1;
}
if (statement->error != OCI_SUCCESS) {
oci_error(statement->pError, "OCIBindByName", statement->error);
+ oci_handle_error(statement->conn, statement->error);
RETURN_FALSE;
}
if (statement->error != OCI_SUCCESS) {
oci_error(statement->pError, "OCIBindDynamic", statement->error);
+ oci_handle_error(statement->conn, statement->error);
RETURN_FALSE;
}
if (connection->error) {
oci_error(connection->pError, "OCILobWrite", connection->error);
+ oci_handle_error(connection, connection->error);
RETURN_FALSE;
}
if (connection->error) {
oci_error(connection->pError, "OCILobWrite", connection->error);
+ oci_handle_error(connection, connection->error);
close(fp);
RETURN_FALSE;
}
if (connection->error) {
oci_error(connection->pError, "OCILobGetLength", connection->error);
+ oci_handle_error(connection, connection->error);
goto bail;
}
OCI_FILE_READONLY);
if (connection->error) {
oci_error(connection->pError, "OCILobFileOpen",connection->error);
+ oci_handle_error(connection, connection->error);
goto bail;
}
}
if (connection->error) {
oci_error(connection->pError, "OCILobRead", connection->error);
+ oci_handle_error(connection, connection->error);
goto bail;
}
descr->ocidescr);
if (connection->error) {
oci_error(connection->pError, "OCILobFileClose", connection->error);
+ oci_handle_error(connection, connection->error);
goto bail;
}
}
if (connection->error) {
oci_error(connection->pError, "OCIRollback", connection->error);
+ oci_handle_error(connection, connection->error);
RETURN_FALSE;
}
if (connection->error) {
oci_error(connection->pError, "OCICommit", connection->error);
+ oci_handle_error(connection, connection->error);
RETURN_FALSE;
}
if (connection->error != OCI_SUCCESS) {
oci_error(connection->pError, "OCIServerVersion", connection->error);
+ oci_handle_error(connection, connection->error);
RETURN_FALSE;
}
statement->pError);
if (statement->error != OCI_SUCCESS) {
oci_error(statement->pError, "OCIStatementType", statement->error);
+ oci_handle_error(statement->conn, statement->error);
RETURN_FALSE;
}
if (statement->error != OCI_SUCCESS) {
oci_error(statement->pError, "OCIRowCount", statement->error);
+ oci_handle_error(statement->conn, statement->error);
RETURN_FALSE;
}