Skip to content

Commit 1daaf66

Browse files
authored
Compact tpc-* queries and don't use pragma. (#6650)
1 parent 0602b3c commit 1daaf66

File tree

2 files changed

+46
-20
lines changed

2 files changed

+46
-20
lines changed

ydb/library/workload/tpc_base/tpc_base.cpp

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <library/cpp/resource/resource.h>
66
#include <util/stream/file.h>
77
#include <util/string/split.h>
8+
#include <util/string/strip.h>
89

910
namespace NYdbWorkload {
1011

@@ -17,32 +18,55 @@ void TTpcBaseWorkloadGenerator::PatchQuery(TString& query) const {
1718
TString header;
1819
switch (Params.GetFloatMode()) {
1920
case TTpcBaseWorkloadParams::EFloatMode::FLOAT:
20-
header = NResource::Find("consts.yql");
21+
header = FilterHeader(NResource::Find("consts.yql"), query);
2122
break;
2223
case TTpcBaseWorkloadParams::EFloatMode::DECIMAL:
23-
header = NResource::Find("consts_decimal.yql");
24+
case TTpcBaseWorkloadParams::EFloatMode::DECIMAL_YDB:
25+
header = FilterHeader(NResource::Find("consts_decimal.yql"), query);
2426
break;
25-
case TTpcBaseWorkloadParams::EFloatMode::DECIMAL_YDB: {
26-
header = NResource::Find("consts_decimal.yql");
27-
header.to_lower();
28-
const TStringBuf dec("decimal(");
29-
auto p = header.find(dec);
30-
while (p != TString::npos) {
31-
p += dec.length();
32-
const auto q = header.find(')', p);
33-
TVector<ui32> decParams;
34-
StringSplitter(header.cbegin() + p, q - p).SplitBySet(", ").SkipEmpty().Limit(2).ParseInto(&decParams);
35-
TStringBuilder newDecParams;
36-
newDecParams
37-
<< Max(decParams[0], NKikimr::NScheme::DECIMAL_PRECISION)
38-
<< "," << Max(decParams[1], NKikimr::NScheme::DECIMAL_SCALE);
39-
header.replace(p, q - p, newDecParams);
40-
p = header.find(dec, q);
27+
}
28+
PatchHeader(header);
29+
SubstGlobal(query, "{% include 'header.sql.jinja' %}", header);
30+
}
31+
32+
TString TTpcBaseWorkloadGenerator::FilterHeader(TStringBuf header, const TString& query) const {
33+
TStringBuilder result;
34+
for(TStringBuf line; header.ReadLine(line);) {
35+
const auto pos = line.find('=');
36+
if (pos == line.npos) {
37+
continue;
38+
}
39+
const auto name = StripString(line.SubString(0, pos));
40+
for(auto posInQ = query.find(name); posInQ != query.npos; posInQ = query.find(name, posInQ)) {
41+
posInQ += name.length();
42+
if (posInQ >= query.length() || !IsAsciiAlnum(query[posInQ]) && query[posInQ] != '_') {
43+
result << line << Endl;
44+
break;
4145
}
4246
}
43-
break;
4447
}
45-
SubstGlobal(query, "{% include 'header.sql.jinja' %}", header);
48+
return result;
49+
}
50+
51+
void TTpcBaseWorkloadGenerator::PatchHeader(TString& header) const {
52+
if (Params.GetFloatMode() != TTpcBaseWorkloadParams::EFloatMode::DECIMAL_YDB) {
53+
return;
54+
}
55+
header.to_lower();
56+
const TStringBuf dec("decimal(");
57+
auto p = header.find(dec);
58+
while (p != TString::npos) {
59+
p += dec.length();
60+
const auto q = header.find(')', p);
61+
TVector<ui32> decParams;
62+
StringSplitter(header.cbegin() + p, q - p).SplitBySet(", ").SkipEmpty().Limit(2).ParseInto(&decParams);
63+
TStringBuilder newDecParams;
64+
newDecParams
65+
<< Max(decParams[0], NKikimr::NScheme::DECIMAL_PRECISION)
66+
<< "," << Max(decParams[1], NKikimr::NScheme::DECIMAL_SCALE);
67+
header.replace(p, q - p, newDecParams);
68+
p = header.find(dec, q);
69+
}
4670
}
4771

4872
void TTpcBaseWorkloadParams::ConfigureOpts(NLastGetopt::TOpts& opts, const ECommandType commandType, int workloadType) {

ydb/library/workload/tpc_base/tpc_base.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class TTpcBaseWorkloadGenerator: public TWorkloadGeneratorBase {
2525

2626
private:
2727
const TTpcBaseWorkloadParams& Params;
28+
TString FilterHeader(TStringBuf header, const TString& query) const;
29+
void PatchHeader(TString& header) const;
2830
};
2931

3032
} // namespace NYdbWorkload

0 commit comments

Comments
 (0)