iterateAllTables static method
Iterate all the tables
Implementation
static Future<void> iterateAllTables(
DatabaseExecutor db,
FutureOr<bool?> Function(String tableName, List<String> columns) iterator,
) async {
// for query index, SELECT * FROM sqlite_master WHERE type = "index";
List<Map<String, Object?>> tables = await db.rawQuery("SELECT * FROM sqlite_master WHERE type='table'");
for (int i = 0; i < tables.length; i++) {
Map<String, Object?> element = tables[i];
/// sqlite> .header on. type, name, tbl_name, rootpage, sql
String tableName = element["name"].toString();
String createSQL = element["sql"].toString();
String? columnSpec = RegExp("\\((.*?)\\)").allMatches(createSQL).first.group(1);
/// Column names for table
List<String> columns = [];
columnSpec?.split(",").forEach((e) {
String? columnName = e.trim().split(" ").firstSafe;
if (columnName != null) {
columns.add(columnName);
}
});
if (await iterator(tableName, columns) == true) break;
}
}