diff options
Diffstat (limited to 'ext/pdo_sqlite')
| -rw-r--r-- | ext/pdo_sqlite/config.m4 | 107 | ||||
| -rw-r--r-- | ext/pdo_sqlite/config.w32 | 21 | ||||
| -rw-r--r-- | ext/pdo_sqlite/pdo_sqlite.c | 1 | ||||
| -rw-r--r-- | ext/pdo_sqlite/php_pdo_sqlite_int.h | 1 | ||||
| -rw-r--r-- | ext/pdo_sqlite/sqlite_driver.c | 4 | ||||
| -rw-r--r-- | ext/pdo_sqlite/sqlite_statement.c | 26 | ||||
| -rw-r--r-- | ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt | 2 | ||||
| -rw-r--r-- | ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt | 2 | ||||
| -rw-r--r-- | ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt | 2 | ||||
| -rw-r--r-- | ext/pdo_sqlite/tests/pdo_sqlite_statement_getattribute.phpt | 20 |
10 files changed, 93 insertions, 93 deletions
diff --git a/ext/pdo_sqlite/config.m4 b/ext/pdo_sqlite/config.m4 index fcaef27eec..201f9f24bf 100644 --- a/ext/pdo_sqlite/config.m4 +++ b/ext/pdo_sqlite/config.m4 @@ -31,79 +31,50 @@ if test "$PHP_PDO_SQLITE" != "no"; then php_pdo_sqlite_sources_core="pdo_sqlite.c sqlite_driver.c sqlite_statement.c" - if test "$PHP_PDO_SQLITE" != "yes"; then - SEARCH_PATH="$PHP_PDO_SQLITE /usr/local /usr" # you might want to change this - SEARCH_FOR="/include/sqlite3.h" # you most likely want to change this - if test -r $PHP_PDO_SQLITE/$SEARCH_FOR; then # path given as parameter - PDO_SQLITE_DIR=$PHP_PDO_SQLITE - else # search default path list - AC_MSG_CHECKING([for sqlite3 files in default path]) - for i in $SEARCH_PATH ; do - if test -r $i/$SEARCH_FOR; then - PDO_SQLITE_DIR=$i - AC_MSG_RESULT(found in $i) - fi - done - fi - if test -z "$PDO_SQLITE_DIR"; then - AC_MSG_RESULT([not found]) - AC_MSG_ERROR([Please reinstall the sqlite3 distribution]) - fi - - PHP_ADD_INCLUDE($PDO_SQLITE_DIR/include) - - LIBNAME=sqlite3 - LIBSYMBOL=sqlite3_open - - PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL, - [ - PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $PDO_SQLITE_DIR/$PHP_LIBDIR, PDO_SQLITE_SHARED_LIBADD) - AC_DEFINE(HAVE_PDO_SQLITELIB,1,[ ]) - ],[ - AC_MSG_ERROR([wrong sqlite lib version or lib not found]) - ],[ - -L$PDO_SQLITE_DIR/$PHP_LIBDIR -lm - ]) - PHP_CHECK_LIBRARY(sqlite3,sqlite3_key,[ - AC_DEFINE(HAVE_SQLITE3_KEY,1, [have commercial sqlite3 with crypto support]) - ]) - PHP_CHECK_LIBRARY(sqlite3,sqlite3_close_v2,[ - AC_DEFINE(HAVE_SQLITE3_CLOSE_V2, 1, [have sqlite3_close_v2]) - ]) - - PHP_SUBST(PDO_SQLITE_SHARED_LIBADD) - PHP_NEW_EXTENSION(pdo_sqlite, $php_pdo_sqlite_sources_core, $ext_shared,,-I$pdo_cv_inc_path) - else - # use bundled libs - if test "$enable_maintainer_zts" = "yes"; then - threadsafe_flags="-DSQLITE_THREADSAFE=1" - else - threadsafe_flags="-DSQLITE_THREADSAFE=0" - fi - - AC_DEFINE(HAVE_SQLITE3_CLOSE_V2, 1, [have sqlite3_close_v2]) - other_flags="-DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_JSON1=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1" - - dnl As long as intl is not shared we can have ICU support - if test "$PHP_INTL" = "yes" && test "$PHP_INTL_SHARED" != "yes"; then - other_flags="$other_flags -DSQLITE_ENABLE_ICU=1" + SEARCH_PATH="$PHP_PDO_SQLITE /usr/local /usr" # you might want to change this + SEARCH_FOR="/include/sqlite3.h" # you most likely want to change this + if test -r $PHP_PDO_SQLITE/$SEARCH_FOR; then # path given as parameter + PDO_SQLITE_DIR=$PHP_PDO_SQLITE + else # search default path list + AC_MSG_CHECKING([for sqlite3 files in default path]) + for i in $SEARCH_PATH ; do + if test -r $i/$SEARCH_FOR; then + PDO_SQLITE_DIR=$i + AC_MSG_RESULT(found in $i) fi + done + fi + if test -z "$PDO_SQLITE_DIR"; then + AC_MSG_RESULT([not found]) + AC_MSG_ERROR([Please reinstall the sqlite3 distribution]) + fi - if test "$PHP_SQLITE3" != "yes"; then - PHP_ADD_SOURCES(PHP_EXT_DIR(sqlite3), libsqlite/sqlite3.c) - fi + PHP_ADD_INCLUDE($PDO_SQLITE_DIR/include) - PHP_NEW_EXTENSION(pdo_sqlite, - $php_pdo_sqlite_sources_core, - $ext_shared,,-DPDO_SQLITE_BUNDLED=1 $other_flags $threadsafe_flags -I$pdo_cv_inc_path) + LIBNAME=sqlite3 + LIBSYMBOL=sqlite3_open_v2 - PHP_SUBST(PDO_SQLITE_SHARED_LIBADD) - PHP_ADD_EXTENSION_DEP(pdo_sqlite, sqlite3) - PHP_ADD_INCLUDE($abs_srcdir/ext/sqlite3/libsqlite) + PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL, + [ + PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $PDO_SQLITE_DIR/$PHP_LIBDIR, PDO_SQLITE_SHARED_LIBADD) + AC_DEFINE(HAVE_PDO_SQLITELIB,1,[ ]) + ],[ + AC_MSG_ERROR([wrong sqlite lib version (< 3.5.0) or lib not found]) + ],[ + -L$PDO_SQLITE_DIR/$PHP_LIBDIR -lm + ]) + PHP_CHECK_LIBRARY(sqlite3,sqlite3_key,[ + AC_DEFINE(HAVE_SQLITE3_KEY,1, [have commercial sqlite3 with crypto support]) + ]) + PHP_CHECK_LIBRARY(sqlite3,sqlite3_close_v2,[ + AC_DEFINE(HAVE_SQLITE3_CLOSE_V2, 1, [have sqlite3_close_v2]) + ]) + PHP_CHECK_LIBRARY(sqlite3,sqlite3_column_table_name,[ + AC_DEFINE(HAVE_SQLITE3_COLUMN_TABLE_NAME, 1, [have sqlite3_column_table_name]) + ]) - AC_CHECK_FUNCS(usleep nanosleep) - AC_CHECK_HEADERS(time.h) - fi + PHP_SUBST(PDO_SQLITE_SHARED_LIBADD) + PHP_NEW_EXTENSION(pdo_sqlite, $php_pdo_sqlite_sources_core, $ext_shared,,-I$pdo_cv_inc_path) dnl Solaris fix PHP_CHECK_LIBRARY(rt, fdatasync, [PHP_ADD_LIBRARY(rt,, PDO_SQLITE_SHARED_LIBADD)]) diff --git a/ext/pdo_sqlite/config.w32 b/ext/pdo_sqlite/config.w32 index 2a2d0787c0..a1dec83703 100644 --- a/ext/pdo_sqlite/config.w32 +++ b/ext/pdo_sqlite/config.w32 @@ -3,23 +3,12 @@ ARG_WITH("pdo-sqlite", "for pdo_sqlite support", "no"); if (PHP_PDO_SQLITE != "no") { - EXTENSION("pdo_sqlite", "pdo_sqlite.c sqlite_driver.c sqlite_statement.c", null, "/DSQLITE_THREADSAFE=" + (PHP_ZTS == "yes" ? "1" : "0") + " /D SQLITE_ENABLE_FTS3=1 /D SQLITE_ENABLE_FTS4=1 /D SQLITE_ENABLE_FTS5=1 /D SQLITE_ENABLE_JSON1=1 /D SQLITE_ENABLE_COLUMN_METADATA=1 /D SQLITE_CORE=1 /I" + configure_module_dirname + "/../sqlite3/libsqlite /I" + configure_module_dirname); + if (SETUP_SQLITE3("pdo_sqlite", PHP_PDO_SQLITE, PHP_PDO_SQLITE_SHARED)) { + EXTENSION("pdo_sqlite", "pdo_sqlite.c sqlite_driver.c sqlite_statement.c"); - ADD_EXTENSION_DEP('pdo_sqlite', 'pdo'); - // If pdo_sqlite is static, and sqlite3 is also static, then we don't add a second copy of the sqlite3 libs - if (PHP_PDO_SQLITE_SHARED || PHP_SQLITE3_SHARED || PHP_SQLITE3 == 'no') { - ADD_SOURCES(configure_module_dirname + "/../sqlite3/libsqlite", "sqlite3.c", "pdo_sqlite"); - } -} - -ARG_WITH("pdo-sqlite-external", "for pdo_sqlite support from an external dll", "no"); -if (PHP_PDO_SQLITE_EXTERNAL != "no") { - if (CHECK_HEADER_ADD_INCLUDE("sqlite3.h", "CFLAGS_PDO_SQLITE_EXTERNAL", PHP_PDO_SQLITE_EXTERNAL + ";" + PHP_PHP_BUILD + "\\include\\sqlite3") && - CHECK_LIB("sqlite3-import.lib", "pdo_sqlite_external", PHP_PDO_SQLITE_EXTERNAL + ";" + PHP_PHP_BUILD + "\\lib") - && ADD_EXTENSION_DEP('pdo_sqlite_external', 'pdo') ) { - EXTENSION("pdo_sqlite_external", "pdo_sqlite.c sqlite_driver.c sqlite_statement.c", null, "/I" + configure_module_dirname, null, "ext\\pdo_sqlite_external"); + ADD_EXTENSION_DEP('pdo_sqlite', 'pdo'); + AC_DEFINE("HAVE_SQLITE3_COLUMN_TABLE_NAME", 1, "have sqlite3_column_table_name"); } else { - WARNING("pdo-sqlite-external support can't be enabled, libraries or headers are missing") - PHP_PDO_SQLITE_EXTERNAL = "no" + WARNING("pdo_sqlite not enabled; libraries and/or headers not found"); } } diff --git a/ext/pdo_sqlite/pdo_sqlite.c b/ext/pdo_sqlite/pdo_sqlite.c index 235191bebb..f91dd13982 100644 --- a/ext/pdo_sqlite/pdo_sqlite.c +++ b/ext/pdo_sqlite/pdo_sqlite.c @@ -75,6 +75,7 @@ PHP_MINIT_FUNCTION(pdo_sqlite) REGISTER_PDO_CLASS_CONST_LONG("SQLITE_OPEN_READONLY", (zend_long)SQLITE_OPEN_READONLY); REGISTER_PDO_CLASS_CONST_LONG("SQLITE_OPEN_READWRITE", (zend_long)SQLITE_OPEN_READWRITE); REGISTER_PDO_CLASS_CONST_LONG("SQLITE_OPEN_CREATE", (zend_long)SQLITE_OPEN_CREATE); + REGISTER_PDO_CLASS_CONST_LONG("SQLITE_ATTR_READONLY_STATEMENT", (zend_long)PDO_SQLITE_ATTR_READONLY_STATEMENT); return php_pdo_register_driver(&pdo_sqlite_driver); } diff --git a/ext/pdo_sqlite/php_pdo_sqlite_int.h b/ext/pdo_sqlite/php_pdo_sqlite_int.h index 7e9a97cf88..2cd855e75b 100644 --- a/ext/pdo_sqlite/php_pdo_sqlite_int.h +++ b/ext/pdo_sqlite/php_pdo_sqlite_int.h @@ -76,6 +76,7 @@ extern const struct pdo_stmt_methods sqlite_stmt_methods; enum { PDO_SQLITE_ATTR_OPEN_FLAGS = PDO_ATTR_DRIVER_SPECIFIC, + PDO_SQLITE_ATTR_READONLY_STATEMENT }; #endif diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c index 2cc7f72475..811f43c268 100644 --- a/ext/pdo_sqlite/sqlite_driver.c +++ b/ext/pdo_sqlite/sqlite_driver.c @@ -809,11 +809,7 @@ static int pdo_sqlite_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{ flags = pdo_attr_lval(driver_options, PDO_SQLITE_ATTR_OPEN_FLAGS, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); -#if SQLITE_VERSION_NUMBER >= 3005000 i = sqlite3_open_v2(filename, &H->db, flags, NULL); -#else - i = sqlite3_open(filename, &H->db); -#endif efree(filename); diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c index c82e2d34eb..ff813134c6 100644 --- a/ext/pdo_sqlite/sqlite_statement.c +++ b/ext/pdo_sqlite/sqlite_statement.c @@ -331,7 +331,7 @@ static int pdo_sqlite_stmt_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *ret add_assoc_string(return_value, "sqlite:decl_type", (char *)str); } -#ifdef SQLITE_ENABLE_COLUMN_METADATA +#ifdef HAVE_SQLITE3_COLUMN_TABLE_NAME str = sqlite3_column_table_name(S->stmt, colno); if (str) { add_assoc_string(return_value, "table", (char *)str); @@ -350,6 +350,28 @@ static int pdo_sqlite_stmt_cursor_closer(pdo_stmt_t *stmt) return 1; } +static int pdo_sqlite_stmt_get_attribute(pdo_stmt_t *stmt, zend_long attr, zval *val) +{ + pdo_sqlite_stmt *S = (pdo_sqlite_stmt*)stmt->driver_data; + + switch (attr) { + case PDO_SQLITE_ATTR_READONLY_STATEMENT: + ZVAL_FALSE(val); + +#if SQLITE_VERSION_NUMBER >= 3007004 + if (sqlite3_stmt_readonly(S->stmt)) { + ZVAL_TRUE(val); + } +#endif + break; + + default: + return 0; + } + + return 1; +} + const struct pdo_stmt_methods sqlite_stmt_methods = { pdo_sqlite_stmt_dtor, pdo_sqlite_stmt_execute, @@ -358,7 +380,7 @@ const struct pdo_stmt_methods sqlite_stmt_methods = { pdo_sqlite_stmt_get_col, pdo_sqlite_stmt_param_hook, NULL, /* set_attr */ - NULL, /* get_attr */ + pdo_sqlite_stmt_get_attribute, /* get_attr */ pdo_sqlite_stmt_col_meta, NULL, /* next_rowset */ pdo_sqlite_stmt_cursor_closer diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt index 54eb06411f..0dd5c1d428 100644 --- a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt +++ b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt @@ -22,7 +22,7 @@ foreach ($db->query('SELECT testing(name) FROM foobar') as $row) { $db->query('DROP TABLE foobar'); ?> ---EXPECTF-- +--EXPECT-- array(2) { ["testing(name)"]=> string(2) "12" diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt index 13867ae25c..7ff85a5c4c 100644 --- a/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt +++ b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt @@ -23,7 +23,7 @@ foreach ($db->query('SELECT testing(name) FROM foobar') as $row) { $db->query('DROP TABLE foobar'); ?> ---EXPECTF-- +--EXPECT-- array(2) { ["testing(name)"]=> string(3) "php" diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt index bb4d033dda..9857b4bd36 100644 --- a/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt +++ b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt @@ -16,7 +16,7 @@ var_dump($db->lastInsertId()); $db->query('DROP TABLE foo'); ?> ---EXPECTF-- +--EXPECT-- object(PDOStatement)#2 (1) { ["queryString"]=> string(17) "SELECT * FROM foo" diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_statement_getattribute.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_statement_getattribute.phpt new file mode 100644 index 0000000000..6b7e36560e --- /dev/null +++ b/ext/pdo_sqlite/tests/pdo_sqlite_statement_getattribute.phpt @@ -0,0 +1,20 @@ +--TEST-- +PDO_sqlite: Testing PDOStatement::getAttribute() +--SKIPIF-- +<?php if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; ?> +--FILE-- +<?php + +$db = new PDO('sqlite::memory:'); + +$st = $db->prepare('SELECT 1;'); + +var_dump($st->getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)); + +$st = $db->prepare('CREATE TABLE test (a TEXT);'); + +var_dump($st->getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)); +?> +--EXPECT-- +bool(true) +bool(false)
\ No newline at end of file |
