From 4a19322ef8aeedf68a0535492551aba88980a450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Mon, 15 Dec 2025 17:31:43 +0100 Subject: [PATCH] use raw pointer of table in class column (progress, needs fixes in tests) --- include/matador/orm/session_query_builder.hpp | 24 +++++++++---------- include/matador/query/column.hpp | 9 ++++--- include/matador/query/join_data.hpp | 2 +- source/orm/orm/session_query_builder.cpp | 4 ++-- source/orm/query/column.cpp | 18 +++++++------- 5 files changed, 27 insertions(+), 30 deletions(-) diff --git a/include/matador/orm/session_query_builder.hpp b/include/matador/orm/session_query_builder.hpp index 7a57419..f0ae1cf 100644 --- a/include/matador/orm/session_query_builder.hpp +++ b/include/matador/orm/session_query_builder.hpp @@ -135,8 +135,8 @@ public: } append_join( - query::column{table_info_stack_.top().table, table_info_stack_.top().info.get().primary_key_attribute()->name()}, - query::column{next->second, join_column} + query::column{table_info_stack_.top().table.get(), table_info_stack_.top().info.get().primary_key_attribute()->name()}, + query::column{next->second.get(), join_column} ); } } @@ -172,12 +172,12 @@ public: } append_join( - query::column{table_info_stack_.top().table, table_info_stack_.top().info.get().primary_key_attribute()->name()}, - query::column{relation->second, join_column} + query::column{table_info_stack_.top().table.get(), table_info_stack_.top().info.get().primary_key_attribute()->name()}, + query::column{relation->second.get(), join_column} ); append_join( - query::column{relation->second, inverse_join_column}, - query::column{next->second, info.primary_key_attribute()->name()} + query::column{relation->second.get(), inverse_join_column}, + query::column{next->second.get(), info.primary_key_attribute()->name()} ); } @@ -214,12 +214,12 @@ public: const auto join_columns = join_columns_collector_.collect(); append_join( - query::column{table_info_stack_.top().table, table_info_stack_.top().info.get().primary_key_attribute()->name()}, - query::column{relation->second, join_columns.inverse_join_column} + query::column{table_info_stack_.top().table.get(), table_info_stack_.top().info.get().primary_key_attribute()->name()}, + query::column{relation->second.get(), join_columns.inverse_join_column} ); append_join( - query::column{relation->second, join_columns.join_column}, - query::column{next->second, info.primary_key_attribute()->name()} + query::column{relation->second.get(), join_columns.join_column}, + query::column{next->second.get(), info.primary_key_attribute()->name()} ); } @@ -271,8 +271,8 @@ void session_query_builder::on_foreign_object(const char *id, Pointer &, const u table_info_stack_.pop(); append_join( - query::column{table_info_stack_.top().table, id}, - query::column{next->second, info->get().primary_key_attribute()->name()} + query::column{table_info_stack_.top().table.get(), id}, + query::column{next->second.get(), info->get().primary_key_attribute()->name()} ); } else { push(id); diff --git a/include/matador/query/column.hpp b/include/matador/query/column.hpp index db8acac..e8ebb36 100644 --- a/include/matador/query/column.hpp +++ b/include/matador/query/column.hpp @@ -19,8 +19,7 @@ public: column(const char *name, const std::string& as = ""); // NOLINT(*-explicit-constructor) column(std::string name, std::string as = ""); // NOLINT(*-explicit-constructor) column(sql::sql_function_t func, std::string name); - // column(const class table &tab, std::string name, std::string as = ""); - column(const std::shared_ptr &t, std::string name, std::string as = ""); + column(const class table* tab, std::string name, std::string as = ""); [[nodiscard]] bool equals(const column &x) const; @@ -36,14 +35,14 @@ public: [[nodiscard]] sql::sql_function_t function() const; [[nodiscard]] bool has_alias() const; - [[nodiscard]] std::shared_ptr table() const; - void table(const std::shared_ptr& t); + [[nodiscard]] const class table* table() const; + void table(const query::table* t); // ReSharper disable once CppNonExplicitConversionOperator operator const std::string&() const; // NOLINT(*-explicit-constructor) private: - std::shared_ptr table_; + const query::table* table_{nullptr}; std::string name_; std::string alias_; utils::basic_type type_{utils::basic_type::Unknown}; diff --git a/include/matador/query/join_data.hpp b/include/matador/query/join_data.hpp index c495564..9c51344 100644 --- a/include/matador/query/join_data.hpp +++ b/include/matador/query/join_data.hpp @@ -10,7 +10,7 @@ namespace matador::query { struct join_data { - std::shared_ptr
join_table; + table* join_table{nullptr}; std::unique_ptr condition; }; diff --git a/source/orm/orm/session_query_builder.cpp b/source/orm/orm/session_query_builder.cpp index 500c91e..6096e79 100644 --- a/source/orm/orm/session_query_builder.cpp +++ b/source/orm/orm/session_query_builder.cpp @@ -44,7 +44,7 @@ void criteria_transformer::update_criteria_column(const query::abstract_column_c return; } - const_cast(node.col()).table(it->second); + const_cast(node.col()).table(it->second.get()); } void session_query_builder::on_revision(const char *id, uint64_t &/*rev*/) { @@ -56,7 +56,7 @@ void session_query_builder::push(const std::string &column_name) { if (it == processed_tables_.end()) { throw query_builder_exception{query_build_error::UnexpectedError}; } - entity_query_data_.columns.emplace_back(it->second, column_name, build_alias('c', ++column_index)); + entity_query_data_.columns.emplace_back(it->second.get(), column_name, build_alias('c', ++column_index)); } std::string session_query_builder::build_alias(const char prefix, const unsigned int count) { diff --git a/source/orm/query/column.cpp b/source/orm/query/column.cpp index 5f0e39e..c1c11f3 100644 --- a/source/orm/query/column.cpp +++ b/source/orm/query/column.cpp @@ -18,7 +18,7 @@ column operator ""_col(const char *name, const size_t len) { throw std::invalid_argument("Invalid column name: multiple dots found"); } - return column{std::make_shared
(str.substr(0, pos)), str.substr(pos + 1)}; + return column{new table(str.substr(0, pos)), str.substr(pos + 1)}; } column::column(const char *name, const std::string& as) @@ -26,17 +26,15 @@ column::column(const char *name, const std::string& as) {} column::column(std::string name, std::string as) -: table_(std::make_shared()) -, name_(std::move(name)) +: name_(std::move(name)) , alias_(std::move(as)) {} column::column(const sql::sql_function_t func, std::string name) -: table_(std::make_shared()) -, name_(std::move(name)) +: name_(std::move(name)) , function_(func) {} -column::column(const std::shared_ptr& t, std::string name, std::string as) -: table_(t) +column::column(const class table* tab, std::string name, std::string as) +: table_(tab) , name_(std::move(name)) , alias_(std::move(as)) { } @@ -85,12 +83,12 @@ bool column::has_alias() const { return !alias_.empty(); } -std::shared_ptr
column::table() const { +const class table* column::table() const { return table_; } -void column::table( const std::shared_ptr& t ) { - table_ = t; +void column::table(const query::table* tab) { + table_ = tab; } column::operator const std::string&() const {