///|
pub fn[E : @engine.Engine] auto_migrate(
  engine : E,
  tables : Array[Table],
) -> Unit {
  // 保守策略:默认按 MySQL 方言生成;如需其它方言,可扩展接口或由 Engine 暴露。
  let dialect = engine.dialect()

  // 逐实体生成 CREATE 与 ALTER 语句并执行
  for entity in tables {
    let table = entity

    // 1) 尝试创建表(不使用 IF NOT EXISTS,失败时由 Engine/Driver 处理;我们不抛异常)
    let create_sql = table.to_create_sql(dialect)
    ignore(engine.exec(create_sql, []))

    // 2) 使用 ALTER 构建器追加非 CREATE 覆盖的事项(如普通索引、表注释)
    let mut mut_alter = alter_table(table.name)
    if table.comment != "" {
      mut_alter = mut_alter.comment(table.comment)
    }
    for idx in table.indexes {
      match idx.index_type {
        // 主键与唯一已在 CREATE 中声明;普通索引在不同方言下常用独立语句
        Index => mut_alter = mut_alter.add_index(idx)
        _ => ()
      }
    }
    let (alter_sql, _) = mut_alter.to(dialect)
    if !alter_sql.is_empty() {
      ignore(engine.exec(alter_sql, []))
    }
  }
}