17class [[nodiscard]] SqlUpdateQueryBuilder final:
public SqlWhereClauseBuilder<SqlUpdateQueryBuilder>
26 SqlUpdateQueryBuilder(SqlQueryFormatter
const& formatter,
28 std::string tableAlias,
29 std::vector<SqlVariant>* inputBindings)
noexcept:
30 SqlWhereClauseBuilder<SqlUpdateQueryBuilder> {},
31 m_formatter { formatter }
33 m_searchCondition.tableName = std::move(table);
34 m_searchCondition.tableAlias = std::move(tableAlias);
35 m_searchCondition.inputBindings = inputBindings;
39 SqlSearchCondition& SearchCondition() noexcept
41 return m_searchCondition;
48 [[nodiscard]] SqlQueryFormatter
const& Formatter()
55 template <
typename ColumnValue>
56 SqlUpdateQueryBuilder& Set(std::string_view columnName, ColumnValue
const& value);
59 template <std::
size_t N>
60 SqlUpdateQueryBuilder& Set(std::string_view columnName,
char const (&value)[N]);
63 [[nodiscard]] std::string
ToSql()
const;
66 SqlQueryFormatter
const& m_formatter;
68 SqlSearchCondition m_searchCondition;
71template <
typename ColumnValue>
72SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName, ColumnValue
const& value)
74 using namespace std::string_view_literals;
76 if (!m_values.empty())
80 m_values += columnName;
81 m_values += R
"(" = )"sv;
83 if constexpr (std::is_same_v<ColumnValue, SqlNullType>)
85 else if constexpr (std::is_same_v<ColumnValue, SqlWildcardType>)
87 else if constexpr (std::is_same_v<ColumnValue, SqlVariant>)
95 else if (m_searchCondition.inputBindings)
98 m_searchCondition.inputBindings->emplace_back(value);
101 m_values += m_formatter.StringLiteral(std::format(
"{}", value));
103 else if (m_searchCondition.inputBindings)
106 m_searchCondition.inputBindings->emplace_back(value);
108 else if constexpr (std::is_same_v<ColumnValue, char>)
109 m_values += m_formatter.StringLiteral(value);
110 else if constexpr (std::is_arithmetic_v<ColumnValue>)
111 m_values += std::format(
"{}", value);
112 else if constexpr (!WhereConditionLiteralType<ColumnValue>::needsQuotes)
113 m_values += std::format(
"{}", value);
119 m_values += m_formatter.StringLiteral(std::format(
"{}", value));
125template <std::
size_t N>
126SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName,
char const (&value)[N])
128 return Set(columnName, std::string_view { value, N - 1 });
131inline LIGHTWEIGHT_FORCE_INLINE std::string SqlUpdateQueryBuilder::ToSql()
const
133 return m_formatter.Update(
134 m_searchCondition.tableName, m_searchCondition.tableAlias, m_values, m_searchCondition.condition);
LIGHTWEIGHT_API std::vector< std::string > ToSql(SqlQueryFormatter const &formatter, SqlMigrationPlanElement const &element)