24 std::string tableName,
25 std::vector<SqlVariant>* inputBindings)
noexcept;
28 template <
typename ColumnValue>
32 template <std::
size_t N>
36 [[nodiscard]]
inline std::string
ToSql()
const;
40 std::string m_tableName;
43 std::vector<SqlVariant>* m_inputBindings;
47 std::string tableName,
48 std::vector<SqlVariant>* inputBindings) noexcept
50 m_formatter { formatter },
51 m_tableName { std::move(tableName) },
52 m_inputBindings { inputBindings }
56template <
typename ColumnValue>
59 using namespace std::string_view_literals;
61 if (!m_fields.empty())
65 m_fields += columnName;
68 if (!m_values.empty())
71 if constexpr (std::is_same_v<ColumnValue, SqlNullType>)
73 else if constexpr (std::is_same_v<ColumnValue, SqlWildcardType>)
75 else if (m_inputBindings)
78 m_inputBindings->emplace_back(value);
80 else if constexpr (std::is_same_v<ColumnValue, char>)
82 else if constexpr (std::is_arithmetic_v<ColumnValue>)
83 m_values += std::format(
"{}", value);
84 else if constexpr (std::is_convertible_v<ColumnValue, std::string>
85 || std::is_convertible_v<ColumnValue, std::string_view>
86 || std::is_convertible_v<ColumnValue, char const*>)
92 m_values += m_formatter.
StringLiteral(std::format(
"{}", value));
98template <std::
size_t N>
101 return Set(columnName, std::string_view { value, N - 1 });
106 return m_formatter.
Insert(m_tableName, m_fields, m_values);
Query builder for building INSERT INTO ... queries.
SqlInsertQueryBuilder(SqlQueryFormatter const &formatter, std::string tableName, std::vector< SqlVariant > *inputBindings) noexcept
Constructs an INSERT query builder.
std::string ToSql() const
Finalizes building the query as INSERT INTO ... query.
SqlInsertQueryBuilder & Set(std::string_view columnName, ColumnValue const &value)
Adds a single column to the INSERT query.
LIGHTWEIGHT_API std::vector< std::string > ToSql(SqlQueryFormatter const &formatter, SqlMigrationPlanElement const &element)