parseTableDefinitions method

Map<String, TableDefinition> parseTableDefinitions(
  1. Local2DartConfig config
)

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