iterateAllTables static method

Future<void> iterateAllTables(
  1. DatabaseExecutor db,
  2. FutureOr<bool?> iterator(
    1. String tableName,
    2. List<String> columns
    )
)

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;
  }
}