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;
45 [[nodiscard]] SqlQueryFormatter
const& Formatter() const noexcept
51 template <
typename ColumnValue>
52 SqlUpdateQueryBuilder& Set(std::string_view columnName, ColumnValue
const& value);
55 template <std::
size_t N>
56 SqlUpdateQueryBuilder& Set(std::string_view columnName,
char const (&value)[N]);
59 [[nodiscard]] std::string
ToSql()
const;
62 SqlQueryFormatter
const& m_formatter;
64 SqlSearchCondition m_searchCondition;
67template <
typename ColumnValue>
68SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName, ColumnValue
const& value)
70 using namespace std::string_view_literals;
72 if (!m_values.empty())
76 m_values += columnName;
77 m_values += R
"(" = )"sv;
79 if constexpr (std::is_same_v<ColumnValue, SqlNullType>)
81 else if constexpr (std::is_same_v<ColumnValue, SqlWildcardType>)
83 else if constexpr (std::is_same_v<ColumnValue, SqlVariant>)
91 else if (m_searchCondition.inputBindings)
94 m_searchCondition.inputBindings->emplace_back(value);
97 m_values += m_formatter.StringLiteral(std::format(
"{}", value));
99 else if (m_searchCondition.inputBindings)
102 m_searchCondition.inputBindings->emplace_back(value);
104 else if constexpr (std::is_same_v<ColumnValue, char>)
105 m_values += m_formatter.StringLiteral(value);
106 else if constexpr (std::is_arithmetic_v<ColumnValue>)
107 m_values += std::format(
"{}", value);
108 else if constexpr (!WhereConditionLiteralType<ColumnValue>::needsQuotes)
109 m_values += std::format(
"{}", value);
115 m_values += m_formatter.StringLiteral(std::format(
"{}", value));
121template <std::
size_t N>
122SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName,
char const (&value)[N])
124 return Set(columnName, std::string_view { value, N - 1 });
127inline LIGHTWEIGHT_FORCE_INLINE std::string SqlUpdateQueryBuilder::ToSql()
const
129 return m_formatter.Update(
130 m_searchCondition.tableName, m_searchCondition.tableAlias, m_values, m_searchCondition.condition);
LIGHTWEIGHT_API std::vector< std::string > ToSql(SqlQueryFormatter const &formatter, SqlMigrationPlanElement const &element)