init method
void
init()
inherited
Implementation
void init() {
dbVersion = dbVersion ?? 1;
final manyToManyTables = <SqfEntityTableBase>[];
//print('ModelBase init() begin');
for (final table in databaseTables!) {
if (table.dbModel == null) {
if (instanceName == null) {
table.dbModel = toCamelCase(table.tableName!);
} else {
table.dbModel = toCamelCase(instanceName!);
}
}
//print('CHECK AND CONFIGURE MANY_TO_MANY RELATIONS');
// CHECK AND CONFIGURE MANY_TO_MANY RELATIONS
for (final field
in table.fields!.whereType<SqfEntityFieldRelationshipBase>()) {
// if (field.relationType == RelationType.ONE_TO_MANY_VICEVERSA) {
// field.relationType = RelationType.ONE_TO_MANY;
// databaseTables!
// .singleWhere((t) => t.tableName == field.table!.tableName!)
// ..fields!.add(SqfEntityFieldRelationshipBase(
// table, field.deleteRule,
// relationType: RelationType.ONE_TO_MANY));
// field.table!.init();
// } else
if (field.relationType == RelationType.MANY_TO_MANY) {
print('found RelationShip ManyToMany');
final many2ManyTableName = field.manyToManyTableName ??
'${table.tableName}${toCamelCase(field.table!.tableName!)}';
table.relationType = table.relationType != RelationType.ONE_TO_ONE
? null
: table.relationType;
field.table!.relationType =
field.table!.relationType != RelationType.ONE_TO_ONE
? null
: field.table!.relationType;
field.manyToManyTableName = many2ManyTableName;
final many2manyTableExist = databaseTables!
.where((t) =>
t.tableName!.toLowerCase() ==
many2ManyTableName.toLowerCase())
.toList();
SqfEntityTableBase many2manyTable;
if (many2manyTableExist.isNotEmpty) {
many2manyTable = many2manyTableExist[0];
} else {
many2manyTable = SqfEntityTableBase()
..tableName = many2ManyTableName
..modelName = toModelName(many2ManyTableName, many2ManyTableName)
..primaryKeyName = ''
..primaryKeyType = null
..relationType = RelationType.MANY_TO_MANY
..useSoftDeleting = table.useSoftDeleting
..fields = [
SqfEntityFieldRelationshipBase(table, field.deleteRule,
fieldName: table.primaryKeyNames[0] ==
field.table!.primaryKeyNames[0]
? '${table.tableName}${toCamelCase(table.primaryKeyNames[0])}'
: table.primaryKeyNames[0],
isPrimaryKeyField: true,
relationType: RelationType.ONE_TO_MANY),
SqfEntityFieldRelationshipBase(field.table, field.deleteRule,
fieldName: table.primaryKeyNames[0] ==
field.table!.primaryKeyNames[0]
? '${field.table!.tableName}${toCamelCase(field.table!.primaryKeyNames[0])}'
: field.table!.primaryKeyNames[0],
isPrimaryKeyField: true,
relationType: RelationType.ONE_TO_MANY)
]
..init();
manyToManyTables.add(many2manyTable);
}
if (databaseTables!.length > 1) {
if (field.table!.fields!
.where((f) =>
f is SqfEntityFieldRelationshipBase &&
f.relationType == RelationType.MANY_TO_MANY &&
f.table == table)
.isEmpty) {
databaseTables!
.singleWhere((t) => t.tableName == field.table!.tableName!)
..fields!.add(SqfEntityFieldRelationshipBase(
table, field.deleteRule,
manyToManyTableName: many2ManyTableName,
manyToManyTable: many2manyTable,
relationType: RelationType.MANY_TO_MANY));
field.table!.init();
}
}
field.manyToManyTable = many2manyTable;
final rFieldList = field.table!.fields!
.whereType<SqfEntityFieldRelationshipBase>()
.toList();
if (rFieldList.isNotEmpty) {
for (final f in rFieldList) {
if (f.relationType != null &&
f.relationType == RelationType.MANY_TO_MANY &&
f.table != null &&
f.table == table) {
f.manyToManyTable = many2manyTable;
}
}
}
} else if (field.relationType == RelationType.ONE_TO_ONE &&
(field.table != null && field.table != table)) {
table.relationType = RelationType.ONE_TO_ONE;
}
}
}
//print('before final table in manyToManyTables lenght=${manyToManyTables.length}');
for (final table in manyToManyTables) {
databaseTables!.add(table);
}
for (final table in databaseTables!) {
table.collections = _getCollections(table, this);
// databaseTables!.add(table);
}
}