YugabyteDB (2.13.0.0-b42, bfc6a6643e7399ac8a0e81d06a3ee6d6571b33ab)

Coverage Report

Created: 2022-03-09 17:30

/Users/deen/code/yugabyte-db/src/yb/master/yql_types_vtable.cc
Line
Count
Source
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
#include "yb/master/yql_types_vtable.h"
15
16
#include "yb/common/ql_type.h"
17
#include "yb/common/schema.h"
18
19
#include "yb/master/catalog_entity_info.h"
20
#include "yb/master/catalog_manager_if.h"
21
22
#include "yb/util/status_log.h"
23
24
namespace yb {
25
namespace master {
26
27
QLTypesVTable::QLTypesVTable(const TableName& table_name,
28
                             const NamespaceName& namespace_name,
29
                             Master* const master)
30
2.00k
    : YQLVirtualTable(table_name, namespace_name, master, CreateSchema()) {
31
2.00k
}
32
33
Result<std::shared_ptr<QLRowBlock>> QLTypesVTable::RetrieveData(
34
13.9k
    const QLReadRequestPB& request) const {
35
13.9k
  auto vtable = std::make_shared<QLRowBlock>(schema());
36
13.9k
  std::vector<scoped_refptr<UDTypeInfo> > types;
37
13.9k
  catalog_manager().GetAllUDTypes(&types);
38
39
204
  for (const scoped_refptr<UDTypeInfo>& type : types) {
40
    // Get namespace for table.
41
204
    auto ns_info = VERIFY_RESULT(catalog_manager().FindNamespaceById(type->namespace_id()));
42
43
    // Create appropriate row for the table;
44
204
    QLRow& row = vtable->Extend();
45
204
    RETURN_NOT_OK(SetColumnValue(kKeyspaceName, ns_info->name(), &row));
46
204
    RETURN_NOT_OK(SetColumnValue(kTypeName, type->name(), &row));
47
48
    // Create appropriate field_names entry.
49
204
    QLValuePB field_names;
50
204
    QLSeqValuePB *list_value = field_names.mutable_list_value();
51
599
    for (int i = 0; i < type->field_names_size(); i++) {
52
395
      QLValuePB field_name;
53
395
      field_name.set_string_value(type->field_names(i));
54
395
      *list_value->add_elems() = field_name;
55
395
    }
56
204
    RETURN_NOT_OK(SetColumnValue(kFieldNames, field_names, &row));
57
58
    // Create appropriate field_types entry.
59
204
    QLValuePB field_types;
60
204
    list_value = field_types.mutable_list_value();
61
599
    for (int i = 0; i < type->field_types_size(); i++) {
62
395
      QLValuePB field_type;
63
395
      const string& field_type_name = QLType::FromQLTypePB(type->field_types(i))->ToString();
64
395
      field_type.set_string_value(field_type_name);
65
395
      *list_value->add_elems() = field_type;
66
395
    }
67
204
    RETURN_NOT_OK(SetColumnValue(kFieldTypes, field_types, &row));
68
204
  }
69
70
13.9k
  return vtable;
71
13.9k
}
72
73
2.00k
Schema QLTypesVTable::CreateSchema() const {
74
2.00k
  SchemaBuilder builder;
75
2.00k
  CHECK_OK(builder.AddHashKeyColumn("keyspace_name", QLType::Create(DataType::STRING)));
76
2.00k
  CHECK_OK(builder.AddKeyColumn("type_name", QLType::Create(DataType::STRING)));
77
  // TODO: field_names should be a frozen list.
78
2.00k
  CHECK_OK(builder.AddColumn("field_names", QLType::CreateTypeList(DataType::STRING)));
79
  // TODO: field_types should be a frozen list.
80
2.00k
  CHECK_OK(builder.AddColumn("field_types", QLType::CreateTypeList(DataType::STRING)));
81
2.00k
  return builder.Build();
82
2.00k
}
83
84
}  // namespace master
85
}  // namespace yb