toCreateTableSql method

String toCreateTableSql(
  1. DatabaseType dbType
)

Generate CREATE TABLE SQL with IF NOT EXISTS

Implementation

String toCreateTableSql(DatabaseType dbType) {
  final buffer = StringBuffer();
  buffer.writeln('CREATE TABLE IF NOT EXISTS $tableName (');

  final columnDefs = <String>[];

  // Add column definitions
  for (final col in columns) {
    if (col is ColumnSchema) {
      columnDefs.add('  ${col.toSql(dbType)}');
    }
  }

  // Add composite primary key if specified
  if (primaryKeyColumns != null && primaryKeyColumns!.isNotEmpty) {
    columnDefs.add('  PRIMARY KEY (${primaryKeyColumns!.join(', ')})');
  }

  // Add unique constraints
  if (uniqueConstraints != null) {
    for (final uc in uniqueConstraints!) {
      final name = uc.name != null ? 'CONSTRAINT ${uc.name} ' : '';
      columnDefs.add('  ${name}UNIQUE (${uc.columns.join(', ')})');
    }
  }

  // Add check constraints
  if (checkConstraints != null) {
    for (final cc in checkConstraints!) {
      final name = cc.name != null ? 'CONSTRAINT ${cc.name} ' : '';
      columnDefs.add('  ${name}CHECK (${cc.expression})');
    }
  }

  // Add foreign keys
  if (foreignKeys != null) {
    for (final fk in foreignKeys!) {
      columnDefs.add('  ${fk.toSql(dbType)}');
    }
  }

  buffer.writeln(columnDefs.join(',\n'));
  buffer.write(')');

  // Add engine for MySQL
  if (dbType == DatabaseType.mysql) {
    buffer.write(' ENGINE=InnoDB');
  }

  buffer.write(';');
  return buffer.toString();
}