1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #define LOG_TAG "RdbQueryTest"
16
17 #include "rdb_query.h"
18
19 #include "gtest/gtest.h"
20 #include "log_print.h"
21 #include "utils/anonymous.h"
22 #include "value_proxy.h"
23
24 using namespace testing::ext;
25 using namespace OHOS::DistributedData;
26 using namespace OHOS::DistributedRdb;
27
28 namespace OHOS::Test {
29 namespace DistributedRDBTest {
30 class RdbQueryTest : public testing::Test {
31 public:
SetUpTestCase(void)32 static void SetUpTestCase(void){};
TearDownTestCase(void)33 static void TearDownTestCase(void){};
SetUp()34 void SetUp(){};
TearDown()35 void TearDown(){};
36 };
37
38 /**
39 * @tc.name: RdbQueryTest001
40 * @tc.desc: RdbQuery function empty test.
41 * @tc.type: FUNC
42 * @tc.require:
43 * @tc.author: SQL
44 */
HWTEST_F(RdbQueryTest, RdbQueryTest001, TestSize.Level1)45 HWTEST_F(RdbQueryTest, RdbQueryTest001, TestSize.Level1)
46 {
47 RdbQuery rdbQuery;
48 uint64_t tid = RdbQuery::TYPE_ID;
49 bool result = rdbQuery.IsEqual(tid);
50 EXPECT_TRUE(result);
51 std::vector<std::string> tables = rdbQuery.GetTables();
52 EXPECT_TRUE(tables.empty());
53 std::string devices = "devices1";
54 std::string sql = "SELECT * FROM table";
55 Values args;
56 rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
57 EXPECT_TRUE(rdbQuery.IsRemoteQuery());
58 EXPECT_EQ(rdbQuery.GetDevices().size(), 1);
59 EXPECT_EQ(rdbQuery.GetDevices()[0], devices);
60 DistributedRdb::PredicatesMemo predicates;
61 rdbQuery.MakeQuery(predicates);
62 rdbQuery.MakeCloudQuery(predicates);
63 EXPECT_EQ(predicates.tables_.size(), 0);
64 EXPECT_TRUE(predicates.tables_.empty());
65 EXPECT_EQ(predicates.operations_.size(), 0);
66 }
67
68 /**
69 * @tc.name: RdbQueryTest002
70 * @tc.desc: RdbQuery function test.
71 * @tc.type: FUNC
72 * @tc.require:
73 * @tc.author: SQL
74 */
HWTEST_F(RdbQueryTest, RdbQueryTest002, TestSize.Level1)75 HWTEST_F(RdbQueryTest, RdbQueryTest002, TestSize.Level1)
76 {
77 RdbQuery rdbQuery;
78 std::string devices = "devices1";
79 std::string sql = "SELECT * FROM table";
80 Values args;
81 rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
82 DistributedRdb::PredicatesMemo predicates;
83 predicates.tables_.push_back("table1");
84 predicates.tables_.push_back("table2");
85 predicates.devices_.push_back("device1");
86 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "name", "John Doe");
87 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "age", "30");
88 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::OPERATOR_MAX, "too", "99");
89 rdbQuery.MakeQuery(predicates);
90 rdbQuery.MakeCloudQuery(predicates);
91 EXPECT_EQ(predicates.tables_.size(), 2);
92 EXPECT_TRUE(!predicates.tables_.empty());
93 EXPECT_EQ(predicates.operations_.size(), 3);
94 }
95
96 /**
97 * @tc.name: RdbQueryTest003
98 * @tc.desc: RdbQuery function operation empty test.
99 * @tc.type: FUNC
100 * @tc.require:
101 * @tc.author: SQL
102 */
HWTEST_F(RdbQueryTest, RdbQueryTest003, TestSize.Level1)103 HWTEST_F(RdbQueryTest, RdbQueryTest003, TestSize.Level1)
104 {
105 RdbQuery rdbQuery;
106 std::string devices = "devices1";
107 std::string sql = "SELECT * FROM table";
108 Values args;
109 rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
110 DistributedRdb::PredicatesMemo predicates;
111 predicates.tables_.push_back("table1");
112 predicates.tables_.push_back("table2");
113 predicates.devices_.push_back("device1");
114 std::vector<std::string> values;
115 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", values);
116 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_EQUAL_TO, "test", values);
117 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::ORDER_BY, "test", values);
118 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::CONTAIN, "test", values);
119 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_WITH, "test", values);
120 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_WITH, "test", values);
121 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIKE, "test", values);
122 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GLOB, "test", values);
123 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BETWEEN, "test", values);
124 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_BETWEEN, "test", values);
125 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "test", values);
126 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN_OR_EQUAL, "test", values);
127 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN, "test", values);
128 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN_OR_EQUAL, "test", values);
129 rdbQuery.MakeQuery(predicates);
130 EXPECT_TRUE(values.empty());
131 EXPECT_TRUE(values.size() != 2);
132 }
133
134 /**
135 * @tc.name: RdbQueryTest004
136 * @tc.desc: RdbQuery function operation test.
137 * @tc.type: FUNC
138 * @tc.require:
139 * @tc.author: SQL
140 */
HWTEST_F(RdbQueryTest, RdbQueryTest004, TestSize.Level1)141 HWTEST_F(RdbQueryTest, RdbQueryTest004, TestSize.Level1)
142 {
143 RdbQuery rdbQuery;
144 std::string devices = "devices1";
145 std::string sql = "SELECT * FROM table";
146 Values args;
147 rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
148 DistributedRdb::PredicatesMemo predicates;
149 predicates.tables_.push_back("table1");
150 predicates.tables_.push_back("table2");
151 predicates.devices_.push_back("device1");
152 std::vector<std::string> values = { "value1", "value2" };
153 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", values);
154 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_EQUAL_TO, "test", values);
155 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::AND, "test", values);
156 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::OR, "test", values);
157 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::ORDER_BY, "test", values);
158 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIMIT, "test", values);
159 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_GROUP, "test", values);
160 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_GROUP, "test", values);
161 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IN, "test", values);
162 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_IN, "test", values);
163 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::CONTAIN, "test", values);
164 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_WITH, "test", values);
165 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_WITH, "test", values);
166 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IS_NULL, "test", values);
167 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IS_NOT_NULL, "test", values);
168 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIKE, "test", values);
169 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GLOB, "test", values);
170 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BETWEEN, "test", values);
171 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_BETWEEN, "test", values);
172 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "test", values);
173 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN_OR_EQUAL, "test", values);
174 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN, "test", values);
175 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN_OR_EQUAL, "test", values);
176 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::DISTINCT, "test", values);
177 predicates.AddOperation(DistributedRdb::RdbPredicateOperator::INDEXED_BY, "test", values);
178 rdbQuery.MakeQuery(predicates);
179 EXPECT_TRUE(!values.empty());
180 EXPECT_FALSE(values.size() != 2);
181 }
182 } // namespace DistributedRDBTest
183 } // namespace OHOS::Test