19 class query_condition;
53 virtual void add_join(
const std::string& table,
const std::string& condition,
join_type type) = 0;
56 virtual void set_group_by(
const std::vector<std::string>& columns) = 0;
57 virtual void set_having(
const std::string& condition) = 0;
68 virtual void set_insert_data(
const std::map<std::string, core::database_value>& data) = 0;
69 virtual void set_insert_rows(
const std::vector<std::map<std::string, core::database_value>>& rows) = 0;
73 virtual void set_update_data(
const std::map<std::string, core::database_value>& data) = 0;
80 virtual void set_key(
const std::string& key) = 0;
83 virtual std::string
build()
const = 0;
113 void add_join(
const std::string& table,
const std::string& condition,
join_type type)
override;
115 void set_group_by(
const std::vector<std::string>& columns)
override;
116 void set_having(
const std::string& condition)
override;
124 void set_insert_data(
const std::map<std::string, core::database_value>& data)
override;
125 void set_insert_rows(
const std::vector<std::map<std::string, core::database_value>>& rows)
override;
128 void set_update_data(
const std::map<std::string, core::database_value>& data)
override;
133 void set_key(
const std::string& key)
override;
135 std::string
build()
const override;
137 void reset()
override;
175 ~mongodb_dialect()
override =
default;
177 void set_query_type(query_type type)
override;
178 query_type get_query_type()
const override;
180 void set_select_columns(
const std::vector<std::string>& columns)
override;
181 void set_from_table(
const std::string& table)
override;
184 void add_where_condition(
const std::string& field,
const std::string& op,
const core::database_value& value)
override;
186 void add_join(
const std::string& table,
const std::string& condition,
join_type type)
override;
188 void set_group_by(
const std::vector<std::string>& columns)
override;
189 void set_having(
const std::string& condition)
override;
191 void add_order_by(
const std::string& column,
sort_order order)
override;
193 void set_limit(
size_t count)
override;
194 void set_offset(
size_t count)
override;
196 void set_insert_table(
const std::string& table)
override;
197 void set_insert_data(
const std::map<std::string, core::database_value>& data)
override;
198 void set_insert_rows(
const std::vector<std::map<std::string, core::database_value>>& rows)
override;
200 void set_update_table(
const std::string& table)
override;
201 void set_update_data(
const std::map<std::string, core::database_value>& data)
override;
203 void set_delete_table(
const std::string& table)
override;
205 void set_collection(
const std::string& name)
override;
206 void set_key(
const std::string& key)
override;
208 std::string build()
const override;
210 void reset()
override;
215 enum class operation_type {
none, find, insert, update, delete_op, aggregate };
217 operation_type op_type_;
218 std::string collection_name_;
219 std::map<std::string, core::database_value> filter_;
220 std::map<std::string, core::database_value> projection_;
221 std::map<std::string, int> sort_spec_;
225 std::map<std::string, core::database_value> document_;
226 std::vector<std::map<std::string, core::database_value>> documents_;
227 std::map<std::string, core::database_value> update_spec_;
229 std::vector<std::map<std::string, core::database_value>> pipeline_;
231 std::string to_json(
const std::map<std::string, core::database_value>& data)
const;
244 class redis_dialect final :
public query_dialect
248 ~redis_dialect()
override =
default;
250 void set_query_type(query_type type)
override;
251 query_type get_query_type()
const override;
253 void set_select_columns(
const std::vector<std::string>& columns)
override;
254 void set_from_table(
const std::string& table)
override;
256 void add_where_condition(
const query_condition& condition)
override;
257 void add_where_condition(
const std::string& field,
const std::string& op,
const core::database_value& value)
override;
259 void add_join(
const std::string& table,
const std::string& condition, join_type type)
override;
261 void set_group_by(
const std::vector<std::string>& columns)
override;
262 void set_having(
const std::string& condition)
override;
264 void add_order_by(
const std::string& column, sort_order order)
override;
266 void set_limit(
size_t count)
override;
267 void set_offset(
size_t count)
override;
269 void set_insert_table(
const std::string& table)
override;
270 void set_insert_data(
const std::map<std::string, core::database_value>& data)
override;
271 void set_insert_rows(
const std::vector<std::map<std::string, core::database_value>>& rows)
override;
273 void set_update_table(
const std::string& table)
override;
274 void set_update_data(
const std::map<std::string, core::database_value>& data)
override;
276 void set_delete_table(
const std::string& table)
override;
278 void set_collection(
const std::string& name)
override;
279 void set_key(
const std::string& key)
override;
281 std::string build()
const override;
283 void reset()
override;
285 database_types get_database_type()
const override;
287 std::vector<std::string> build_args()
const;
290 std::string command_;
291 std::vector<std::string> args_;
SQL dialect implementation for PostgreSQL, SQLite.
void add_where_condition(const query_condition &condition) override
std::vector< query_condition > where_conditions_
void set_query_type(query_type type) override
void set_collection(const std::string &name) override
~sql_dialect() override=default
query_type get_query_type() const override
void set_offset(size_t count) override
std::string build() const override
void add_order_by(const std::string &column, sort_order order) override
void set_select_columns(const std::vector< std::string > &columns) override
std::string escape_identifier(const std::string &identifier) const
std::vector< std::string > select_columns_
std::string join_type_to_string(join_type type) const
void set_update_data(const std::map< std::string, core::database_value > &data) override
void set_group_by(const std::vector< std::string > &columns) override
std::vector< std::map< std::string, core::database_value > > insert_rows_
std::vector< std::string > order_by_clauses_
std::string having_clause_
std::vector< std::string > joins_
void set_delete_table(const std::string &table) override
void set_insert_table(const std::string &table) override
void set_having(const std::string &condition) override
void set_update_table(const std::string &table) override
void set_insert_data(const std::map< std::string, core::database_value > &data) override
void add_join(const std::string &table, const std::string &condition, join_type type) override
void set_from_table(const std::string &table) override
void set_limit(size_t count) override
std::map< std::string, core::database_value > set_data_
std::string format_value(const core::database_value &value) const
void set_key(const std::string &key) override
sql_dialect(database_types db_type)
database_types get_database_type() const override
void set_insert_rows(const std::vector< std::map< std::string, core::database_value > > &rows) override
std::vector< std::string > group_by_columns_
std::string target_table_
Represents a WHERE condition in a query.
Abstract interface for database-specific query formatting.
virtual void add_where_condition(const query_condition &condition)=0
virtual void add_order_by(const std::string &column, sort_order order)=0
virtual void set_group_by(const std::vector< std::string > &columns)=0
virtual void set_limit(size_t count)=0
virtual void add_where_condition(const std::string &field, const std::string &op, const core::database_value &value)=0
virtual void set_update_table(const std::string &table)=0
virtual void set_having(const std::string &condition)=0
virtual query_type get_query_type() const =0
virtual void set_key(const std::string &key)=0
virtual ~query_dialect()=default
virtual void set_query_type(query_type type)=0
virtual void set_delete_table(const std::string &table)=0
virtual void add_join(const std::string &table, const std::string &condition, join_type type)=0
virtual void set_insert_data(const std::map< std::string, core::database_value > &data)=0
virtual void set_select_columns(const std::vector< std::string > &columns)=0
virtual database_types get_database_type() const =0
virtual std::string build() const =0
virtual void set_offset(size_t count)=0
virtual void set_insert_table(const std::string &table)=0
virtual void set_from_table(const std::string &table)=0
virtual void set_collection(const std::string &name)=0
virtual void set_insert_rows(const std::vector< std::map< std::string, core::database_value > > &rows)=0
virtual void set_update_data(const std::map< std::string, core::database_value > &data)=0
Abstract interface for database backends.
Defines the enumeration of supported database types.
std::variant< std::string, int64_t, double, bool, std::nullptr_t > database_value
std::unique_ptr< query_dialect > create_dialect(database_types type)
Factory function to create appropriate dialect for database type.
database_types
Represents various database backends or modes.
@ none
No specific database type is set.
sort_order
Sort order for ORDER BY clauses.
join_type
Types of SQL joins.