summaryrefslogtreecommitdiff
path: root/ext/pdo_sqlite
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pdo_sqlite')
-rw-r--r--ext/pdo_sqlite/config.m4107
-rw-r--r--ext/pdo_sqlite/config.w3221
-rw-r--r--ext/pdo_sqlite/pdo_sqlite.c1
-rw-r--r--ext/pdo_sqlite/php_pdo_sqlite_int.h1
-rw-r--r--ext/pdo_sqlite/sqlite_driver.c4
-rw-r--r--ext/pdo_sqlite/sqlite_statement.c26
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt2
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt2
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt2
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_statement_getattribute.phpt20
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