summaryrefslogtreecommitdiff
path: root/ext/sqlite3/sqlite3.c
diff options
context:
space:
mode:
authorScott MacVicar <scottmac@php.net>2009-02-10 00:44:09 +0000
committerScott MacVicar <scottmac@php.net>2009-02-10 00:44:09 +0000
commitcf8d87306f61df4e56ee744039fc74eb28037afc (patch)
tree0edd55d75250fcf80cbe3899620622f4a82ed1c5 /ext/sqlite3/sqlite3.c
parentb15f5357febaaeec178ef9b613b51608ff407742 (diff)
downloadphp-git-cf8d87306f61df4e56ee744039fc74eb28037afc.tar.gz
MFB: The constructor should also throw exceptions, make this semi useful now.
Diffstat (limited to 'ext/sqlite3/sqlite3.c')
-rw-r--r--ext/sqlite3/sqlite3.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index cc44f50b62..a04de94508 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -74,36 +74,46 @@ PHP_METHOD(sqlite3, open)
zend_uchar filename_type;
int filename_len, encryption_key_len = 0;
long flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
+ zend_error_handling error_handling;
+
db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC);
+ zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|lS", &filename, &filename_len, &filename_type, &flags, &encryption_key, &encryption_key_len)) {
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
return;
}
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
+
if (db_obj->initialised) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Already initialised DB Object");
+ zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Already initialised DB Object", 0 TSRMLS_CC);
+ return;
}
if (filename_type == IS_UNICODE) {
if (php_stream_path_encode(NULL, &filename, &filename_len, (UChar *)filename, filename_len, REPORT_ERRORS, FG(default_context)) == FAILURE) {
- RETURN_FALSE;
+ zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Unable to decode filepath", 0 TSRMLS_CC);
+ return;
}
}
if (strncmp(filename, ":memory:", 8) != 0) {
if (!(fullpath = expand_filepath(filename, NULL TSRMLS_CC))) {
+ zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Unable to expand filepath", 0 TSRMLS_CC);
if (filename_type == IS_UNICODE) {
efree(filename);
}
- RETURN_FALSE;
+ return;
}
if (php_check_open_basedir(fullpath TSRMLS_CC)) {
+ zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "open_basedir prohibits opening %s", fullpath);
if (filename_type == IS_UNICODE) {
efree(filename);
}
efree(fullpath);
- RETURN_FALSE;
+ return;
}
} else {
fullpath = estrdup(filename);
@@ -119,7 +129,7 @@ PHP_METHOD(sqlite3, open)
/* Todo: utf-16 = sqlite3_open16 */
if (sqlite3_open(fullpath, &(db_obj->db)) != SQLITE_OK) {
#endif
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unable to open database: %s", sqlite3_errmsg(db_obj->db));
+ zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Unable to open database: %s", sqlite3_errmsg(db_obj->db));
if (fullpath) {
efree(fullpath);
}
@@ -131,6 +141,7 @@ PHP_METHOD(sqlite3, open)
#if SQLITE_HAS_CODEC
if (encryption_key_len > 0) {
if (sqlite3_key(db_obj->db, encryption_key, encryption_key_len) != SQLITE_OK) {
+ zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Unable to open database: %s", sqlite3_errmsg(db_obj->db));
return;
}
}
@@ -143,7 +154,6 @@ PHP_METHOD(sqlite3, open)
if (fullpath) {
efree(fullpath);
}
- RETURN_TRUE;
}
/* }}} */