@@ -81,54 +81,37 @@ namespace sqlite_orm {
8181 polyfill::void_t <indirectly_test_preparable<decltype (std::declval<S>().prepare(std::declval<E>()))>>> =
8282 true ;
8383
84+ template <class Opt , class OptionsTpl >
85+ decltype (auto ) storage_opt_or_default(OptionsTpl& options) {
8486#ifdef SQLITE_ORM_CTAD_SUPPORTED
85- template <class PropsTpl >
86- on_open on_open_spec_or_default (PropsTpl& properties) {
87- if constexpr (tuple_has_type<PropsTpl, on_open>::value) {
88- return std::move (std::get<on_open>(properties));
87+ if constexpr (tuple_has_type<OptionsTpl, Opt>::value) {
88+ return std::move (std::get<Opt>(options));
8989 } else {
90- return {};
90+ return Opt {};
9191 }
92- }
93-
94- template <class PropsTpl >
95- connection_control connection_control_or_default (PropsTpl& properties) {
96- if constexpr (tuple_has_type<PropsTpl, connection_control>::value) {
97- return std::move (std::get<connection_control>(properties));
98- } else {
99- return {};
100- }
101- }
10292#else
103- template <class PropsTpl >
104- on_open on_open_spec_or_default (PropsTpl&) {
105- return {};
106- }
107-
108- template <class PropsTpl >
109- connection_control connection_control_or_default (PropsTpl&) {
110- return {};
111- }
93+ return Opt{};
11294#endif
95+ }
11396
11497 /* *
11598 * Storage class itself. Create an instanse to use it as an interfacto to sqlite db by calling `make_storage`
11699 * function.
117100 */
118101 template <class ... DBO>
119102 struct storage_t : storage_base {
120- using self = storage_t ;
103+ using self_type = storage_t ;
121104 using db_objects_type = db_objects_tuple<DBO...>;
122105
123106 /* *
124107 * @param filename database filename.
125108 * @param dbObjects db_objects_tuple
126109 */
127- template <class PropsTpl >
128- storage_t (std::string filename, db_objects_type dbObjects, PropsTpl properties ) :
110+ template <class OptionsTpl >
111+ storage_t (std::string filename, db_objects_type dbObjects, OptionsTpl options ) :
129112 storage_base{std::move (filename),
130- on_open_spec_or_default (properties ),
131- connection_control_or_default (properties ),
113+ storage_opt_or_default<connection_control>(options ),
114+ storage_opt_or_default<on_open_spec>(options ),
132115 foreign_keys_count (dbObjects)},
133116 db_objects{std::move (dbObjects)} {}
134117
@@ -149,7 +132,7 @@ namespace sqlite_orm {
149132 *
150133 * Hence, friend was replaced by `obtain_db_objects()` and `pick_const_impl()`.
151134 */
152- friend const db_objects_type& obtain_db_objects (const self & storage) noexcept {
135+ friend const db_objects_type& obtain_db_objects (const self_type & storage) noexcept {
153136 return storage.db_objects ;
154137 }
155138
@@ -281,7 +264,7 @@ namespace sqlite_orm {
281264
282265 public:
283266 template <class T , class O = mapped_type_proxy_t <T>, class ... Args>
284- mapped_view<O, self , Args...> iterate(Args&&... args) {
267+ mapped_view<O, self_type , Args...> iterate(Args&&... args) {
285268 this ->assert_mapped_type <O>();
286269
287270 auto con = this ->get_connection ();
@@ -816,7 +799,7 @@ namespace sqlite_orm {
816799 std::enable_if_t <!is_prepared_statement<Ex>::value && !is_mapped<db_objects_type, Ex>::value,
817800 bool > = true >
818801 std::string dump (E&& expression, bool parametrized = false ) const {
819- static_assert (is_preparable_v<self , Ex>, " Expression must be a high-level statement" );
802+ static_assert (is_preparable_v<self_type , Ex>, " Expression must be a high-level statement" );
820803
821804 decltype (auto ) e2 = static_if<is_select<Ex>::value>(
822805 [](auto expression) -> auto {
@@ -1739,18 +1722,15 @@ namespace sqlite_orm {
17391722 }; // struct storage_t
17401723
17411724#ifdef SQLITE_ORM_CTAD_SUPPORTED
1742- template <typename T>
1743- using storage_prop_tag_t = typename T::storage_prop_tag;
1744-
17451725 template <class Elements >
1746- using prop_index_sequence = filter_tuple_sequence_t <Elements, check_if_names< storage_prop_tag_t >::template fn>;
1726+ using dbo_index_sequence = filter_tuple_sequence_t <Elements, check_if_lacks< storage_opt_tag_t >::template fn>;
17471727
17481728 template <class Elements >
1749- using dbo_index_sequence = filter_tuple_sequence_t <Elements, check_if_lacks< storage_prop_tag_t >::template fn>;
1729+ using opt_index_sequence = filter_tuple_sequence_t <Elements, check_if_names< storage_opt_tag_t >::template fn>;
17501730
1751- template <class ... DBO, class PropsTpl >
1752- storage_t <DBO...> make_storage (std::string filename, std::tuple<DBO...> dbObjects, PropsTpl properties ) {
1753- return {std::move (filename), std::move (dbObjects), std::move (properties )};
1731+ template <class ... DBO, class OptionsTpl >
1732+ storage_t <DBO...> make_storage (std::string filename, std::tuple<DBO...> dbObjects, OptionsTpl options ) {
1733+ return {std::move (filename), std::move (dbObjects), std::move (options )};
17541734 }
17551735#endif
17561736 }
@@ -1762,13 +1742,14 @@ SQLITE_ORM_EXPORT namespace sqlite_orm {
17621742 * Factory function for a storage, from a database file and a bunch of database object definitions.
17631743 */
17641744 template <class ... Spec>
1765- auto make_storage (std::string filename, Spec... arguments ) {
1745+ auto make_storage (std::string filename, Spec... specifications ) {
17661746 using namespace ::sqlite_orm::internal;
17671747
1768- std::tuple args{std::forward<Spec>(arguments)...};
1769- return make_storage (std::move (filename),
1770- create_from_tuple<std::tuple>(std::move (args), dbo_index_sequence<decltype (args)>{}),
1771- create_from_tuple<std::tuple>(std::move (args), prop_index_sequence<decltype (args)>{}));
1748+ std::tuple specTuple{std::forward<Spec>(specifications)...};
1749+ return internal::make_storage (
1750+ std::move (filename),
1751+ create_from_tuple<std::tuple>(std::move (specTuple), dbo_index_sequence<decltype (specTuple)>{}),
1752+ create_from_tuple<std::tuple>(std::move (specTuple), opt_index_sequence<decltype (specTuple)>{}));
17721753 }
17731754#else
17741755 template <class ... DBO>
0 commit comments