30 #include <gtest/gtest.h>
33 #include <geometry_msgs/Point.h>
34 #include <geometry_msgs/Pose.h>
35 #include <geometry_msgs/Vector3.h>
44 conn_->setParams(
":memory:", 0);
45 ASSERT_TRUE(
conn_->connect());
48 static std::unique_ptr<warehouse_ros_sqlite::DatabaseConnection>
conn_;
54 using V = geometry_msgs::Vector3;
55 auto coll = conn_->openCollection<
V>(
"main",
"coll");
59 EXPECT_EQ(coll.count(), 0U);
64 using V = geometry_msgs::Vector3;
65 auto coll = conn_->openCollection<
V>(
"main",
"coll");
66 auto meta1 = coll.createMetadata();
67 meta1->append(
"x", 3);
73 coll.insert(v1, meta1);
75 EXPECT_EQ(coll.count(), 1U);
80 auto meta2 = coll.createMetadata();
81 meta2->append(
"x", 5);
83 coll.insert(v2, meta2);
85 EXPECT_EQ(coll.count(), 2U);
87 auto query = coll.createQuery();
88 query->append(
"x", 3);
90 const auto list = coll.queryList(query);
92 ASSERT_EQ(list.size(),
size_t(1));
93 ASSERT_EQ(list[0]->y, 1.0);
95 EXPECT_EQ(coll.removeMessages(query), 1U);
96 EXPECT_EQ(coll.count(), 1U);
101 auto coll1 = conn_->openCollection<geometry_msgs::Vector3>(
"main",
"coll");
102 ASSERT_TRUE(coll1.md5SumMatches());
103 auto coll2 = conn_->openCollection<geometry_msgs::Pose>(
"main",
"coll");
104 ASSERT_FALSE(coll2.md5SumMatches());
105 auto coll3 = conn_->openCollection<geometry_msgs::Vector3>(
"main",
"coll");
106 ASSERT_TRUE(coll3.md5SumMatches());
111 using V = geometry_msgs::Vector3;
112 auto coll = conn_->openCollection<
V>(
"main",
"coll");
113 auto meta1 = coll.createMetadata();
114 meta1->append(
"x", 3);
122 coll.insert(v1, meta1);
123 meta1->append(
"y", 8);
124 coll.insert(v2, meta1);
126 auto query = coll.createQuery();
127 query->append(
"x", 3);
129 const auto list = coll.queryList(query);
130 ASSERT_EQ(list.size(),
size_t(2));
131 EXPECT_EQ(list[0]->lookupInt(
"x"), 3);
132 EXPECT_EQ(list[1]->lookupInt(
"x"), 3);
134 EXPECT_TRUE(((list[0]->lookupInt(
"y") == 0 && list[1]->lookupInt(
"y") == 8) ||
135 (list[1]->lookupInt(
"y") == 0 && list[0]->lookupInt(
"y") == 8)));
140 using V = geometry_msgs::Vector3;
141 auto coll = conn_->openCollection<
V>(
"main",
"coll");
142 auto meta1 = coll.createMetadata();
143 meta1->append(
"x", 3);
145 coll.insert(
V(), meta1);
146 coll.insert(
V(), meta1);
148 auto query = coll.createQuery();
149 query->append(
"x", 3);
151 const auto list = coll.queryList(query);
152 ASSERT_EQ(list.size(),
size_t(2));
153 ASSERT_NE(list[0]->lookupInt(
"id"), list[1]->lookupInt(
"id"));
158 using V = geometry_msgs::Vector3;
159 auto coll = conn_->openCollection<
V>(
"main",
"coll");
160 auto meta1 = coll.createMetadata();
161 meta1->append(
"x", 3);
164 meta1->append(
"y", y1);
172 coll.insert(v1, meta1);
173 meta1->append(
"y", 6);
174 coll.insert(v2, meta1);
176 auto query = coll.createQuery();
177 query->append(
"y", y1);
179 const auto list = coll.queryList(query);
180 ASSERT_EQ(list.size(),
size_t(1));
181 EXPECT_EQ(list[0]->lookupInt(
"x"), 3);
182 EXPECT_EQ(list[0]->lookupInt(
"y"), y1);
183 EXPECT_EQ(list[0]->y, 9.0);
188 using V = geometry_msgs::Vector3;
189 auto coll = conn_->openCollection<
V>(
"main",
"coll");
190 auto meta1 = coll.createMetadata();
197 meta1->append(
"x", x1);
198 meta1->append(
"y",
"one");
199 coll.insert(v1, meta1);
201 auto meta2 = coll.createMetadata();
202 meta2->append(
"x", 2);
203 meta2->append(
"y",
"one");
204 coll.insert(v2, meta2);
206 auto modify_query = coll.createQuery();
207 modify_query->append(
"x", x1);
208 auto meta_modify = coll.createMetadata();
209 meta_modify->append(
"y",
"two");
210 coll.modifyMetadata(modify_query, meta_modify);
212 auto query = coll.createQuery();
213 query->append(
"y",
"two");
214 const auto list = coll.queryList(query);
216 ASSERT_EQ(list.size(),
size_t(1));
217 EXPECT_EQ(list[0]->lookupInt(
"x"), x1);
218 EXPECT_EQ(list[0]->lookupString(
"y"),
"two");
219 EXPECT_EQ(list[0]->x, 3.0);
224 using V = geometry_msgs::Vector3;
225 auto coll = conn_->openCollection<
V>(
"main",
"coll");
226 auto meta1 = coll.createMetadata();
228 auto keys = meta1->lookupFieldNames();
229 EXPECT_TRUE(keys.empty());
230 meta1->append(
"x",
false);
232 keys = meta1->lookupFieldNames();
233 EXPECT_NE(keys.find(
"x"), keys.end());
234 EXPECT_EQ(keys.size(), 1U);
235 EXPECT_TRUE(meta1->lookupField(
"x"));
236 EXPECT_FALSE(meta1->lookupField(
"z"));
241 using V = geometry_msgs::Vector3;
242 auto coll = conn_->openCollection<
V>(
"main",
"coll");
243 auto meta1 = coll.createMetadata();
244 meta1->append(
"x", 3);
247 meta1->append(
"y", y1);
255 coll.insert(v1, meta1);
256 meta1->append(
"y", 6);
257 coll.insert(v2, meta1);
259 auto query = coll.createQuery();
260 query->append(
"x", 3);
261 query->append(
"y", y1);
263 const auto list = coll.queryList(query);
264 ASSERT_EQ(list.size(),
size_t(1));
265 EXPECT_EQ(list[0]->lookupInt(
"x"), 3);
266 EXPECT_EQ(list[0]->lookupInt(
"y"), y1);
267 EXPECT_EQ(list[0]->y, 9.0);
272 using V = geometry_msgs::Vector3;
273 auto coll = conn_->openCollection<
V>(
"main",
"coll");
274 auto meta1 = coll.createMetadata();
275 meta1->append(
"x", 7);
276 coll.insert(
V(), meta1);
279 auto query = coll.createQuery();
280 query->append(
"x", 3);
282 auto it_pair = coll.query(query);
283 EXPECT_EQ(std::get<0>(it_pair), std::get<1>(it_pair));
285 auto list = coll.queryList(query);
286 EXPECT_EQ(list.size(),
size_t(0));
289 query->append(
"y", 3);
291 it_pair = coll.query(query);
292 EXPECT_EQ(std::get<0>(it_pair), std::get<1>(it_pair));
294 list = coll.queryList(query);
295 EXPECT_EQ(list.size(),
size_t(0));
300 using V = geometry_msgs::Vector3;
301 auto coll1 = conn_->openCollection<
V>(
"main1",
"coll");
302 auto meta1 = coll1.createMetadata();
303 meta1->append(
"x", 7);
304 coll1.insert(
V(), meta1);
306 auto coll2 = conn_->openCollection<
V>(
"main2",
"coll");
308 auto query2 = coll2.createQuery();
309 query2->append(
"x", 7);
310 const auto list2 = coll2.queryList(query2);
311 EXPECT_EQ(list2.size(),
size_t(0));
314 auto meta2 = coll2.createMetadata();
315 meta2->append(
"x", 7);
316 coll2.insert(
V(), meta2);
319 auto query1 = coll1.createQuery();
320 query1->append(
"x", 7);
321 const auto list1 = coll1.queryList(query1);
322 EXPECT_EQ(list1.size(),
size_t(1));
328 using V = geometry_msgs::Vector3;
331 auto coll = conn_->openCollection<
V>(
"main",
"coll");
332 auto meta1 = coll.createMetadata();
333 meta1->append(
"x", 7);
334 coll.insert(
V(), meta1);
337 auto coll = conn_->openCollection<
V>(
"main2",
"coll");
338 auto meta1 = coll.createMetadata();
339 meta1->append(
"x", 7);
340 coll.insert(
V(), meta1);
343 conn_->dropDatabase(
"main");
346 auto coll1 = conn_->openCollection<
V>(
"main2",
"coll");
347 auto query1 = coll1.createQuery();
348 query1->append(
"x", 7);
349 const auto list1 = coll1.queryList(query1);
350 EXPECT_EQ(list1.size(),
size_t(1));
354 auto coll1 = conn_->openCollection<
V>(
"main",
"coll");
355 auto query1 = coll1.createQuery();
356 query1->append(
"x", 7);
357 const auto list1 = coll1.queryList(query1);
358 EXPECT_EQ(list1.size(),
size_t(0));
364 using V = geometry_msgs::Vector3;
365 auto coll = conn_->openCollection<
V>(
"main",
"coll");
366 auto meta1 = coll.createMetadata();
367 meta1->append(
"x", 7);
368 coll.insert(
V(), meta1);
370 auto query = coll.createQuery();
371 query->append(
"x", 9);
377 using V = geometry_msgs::Vector3;
378 auto coll = conn_->openCollection<
V>(
"main",
"coll");
379 auto meta1 = coll.createMetadata();
380 meta1->append(
"x", 71);
381 coll.insert(
V(), meta1);
382 meta1->append(
"x", 10);
383 coll.insert(
V(), meta1);
387 auto query = coll.createQuery();
388 const auto list1 = coll.queryList(query,
false,
"x",
true);
389 ASSERT_EQ(list1.size(),
size_t(2));
390 EXPECT_EQ(list1[0]->lookupInt(
"x"), 10);
391 EXPECT_EQ(list1[1]->lookupInt(
"x"), 71);
395 auto query = coll.createQuery();
396 const auto list1 = coll.queryList(query,
false,
"x",
false);
397 ASSERT_EQ(list1.size(),
size_t(2));
398 EXPECT_EQ(list1[0]->lookupInt(
"x"), 71);
399 EXPECT_EQ(list1[1]->lookupInt(
"x"), 10);
405 auto coll = conn_->openCollection<geometry_msgs::Point>(
"test_db",
"test_collection");
407 auto metadata = coll.createMetadata();
408 metadata->append(
"test_metadata", 5.0);
410 geometry_msgs::Point msg = {};
411 coll.insert(msg, metadata);
414 auto query = coll.createQuery();
415 query->appendGTE(
"unrelated", 4.0);
416 EXPECT_TRUE(coll.queryList(query).empty());
420 auto query = coll.createQuery();
421 query->appendGT(
"unrelated", 4.0);
422 EXPECT_TRUE(coll.queryList(query).empty());
426 auto query = coll.createQuery();
427 query->appendLTE(
"unrelated", 6.0);
428 EXPECT_TRUE(coll.queryList(query).empty());
432 auto query = coll.createQuery();
433 query->appendLT(
"unrelated", 6.0);
434 EXPECT_TRUE(coll.queryList(query).empty());
440 auto coll = conn_->openCollection<geometry_msgs::Point>(
"test_db",
"test_backtick");
442 auto metadata = coll.createMetadata();
443 metadata->append(
"test_`metadata", 5.0);
445 geometry_msgs::Point msg = {};
446 coll.insert(msg, metadata);
449 auto query = coll.createQuery();
450 query->appendGTE(
"test_`metadata", 4.0);
451 EXPECT_EQ(coll.queryList(query).size(), 1);
457 const char* a =
"4a842b65f413084dc2b10fb484ea7f17";
458 const std::array<unsigned char, 16> b{
459 0x4a, 0x84, 0x2b, 0x65, 0xf4, 0x13, 0x08, 0x4d, 0xc2, 0xb1, 0x0f, 0xb4, 0x84, 0xea, 0x7f, 0x17,
465 const char* c =
"Za842b65f413084dc2b10fb484ea7f17";
466 const char*
d =
"aZ842b65f413084dc2b10fb484ea7f17";
471 int main(
int argc,
char** argv)
474 ::testing::InitGoogleTest(&argc, argv);
475 return RUN_ALL_TESTS();