Commit:    1e36e45d97da9e212b00f339c90b995908efa70c
Author:    Matteo Beccati <mbecc...@php.net>         Tue, 4 Jun 2013 16:49:16 
+0200
Parents:   b144c263191f857391d3cc009951c95d25a2cdb3
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=1e36e45d97da9e212b00f339c90b995908efa70c

Log:
Allow PDO drivers custom methods to trigger errors/exceptions

Moved a few definitions from php_pdo_int.h to a new php_pdo_error.h
header file that can be included if drivers need PDO's own error
handling to be triggered within custom methods (e.g. PDO::pgsqlLOBOpen).

Changed paths:
  M  ext/pdo/Makefile.frag
  A  ext/pdo/php_pdo_error.h
  M  ext/pdo/php_pdo_int.h


Diff:
diff --git a/ext/pdo/Makefile.frag b/ext/pdo/Makefile.frag
index 5ba5f80..dc25c9f 100644
--- a/ext/pdo/Makefile.frag
+++ b/ext/pdo/Makefile.frag
@@ -2,7 +2,8 @@ phpincludedir=$(prefix)/include/php
 
 PDO_HEADER_FILES= \
        php_pdo.h \
-       php_pdo_driver.h
+       php_pdo_driver.h \
+       php_pdo_error.h
 
 
 $(srcdir)/pdo_sql_parser.c: $(srcdir)/pdo_sql_parser.re
diff --git a/ext/pdo/php_pdo_error.h b/ext/pdo/php_pdo_error.h
new file mode 100644
index 0000000..13d45eb
--- /dev/null
+++ b/ext/pdo/php_pdo_error.h
@@ -0,0 +1,47 @@
+/*
+  +----------------------------------------------------------------------+
+  | PHP Version 5                                                        |
+  +----------------------------------------------------------------------+
+  | Copyright (c) 1997-2013 The PHP Group                                |
+  +----------------------------------------------------------------------+
+  | This source file is subject to version 3.01 of the PHP license,      |
+  | that is bundled with this package in the file LICENSE, and is        |
+  | available through the world-wide-web at the following url:           |
+  | http://www.php.net/license/3_01.txt                                  |
+  | If you did not receive a copy of the PHP license and are unable to   |
+  | obtain it through the world-wide-web, please send a note to          |
+  | lice...@php.net so we can mail you a copy immediately.               |
+  +----------------------------------------------------------------------+
+  | Author: Wez Furlong <w...@php.net>                                    |
+  +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+
+#ifndef PHP_PDO_ERROR_H
+#define PHP_PDO_ERROR_H
+
+#include "php_pdo_driver.h"
+
+extern void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt TSRMLS_DC);
+
+#define PDO_DBH_CLEAR_ERR()             do { \
+       strlcpy(dbh->error_code, PDO_ERR_NONE, sizeof(PDO_ERR_NONE)); \
+       if (dbh->query_stmt) { \
+               dbh->query_stmt = NULL; \
+               zend_objects_store_del_ref(&dbh->query_stmt_zval TSRMLS_CC); \
+       } \
+} while (0)
+#define PDO_STMT_CLEAR_ERR()    strcpy(stmt->error_code, PDO_ERR_NONE)
+#define PDO_HANDLE_DBH_ERR()    if (strcmp(dbh->error_code, PDO_ERR_NONE)) { 
pdo_handle_error(dbh, NULL TSRMLS_CC); }
+#define PDO_HANDLE_STMT_ERR()   if (strcmp(stmt->error_code, PDO_ERR_NONE)) { 
pdo_handle_error(stmt->dbh, stmt TSRMLS_CC); }
+
+#endif /* PHP_PDO_ERROR_H */
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
diff --git a/ext/pdo/php_pdo_int.h b/ext/pdo/php_pdo_int.h
index 91d0bf0..59dbaf9 100644
--- a/ext/pdo/php_pdo_int.h
+++ b/ext/pdo/php_pdo_int.h
@@ -23,6 +23,8 @@
 /* Stuff private to the PDO extension and not for consumption by PDO drivers
  * */
 
+#include "php_pdo_error.h"
+
 extern HashTable pdo_driver_hash;
 extern zend_class_entry *pdo_exception_ce;
 PDO_API zend_class_entry *php_pdo_get_exception_base(int root TSRMLS_DC);
@@ -55,19 +57,6 @@ zend_object_iterator 
*php_pdo_dbstmt_iter_get(zend_class_entry *ce, zval *object
 
 extern pdo_driver_t *pdo_find_driver(const char *name, int namelen);
 
-extern void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt TSRMLS_DC);
-
-#define PDO_DBH_CLEAR_ERR()            do { \
-       strlcpy(dbh->error_code, PDO_ERR_NONE, sizeof(PDO_ERR_NONE)); \
-       if (dbh->query_stmt) { \
-               dbh->query_stmt = NULL; \
-               zend_objects_store_del_ref(&dbh->query_stmt_zval TSRMLS_CC); \
-       } \
-} while (0)
-#define PDO_STMT_CLEAR_ERR()   strcpy(stmt->error_code, PDO_ERR_NONE)
-#define PDO_HANDLE_DBH_ERR()   if (strcmp(dbh->error_code, PDO_ERR_NONE)) { 
pdo_handle_error(dbh, NULL TSRMLS_CC); }
-#define PDO_HANDLE_STMT_ERR()  if (strcmp(stmt->error_code, PDO_ERR_NONE)) { 
pdo_handle_error(stmt->dbh, stmt TSRMLS_CC); }
-
 int pdo_sqlstate_init_error_table(void);
 void pdo_sqlstate_fini_error_table(void);
 const char *pdo_sqlstate_state_to_description(char *state);


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to