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(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(FIELD, __VA_ARGS__) \

View File

@ -49,7 +49,7 @@ public:
[[nodiscard]] const table_column* inverse_join_column() const;
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:
friend table_column;

View File

@ -9,19 +9,17 @@ table::table(const char* 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(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(name, name, columns)
, join_column_index_(column_by_name(*this, join_column))
, inverse_join_column_index_(column_by_name(*this, inverse_join_column)){
: table(name, name, columns, join_column, 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))
, alias_(std::move(alias))
, 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()) {
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 {
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 {