createDatabase method

Future<void> createDatabase(
  1. Database db
)

Implementation

Future<void> createDatabase(Database db) async {
  for (var x in DbParameters.tables) {
    var classMirror = reflector.reflectType(x) as ClassMirror;

    Iterable<String> names =
        classMirror.invokeGetter("names") as Iterable<String>;
    Map<String, String> campos =
        classMirror.invokeGetter("fields") as Map<String, String>;
    List<String> primary =
        classMirror.invokeGetter("primary") as List<String>;
    List<String> foreign =
        classMirror.invokeGetter("foreign") as List<String>;

    String sql =
        '''CREATE TABLE IF NOT EXISTS ${x.toString().toLowerCase()}s (''';

    for (var nombre in names) {
      sql = '$sql$nombre ${campos[nombre]}, ';
    }

    sql = '$sql PRIMARY KEY(';
    for (var primaryKey in primary) {
      if (primaryKey != primary.last) {
        sql = '$sql$primaryKey,';
      } else {
        if (foreign.isNotEmpty) {
          sql = '$sql$primaryKey),';
          for (var foreignKey in foreign) {
            if (foreignKey == foreign.last) {
              sql = '$sql$foreignKey';
            } else {
              sql = '$sql$foreignKey, ';
            }
          }
        } else {
          sql = '$sql$primaryKey)';
        }
      }
    }

    sql = '$sql);';
    await db.execute(sql);
  }
}