From: Scott MacVicar Date: Tue, 13 Jan 2009 02:50:23 +0000 (+0000) Subject: Add table key to getColumnMeta() with SQLite X-Git-Tag: php-5.4.0alpha1~191^2~4537 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=03b0b3031e1911bd1bca2a013e368d52f82cd1f8;p=php Add table key to getColumnMeta() with SQLite --- diff --git a/ext/pdo_sqlite/config.m4 b/ext/pdo_sqlite/config.m4 index f5271108cf..9be154e0cc 100644 --- a/ext/pdo_sqlite/config.m4 +++ b/ext/pdo_sqlite/config.m4 @@ -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) diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c index 85da27e160..957772eaea 100644 --- a/ext/pdo_sqlite/sqlite_statement.c +++ b/ext/pdo_sqlite/sqlite_statement.c @@ -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 index 0000000000..298e691265 --- /dev/null +++ b/ext/pdo_sqlite/tests/bug_42589.phpt @@ -0,0 +1,23 @@ +--TEST-- +PDO SQLite Feature Request #42589 (getColumnMeta() should also return table name) +--SKIPIF-- + +--FILE-- +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) diff --git a/ext/sqlite3/config0.m4 b/ext/sqlite3/config0.m4 index f9c9e54134..006d536f06 100644 --- a/ext/sqlite3/config0.m4 +++ b/ext/sqlite3/config0.m4 @@ -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