blob: 7942c7a12e948d4dc4e38dbd7675cbfd5853a1fe (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include "sql_select_window.h"
namespace NSQLTranslationV1 {
TSqlWindow::TSqlWindow(const TSqlTranslation& that)
: TSqlTranslation(that)
{
}
bool TSqlWindow::Build(const TRule_window_definition& node, TWinSpecs& winSpecs) {
const TString windowName = Id(node.GetRule_new_window_name1().GetRule_window_name1().GetRule_an_id_window1(), *this);
if (winSpecs.contains(windowName)) {
Ctx_.Error() << "Unable to declare window with same name: " << windowName;
return false;
}
auto windowSpec = WindowSpecification(node.GetRule_window_specification3().GetRule_window_specification_details2());
if (!windowSpec) {
return false;
}
winSpecs.emplace(windowName, std::move(windowSpec));
return true;
}
bool TSqlWindow::Build(const TRule_window_clause& node, TWinSpecs& winSpecs) {
auto windowList = node.GetRule_window_definition_list2();
if (!Build(windowList.GetRule_window_definition1(), winSpecs)) {
return false;
}
for (auto& block : windowList.GetBlock2()) {
if (!Build(block.GetRule_window_definition2(), winSpecs)) {
return false;
}
}
return true;
}
} // namespace NSQLTranslationV1
|