From 97b5e4faf35f4a19fa77a993c5d2a0d18db5799c Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Fri, 20 Jan 2017 23:14:06 +0100 Subject: [PATCH] Make virtual tables browseable See issue #917. --- src/sqlitedb.cpp | 9 +++++++++ src/sqlitetypes.cpp | 2 -- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index 5c55ac2c..14ec05f3 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -1258,6 +1258,15 @@ void DBBrowserDB::updateSchema( ) obj.object = sqlb::Object::parseSQL(type, val_sql); if(val_temp == "1") obj.object->setTemporary(true); + + // For virtual tables query the column list using the SQLite pragma + if(type == sqlb::Object::ObjectTypes::Table && obj.object.dynamicCast()->isVirtual()) + { + sqlb::TablePtr tab = obj.object.dynamicCast(); + auto columns = queryColumnInformation(val_name); + foreach(const auto& column, columns) + tab->addField(sqlb::FieldPtr(new sqlb::Field(column.first, column.second))); + } } else if(type == sqlb::Object::ObjectTypes::View) { // For views we currently can't rely on our grammar parser to get the column list. Use the pragma offered by SQLite instead auto columns = queryColumnInformation(val_name); diff --git a/src/sqlitetypes.cpp b/src/sqlitetypes.cpp index 1696bfc7..ca7dc7b0 100644 --- a/src/sqlitetypes.cpp +++ b/src/sqlitetypes.cpp @@ -520,8 +520,6 @@ TablePtr CreateTableWalker::table() tab->setVirtualUsing(concatTextAST(s, true)); tab->setFullyParsed(false); - // TODO Maybe get the column list using the 'pragma table_info()' approach we're using for views - return TablePtr(tab); }