17class [[nodiscard]] SqlUpdateQueryBuilder final:
public SqlWhereClauseBuilder<SqlUpdateQueryBuilder>
27 SqlUpdateQueryBuilder(SqlQueryFormatter
const& formatter,
29 std::string tableAlias,
30 std::vector<SqlVariant>* inputBindings)
noexcept:
31 SqlWhereClauseBuilder<SqlUpdateQueryBuilder> {},
32 m_formatter { formatter }
34 m_searchCondition.tableName = std::move(table);
35 m_searchCondition.tableAlias = std::move(tableAlias);
36 m_searchCondition.inputBindings = inputBindings;
39 SqlSearchCondition& SearchCondition() noexcept
41 return m_searchCondition;
45 [[nodiscard]] SqlQueryFormatter
const& FormatterLocal()
52 template <
typename ColumnValue>
53 SqlUpdateQueryBuilder& Set(std::string_view columnName, ColumnValue
const& value);
56 template <std::
size_t N>
57 SqlUpdateQueryBuilder& Set(std::string_view columnName,
char const (&value)[N]);
60 [[nodiscard]] std::string ToSql()
const;
63 SqlQueryFormatter
const& m_formatter;
65 SqlSearchCondition m_searchCondition;
68template <
typename ColumnValue>
69SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName, ColumnValue
const& value)
71 using namespace std::string_view_literals;
73 if (!m_values.empty())
77 m_values += columnName;
78 m_values += R
"(" = )"sv;
80 if constexpr (std::is_same_v<ColumnValue, SqlNullType>)
82 else if constexpr (std::is_same_v<ColumnValue, SqlWildcardType>)
84 else if (m_searchCondition.inputBindings)
87 m_searchCondition.inputBindings->emplace_back(value);
89 else if constexpr (std::is_same_v<ColumnValue, char>)
90 m_values += m_formatter.StringLiteral(value);
91 else if constexpr (std::is_arithmetic_v<ColumnValue>)
92 m_values += std::format(
"{}", value);
93 else if constexpr (!WhereConditionLiteralType<ColumnValue>::needsQuotes)
94 m_values += std::format(
"{}", value);
98 m_values += std::format(
"{}", value);
105template <std::
size_t N>
106SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName,
char const (&value)[N])
108 return Set(columnName, std::string_view { value, N - 1 });
111inline LIGHTWEIGHT_FORCE_INLINE std::string SqlUpdateQueryBuilder::ToSql()
const
113 return m_formatter.Update(
114 m_searchCondition.tableName, m_searchCondition.tableAlias, m_values, m_searchCondition.condition);