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
43
44
45
46
47
48
|
#pragma once
#include "sql_translation.h"
#include <yql/essentials/parser/proto_ast/gen/v1_proto_split/SQLv1Parser.pb.main.h>
namespace NSQLTranslationV1 {
using namespace NSQLv1Generated;
class TSqlValues: public TSqlTranslation {
public:
TSqlValues(TContext& ctx, NSQLTranslation::ESqlMode mode)
: TSqlTranslation(ctx, mode)
{
}
TSourcePtr Build(const TRule_values_stmt& node, TPosition& valuesPos, const TVector<TString>& derivedColumns = {}, TPosition derivedColumnsPos = TPosition());
protected:
bool BuildRows(const TRule_values_source_row_list& node, TVector<TVector<TNodePtr>>& rows);
TSourcePtr ValuesSource(const TRule_values_source& node, const TVector<TString>& columnsHint,
const TString& operationName);
private:
bool BuildRow(const TRule_values_source_row& inRow, TVector<TNodePtr>& outRow);
};
class TSqlIntoValues: public TSqlValues {
public:
TSqlIntoValues(TContext& ctx, NSQLTranslation::ESqlMode mode)
: TSqlValues(ctx, mode)
{
}
TSourcePtr Build(const TRule_into_values_source& node, const TString& operationName);
};
class TSqlAsValues: public TSqlValues {
public:
TSqlAsValues(TContext& ctx, NSQLTranslation::ESqlMode mode)
: TSqlValues(ctx, mode)
{
}
TSourcePtr Build(const TRule_values_source& node, const TString& operationName);
};
} // namespace NSQLTranslationV1
|