MCPcopy Create free account
hub / github.com/apache/kvrocks / TEST

Function TEST

tests/cppunit/ir_sema_checker_test.cc:69–121  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

67using testing::MatchesRegex;
68
69TEST(SemaCheckerTest, Simple) {
70 auto index_map = MakeIndexMap();
71
72 {
73 SemaChecker checker(index_map);
74 ASSERT_EQ(checker.Check(Parse("select a from b")->get()).Msg(), "index `b` not found");
75 ASSERT_EQ(checker.Check(Parse("select a from ia")->get()).Msg(), "field `a` not found in index `ia`");
76 ASSERT_EQ(checker.Check(Parse("select f1 from ia")->get()).Msg(), "ok");
77 ASSERT_EQ(checker.Check(Parse("select f1 from ia where b = 1")->get()).Msg(), "field `b` not found in index `ia`");
78 ASSERT_EQ(checker.Check(Parse("select f1 from ia where f1 = 1")->get()).Msg(), "field `f1` is not a numeric field");
79 ASSERT_EQ(checker.Check(Parse("select f1 from ia where f2 hastag \"a\"")->get()).Msg(),
80 "field `f2` is not a tag field");
81 ASSERT_EQ(checker.Check(Parse("select f1 from ia where f1 hastag \"a\" and f2 = 1")->get()).Msg(), "ok");
82 ASSERT_EQ(checker.Check(Parse("select f1 from ia where f1 hastag \"\"")->get()).Msg(),
83 "tag cannot be an empty string");
84 ASSERT_EQ(checker.Check(Parse("select f1 from ia where f1 hastag \",\"")->get()).Msg(),
85 "tag cannot contain the separator `,`");
86 ASSERT_EQ(checker.Check(Parse("select f1 from ia order by a")->get()).Msg(), "field `a` not found in index `ia`");
87 ASSERT_EQ(checker.Check(Parse("select f4 from ia order by f4 <-> [3.6,4.7] limit 5")->get()).Msg(),
88 "vector should be of size `3` for field `f4`");
89 ASSERT_EQ(checker.Check(Parse("select f4 from ia where f4 <-> [3.6,4.7] < 5")->get()).Msg(),
90 "vector should be of size `3` for field `f4`");
91 ASSERT_EQ(checker.Check(Parse("select f4 from ia where f4 <-> [3.6,4.7,5.6] < -5")->get()).Msg(),
92 "range cannot be a negative number for l2 distance metric");
93 ASSERT_EQ(checker.Check(Parse("select f4 from ia order by f4 limit 5")->get()).Msg(),
94 "field `f4` is a vector field according to metadata and does expect a vector parameter");
95 ASSERT_EQ(checker.Check(Parse("select f4 from ia order by f1 <-> [3.6,4.7,5.6] limit 5")->get()).Msg(),
96 "field `f1` is not sortable");
97 ASSERT_EQ(checker.Check(Parse("select f4 from ia order by f2 <-> [3.6,4.7,5.6] limit 5")->get()).Msg(),
98 "field `f2` is not a vector field according to metadata and does not expect a vector parameter");
99 ASSERT_EQ(checker.Check(Parse("select f4 from ia order by f4 <-> [3.6,4.7,5.6]")->get()).Msg(),
100 "expect a LIMIT clause for vector field to construct a KNN search");
101 ASSERT_EQ(checker.Check(Parse("select f5 from ia order by f5 <-> [3.6,4.7,5.6] limit 5")->get()).Msg(),
102 "field `f5` is marked as NOINDEX and cannot be used for KNN search");
103 ASSERT_EQ(checker.Check(Parse("select f5 from ia where f2 = 1 order by f4 <-> [3.6,4.7,5.6] limit 5")->get()).Msg(),
104 "KNN search cannot be combined with other query expressions");
105 ASSERT_EQ(checker.Check(Parse("select f5 from ia where true order by f4 <-> [3.6,4.7,5.6] limit 5")->get()).Msg(),
106 "ok");
107 ASSERT_EQ(checker.Check(Parse("select f5 from ia where false order by f4 <-> [3.6,4.7,5.6] limit 5")->get()).Msg(),
108 "ok");
109 ASSERT_EQ(checker.Check(Parse("select f5 from ia where f2 = 1 and f5 <-> [3.6,4.7,5.6] < 1")->get()).Msg(), "ok");
110 ASSERT_EQ(checker.Check(Parse("select f5 from ia where f5 <-> [3.6,4.7,5.6] < 5")->get()).Msg(),
111 "range has to be between 0 and 2 for cosine distance metric");
112 ASSERT_EQ(checker.Check(Parse("select f5 from ia where f5 <-> [3.6,4.7,5.6] < 0.5")->get()).Msg(), "ok");
113 }
114
115 {
116 SemaChecker checker(index_map);
117 auto root = *Parse("select f1 from ia where f1 hastag \"a\" and f2 = 1 order by f3");
118
119 ASSERT_EQ(checker.Check(root.get()).Msg(), "ok");
120 }
121}

Callers

nothing calls this directly

Calls 5

getMethod · 0.80
MakeIndexMapFunction · 0.70
ParseFunction · 0.70
MsgMethod · 0.45
CheckMethod · 0.45

Tested by

no test coverage detected