]> granicus.if.org Git - php/commitdiff
Add table key to getColumnMeta() with SQLite
authorScott MacVicar <scottmac@php.net>
Tue, 13 Jan 2009 02:50:23 +0000 (02:50 +0000)
committerScott MacVicar <scottmac@php.net>
Tue, 13 Jan 2009 02:50:23 +0000 (02:50 +0000)
ext/pdo_sqlite/config.m4
ext/pdo_sqlite/sqlite_statement.c
ext/pdo_sqlite/tests/bug_42589.phpt [new file with mode: 0644]
ext/sqlite3/config0.m4

index f5271108cf1ec2d1ca58d90840a500a79ea90729..9be154e0cc036e0325070a47101fd20cd4ae9357 100644 (file)
@@ -79,7 +79,7 @@ if test "$PHP_PDO_SQLITE" != "no"; then
         threadsafe_flags="-DSQLITE_THREADSAFE=0"
       fi
 
-      other_flags="-DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1"
+      other_flags="-DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1"
 
       if test "$PHP_SQLITE3" != "yes"; then
         PHP_ADD_SOURCES(PHP_EXT_DIR(sqlite3), libsqlite/sqlite3.c)
index 85da27e160fa8cc422a4aa4cac01feb76033228b..957772eaea8f72f49590c0f89855939698973455 100644 (file)
@@ -323,6 +323,13 @@ static int pdo_sqlite_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_v
                add_assoc_string(return_value, "sqlite:decl_type", str, 1);
        }
 
+#ifdef SQLITE_ENABLE_COLUMN_METADATA
+       str = sqlite3_column_table_name(S->stmt, colno);
+       if (str) {
+               add_assoc_string(return_value, "table", str, 1);
+       }
+#endif
+
        add_assoc_zval(return_value, "flags", flags);
 
        return SUCCESS;
diff --git a/ext/pdo_sqlite/tests/bug_42589.phpt b/ext/pdo_sqlite/tests/bug_42589.phpt
new file mode 100644 (file)
index 0000000..298e691
--- /dev/null
@@ -0,0 +1,23 @@
+--TEST--
+PDO SQLite Feature Request #42589 (getColumnMeta() should also return table name)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_sqlite')) die('skip not loaded');
+?>
+--FILE--
+<?php
+$db = new PDO("sqlite::memory:");
+
+$db->exec('CREATE TABLE test (field1 VARCHAR(10))');
+$db->exec('INSERT INTO test VALUES("test")');
+
+$result = $db->query('SELECT * FROM test t1 LEFT JOIN test t2 ON t1.field1 = t2.field1');
+$meta1 = $result->getColumnMeta(0);
+$meta2 = $result->getColumnMeta(1);
+
+var_dump(!empty($meta1[b'table']) && $meta1[b'table'] == b'test');
+var_dump(!empty($meta2[b'table']) && $meta2[b'table'] == b'test');
+?>
+--EXPECTF--
+bool(true)
+bool(true)
index f9c9e5413404bb9c6c3d5c00045fa4137d89d778..006d536f06731a0bb0fa835033368007fea9bfc9 100644 (file)
@@ -67,7 +67,7 @@ if test $PHP_SQLITE3 != "no"; then
       debug_flags="-DSQLITE_DEBUG=1"
     fi
 
-    other_flags="-DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_ICU=1"
+    other_flags="-DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_ICU=1 -DSQLITE_ENABLE_COLUMN_METADATA=1"
 
     PHP_SQLITE3_CFLAGS="-I@ext_srcdir@/libsqlite -I@ext_builddir@/libsqlite $other_flags $threadsafe_flags $debug_flags"
   fi