diff --git a/sqlparser/lib/src/engine/module/fts5.dart b/sqlparser/lib/src/engine/module/fts5.dart index 19cfad1b..8e9a7134 100644 --- a/sqlparser/lib/src/engine/module/fts5.dart +++ b/sqlparser/lib/src/engine/module/fts5.dart @@ -28,6 +28,8 @@ class _Fts5Module extends Module { return _Fts5Table( name: stmt.tableName, columns: [ + if (stmt.argumentContent.any((arg) => arg.startsWith('content_rowid'))) + TableColumn('rowid', const ResolvedType(type: BasicType.int)), for (var arg in columnNames) TableColumn(arg, const ResolvedType(type: BasicType.text)), ], diff --git a/sqlparser/test/engine/module/fts5_test.dart b/sqlparser/test/engine/module/fts5_test.dart index bc3725a8..38e465f0 100644 --- a/sqlparser/test/engine/module/fts5_test.dart +++ b/sqlparser/test/engine/module/fts5_test.dart @@ -20,6 +20,19 @@ void main() { expect(columns.single.name, 'bar'); }); + test('can create fts5 tables with content table', () { + final result = engine.analyze('CREATE VIRTUAL TABLE foo USING ' + "fts5(bar , tokenize = 'porter ascii',content=tbl, content_rowid=d)"); + + final table = const SchemaFromCreateTable() + .read(result.root as TableInducingStatement); + + expect(table.name, 'foo'); + final columns = table.resultColumns; + expect(columns, hasLength(2)); + expect(columns.first.name, 'rowid'); + }); + group('creating fts5vocab tables', () { final engine = SqlEngine(_fts5Options);