• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #define LOG_TAG "RdbSqlUtilsTest"
17 #include "rdb_sql_utils.h"
18 
19 #include <gtest/gtest.h>
20 
21 #include <climits>
22 #include <string>
23 
24 #include "grd_type_export.h"
25 #include "rd_utils.h"
26 #include "logger.h"
27 #include "sqlite_sql_builder.h"
28 #include "values_buckets.h"
29 #include "rdb_predicates.h"
30 
31 using namespace testing::ext;
32 using namespace OHOS::NativeRdb;
33 using namespace OHOS::Rdb;
34 
35 class RdbSqlUtilsTest : public testing::Test {
36 public:
37     static void SetUpTestCase(void);
38     static void TearDownTestCase(void);
SetUp(void)39     void SetUp(void) {};
TearDown(void)40     void TearDown(void) {};
41 };
42 
SetUpTestCase(void)43 void RdbSqlUtilsTest::SetUpTestCase(void)
44 {
45 }
46 
TearDownTestCase(void)47 void RdbSqlUtilsTest::TearDownTestCase(void)
48 {
49 }
50 
51 /**
52  * @tc.name: RdbStore_SqliteUtils_001
53  * @tc.desc: Normal testCase of sqlite_utils for IsSpecial, if sqlType is special
54  * @tc.type: FUNC
55  */
56 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_Test_001, TestSize.Level1)
57 {
58     auto [dataBasePath, errCode] = RdbSqlUtils::GetDefaultDatabasePath("/data/test", "RdbTest.db");
59     EXPECT_EQ(dataBasePath, "/data/test/rdb/RdbTest.db");
60     EXPECT_EQ(errCode, E_OK);
61 
62     auto [dataBasePath1, errCode1] = RdbSqlUtils::GetDefaultDatabasePath("/data/test", "RdbTest.db", "myself");
63     EXPECT_EQ(dataBasePath1, "/data/test/rdb/myself/RdbTest.db");
64     EXPECT_EQ(errCode1, E_OK);
65 }
66 
67 /**
68  * @tc.name: RdbStore_GetInsertSqlInfo_001
69  * @tc.desc: test RdbStore GetInsertSqlInfo
70  * @tc.type: FUNC
71  */
72 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetInsertSqlInfo_001, TestSize.Level1)
73 {
74     ValuesBucket values;
75     values.PutString("name", std::string("zhangsan"));
76     values.PutInt("age", 20);
77     values.PutDouble("salary", 300.5);
78     std::pair<int, SqlInfo> result = RdbSqlUtils::GetInsertSqlInfo("", values, ConflictResolution::ON_CONFLICT_NONE);
79     EXPECT_EQ(result.first, E_EMPTY_TABLE_NAME);
80 }
81 
82 /**
83  * @tc.name: RdbStore_GetInsertSqlInfo_002
84  * @tc.desc: test RdbStore GetInsertSqlInfo
85  * @tc.type: FUNC
86  */
87 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetInsertSqlInfo_002, TestSize.Level1)
88 {
89     ValuesBucket values;
90     values.PutString("name", std::string("zhangsan"));
91     values.PutInt("age", 20);
92     values.PutDouble("salary", 300.5);
93     ValuesBucket emptyValues;
94 
95     std::pair<int, SqlInfo> result =
96         RdbSqlUtils::GetInsertSqlInfo("temp", emptyValues, ConflictResolution::ON_CONFLICT_NONE);
97     EXPECT_EQ(result.first, E_EMPTY_VALUES_BUCKET);
98 }
99 
100 /**
101  * @tc.name: RdbStore_GetInsertSqlInfo_003
102  * @tc.desc: test RdbStore GetInsertSqlInfo
103  * @tc.type: FUNC
104  */
105 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetInsertSqlInfo_003, TestSize.Level1)
106 {
107     ValuesBucket values;
108     values.PutString("name", std::string("zhangsan"));
109     values.PutInt("age", 20);
110     values.PutDouble("salary", 300.5);
111 
112     std::pair<int, SqlInfo> result =
113         RdbSqlUtils::GetInsertSqlInfo("temp", values, ConflictResolution::ON_CONFLICT_NONE);
114     LOG_INFO("INSERT SQL is %{public}s", result.second.sql.c_str());
115     EXPECT_EQ(result.first, E_OK);
116 }
117 
118 /**
119  * @tc.name: RdbStore_GetInsertSqlInfo_004
120  * @tc.desc: test RdbStore GetInsertSqlInfo
121  * @tc.type: FUNC
122  */
123 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetInsertSqlInfo_004, TestSize.Level1)
124 {
125     ValuesBucket values;
126     values.PutString("name", std::string("zhangsan"));
127     values.PutInt("age", 20);
128     values.PutDouble("salary", 300.5);
129 
130     AssetValue assetVal;
131     assetVal.id = "123";
132     assetVal.name = "kkk";
133     std::vector<AssetValue> assets;
134     assets.emplace_back(assetVal);
135 
136     ValueObject vo(assets);
137     values.Put("kkk", vo);
138     std::pair<int, SqlInfo> result =
139         RdbSqlUtils::GetInsertSqlInfo("temp", values, ConflictResolution::ON_CONFLICT_REPLACE);
140     EXPECT_EQ(result.first, E_INVALID_ARGS);
141 }
142 
143 /**
144  * @tc.name: RdbStore_GetUpdateSqlInfo_001
145  * @tc.desc: test RdbStore GetUpdateSqlInfo
146  * @tc.type: FUNC
147  */
148 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetUpdateSqlInfo_001, TestSize.Level1)
149 {
150     std::vector<std::string> returningFields;
151     RdbPredicates predicates("");
152     ValuesBucket bucketValues;
153     bucketValues.PutString("name", std::string("zhangsan"));
154     bucketValues.PutInt("age", 20);
155     bucketValues.PutDouble("salary", 300.5);
156     std::vector<ValueObject> emptyValues;
157     std::pair<int, SqlInfo> result = RdbSqlUtils::GetUpdateSqlInfo(
158         predicates, bucketValues, ConflictResolution::ON_CONFLICT_NONE, returningFields);
159     EXPECT_EQ(result.first, E_EMPTY_TABLE_NAME);
160 }
161 
162 /**
163  * @tc.name: RdbStore_GetUpdateSqlInfo_002
164  * @tc.desc: test RdbStore GetUpdateSqlInfo
165  * @tc.type: FUNC
166  */
167 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetUpdateSqlInfo_002, TestSize.Level1)
168 {
169     std::vector<std::string> returningFields;
170     RdbPredicates predicates("temp");
171     ValuesBucket bucketValues;
172     bucketValues.PutString("name", std::string("zhangsan"));
173     bucketValues.PutInt("age", 20);
174     bucketValues.PutDouble("salary", 300.5);
175     ValuesBucket emptyBucketValues;
176     std::vector<ValueObject> emptyValues;
177 
178     std::pair<int, SqlInfo> result = RdbSqlUtils::GetUpdateSqlInfo(
179         predicates, emptyBucketValues, ConflictResolution::ON_CONFLICT_NONE, returningFields);
180     EXPECT_EQ(result.first, E_EMPTY_VALUES_BUCKET);
181 }
182 
183 /**
184  * @tc.name: RdbStore_GetUpdateSqlInfo_003
185  * @tc.desc: test RdbStore GetUpdateSqlInfo
186  * @tc.type: FUNC
187  */
188 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetUpdateSqlInfo_003, TestSize.Level1)
189 {
190     std::vector<std::string> returningFields;
191     RdbPredicates predicates("temp");
192     ValuesBucket bucketValues;
193     bucketValues.PutString("name", std::string("zhangsan"));
194     bucketValues.PutInt("age", 20);
195     bucketValues.PutDouble("salary", 300.5);
196     std::vector<ValueObject> values;
197     ValueObject object;
198     values.push_back(object);
199     predicates.EqualTo("name", "wangwu");
200     predicates.SetBindArgs(values);
201     std::pair<int, SqlInfo> result = RdbSqlUtils::GetUpdateSqlInfo(
202         predicates, bucketValues, ConflictResolution::ON_CONFLICT_NONE, returningFields);
203     LOG_INFO("UPDATE SQL is %{public}s", result.second.sql.c_str());
204     EXPECT_EQ(result.first, E_OK);
205 }
206 
207 /**
208  * @tc.name: RdbStore_GetDeleteSqlInfo_001
209  * @tc.desc: test RdbStore GetDeleteSqlInfo
210  * @tc.type: FUNC
211  */
212 HWTEST_F(RdbSqlUtilsTest, RdbSqlUtils_GetDeleteSqlInfo_001, TestSize.Level1)
213 {
214     std::vector<std::string> returningFields;
215     RdbPredicates predicates("");
216     std::pair<int, SqlInfo> result = RdbSqlUtils::GetDeleteSqlInfo(predicates, returningFields);
217     EXPECT_EQ(result.first, E_EMPTY_TABLE_NAME);
218 }
219 
220 /**
221  * @tc.name: RdbStore_GetDeleteSqlInfo_002
222  * @tc.desc: test RdbStore GetDeleteSqlInfo
223  * @tc.type: FUNC
224  */
225 HWTEST_F(RdbSqlUtilsTest, GetDeleteSqlInfo_002, TestSize.Level1)
226 {
227     std::vector<std::string> returningFields;
228     std::vector<ValueObject> emptyValues;
229     RdbPredicates predicates("temp");
230     predicates.EqualTo("name", "wangwu");
231     predicates.SetBindArgs(emptyValues);
232     std::pair<int, SqlInfo> result =
233         RdbSqlUtils::GetDeleteSqlInfo(predicates, returningFields);
234     LOG_INFO("DELETE SQL is %{public}s", result.second.sql.c_str());
235     EXPECT_EQ(result.first, E_OK);
236 }