Skip to content

Commit 3c36250

Browse files
authored
Merge 510663f into 929e8f5
2 parents 929e8f5 + 510663f commit 3c36250

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

ydb/library/yql/core/type_ann/type_ann_pg.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1823,7 +1823,7 @@ bool ScanColumns(TExprNode::TPtr root, TInputs& inputs, const THashSet<TString>&
18231823
}
18241824
}
18251825

1826-
if (x.Order && x.Order->IsDuplicated(TString(node->Tail().Content()))) {
1826+
if (x.Order && x.Order->IsDuplicatedIgnoreCase(TString(node->Tail().Content()))) {
18271827
ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(node->Pos()),
18281828
TStringBuilder() << "Column reference is ambiguous: " << node->Tail().Content()));
18291829
isError = true;

ydb/library/yql/core/ut/yql_column_order_ut.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ Y_UNIT_TEST_SUITE(TYqlColumnOrder) {
3232
UNIT_ASSERT_EQUAL(order.AddColumn("a_generated_2_generated_2"), "a_generated_2_generated_2_generated_2");
3333
}
3434

35+
Y_UNIT_TEST(ColumnOrderCaseSensetive) {
36+
TColumnOrder order;
37+
UNIT_ASSERT_EQUAL(order.AddColumn("a"), "a");
38+
UNIT_ASSERT_EQUAL(order.AddColumn("A"), "A");
39+
UNIT_ASSERT_EQUAL(order.IsDuplicatedIgnoreCase("a"), true);
40+
}
41+
3542
Y_UNIT_TEST(ColumnOrderGeneratedMatchOverVectorCtor) {
3643
TColumnOrder order(TVector<TString>{"a", "a", "a_generated_2", "a_generated_2_generated_2"});
3744
TVector<TColumnOrder::TOrderedItem> got(order.begin(), order.end());

ydb/library/yql/core/yql_type_annotation.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,32 +137,32 @@ TColumnOrder::TColumnOrder(const TVector<TString>& order) {
137137

138138
TString TColumnOrder::AddColumn(const TString& name) {
139139
auto lcase = to_lower(name);
140-
if (uint64_t count = ++UseCount_[lcase]; count > 1) {
140+
++UseCountLcase_[lcase];
141+
if (uint64_t count = ++UseCount_[name]; count > 1) {
141142
TString generated = name + "_generated_" + ToString(count);
142143
GeneratedToOriginal_[generated] = name;
143144
Order_.emplace_back(name, generated);
144-
++UseCount_[to_lower(generated)];
145+
++UseCount_[generated];
145146
return generated;
146147
}
147148
Order_.emplace_back(name, name);
148149
GeneratedToOriginal_[name] = name;
149150
return name;
150151
}
151152

152-
bool TColumnOrder::IsDuplicated(const TString& name) const {
153-
auto it = UseCount_.find(to_lower(name));
153+
bool TColumnOrder::IsDuplicatedIgnoreCase(const TString& name) const {
154+
auto it = UseCountLcase_.find(to_lower(name));
154155
return it != UseCount_.end() && it->second > 1;
155156
}
156157

157158
void TColumnOrder::Shrink(size_t remain) {
158159
for (size_t i = remain; i < Order_.size(); ++i) {
159-
auto logicalLcase = to_lower(Order_[i].LogicalName);
160-
if (!--UseCount_[logicalLcase]) {
161-
UseCount_.erase(logicalLcase);
160+
--UseCountLcase_[to_lower(Order_[i].LogicalName)];
161+
if (!--UseCount_[Order_[i].LogicalName]) {
162+
UseCount_.erase(Order_[i].LogicalName);
162163
}
163-
auto physicalLcase = to_lower(Order_[i].PhysicalName);
164-
if (!--UseCount_[physicalLcase]) {
165-
UseCount_.erase(physicalLcase);
164+
if (!--UseCount_[Order_[i].PhysicalName]) {
165+
UseCount_.erase(Order_[i].PhysicalName);
166166
}
167167
GeneratedToOriginal_.erase(Order_[i].PhysicalName);
168168
}

ydb/library/yql/core/yql_type_annotation.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ class TColumnOrder {
170170
explicit TColumnOrder(const TVector<TString>& order);
171171
TString AddColumn(const TString& name);
172172

173-
bool IsDuplicated(const TString& name) const;
173+
bool IsDuplicatedIgnoreCase(const TString& name) const;
174174

175175
void Shrink(size_t remain);
176176

@@ -213,6 +213,7 @@ class TColumnOrder {
213213
private:
214214
THashMap<TString, TString> GeneratedToOriginal_;
215215
THashMap<TString, uint64_t> UseCount_;
216+
THashMap<TString, uint64_t> UseCountLcase_;
216217
// (name, generated_name)
217218
TVector<TOrderedItem> Order_;
218219
};

0 commit comments

Comments
 (0)