// The façade: every subpackage's public surface re-exported as it was, so
// `@moonorm.X` is still the X it was before the split. Enum constructors do not
// travel through `pub using`, so a match on one names its subpackage:
// `@query.Dialect::Postgres`, not `@moonorm.Dialect::Postgres`.

///|
pub using @query {
  trait AsSource,
  type Delete,
  type Dialect,
  type Insert,
  type LockClause,
  type LockMode,
  type Nulls,
  type Order,
  type Predicate,
  type Select,
  type Source,
  type Table,
  type Update,
  case_,
  cast,
  delete,
  func,
  insert,
  select,
  update,
}

///|
pub using @schema {
  type Column,
  type ColumnType,
  type Field,
  type ManyToMany,
  type Model,
  type Relation,
  belongs_to,
  column,
  field,
  has_many,
  many_to_many,
}

///|
pub using @session {
  type IsolationLevel,
  type LostUpdate,
  type RowStream,
  type Savepoint,
  type Session,
  type TxOptions,
}

///|
pub using @migrate {
  type ColumnDiff,
  type Migration,
  type Migrator,
  diff_schema,
  index_ddl,
  reflect_columns,
  reflect_columns_mysql,
  reflect_columns_pg,
  reflect_table,
  reflect_table_for,
}

///|
pub using @moondb {type Value}