YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/yb/yql/cql/ql/ptree/pt_name.h
Line
Count
Source (jump to first uncovered line)
1
//--------------------------------------------------------------------------------------------------
2
// Copyright (c) YugaByte, Inc.
3
//
4
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
// in compliance with the License.  You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software distributed under the License
10
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
// or implied.  See the License for the specific language governing permissions and limitations
12
// under the License.
13
//
14
//
15
// Tree node definitions for database object names such as table, column, or index names.
16
//--------------------------------------------------------------------------------------------------
17
18
#ifndef YB_YQL_CQL_QL_PTREE_PT_NAME_H_
19
#define YB_YQL_CQL_QL_PTREE_PT_NAME_H_
20
21
#include "yb/client/yb_table_name.h"
22
#include "yb/yql/cql/ql/ptree/tree_node.h"
23
#include "yb/yql/cql/ql/ptree/list_node.h"
24
25
namespace yb {
26
namespace ql {
27
28
// This class represents a name node.
29
class PTName : public TreeNode {
30
 public:
31
  //------------------------------------------------------------------------------------------------
32
  // Public types.
33
  typedef MCSharedPtr<PTName> SharedPtr;
34
  typedef MCSharedPtr<const PTName> SharedPtrConst;
35
36
  //------------------------------------------------------------------------------------------------
37
  // Constructor and destructor.
38
  explicit PTName(MemoryContext *memctx = nullptr,
39
                  YBLocationPtr loc = nullptr,
40
                  const MCSharedPtr<MCString>& name = nullptr);
41
  virtual ~PTName();
42
43
  // Node type.
44
0
  virtual TreeNodeOpcode opcode() const override {
45
0
    return TreeNodeOpcode::kPTName;
46
0
  }
47
48
  template<typename... TypeArgs>
49
1.41M
  inline static PTName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
50
1.41M
    return MCMakeShared<PTName>(memctx, std::forward<TypeArgs>(args)...);
51
1.41M
  }
std::__1::shared_ptr<yb::ql::PTName> yb::ql::PTName::MakeShared<std::__1::shared_ptr<yb::ql::YBLocation>&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > > const&>(yb::internal::ArenaBase<yb::internal::ArenaTraits>*, std::__1::shared_ptr<yb::ql::YBLocation>&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > > const&)
Line
Count
Source
49
818k
  inline static PTName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
50
818k
    return MCMakeShared<PTName>(memctx, std::forward<TypeArgs>(args)...);
51
818k
  }
std::__1::shared_ptr<yb::ql::PTName> yb::ql::PTName::MakeShared<std::__1::shared_ptr<yb::ql::YBLocation>&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > > >(yb::internal::ArenaBase<yb::internal::ArenaTraits>*, std::__1::shared_ptr<yb::ql::YBLocation>&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&&)
Line
Count
Source
49
61.1k
  inline static PTName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
50
61.1k
    return MCMakeShared<PTName>(memctx, std::forward<TypeArgs>(args)...);
51
61.1k
  }
std::__1::shared_ptr<yb::ql::PTName> yb::ql::PTName::MakeShared<std::__1::shared_ptr<yb::ql::Location>, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&>(yb::internal::ArenaBase<yb::internal::ArenaTraits>*, std::__1::shared_ptr<yb::ql::Location>&&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&)
Line
Count
Source
49
538k
  inline static PTName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
50
538k
    return MCMakeShared<PTName>(memctx, std::forward<TypeArgs>(args)...);
51
538k
  }
52
53
0
  virtual CHECKED_STATUS Analyze(SemContext *sem_context) override {
54
0
    return Status::OK();
55
0
  }
56
57
3.02M
  const MCString& name() const {
58
3.02M
    return *name_;
59
3.02M
  }
60
61
474k
  const MCSharedPtr<MCString>& name_ptr() {
62
474k
    return name_;
63
474k
  }
64
65
804k
  virtual std::string QLName() const {
66
804k
    return name_->c_str();
67
804k
  }
68
69
 protected:
70
  MCSharedPtr<MCString> name_;
71
};
72
73
// This class represents '*' (i.e. all columns of a table) in SQL statement.
74
class PTNameAll : public PTName {
75
 public:
76
  //------------------------------------------------------------------------------------------------
77
  // Public types.
78
  typedef MCSharedPtr<PTNameAll> SharedPtr;
79
  typedef MCSharedPtr<const PTNameAll> SharedPtrConst;
80
81
  //------------------------------------------------------------------------------------------------
82
  // Constructor and destructor.
83
  PTNameAll(MemoryContext *memctx, YBLocationPtr loc);
84
  virtual ~PTNameAll();
85
86
  template<typename... TypeArgs>
87
0
  inline static PTNameAll::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
88
0
    return MCMakeShared<PTNameAll>(memctx, std::forward<TypeArgs>(args)...);
89
0
  }
90
91
0
  virtual std::string QLName() const override {
92
    // We should not get here as '*' should have been converted into a list of column name before
93
    // the selected tuple is constructed and described.
94
0
    LOG(INFO) << "Calling QLName before '*' is converted into a list of column name";
95
0
    return "*";
96
0
  }
97
};
98
99
// This class represents a qualified name (e.g. "a.m.t").
100
class PTQualifiedName : public PTName {
101
 public:
102
  //------------------------------------------------------------------------------------------------
103
  // Public types.
104
  typedef MCSharedPtr<PTQualifiedName> SharedPtr;
105
  typedef MCSharedPtr<const PTQualifiedName> SharedPtrConst;
106
107
  //------------------------------------------------------------------------------------------------
108
  // Constructor and destructor.
109
  PTQualifiedName(MemoryContext *mctx,
110
                  YBLocationPtr loc,
111
                  const PTName::SharedPtr& ptname);
112
  PTQualifiedName(MemoryContext *mctx,
113
                  YBLocationPtr loc,
114
                  const MCSharedPtr<MCString>& name);
115
  virtual ~PTQualifiedName();
116
117
  template<typename... TypeArgs>
118
1.08M
  inline static PTQualifiedName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
119
1.08M
    return MCMakeShared<PTQualifiedName>(memctx, std::forward<TypeArgs>(args)...);
120
1.08M
  }
std::__1::shared_ptr<yb::ql::PTQualifiedName> yb::ql::PTQualifiedName::MakeShared<std::__1::shared_ptr<yb::ql::YBLocation> const&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&>(yb::internal::ArenaBase<yb::internal::ArenaTraits>*, std::__1::shared_ptr<yb::ql::YBLocation> const&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&)
Line
Count
Source
118
2.66k
  inline static PTQualifiedName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
119
2.66k
    return MCMakeShared<PTQualifiedName>(memctx, std::forward<TypeArgs>(args)...);
120
2.66k
  }
std::__1::shared_ptr<yb::ql::PTQualifiedName> yb::ql::PTQualifiedName::MakeShared<std::__1::shared_ptr<yb::ql::Location>, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&>(yb::internal::ArenaBase<yb::internal::ArenaTraits>*, std::__1::shared_ptr<yb::ql::Location>&&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&)
Line
Count
Source
118
817k
  inline static PTQualifiedName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
119
817k
    return MCMakeShared<PTQualifiedName>(memctx, std::forward<TypeArgs>(args)...);
120
817k
  }
std::__1::shared_ptr<yb::ql::PTQualifiedName> yb::ql::PTQualifiedName::MakeShared<std::__1::shared_ptr<yb::ql::Location>, std::__1::shared_ptr<yb::ql::PTName>&>(yb::internal::ArenaBase<yb::internal::ArenaTraits>*, std::__1::shared_ptr<yb::ql::Location>&&, std::__1::shared_ptr<yb::ql::PTName>&)
Line
Count
Source
118
269k
  inline static PTQualifiedName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
119
269k
    return MCMakeShared<PTQualifiedName>(memctx, std::forward<TypeArgs>(args)...);
120
269k
  }
std::__1::shared_ptr<yb::ql::PTQualifiedName> yb::ql::PTQualifiedName::MakeShared<std::__1::shared_ptr<yb::ql::YBLocation> const&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > > >(yb::internal::ArenaBase<yb::internal::ArenaTraits>*, std::__1::shared_ptr<yb::ql::YBLocation> const&, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, yb::internal::ArenaAllocatorBase<char, yb::internal::ArenaTraits> > >&&)
Line
Count
Source
118
14
  inline static PTQualifiedName::SharedPtr MakeShared(MemoryContext *memctx, TypeArgs&&... args) {
119
14
    return MCMakeShared<PTQualifiedName>(memctx, std::forward<TypeArgs>(args)...);
120
14
  }
121
122
  // Forming qualified name by appending.
123
  void Append(const PTName::SharedPtr& ptname);
124
125
  // Forming qualified name by prepending.
126
  void Prepend(const PTName::SharedPtr& ptname);
127
128
  // Node semantics analysis.
129
  virtual CHECKED_STATUS Analyze(SemContext *sem_context) override;
130
131
915k
  const MCString& first_name() const {
132
915k
    return ptnames_.front()->name();
133
915k
  }
134
135
1.78M
  const MCString& last_name() const {
136
1.78M
    return ptnames_.back()->name();
137
1.78M
  }
138
139
864k
  bool IsSimpleName() const {
140
864k
    return ptnames_.size() == 1;
141
864k
  }
142
143
  // Column name should be the last name.
144
3.61k
  const MCSharedPtr<MCString>& column_name() {
145
3.61k
    return ptnames_.back()->name_ptr();
146
3.61k
  }
147
148
  // Construct bind variable name from this name.
149
470k
  const MCSharedPtr<MCString>& bindvar_name() {
150
470k
    return ptnames_.back()->name_ptr();
151
470k
  }
152
153
  // Analyze this qualified name as an object name.
154
  CHECKED_STATUS AnalyzeName(SemContext *sem_context, ObjectType object_type);
155
156
912k
  client::YBTableName ToTableName() const {
157
912k
    return client::YBTableName(YQL_DATABASE_CQL, first_name().c_str(), last_name().c_str());
158
912k
  }
159
160
804k
  virtual std::string QLName() const override {
161
804k
    std::string full_name;
162
804k
    for (auto name : ptnames_) {
163
804k
      if (!full_name.empty()) {
164
0
        full_name += '.';
165
0
      }
166
804k
      full_name += name->QLName();
167
804k
    }
168
804k
    return full_name;
169
804k
  }
170
171
 private:
172
  MCList<PTName::SharedPtr> ptnames_;
173
};
174
175
using PTQualifiedNameListNode = TreeListNode<PTQualifiedName>;
176
177
}  // namespace ql
178
}  // namespace yb
179
180
#endif  // YB_YQL_CQL_QL_PTREE_PT_NAME_H_