added returning token for insert query

This commit is contained in:
2026-02-15 18:34:12 +01:00
parent 9065355ee0
commit f38be4c6d9
16 changed files with 178 additions and 58 deletions
@@ -2,24 +2,32 @@
#define QUERY_INTO_INTERMEDIATE_HPP
#include "matador/query/intermediates/executable_query.hpp"
#include "matador/query/intermediates/fetchable_query.hpp"
#include "matador/query/value_extractor.hpp"
#include "matador/utils/placeholder.hpp"
namespace matador::query {
class table_column;
class query_into_intermediate : public query_intermediate
{
class query_values_intermediate : public executable_query {
public:
using executable_query::executable_query;
fetchable_query returning(const table_column &col);
};
class query_into_intermediate : public query_intermediate {
public:
using query_intermediate::query_intermediate;
executable_query values(std::initializer_list<std::variant<utils::placeholder, utils::database_type>> values);
executable_query values(std::vector<std::variant<utils::placeholder, utils::database_type>> &&values);
executable_query values(std::vector<utils::placeholder> &&values);
executable_query values(std::vector<utils::database_type> &&values);
query_values_intermediate values(std::initializer_list<std::variant<utils::placeholder, utils::database_type>> values);
query_values_intermediate values(std::vector<std::variant<utils::placeholder, utils::database_type>> &&values);
query_values_intermediate values(std::vector<utils::placeholder> &&values);
query_values_intermediate values(std::vector<utils::database_type> &&values);
template<class Type>
executable_query values(const Type &obj) {
query_values_intermediate values(const Type &obj) {
return values(value_extractor::extract(obj));
}
};
+14 -2
View File
@@ -317,8 +317,7 @@ private:
/**
* Represents the SQL VALUES part
*/
class query_values_part final : public query_part
{
class query_values_part final : public query_part {
public:
explicit query_values_part(std::vector<std::variant<utils::placeholder, utils::database_type>> &&values);
@@ -331,6 +330,19 @@ private:
std::vector<std::variant<utils::placeholder, utils::database_type>> values_;
};
class query_returning_part final : public query_part {
public:
explicit query_returning_part(std::vector<table_column> columns);
[[nodiscard]] const std::vector<table_column>& columns() const;
private:
void accept(query_part_visitor &visitor) override;
private:
std::vector<table_column> columns_;
};
class query_update_part final : public query_part
{
public:
+2 -1
View File
@@ -44,7 +44,6 @@ protected:
void visit(internal::query_drop_key_constraint_part_by_name &part) override;
void visit(internal::query_drop_key_constraint_part_by_constraint &part) override;
protected:
void visit(internal::query_select_part &part) override;
void visit(internal::query_from_part &part) override;
void visit(internal::query_join_table_part &part) override;
@@ -57,9 +56,11 @@ protected:
void visit(internal::query_order_by_desc_part &part) override;
void visit(internal::query_offset_part &part) override;
void visit(internal::query_limit_part &part) override;
void visit(internal::query_insert_part &part) override;
void visit(internal::query_into_part &part) override;
void visit(internal::query_values_part &part) override;
void visit(internal::query_returning_part &part) override;
void visit(internal::query_update_part &part) override;
void visit(internal::query_set_part &part) override;
@@ -4,7 +4,9 @@
namespace matador::query {
namespace internal {
// Alter common
class query_alter_part;
// Alter table
class query_alter_table_part;
class query_add_key_constraint_part;
class query_drop_key_constraint_part_by_name;
@@ -13,6 +15,7 @@ class query_add_foreign_key_constraint_part;
class query_add_constraint_part_by_constraint;
class query_add_foreign_key_reference_part;
class query_add_primary_key_constraint_part;
// Select
class query_select_part;
class query_from_part;
class query_join_table_part;
@@ -25,20 +28,30 @@ class query_order_by_asc_part;
class query_order_by_desc_part;
class query_offset_part;
class query_limit_part;
// Insert
class query_insert_part;
class query_into_part;
class query_values_part;
class query_returning_part;
// Update
class query_update_part;
class query_set_part;
// Delete
class query_delete_part;
class query_delete_from_part;
// Create common
class query_create_part;
// Create table
class query_create_table_part;
class query_create_table_columns_part;
class query_create_table_constraints_part;
// Create schema
class query_create_schema_part;
// Drop common
class query_drop_part;
// Drop table
class query_drop_table_part;
// Drop schema
class query_drop_schema_part;
}
@@ -72,6 +85,7 @@ public:
virtual void visit(internal::query_insert_part &part) = 0;
virtual void visit(internal::query_into_part &part) = 0;
virtual void visit(internal::query_values_part &part) = 0;
virtual void visit(internal::query_returning_part &part) = 0;
virtual void visit(internal::query_update_part &part) = 0;
virtual void visit(internal::query_set_part &part) = 0;
+1
View File
@@ -12,6 +12,7 @@ class dialect;
namespace matador::query {
class table_column;
void prepare_column(std::string &out, const sql::dialect& d, const table_column &col);
[[nodiscard]] std::string prepare_identifier(const sql::dialect& d, const table_column &col);
[[nodiscard]] std::string prepare_criteria(const sql::dialect& d, const table_column &col);
}