// Copyright (C) 2026 Gabriel Shea
// Licensed under either of the Apache License, Version 2.0 or the MIT
// license, at your option.
//! **Which bulk-load statement an engine speaks**, among the ones Razeri
//! writes.
//!
//! Razeri's bulk-load builder writes a load statement in a handful of
//! engines' own grammars. Which one a platform gets is the dialect's answer
//! ([`SqlRenderer::bulk_load_form`](crate::SqlRenderer::bulk_load_form)), so
//! an engine that speaks a grammar Razeri already writes — a PostgreSQL-wire
//! engine and `COPY` — gets it with no change to Razeri, and a platform
//! Razeri has never been compiled against is never recognised by its name.
/// **One bulk-load grammar Razeri writes.**
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum BulkLoadForm {
/// `COPY <table> FROM …` — `PostgreSQL` and Citus.
PostgresCopy,
/// `BULK INSERT <table> FROM …` — SQL Server.
BulkInsert,
/// `COPY INTO <table> FROM @stage …` — Snowflake.
SnowflakeCopyInto,
/// `INSERT INTO <table> SELECT * FROM file(…)` and its kin — `ClickHouse`.
ClickHouseInsert,
/// `COPY <table> FROM '<path>' (…)` — `DuckDB`.
DuckDbCopy,
/// `COPY INTO <table> FROM '<path>' FILEFORMAT = …` — Databricks.
DatabricksCopyInto,
/// `LOAD DATA INFILE '<path>' INTO TABLE <table>` — `MySQL` and `MariaDB`.
LoadDataInfile,
}