Skip to content

Commit e809bbc

Browse files
authored
Merge pull request #1455 from fnc12/generalize
Generalize and streamline code base
2 parents 72549e4 + 17f861f commit e809bbc

25 files changed

+654
-811
lines changed

dev/ast/set.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ namespace sqlite_orm {
5151
template<class L, class R>
5252
void push_back(assign_t<L, R> assign) {
5353
auto newContext = this->context;
54-
newContext.skip_table_name = true;
54+
newContext.omit_table_name = true;
5555
// note: we are only interested in the table name on the left-hand side of the assignment operator expression
5656
iterate_ast(assign.lhs, this->collector);
5757
std::stringstream ss;
@@ -108,7 +108,6 @@ SQLITE_ORM_EXPORT namespace sqlite_orm {
108108
*/
109109
template<class S>
110110
internal::dynamic_set_t<internal::serializer_context<typename S::db_objects_type>> dynamic_set(const S& storage) {
111-
internal::serializer_context_builder<S> builder(storage);
112-
return builder();
111+
return {obtain_db_objects(storage)};
113112
}
114113
}

dev/column_names_getter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ namespace sqlite_orm {
3333
if (definedOrder) {
3434
auto& table = pick_table<mapped_type_proxy_t<T>>(context.db_objects);
3535
collectedExpressions.reserve(collectedExpressions.size() + table.template count_of<is_column>());
36-
table.for_each_column([qualified = !context.skip_table_name,
36+
table.for_each_column([qualified = !context.omit_table_name,
3737
&tableName = table.name,
3838
&collectedExpressions](const column_identifier& column) {
3939
if constexpr (is_alias<T>::value) {
@@ -50,7 +50,7 @@ namespace sqlite_orm {
5050
collectedExpressions.reserve(collectedExpressions.size() + 1);
5151
if constexpr (is_alias<T>::value) {
5252
collectedExpressions.push_back(quote_identifier(alias_extractor<T>::extract()) + ".*");
53-
} else if (!context.skip_table_name) {
53+
} else if (!context.omit_table_name) {
5454
const basic_table& table = pick_table<mapped_type_proxy_t<T>>(context.db_objects);
5555
collectedExpressions.push_back(quote_identifier(table.name) + ".*");
5656
} else {

dev/conditions.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ namespace sqlite_orm {
493493
template<class O>
494494
void push_back(order_by_t<O> orderBy) {
495495
auto newContext = this->context;
496-
newContext.skip_table_name = false;
496+
newContext.omit_table_name = false;
497497
auto columnName = serialize(orderBy._expression, newContext);
498498
this->entries.emplace_back(std::move(columnName), std::move(orderBy._collate_argument), orderBy._order);
499499
}
@@ -1149,8 +1149,7 @@ SQLITE_ORM_EXPORT namespace sqlite_orm {
11491149
template<class S>
11501150
internal::dynamic_order_by_t<internal::serializer_context<typename S::db_objects_type>>
11511151
dynamic_order_by(const S& storage) {
1152-
internal::serializer_context_builder<S> builder(storage);
1153-
return builder();
1152+
return {obtain_db_objects(storage)};
11541153
}
11551154

11561155
/**

dev/cte_column_names_collector.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ namespace sqlite_orm {
5757
SQLITE_ORM_STATIC_CALLOP std::vector<std::string>
5858
operator()(const expression_type& t, const Ctx& context) SQLITE_ORM_OR_CONST_CALLOP {
5959
auto newContext = context;
60-
newContext.skip_table_name = true;
60+
newContext.omit_table_name = true;
6161
std::string columnName = serialize(t, newContext);
6262
if (columnName.empty()) {
6363
throw std::system_error{orm_error_code::column_not_found};
@@ -137,7 +137,7 @@ namespace sqlite_orm {
137137
std::vector<std::string> columnNames;
138138
columnNames.reserve(size_t(cols.count));
139139
auto newContext = context;
140-
newContext.skip_table_name = true;
140+
newContext.omit_table_name = true;
141141
iterate_tuple(cols.columns, [&columnNames, &newContext](auto& m) {
142142
using value_type = polyfill::remove_cvref_t<decltype(m)>;
143143

dev/implementations/storage_definitions.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ namespace sqlite_orm {
2424
namespace internal {
2525
template<class... DBO>
2626
template<class Table, satisfies<is_table, Table>>
27-
sync_schema_result storage_t<DBO...>::sync_table([[maybe_unused]] const Table& table,
28-
[[maybe_unused]] sqlite3* db,
29-
[[maybe_unused]] bool preserve) {
27+
sync_schema_result storage_t<DBO...>::sync_dbo([[maybe_unused]] const Table& table,
28+
[[maybe_unused]] sqlite3* db,
29+
[[maybe_unused]] bool preserve) {
3030
if constexpr (
3131
#ifdef SQLITE_ENABLE_DBSTAT_VTAB
3232
std::is_same<object_type_t<Table>, dbstat>::value ||

dev/mapped_view.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ namespace sqlite_orm {
4242

4343
auto& dbObjects = obtain_db_objects(this->storage);
4444
context_t context{dbObjects};
45-
context.skip_table_name = false;
45+
context.omit_table_name = false;
4646
context.replace_bindable_with_question = true;
4747

4848
const std::string sql = serialize(this->expression, context);

dev/order_by_serializer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ namespace sqlite_orm {
4545
const Ctx& context) SQLITE_ORM_OR_CONST_CALLOP {
4646
std::stringstream ss;
4747
auto newContext = context;
48-
newContext.skip_table_name = false;
48+
newContext.omit_table_name = false;
4949

5050
ss << serialize(orderBy._expression, newContext);
5151
seralize_collate(ss, orderBy);

dev/prepared_statement.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,48 @@ namespace sqlite_orm {
310310

311311
template<class T>
312312
using is_insert_constraint = std::is_same<T, insert_constraint>;
313+
314+
/**
315+
* Specialize if a type is a DML statement expression.
316+
*/
317+
template<class T, class SFINAE = void>
318+
inline constexpr bool is_raw_dml_expression_v = false;
319+
320+
template<class T>
321+
using is_raw_dml_expression = polyfill::bool_constant<is_raw_dml_expression_v<T>>;
322+
323+
template<class DML>
324+
inline constexpr bool is_raw_dml_expression_v<
325+
DML,
326+
std::enable_if_t<
327+
polyfill::
328+
disjunction_v<is_insert_raw<DML>, is_replace_raw<DML>, is_update_all<DML>, is_remove_all<DML>>>> =
329+
true;
330+
331+
template<class With>
332+
inline constexpr bool is_raw_dml_expression_v<
333+
With,
334+
std::enable_if_t<polyfill::conjunction_v<is_with_clause<With>,
335+
polyfill::disjunction<is_insert_raw<expression_type_t<With>>,
336+
is_replace_raw<expression_type_t<With>>,
337+
is_update_all<expression_type_t<With>>,
338+
is_remove_all<expression_type_t<With>>>>>> =
339+
true;
340+
341+
/*
342+
* Access the main select expression of a with clause or the passed in select expression.
343+
*/
344+
template<class DML, satisfies<is_raw_dml_expression, DML> = true>
345+
constexpr decltype(auto) access_main_dml(const DML& dml) {
346+
if constexpr (is_with_clause_v<DML>) {
347+
return (dml.expression);
348+
} else {
349+
return dml;
350+
}
351+
}
352+
353+
template<class DML>
354+
using main_dml_t = polyfill::remove_cvref_t<decltype(access_main_dml(std::declval<DML>()))>;
313355
}
314356
}
315357

dev/result_set_view.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ namespace sqlite_orm::internal {
5353
using context_t = serializer_context<ExprDBOs>;
5454

5555
context_t context{exprDBOs};
56-
context.skip_table_name = false;
56+
context.omit_table_name = false;
5757
context.replace_bindable_with_question = true;
5858

5959
const std::string sql = serialize(this->expression, context);

dev/schema/column.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ namespace sqlite_orm {
118118
template<class T>
119119
using is_column = polyfill::bool_constant<is_column_v<T>>;
120120

121+
template<class Elements>
122+
using col_index_sequence_of = filter_tuple_sequence_t<Elements, is_column>;
123+
121124
template<class Elements, class F>
122125
using col_index_sequence_with_field_type =
123126
filter_tuple_sequence_t<Elements,

0 commit comments

Comments
 (0)