php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #55768
Patch make_resuming_pdo_oci_sessions revision 2011-09-27 08:15 UTC by mikhail dot v dot gavrilov at gmail dot com
revision 2011-09-27 06:01 UTC by mikhail dot v dot gavrilov at gmail dot com
revision 2011-09-26 08:33 UTC by mikhail dot v dot gavrilov at gmail dot com
revision 2011-09-26 08:31 UTC by mikhail dot v dot gavrilov at gmail dot com
revision 2011-09-23 13:30 UTC by mikhail dot v dot gavrilov at gmail dot com

Patch make_resuming_pdo_oci_sessions for Oracle related Bug #55768

Patch version 2011-09-26 08:33 UTC

Return to Bug #55768 | Download this patch
This patch is obsolete

Obsoleted by patches:

This patch renders other patches obsolete

Obsolete patches:

Patch Revisions: 2011-09-27 08:15 UTC | 2011-09-27 06:01 UTC | 2011-09-26 08:33 UTC | 2011-09-26 08:31 UTC | 2011-09-23 13:30 UTC

Developer: mikhail.v.gavrilov@gmail.com



  +				case 28511:
   					/* consider the connection closed */
   					dbh->is_closed = 1;
   					H->attached = 0;
 @@ -515,7 +530,34 @@
 @@ -515,7 +530,25 @@
   
   }
   /* }}} */
  +static int pdo_oci_check_liveness(pdo_dbh_t *dbh TSRMLS_DC)
Line 46 (now 46), was 42 lines, now 33 lines

  +	/* TODO move attached check to PDO level */
  +	if (H->attached == 0) return FAILURE;
  +	/* TODO add persistent_timeout check at PDO level */
   
 +
 +	/* Use OCIPing instead of OCIServerVersion. If OCIPing returns ORA-1010 (invalid OCI operation)
 +	 * such as from Pre-10.1 servers, the error is still from the server and we would have
 +	 * successfully performed a roundtrip and validated the connection. Use OCIServerVersion for
 +	 * Pre-10.2 clients
 +	 */	
 +	
  +#if ((OCI_MAJOR_VERSION > 10) || ((OCI_MAJOR_VERSION == 10) && (OCI_MINOR_VERSION >= 2)))	/* OCIPing available 10.2 onwards */
 +	H->last_err = OCIPing (H->svc, H->err, OCI_DEFAULT);
 +	if (OCIPing (H->svc, H->err, OCI_DEFAULT) != OCI_SUCCESS) return FAILURE;
  +#else
  +	char version[256];
  +	/* use good old OCIServerVersion() */
 +	H->last_err = OCIServerVersion (H->svc, H->err, (text *)version, sizeof(version), OCI_HTYPE_SVCCTX);
 +	if (OCIServerVersion (H->svc, H->err, (text *)version, sizeof(version), OCI_HTYPE_SVCCTX) != OCI_SUCCESS) return FAILURE;
  +#endif
 +	if (H->last_err == OCI_SUCCESS) return SUCCESS;
 +	sb4 error_code = 0;
 +	OCIErrorGet (H->err, (ub4)1, NULL, &error_code, NULL, 0, OCI_HTYPE_ERROR);
 +	if (error_code == 1010) return SUCCESS;
 +	return FAILURE;
 +	return SUCCESS;
  +}
  +/* }}} */
  +
   static struct pdo_dbh_methods oci_methods = {
   	oci_handle_closer,
   	oci_handle_preparer,
 @@ -528,7 +570,7 @@
 @@ -528,7 +561,7 @@
   	NULL,
   	pdo_oci_fetch_error_func,
   	oci_handle_get_attribute,
  -	NULL,	/* check_liveness */
  +	pdo_oci_check_liveness,	/* check_liveness */
   	NULL	/* get_driver_methods */
   };
   
 @@ -675,6 +717,7 @@
 @@ -675,6 +708,7 @@
   }
   /* }}} */
   
  +
 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Sat Apr 19 22:02:16 2014 UTC