4 * Copyright (c) 2010 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include "ctsvc_internal.h"
21 #include "ctsvc_db_schema.h"
22 #include "ctsvc_db_sqlite.h"
23 #include "ctsvc_db_utils.h"
24 #include "ctsvc_list.h"
25 #include "ctsvc_db_plugin_sdn.h"
26 #include "ctsvc_db_init.h"
27 #include "ctsvc_db_query.h"
28 #include "ctsvc_record.h"
29 #include "ctsvc_notification.h"
30 #include "ctsvc_server_utils.h"
33 static int __ctsvc_db_sdn_value_set(cts_stmt stmt, contacts_record_h *record)
40 ret = contacts_record_create(_contacts_sdn._uri, record);
41 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
42 sdn = (ctsvc_sdn_s*)*record;
45 sdn->id = ctsvc_stmt_get_int(stmt, i++);
46 temp = ctsvc_stmt_get_text(stmt, i++);
47 sdn->name = SAFE_STRDUP(temp);
48 temp = ctsvc_stmt_get_text(stmt, i++);
49 sdn->number = SAFE_STRDUP(temp);
50 sdn->sim_slot_no = ctsvc_stmt_get_int(stmt, i++);
52 return CONTACTS_ERROR_NONE;
55 static int __ctsvc_db_sdn_get_record(int id, contacts_record_h *out_record)
57 RETVM_IF(false == ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
61 char query[CTS_SQL_MAX_LEN] = {0};
62 contacts_record_h record;
64 RETV_IF(NULL == out_record, CONTACTS_ERROR_INVALID_PARAMETER);
67 snprintf(query, sizeof(query),
68 "SELECT id, name, number, sim_slot_no FROM "CTS_TABLE_SDN" WHERE id = %d", id);
70 ret = ctsvc_query_prepare(query, &stmt);
71 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
73 ret = ctsvc_stmt_step(stmt);
74 if (1 /*CTS_TRUE*/ != ret) {
76 ERR("ctsvc_stmt_step() Fail(%d)", ret);
77 ctsvc_stmt_finalize(stmt);
78 if (CONTACTS_ERROR_NONE == ret)
79 return CONTACTS_ERROR_NO_DATA;
85 ret = __ctsvc_db_sdn_value_set(stmt, &record);
87 ctsvc_stmt_finalize(stmt);
88 if (CONTACTS_ERROR_NONE != ret) {
90 ERR("__ctsvc_db_sdn_value_set(ALL) Fail(%d)", ret);
97 return CONTACTS_ERROR_NONE;
100 static int __ctsvc_db_sdn_get_all_records(int offset, int limit,
101 contacts_list_h *out_list)
103 RETVM_IF(false == ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
108 char query[CTS_SQL_MAX_LEN] = {0};
109 contacts_list_h list;
111 len = snprintf(query, sizeof(query),
112 "SELECT id, name, number, sim_slot_no FROM "CTS_TABLE_SDN);
115 len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
117 len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
120 ret = ctsvc_query_prepare(query, &stmt);
121 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
123 contacts_list_create(&list);
124 while ((ret = ctsvc_stmt_step(stmt))) {
125 contacts_record_h record;
127 /* LCOV_EXCL_START */
128 ERR("ctsvc_stmt_step() Fail(%d)", ret);
129 ctsvc_stmt_finalize(stmt);
130 contacts_list_destroy(list, true);
134 __ctsvc_db_sdn_value_set(stmt, &record);
136 ctsvc_list_prepend(list, record);
138 ctsvc_stmt_finalize(stmt);
139 ctsvc_list_reverse(list);
141 *out_list = (contacts_list_h)list;
142 return CONTACTS_ERROR_NONE;
145 static int __ctsvc_db_sdn_get_records_with_query(contacts_query_h query, int offset, int limit, contacts_list_h *out_list)
147 RETVM_IF(false == ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
152 ctsvc_query_s *s_query;
154 contacts_list_h list;
157 RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
158 s_query = (ctsvc_query_s*)query;
160 ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
161 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
163 contacts_list_create(&list);
164 while ((ret = ctsvc_stmt_step(stmt))) {
165 contacts_record_h record;
167 /* LCOV_EXCL_START */
168 ERR("ctsvc_stmt_step() Fail(%d)", ret);
169 ctsvc_stmt_finalize(stmt);
170 contacts_list_destroy(list, true);
175 contacts_record_create(_contacts_sdn._uri, &record);
176 sdn = (ctsvc_sdn_s*)record;
177 if (0 == s_query->projection_count) {
178 field_count = s_query->property_count;
180 field_count = s_query->projection_count;
182 int err = ctsvc_record_set_projection_flags(record, s_query->projection,
183 s_query->projection_count, s_query->property_count);
184 if (CONTACTS_ERROR_NONE != err)
185 ASSERT_NOT_REACHED("To set projection is Fail.\n");
188 for (i = 0; i < field_count; i++) {
191 if (0 == s_query->projection_count)
192 property_id = s_query->properties[i].property_id;
194 property_id = s_query->projection[i];
196 switch (property_id) {
197 case CTSVC_PROPERTY_SDN_ID:
198 sdn->id = ctsvc_stmt_get_int(stmt, i);
200 case CTSVC_PROPERTY_SDN_NAME:
201 temp = ctsvc_stmt_get_text(stmt, i);
203 sdn->name = SAFE_STRDUP(temp);
205 case CTSVC_PROPERTY_SDN_NUMBER:
206 temp = ctsvc_stmt_get_text(stmt, i);
208 sdn->number = SAFE_STRDUP(temp);
210 case CTSVC_PROPERTY_SDN_SIM_SLOT_NO:
211 sdn->sim_slot_no = ctsvc_stmt_get_int(stmt, i);
217 ctsvc_list_prepend(list, record);
219 ctsvc_stmt_finalize(stmt);
220 ctsvc_list_reverse(list);
222 *out_list = (contacts_list_h)list;
224 return CONTACTS_ERROR_NONE;
227 ctsvc_db_plugin_info_s ctsvc_db_plugin_sdn = {
228 .is_query_only = false,
229 .insert_record = NULL,
230 .get_record = __ctsvc_db_sdn_get_record,
231 .update_record = NULL,
232 .delete_record = NULL,
233 .get_all_records = __ctsvc_db_sdn_get_all_records,
234 .get_records_with_query = __ctsvc_db_sdn_get_records_with_query,
235 .insert_records = NULL,
236 .update_records = NULL,
237 .delete_records = NULL,
239 .get_count_with_query = NULL,
240 .replace_record = NULL,
241 .replace_records = NULL,