Skip to content

Commit d074145

Browse files
committed
YQL-19747: Fix case sensivity
Bug was that titlecase columns are not completed on lowercase prefix, e.g. `SELECT a# FROM x`, where `x = {Age}`. commit_hash:e48f73176e94bcf16671af56d232450e368c9909
1 parent bb0b938 commit d074145

File tree

5 files changed

+22
-16
lines changed

5 files changed

+22
-16
lines changed

yql/essentials/sql/v1/complete/name/object/simple/schema.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "schema.h"
22

3+
#include <library/cpp/case_insensitive_string/case_insensitive_string.h>
4+
35
#include <util/charset/utf8.h>
46

57
namespace NSQLComplete {
@@ -11,8 +13,8 @@ namespace NSQLComplete {
1113
static auto FilterEntriesByName(TString name) {
1214
return [name = std::move(name)](auto f) {
1315
TVector<TFolderEntry> entries = f.ExtractValue();
14-
EraseIf(entries, [prefix = ToLowerUTF8(name)](const TFolderEntry& entry) {
15-
return !entry.Name.StartsWith(prefix);
16+
EraseIf(entries, [prefix = TCaseInsensitiveStringBuf(name)](const TFolderEntry& entry) {
17+
return !TCaseInsensitiveStringBuf(entry.Name).StartsWith(prefix);
1618
});
1719
return entries;
1820
};
@@ -49,8 +51,8 @@ namespace NSQLComplete {
4951
static auto FilterColumnsByName(TString name) {
5052
return [name = std::move(name)](auto f) {
5153
return f.ExtractValue().Transform([&](auto&& table) {
52-
EraseIf(table.Columns, [prefix = ToLowerUTF8(name)](const TString& name) {
53-
return !name.StartsWith(prefix);
54+
EraseIf(table.Columns, [prefix = TCaseInsensitiveStringBuf(name)](const TString& name) {
55+
return !TCaseInsensitiveStringBuf(name).StartsWith(prefix);
5456
});
5557
return table;
5658
});

yql/essentials/sql/v1/complete/name/object/simple/ya.make

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ SRCS(
66

77
PEERDIR(
88
yql/essentials/sql/v1/complete/name/object
9+
library/cpp/case_insensitive_string
910
)
1011

1112
END()

yql/essentials/sql/v1/complete/name/service/cluster/name_service.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "name_service.h"
22

3+
#include <library/cpp/case_insensitive_string/case_insensitive_string.h>
4+
35
#include <util/charset/utf8.h>
46

57
namespace NSQLComplete {
@@ -11,8 +13,8 @@ namespace NSQLComplete {
1113
static auto FilterByName(TString name) {
1214
return [name = std::move(name)](auto f) {
1315
TClusterList clusters = f.ExtractValue();
14-
EraseIf(clusters, [prefix = ToLowerUTF8(name)](const TString& instance) {
15-
return !instance.StartsWith(prefix);
16+
EraseIf(clusters, [prefix = TCaseInsensitiveStringBuf(name)](const TString& instance) {
17+
return !TCaseInsensitiveStringBuf(instance).StartsWith(prefix);
1618
});
1719
return clusters;
1820
};

yql/essentials/sql/v1/complete/name/service/cluster/ya.make

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ SRCS(
77
PEERDIR(
88
yql/essentials/sql/v1/complete/name/cluster
99
yql/essentials/sql/v1/complete/name/service
10+
library/cpp/case_insensitive_string
1011
)
1112

1213
END()

yql/essentials/sql/v1/complete/sql_complete_ut.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
109109
}},
110110
"example": { "type": "Folder", "entries": {
111111
"people": { "type": "Table", "columns": {
112-
"name": {},
113-
"age": {}
112+
"Name": {},
113+
"Age": {}
114114
}},
115115
"yql": { "type": "Folder", "entries": {
116116
"tutorial": { "type": "Table", "columns": {} }
@@ -1075,29 +1075,29 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
10751075
auto engine = MakeSqlCompletionEngineUT();
10761076
{
10771077
TVector<TCandidate> expected = {
1078-
{ColumnName, "age"},
1079-
{ColumnName, "name"},
1078+
{ColumnName, "Age"},
1079+
{ColumnName, "Name"},
10801080
};
10811081
UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "SELECT # FROM example.`/people`"), expected);
10821082
}
10831083
{
10841084
TVector<TCandidate> expected = {
1085-
{ColumnName, "age"},
1085+
{ColumnName, "Age"},
10861086
{Keyword, "ALL"},
10871087
};
10881088
UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "SELECT a# FROM example.`/people`"), expected);
10891089
}
10901090
{
10911091
TVector<TCandidate> expected = {
1092-
{ColumnName, "age"},
1093-
{ColumnName, "name"},
1092+
{ColumnName, "Age"},
1093+
{ColumnName, "Name"},
10941094
};
10951095
UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "USE example; SELECT # FROM `/people`"), expected);
10961096
}
10971097
{
10981098
TVector<TCandidate> expected = {
1099-
{ColumnName, "x.age"},
1100-
{ColumnName, "x.name"},
1099+
{ColumnName, "x.Age"},
1100+
{ColumnName, "x.Name"},
11011101
};
11021102
UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "SELECT # FROM example.`/people` AS x"), expected);
11031103
}
@@ -1107,7 +1107,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
11071107
}
11081108
{
11091109
TVector<TCandidate> expected = {
1110-
{ColumnName, "age"},
1110+
{ColumnName, "Age"},
11111111
};
11121112
UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "SELECT x.a# FROM example.`/people` AS x"), expected);
11131113
}

0 commit comments

Comments
 (0)