summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/format/sql_format.h
blob: 92be72b088afd12bff0904119a9d2f6fb32fa8ef (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
#pragma once

#include <yql/essentials/public/issue/yql_issue.h>
#include <yql/essentials/sql/settings/translation_settings.h>
#include <yql/essentials/sql/v1/lexer/lexer.h>
#include <yql/essentials/sql/v1/proto_parser/proto_parser.h>

#include <util/generic/string.h>

namespace NSQLFormat {

constexpr ui32 OneIndent = 4;

enum class EFormatMode {
    Pretty,
    Obfuscate
};

class ISqlFormatter {
public:
    using TPtr = THolder<ISqlFormatter>;

    virtual bool Format(const TString& query, TString& formattedQuery, NYql::TIssues& issues,
                        EFormatMode mode = EFormatMode::Pretty) = 0;
    virtual ~ISqlFormatter() = default;
};

ISqlFormatter::TPtr MakeSqlFormatter(const NSQLTranslationV1::TLexers& lexers,
                                     const NSQLTranslationV1::TParsers& parsers,
                                     const NSQLTranslation::TTranslationSettings& settings = {});

// insert spaces and comments between each tokens
TString MutateQuery(const NSQLTranslationV1::TLexers& lexers, const TString& query, const NSQLTranslation::TTranslationSettings& settings = {});

bool SqlFormatSimple(const NSQLTranslationV1::TLexers& lexers,
                     const NSQLTranslationV1::TParsers& parsers, const TString& query, TString& formattedQuery, TString& error);

THashSet<TString> GetKeywords();

} // namespace NSQLFormat