fixed table constructor with join and inverse join columns

This commit is contained in:
sascha 2026-06-02 16:43:31 +02:00
parent 12f8590634
commit 34a9a8aa4a
3 changed files with 13 additions and 9 deletions

View File

@ -18,7 +18,7 @@ TABLE_NAME##_table()\
: TABLE_NAME##_table(#TABLE_NAME) \ : TABLE_NAME##_table(#TABLE_NAME) \
{} \ {} \
TABLE_NAME##_table(const std::string& alias) \ TABLE_NAME##_table(const std::string& alias) \
: typed_table(#TABLE_NAME, alias, {MAP(FIELD_STRING, __VA_ARGS__)}) \ : typed_table(#TABLE_NAME, alias, {MAP(FIELD_STRING, __VA_ARGS__)}, {}, {}) \
MAP(INIT_FIELD, __VA_ARGS__) \ MAP(INIT_FIELD, __VA_ARGS__) \
{} \ {} \
MAP(FIELD, __VA_ARGS__) \ MAP(FIELD, __VA_ARGS__) \

View File

@ -49,7 +49,7 @@ public:
[[nodiscard]] const table_column* inverse_join_column() const; [[nodiscard]] const table_column* inverse_join_column() const;
protected: protected:
table(std::string name, std::string alias, const std::vector<table_column>& columns); table(std::string name, std::string alias, const std::vector<table_column>& columns, const std::string& join_column, const std::string& inverse_join_column);
private: private:
friend table_column; friend table_column;

View File

@ -9,19 +9,17 @@ table::table(const char* name)
{} {}
table::table(const std::string& name) table::table(const std::string& name)
: table(name, name, {}) {} : table(name, name, {}, {}, {}) {}
table::table(const std::string& name, const std::vector<table_column> &columns) table::table(const std::string& name, const std::vector<table_column> &columns)
: table(name, name, columns) { : table(name, name, columns, {}, {}) {
} }
table::table(const std::string& name, const std::vector<table_column>& columns, const std::string& join_column, const std::string& inverse_join_column) table::table(const std::string& name, const std::vector<table_column>& columns, const std::string& join_column, const std::string& inverse_join_column)
: table(name, name, columns) : table(name, name, columns, join_column, inverse_join_column) {
, join_column_index_(column_by_name(*this, join_column))
, inverse_join_column_index_(column_by_name(*this, inverse_join_column)){
} }
table::table(std::string name, std::string alias, const std::vector<table_column> &columns) table::table(std::string name, std::string alias, const std::vector<table_column> &columns, const std::string& join_column, const std::string& inverse_join_column)
: name_(std::move(name)) : name_(std::move(name))
, alias_(std::move(alias)) , alias_(std::move(alias))
, columns_(columns) { , columns_(columns) {
@ -30,6 +28,12 @@ table::table(std::string name, std::string alias, const std::vector<table_column
if (columns_[i].is_primary_key()) { if (columns_[i].is_primary_key()) {
pk_column_index_ = i; pk_column_index_ = i;
} }
if (columns_[i].column_name() == join_column) {
join_column_index_ = i;
}
if (columns_[i].column_name() == inverse_join_column) {
inverse_join_column_index_ = i;
}
} }
} }
@ -71,7 +75,7 @@ bool table::operator==(const table& x) const {
} }
table table::as(const std::string &alias) const { table table::as(const std::string &alias) const {
return { name_, alias, columns_ }; return { name_, alias, columns_, join_column_index_ > -1 ? join_column()->name() : std::string{}, inverse_join_column_index_ > -1 ? inverse_join_column()->name() : std::string{}};
} }
const std::string & table::table_name() const { const std::string & table::table_name() const {