parseTableDefinitions method
Parses table definitions from configuration.
Parameters:
config: The configuration containing table definitions.
Returns: A map of table names to TableDefinition objects.
Implementation
Map<String, TableDefinition> parseTableDefinitions(Local2DartConfig config) {
final tables = <String, TableDefinition>{};
config.table.forEach((tableName, tableConfig) {
if (tableConfig is Map<String, dynamic>) {
final createIfNotExists =
tableConfig['create_if_not_exists'] as bool? ?? true;
// Parse columns
final columns = <String, ColumnDefinition>{};
final columnConfig = tableConfig['column'] as Map<String, dynamic>?;
if (columnConfig != null) {
columnConfig.forEach((columnName, columnDef) {
if (columnDef is String) {
// Simple type definition
columns[columnName] = ColumnDefinition(
name: columnName,
type: columnDef,
);
} else if (columnDef is Map<String, dynamic>) {
// Detailed definition
columns[columnName] = ColumnDefinition(
name: columnName,
type: columnDef['type'] as String? ?? 'TEXT',
constraint: columnDef['constraint'] as String?,
autoincrement: columnDef['autoincrement'] as bool? ?? false,
nullable: columnDef['nullable'] as bool? ?? true,
defaultValue: columnDef['default'],
);
}
});
}
// Parse foreign keys
final foreignKeys = <String, ForeignKeyDefinition>{};
final foreignConfig = tableConfig['foreign'] as Map<String, dynamic>?;
if (foreignConfig != null) {
foreignConfig.forEach((foreignKeyName, foreignDef) {
if (foreignDef is Map<String, dynamic>) {
foreignKeys[foreignKeyName] = ForeignKeyDefinition(
columnName: foreignKeyName,
toTable: foreignDef['to_table'] as String? ?? '',
toColumn: foreignDef['to_column'] as String? ?? '',
onUpdate: foreignDef['on_update'] as String?,
onDelete: foreignDef['on_delete'] as String?,
);
}
});
}
tables[tableName] = TableDefinition(
name: tableName,
createIfNotExists: createIfNotExists,
columns: columns,
foreignKeys: foreignKeys,
);
}
});
return tables;
}