MySQL 9.7.4
Source Code Documentation
query_rest_table.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2021, 2026, 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 <optional>
31#include <set>
32#include <string>
33#include <vector>
34
44
45namespace mrs {
46namespace database {
47
48class QueryRestTable : protected Query {
49 public:
54 using RowGroupOwnership = entry::RowGroupOwnership;
57
58 using VectorOfRowGroupOwnershp = std::vector<RowGroupOwnership>;
59
60 explicit QueryRestTable(const JsonTemplateFactory *factory = nullptr,
61 bool encode_bigints_as_strings = false,
62 bool include_links = true,
63 uint64_t max_execution_time_ms = 0);
64 explicit QueryRestTable(bool encode_bigints_as_strings, bool include_links,
65 uint64_t max_execution_time_ms = 0);
66
67 public:
68 virtual void query_entries(
69 MySQLSession *session, std::shared_ptr<database::entry::Object> object,
70 const ObjectFieldFilter &field_filter, const uint64_t offset,
71 const uint64_t limit, const std::string &url, const bool is_default_limit,
72 const ObjectRowOwnership &row_ownership = {},
73 const FilterObjectGenerator &fog = {}, const bool compute_etag = false);
74
75 std::string response;
76 uint64_t items{0};
77
78 protected:
79 struct Config {
80 uint64_t offset;
81 uint64_t limit;
83 std::string url_route;
84 };
85
87 std::vector<helper::Column> columns_;
88 std::shared_ptr<database::JsonTemplate> serializer_;
89 std::shared_ptr<Object> object_;
91 bool compute_etag_{false};
93 bool metadata_received_{false};
98
99 void create_serializer();
100 void on_row(const ResultRow &r) override;
101 void on_metadata(unsigned number, MYSQL_FIELD *fields) override;
102
104 const ObjectRowOwnership &row_ownership);
105
107 const RowUserOwnership &row_user, UserId *user_id,
108 const std::vector<RowGroupOwnership> &row_groups,
109 const std::set<UniversalId> &user_groups);
110
111 void build_query(const ObjectFieldFilter &field_filter, const uint64_t offset,
112 const uint64_t limit, const std::string &url,
113 const ObjectRowOwnership &row_ownership,
114 const FilterObjectGenerator &fog);
115
117 const FilterObjectGenerator &fog);
118};
119
121 public:
123
124 explicit QueryRestTableMedia(uint64_t max_execution_time_ms = 0)
125 : QueryRestTable(nullptr, false, false, max_execution_time_ms) {}
126
127 void query_media_entries(MySQLSession *session,
128 std::shared_ptr<database::entry::Object> object,
129 const Column &column, const uint64_t offset,
130 const uint64_t limit,
131 const ObjectRowOwnership &row_ownership = {},
132 const FilterObjectGenerator &fog = {});
133
134 void query_entry(MySQLSession *session,
135 std::shared_ptr<database::entry::Object> object,
136 const Column &column, const PrimaryKeyColumnValues &pk,
137 const ObjectRowOwnership &row_ownership = {},
138 const FilterObjectGenerator &fog = {});
139
140 std::optional<std::string> media_response;
141
142 private:
143 void on_row(const ResultRow &r) override;
144
145 void build_query(const Column &column, const uint64_t offset,
146 const uint64_t limit,
147 const ObjectRowOwnership &row_ownership,
148 const FilterObjectGenerator &fog);
149
150 void build_query(const Column &column, const PrimaryKeyColumnValues &pk,
151 const ObjectRowOwnership &row_ownership,
152 const FilterObjectGenerator &fog);
153};
154
155} // namespace database
156} // namespace mrs
157
158#endif // ROUTER_SRC_REST_MRS_SRC_MRS_DATABASE_REST_QUERY_H_
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:247
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:120
void query_entry(MySQLSession *session, std::shared_ptr< database::entry::Object > object, const Column &column, const PrimaryKeyColumnValues &pk, const ObjectRowOwnership &row_ownership={}, const FilterObjectGenerator &fog={})
Definition: query_rest_table.cc:449
entry::Column Column
Definition: query_rest_table.h:122
QueryRestTableMedia(uint64_t max_execution_time_ms=0)
Definition: query_rest_table.h:124
void build_query(const Column &column, const uint64_t offset, const uint64_t limit, const ObjectRowOwnership &row_ownership, const FilterObjectGenerator &fog)
Definition: query_rest_table.cc:472
std::optional< std::string > media_response
Definition: query_rest_table.h:140
void on_row(const ResultRow &r) override
Definition: query_rest_table.cc:462
void query_media_entries(MySQLSession *session, std::shared_ptr< database::entry::Object > object, const Column &column, const uint64_t offset, const uint64_t limit, const ObjectRowOwnership &row_ownership={}, const FilterObjectGenerator &fog={})
Definition: query_rest_table.cc:436
Definition: query_rest_table.h:48
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:97
mysqlrouter::sqlstring where_
Definition: query_rest_table.h:92
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:50
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:58
bool include_links_
Definition: query_rest_table.h:96
bool encode_bigints_as_strings_
Definition: query_rest_table.h:95
entry::AuthUser::UserId UserId
Definition: query_rest_table.h:52
std::shared_ptr< Object > object_
Definition: query_rest_table.h:89
std::shared_ptr< database::JsonTemplate > serializer_
Definition: query_rest_table.h:88
entry::ObjectField ObjectField
Definition: query_rest_table.h:51
const JsonTemplateFactory * factory_
Definition: query_rest_table.h:94
uint64_t items
Definition: query_rest_table.h:76
std::vector< helper::Column > columns_
Definition: query_rest_table.h:87
bool metadata_received_
Definition: query_rest_table.h:93
bool compute_etag_
Definition: query_rest_table.h:91
void on_row(const ResultRow &r) override
Definition: query_rest_table.cc:105
entry::UniversalId UniversalId
Definition: query_rest_table.h:53
std::string response
Definition: query_rest_table.h:75
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:55
void on_metadata(unsigned number, MYSQL_FIELD *fields) override
Definition: query_rest_table.cc:92
entry::RowGroupOwnership RowGroupOwnership
Definition: query_rest_table.h:54
void create_serializer()
Definition: query_rest_table.cc:526
const ObjectFieldFilter * field_filter_
Definition: query_rest_table.h:90
Config config_
Definition: query_rest_table.h:86
Definition: object.h:86
Definition: mysql_session.h:311
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:76
MysqlCacheManager::Object Object
Definition: mysql_cache_manager.cc:110
entry::Column Column
Definition: select.h:53
database::entry::ObjectField ObjectField
Definition: sp_function_query.cc:51
std::map< std::string, mysqlrouter::sqlstring > PrimaryKeyColumnValues
Definition: select.h:43
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:79
uint64_t limit
Definition: query_rest_table.h:81
bool is_default_limit
Definition: query_rest_table.h:82
uint64_t offset
Definition: query_rest_table.h:80
std::string url_route
Definition: query_rest_table.h:83
UniversalId UserId
Definition: auth_user.h:47