schema progress

This commit is contained in:
2024-02-29 20:00:39 +01:00
parent 7e1713ddd3
commit c9a84e0568
25 changed files with 111 additions and 86 deletions
@@ -63,7 +63,7 @@ public:
template<class ContainerType>
void on_has_many(const char *, ContainerType &, const char *, const char *, const utils::foreign_attributes &attr)
{
if (attr.fetch() == fetch_type::LAZY) {
if (attr.fetch() == utils::fetch_type::LAZY) {
return;
}
const auto info = table_schema_.info<typename ContainerType::value_type::value_type>();
+1 -1
View File
@@ -36,7 +36,7 @@ public:
[[nodiscard]] bool exists(const std::string &schema_name, const std::string &table_name) const;
[[nodiscard]] bool exists(const std::string &table_name) const;
sql::query query(const std::shared_ptr<sql::schema> &schema) const;
sql::query query(const sql::schema &schema) const;
query_result<record> fetch(const query_context &q) const;
[[nodiscard]] std::unique_ptr<query_result_impl> fetch(const std::string &sql) const;
+4 -4
View File
@@ -10,7 +10,7 @@ class connection;
class query
{
public:
explicit query(connection &db, const std::shared_ptr<sql::schema> &schema);
explicit query(connection &db, const sql::schema &schema);
query(const query &) = delete;
query& operator=(const query &) = delete;
@@ -28,19 +28,19 @@ public:
private:
connection &connection_;
std::shared_ptr<sql::schema> schema_;
const sql::schema &schema_;
};
template<class Type>
query_select_intermediate query::select()
{
return select(column_name_generator::generate<Type>(*schema_));
return select(column_name_generator::generate<Type>(schema_));
}
template<class Type>
query_select_intermediate query::select(std::initializer_list<column> columns)
{
auto cols = column_name_generator::generate<Type>(*schema_);
auto cols = column_name_generator::generate<Type>(schema_);
cols.insert(cols.end(), columns);
return select(cols);
}
+15 -15
View File
@@ -24,17 +24,17 @@ class connection;
class basic_query_intermediate
{
public:
explicit basic_query_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema);
explicit basic_query_intermediate(connection &db, const sql::schema &schema);
protected:
connection &connection_;
std::shared_ptr<sql::schema> schema_;
const sql::schema &schema_;
};
class query_intermediate : public basic_query_intermediate
{
public:
query_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema, query_data &data);
query_intermediate(connection &db, const sql::schema &schema, query_data &data);
protected:
query_data &data_;
@@ -188,7 +188,7 @@ private:
class query_start_intermediate : public basic_query_intermediate
{
public:
explicit query_start_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema);
explicit query_start_intermediate(connection &db, const sql::schema &schema);
protected:
query_data data_;
@@ -197,7 +197,7 @@ protected:
class query_select_intermediate : public query_start_intermediate
{
public:
query_select_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema, const std::vector<column>& columns);
query_select_intermediate(connection &db, const sql::schema &schema, const std::vector<column>& columns);
query_from_intermediate from(const table& t);
};
@@ -234,24 +234,24 @@ public:
class query_create_intermediate : public query_start_intermediate
{
public:
explicit query_create_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema);
explicit query_create_intermediate(connection &db, const sql::schema &schema);
query_execute_finish table(const sql::table &table, std::initializer_list<column_definition> columns);
query_execute_finish table(const sql::table &table, const std::vector<column_definition> &columns);
template<class Type>
query_execute_finish table(const sql::table &table)
{
if (!schema_->exists<Type>()) {
schema_->attach<Type>(table.name);
}
return this->table(table, column_generator::generate<Type>(*schema_));
// if (!schema_.exists<Type>()) {
// schema_.attach<Type>(table.name);
// }
return this->table(table, column_generator::generate<Type>(schema_));
}
};
class query_drop_intermediate : query_start_intermediate
{
public:
explicit query_drop_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema);
explicit query_drop_intermediate(connection &db, const sql::schema &schema);
query_execute_finish table(const sql::table &table);
};
@@ -259,14 +259,14 @@ public:
class query_insert_intermediate : public query_start_intermediate
{
public:
explicit query_insert_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema);
explicit query_insert_intermediate(connection &db, const sql::schema &schema);
query_into_intermediate into(const sql::table &table, std::initializer_list<column> column_names);
query_into_intermediate into(const sql::table &table, std::vector<column> &&column_names);
template<class Type>
query_into_intermediate into(const sql::table &table)
{
return into(table, column_name_generator::generate<Type>(*schema_));
return into(table, column_name_generator::generate<Type>(schema_));
}
};
@@ -296,7 +296,7 @@ private:
class query_update_intermediate : public query_start_intermediate
{
public:
query_update_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema, const sql::table& table);
query_update_intermediate(connection &db, const sql::schema &schema, const sql::table& table);
query_set_intermediate set(std::initializer_list<key_value_pair> columns);
query_set_intermediate set(std::vector<key_value_pair> &&columns);
@@ -325,7 +325,7 @@ private:
class query_delete_intermediate : public query_start_intermediate
{
public:
explicit query_delete_intermediate(connection &db, const std::shared_ptr<sql::schema> &schema);
explicit query_delete_intermediate(connection &db, const sql::schema &schema);
query_delete_from_intermediate from(const sql::table &table);
};
+5
View File
@@ -28,7 +28,12 @@ public:
using iterator = repository::iterator;
using const_iterator = repository::const_iterator;
schema() = delete;
explicit schema(std::string name);
schema(const schema&) = delete;
schema& operator=(const schema&) = delete;
schema(schema&&) noexcept = default;
schema& operator=(schema&&) noexcept = default;
[[nodiscard]] std::string name() const;
+2 -2
View File
@@ -56,7 +56,7 @@ private:
connection_pool<connection> &pool_;
const class dialect &dialect_;
std::shared_ptr<schema> schema_;
std::unique_ptr<schema> schema_;
mutable std::unordered_map<std::string, record> prototypes_;
};
@@ -74,7 +74,7 @@ entity<Type> session::insert(Type *obj)
if (!info) {
return {};
}
c->query(schema_).insert().into<Type>(info->name).values(*obj).execute();
c->query(*schema_).insert().into<Type>(info->name).values(*obj).execute();
return entity{obj};
}