///|
/// A deliberately small consumer of the public MoonBit API. It proves that a
/// host program can depend on Relcore without the JSON plan format or the CLI.
fn main {
  let orders = @relcore.read_csv(
    "customer,tenant,amount\n7,acme,10\n7,acme,20\n8,globex,5\n", "orders",
  ) catch {
    _ => abort("orders parse failed")
  }
  let customers = @relcore.read_csv(
    "customer,tenant,segment\n7,acme,enterprise\n8,globex,smb\n", "customers",
  ) catch {
    _ => abort("customers parse failed")
  }
  let result = @relcore.execute(
    @relcore.Join(
      @relcore.Scan(orders),
      @relcore.Scan(customers),
      ["customer", "tenant"],
      ["customer", "tenant"],
      @relcore.Inner,
    ),
  ) catch {
    _ => abort("join failed")
  }
  let violations = @relcore.check_contracts(result.batch, result.stats, [
    @relcore.JoinCardinality(["many_to_one"]),
  ])
  println(
    "embed rows=\{@relcore.batch_rows(result.batch)} violations=\{violations.length()}",
  )
}