YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/yb/master/yql_virtual_table.h
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) YugaByte, Inc.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
4
// in compliance with the License.  You may obtain a copy of the License at
5
//
6
// http://www.apache.org/licenses/LICENSE-2.0
7
//
8
// Unless required by applicable law or agreed to in writing, software distributed under the License
9
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
10
// or implied.  See the License for the specific language governing permissions and limitations
11
// under the License.
12
//
13
14
#ifndef YB_MASTER_YQL_VIRTUAL_TABLE_H
15
#define YB_MASTER_YQL_VIRTUAL_TABLE_H
16
17
#include "yb/common/ql_rowblock.h"
18
19
#include "yb/docdb/ql_storage_interface.h"
20
21
#include "yb/master/ts_descriptor.h"
22
#include "yb/master/util/yql_vtable_helpers.h"
23
24
#include "yb/util/metrics_fwd.h"
25
26
namespace yb {
27
namespace master {
28
29
// A YQL virtual table which is based on in memory data.
30
class YQLVirtualTable : public docdb::YQLStorageIf {
31
 public:
32
  explicit YQLVirtualTable(const TableName& table_name,
33
                           const NamespaceName &namespace_name,
34
                           const Master* const master,
35
                           const Schema& schema);
36
  ~YQLVirtualTable();
37
38
  // Access methods.
39
295k
  const Schema& schema() const { return *schema_; }
40
41
0
  const TableName& table_name() const { return table_name_; }
42
43
  //------------------------------------------------------------------------------------------------
44
  // CQL Support.
45
  //------------------------------------------------------------------------------------------------
46
47
  // Retrieves all the data for the yql virtual table in form of a QLRowBlock. This data is then
48
  // used by the iterator.
49
  virtual Result<std::shared_ptr<QLRowBlock>> RetrieveData(
50
      const QLReadRequestPB& request) const = 0;
51
52
  CHECKED_STATUS GetIterator(const QLReadRequestPB& request,
53
                             const Schema& projection,
54
                             const Schema& schema,
55
                             const TransactionOperationContext& txn_op_context,
56
                             CoarseTimePoint deadline,
57
                             const ReadHybridTime& read_time,
58
                             const QLScanSpec& spec,
59
                             std::unique_ptr<docdb::YQLRowwiseIteratorIf>* iter) const override;
60
61
  CHECKED_STATUS BuildYQLScanSpec(
62
      const QLReadRequestPB& request,
63
      const ReadHybridTime& read_time,
64
      const Schema& schema,
65
      bool include_static_columns,
66
      const Schema& static_projection,
67
      std::unique_ptr<QLScanSpec>* spec,
68
      std::unique_ptr<QLScanSpec>* static_row_spec) const override;
69
70
  //------------------------------------------------------------------------------------------------
71
  // PGSQL Support.
72
  //------------------------------------------------------------------------------------------------
73
74
  CHECKED_STATUS CreateIterator(const Schema& projection,
75
                                const Schema& schema,
76
                                const TransactionOperationContext& txn_op_context,
77
                                CoarseTimePoint deadline,
78
                                const ReadHybridTime& read_time,
79
0
                                std::unique_ptr<docdb::YQLRowwiseIteratorIf>* iter) const override {
80
0
    LOG(FATAL) << "Postgresql virtual tables are not yet implemented";
81
0
    return Status::OK();
82
0
  }
83
84
  CHECKED_STATUS InitIterator(docdb::YQLRowwiseIteratorIf* iter,
85
                              const PgsqlReadRequestPB& request,
86
                              const Schema& schema,
87
0
                              const QLValuePB& ybctid) const override {
88
0
    LOG(FATAL) << "Postgresql virtual tables are not yet implemented";
89
0
    return Status::OK();
90
0
  }
91
92
  CHECKED_STATUS GetIterator(const PgsqlReadRequestPB& request,
93
                             const Schema& projection,
94
                             const Schema& schema,
95
                             const TransactionOperationContext& txn_op_context,
96
                             CoarseTimePoint deadline,
97
                             const ReadHybridTime& read_time,
98
                             const docdb::DocKey& start_doc_key,
99
0
                             docdb::YQLRowwiseIteratorIf::UniPtr* iter) const override {
100
0
    LOG(FATAL) << "Postgresql virtual tables are not yet implemented";
101
0
    return Status::OK();
102
0
  }
103
104
  CHECKED_STATUS GetIterator(uint64 stmt_id,
105
                             const Schema& projection,
106
                             const Schema& schema,
107
                             const TransactionOperationContext& txn_op_context,
108
                             CoarseTimePoint deadline,
109
                             const ReadHybridTime& read_time,
110
                             const QLValuePB& ybctid,
111
0
                             docdb::YQLRowwiseIteratorIf::UniPtr* iter) const override {
112
0
    LOG(FATAL) << "Postgresql virtual tables are not yet implemented";
113
0
    return Status::OK();
114
0
  }
115
116
 protected:
117
  // Finds the given column name in the schema and updates the specified column in the given row
118
  // with the provided value.
119
  template<class T>
120
18.4M
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
18.4M
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
18.4M
    return Status::OK();
124
18.4M
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, yb::QLRow*) const
Line
Count
Source
120
12.9M
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
12.9M
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
12.9M
    return Status::OK();
124
12.9M
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<bool>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool const&, yb::QLRow*) const
Line
Count
Source
120
89.7k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
89.7k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
89.7k
    return Status::OK();
124
89.7k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<yb::QLValuePB>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, yb::QLValuePB const&, yb::QLRow*) const
Line
Count
Source
120
837k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
837k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
837k
    return Status::OK();
124
837k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<char [14]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [14], yb::QLRow*) const
Line
Count
Source
120
316k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
316k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
316k
    return Status::OK();
124
316k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<int>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int const&, yb::QLRow*) const
Line
Count
Source
120
2.34M
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
2.34M
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
2.34M
    return Status::OK();
124
2.34M
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<char [11]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [11], yb::QLRow*) const
Line
Count
Source
120
255k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
255k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
255k
    return Status::OK();
124
255k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<yb::Uuid>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, yb::Uuid const&, yb::QLRow*) const
Line
Count
Source
120
675k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
675k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
675k
    return Status::OK();
124
675k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<yb::InetAddress>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, yb::InetAddress const&, yb::QLRow*) const
Line
Count
Source
120
509k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
509k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
509k
    return Status::OK();
124
509k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<char [6]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [6], yb::QLRow*) const
Line
Count
Source
120
141k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
141k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
141k
    return Status::OK();
124
141k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<char [10]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [10], yb::QLRow*) const
Line
Count
Source
120
70.8k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
70.8k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
70.8k
    return Status::OK();
124
70.8k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<char [2]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2], yb::QLRow*) const
Line
Count
Source
120
71.0k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
71.0k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
71.0k
    return Status::OK();
124
71.0k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<char [44]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [44], yb::QLRow*) const
Line
Count
Source
120
70.9k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
70.9k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
70.9k
    return Status::OK();
124
70.9k
  }
yb::Status yb::master::YQLVirtualTable::SetColumnValue<char [7]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [7], yb::QLRow*) const
Line
Count
Source
120
70.8k
  CHECKED_STATUS SetColumnValue(const std::string& col_name, const T& value, QLRow* row) const {
121
70.8k
    auto p = VERIFY_RESULT(ColumnIndexAndType(col_name));
122
0
    row->SetColumn(p.first, util::GetValue(value, p.second));
123
70.8k
    return Status::OK();
124
70.8k
  }
125
126
  Result<std::pair<int, DataType>> ColumnIndexAndType(const std::string& col_name) const;
127
128
  // Get all live tserver descriptors sorted by their UUIDs. For cases like system.local and
129
  // system.peers tables to return the token map of each tserver node so that each maps to a
130
  // consistent token.
131
  void GetSortedLiveDescriptors(std::vector<std::shared_ptr<TSDescriptor>>* descs) const;
132
133
  CatalogManagerIf& catalog_manager() const;
134
135
  const Master* const master_;
136
  TableName table_name_;
137
  std::unique_ptr<Schema> schema_;
138
  scoped_refptr<Histogram> histogram_;
139
};
140
141
extern const std::string kSystemTablesReleaseVersion;
142
extern const std::string kSystemTablesReleaseVersionColumn;
143
144
}  // namespace master
145
}  // namespace yb
146
#endif // YB_MASTER_YQL_VIRTUAL_TABLE_H