createTableIfNeeded method

Future<bool?> createTableIfNeeded({
  1. Database? db,
  2. int? version,
})

Implementation

Future<bool?> createTableIfNeeded({Database? db, int? version}) async {
  db ??= database;
  String? spec = createTableSpecification?.trim();
  if (spec == null) return null;
  List<String> strings = spec.split(SEPARATOR);

  /// get the create table sql
  String createTableSql = strings.firstSafe?.trim() ?? '';
  if (createTableSql.isEmpty) return null;
  if (!createTableSql.startsWith('CREATE TABLE')) {
    /// if just columns & columns' type definitions
    createTableSql = createTableSql.removeEndWith(',');
    createTableSql = 'CREATE TABLE IF NOT EXISTS $tableName ( $createTableSql )';
  }
  if (strings.length > 1) {
    /// with others sql like: 'CREATE UNIQUE INDEX IF NOT EXISTS $indexName ON $tableName ( columnName );'
    strings.removeAt(0);
    strings.insert(0, createTableSql);
  }
  for (String sql in strings) {
    try {
      BoxerLogger.i(null, 'Boxer createTableIfNeeded execute: $sql');
      await db.execute(sql);
    } catch (e, s) {
      BoxerLogger.f(null, 'Boxer createTableIfNeeded error: $e, $s');
      BoxerLogger.reportFatal(e, s);
      return false;
    }
  }
  return isTableExisted();
}