MySQL 9.3.0
Source Code Documentation
query_rest_table.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2021, 2025, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef ROUTER_SRC_REST_MRS_SRC_MRS_DATABASE_REST_QUERY_H_
27#define ROUTER_SRC_REST_MRS_SRC_MRS_DATABASE_REST_QUERY_H_
28
29#include <memory>
30#include <set>
31#include <string>
32#include <vector>
33
43
44namespace mrs {
45namespace database {
46
47class QueryRestTable : protected Query {
48 public:
53 using RowGroupOwnership = entry::RowGroupOwnership;
56
57 using VectorOfRowGroupOwnershp = std::vector<RowGroupOwnership>;
58
59 explicit QueryRestTable(const JsonTemplateFactory *factory = nullptr,
60 bool encode_bigints_as_strings = false,
61 bool include_links = true,
62 uint64_t max_execution_time_ms = 0);
63 explicit QueryRestTable(bool encode_bigints_as_strings, bool include_links,
64 uint64_t max_execution_time_ms = 0);
65
66 public:
67 virtual void query_entries(
68 MySQLSession *session, std::shared_ptr<database::entry::Object> object,
69 const ObjectFieldFilter &field_filter, const uint64_t offset,
70 const uint64_t limit, const std::string &url, const bool is_default_limit,
71 const ObjectRowOwnership &row_ownership = {},
72 const FilterObjectGenerator &fog = {}, const bool compute_etag = false);
73
74 std::string response;
75 uint64_t items{0};
76
77 protected:
78 struct Config {
79 uint64_t offset;
80 uint64_t limit;
82 std::string url_route;
83 };
84
86 std::vector<helper::Column> columns_;
87 std::shared_ptr<database::JsonTemplate> serializer_;
88 std::shared_ptr<Object> object_;
90 bool compute_etag_{false};
92 bool metadata_received_{false};
97
98 void create_serializer();
99 void on_row(const ResultRow &r) override;
100 void on_metadata(unsigned number, MYSQL_FIELD *fields) override;
101
103 const ObjectRowOwnership &row_ownership);
104
106 const RowUserOwnership &row_user, UserId *user_id,
107 const std::vector<RowGroupOwnership> &row_groups,
108 const std::set<UniversalId> &user_groups);
109
110 void build_query(const ObjectFieldFilter &field_filter, const uint64_t offset,
111 const uint64_t limit, const std::string &url,
112 const ObjectRowOwnership &row_ownership,
113 const FilterObjectGenerator &fog);
114
116 const FilterObjectGenerator &fog);
117};
118
119} // namespace database
120} // namespace mrs
121
122#endif // ROUTER_SRC_REST_MRS_SRC_MRS_DATABASE_REST_QUERY_H_
Definition: filter_object_generator.h:44
Definition: json_template.h:85
Definition: object_row_ownership.h:45
Definition: query.h:37
Definition: query_rest_table.h:47
void build_query(const ObjectFieldFilter &field_filter, const uint64_t offset, const uint64_t limit, const std::string &url, const ObjectRowOwnership &row_ownership, const FilterObjectGenerator &fog)
Definition: query_rest_table.cc:388
uint64_t max_execution_time_ms_
Definition: query_rest_table.h:96
mysqlrouter::sqlstring where_
Definition: query_rest_table.h:91
QueryRestTable(const JsonTemplateFactory *factory=nullptr, bool encode_bigints_as_strings=false, bool include_links=true, uint64_t max_execution_time_ms=0)
Definition: query_rest_table.cc:52
entry::Object Object
Definition: query_rest_table.h:49
virtual void query_entries(MySQLSession *session, std::shared_ptr< database::entry::Object > object, const ObjectFieldFilter &field_filter, const uint64_t offset, const uint64_t limit, const std::string &url, const bool is_default_limit, const ObjectRowOwnership &row_ownership={}, const FilterObjectGenerator &fog={}, const bool compute_etag=false)
Definition: query_rest_table.cc:67
std::vector< RowGroupOwnership > VectorOfRowGroupOwnershp
Definition: query_rest_table.h:57
bool include_links_
Definition: query_rest_table.h:95
bool encode_bigints_as_strings_
Definition: query_rest_table.h:94
entry::AuthUser::UserId UserId
Definition: query_rest_table.h:51
std::shared_ptr< Object > object_
Definition: query_rest_table.h:88
std::shared_ptr< database::JsonTemplate > serializer_
Definition: query_rest_table.h:87
entry::ObjectField ObjectField
Definition: query_rest_table.h:50
const JsonTemplateFactory * factory_
Definition: query_rest_table.h:93
uint64_t items
Definition: query_rest_table.h:75
std::vector< helper::Column > columns_
Definition: query_rest_table.h:86
bool metadata_received_
Definition: query_rest_table.h:92
bool compute_etag_
Definition: query_rest_table.h:90
void on_row(const ResultRow &r) override
Definition: query_rest_table.cc:105
entry::UniversalId UniversalId
Definition: query_rest_table.h:52
std::string response
Definition: query_rest_table.h:74
const mysqlrouter::sqlstring & build_where(const ObjectRowOwnership &row_ownership)
Definition: query_rest_table.cc:117
void extend_where(mysqlrouter::sqlstring &where, const FilterObjectGenerator &fog)
Definition: query_rest_table.cc:369
entry::RowUserOwnership RowUserOwnership
Definition: query_rest_table.h:54
void on_metadata(unsigned number, MYSQL_FIELD *fields) override
Definition: query_rest_table.cc:92
entry::RowGroupOwnership RowGroupOwnership
Definition: query_rest_table.h:53
void create_serializer()
Definition: query_rest_table.cc:436
const ObjectFieldFilter * field_filter_
Definition: query_rest_table.h:89
Config config_
Definition: query_rest_table.h:85
Definition: mysql_session.h:310
Definition: mysql_session.h:157
Definition: utils_sqlstring.h:67
static char * where
Definition: mysqldump.cc:153
mrs::database::entry::RowUserOwnership RowUserOwnership
Definition: handler_db_object_table.cc:75
MysqlCacheManager::Object Object
Definition: mysql_cache_manager.cc:101
database::entry::ObjectField ObjectField
Definition: sp_function_query.cc:51
Definition: authorize_manager.h:48
mrs::database::entry::UniversalId UniversalId
Definition: universal_id.h:33
const mysql_service_registry_t * r
Definition: pfs_example_plugin_employee.cc:86
Definition: mysql.h:121
Definition: query_rest_table.h:78
uint64_t limit
Definition: query_rest_table.h:80
bool is_default_limit
Definition: query_rest_table.h:81
uint64_t offset
Definition: query_rest_table.h:79
std::string url_route
Definition: query_rest_table.h:82
UniversalId UserId
Definition: auth_user.h:48