OpenDNSSEC-enforcer  2.1.5
database_version.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Jerry Lundström <lundstrom.jerry@gmail.com>
3  * Copyright (c) 2014 .SE (The Internet Infrastructure Foundation).
4  * Copyright (c) 2014 OpenDNSSEC AB (svb)
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
24  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28 */
29 
30 #include "database_version.h"
31 #include "db_error.h"
32 
33 
34 #include <string.h>
35 
41 static db_object_t* __database_version_new_object(const db_connection_t* connection) {
42  db_object_field_list_t* object_field_list;
43  db_object_field_t* object_field;
44  db_object_t* object;
45 
46  if (!(object = db_object_new())
47  || db_object_set_connection(object, connection)
48  || db_object_set_table(object, "databaseVersion")
49  || db_object_set_primary_key_name(object, "id")
50  || !(object_field_list = db_object_field_list_new()))
51  {
52  db_object_free(object);
53  return NULL;
54  }
55 
56  if (!(object_field = db_object_field_new())
57  || db_object_field_set_name(object_field, "id")
59  || db_object_field_list_add(object_field_list, object_field))
60  {
61  db_object_field_free(object_field);
62  db_object_field_list_free(object_field_list);
63  db_object_free(object);
64  return NULL;
65  }
66 
67  if (!(object_field = db_object_field_new())
68  || db_object_field_set_name(object_field, "rev")
70  || db_object_field_list_add(object_field_list, object_field))
71  {
72  db_object_field_free(object_field);
73  db_object_field_list_free(object_field_list);
74  db_object_free(object);
75  return NULL;
76  }
77 
78  if (!(object_field = db_object_field_new())
79  || db_object_field_set_name(object_field, "version")
81  || db_object_field_list_add(object_field_list, object_field))
82  {
83  db_object_field_free(object_field);
84  db_object_field_list_free(object_field_list);
85  db_object_free(object);
86  return NULL;
87  }
88 
89  if (db_object_set_object_field_list(object, object_field_list)) {
90  db_object_field_list_free(object_field_list);
91  db_object_free(object);
92  return NULL;
93  }
94 
95  return object;
96 }
97 
98 /* DATABASE VERSION */
99 
100 
101 
104  (database_version_t*)calloc(1, sizeof(database_version_t));
105 
106  if (database_version) {
107  if (!(database_version->dbo = __database_version_new_object(connection))) {
108  free(database_version);
109  return NULL;
110  }
113  }
114 
115  return database_version;
116 }
117 
119  if (database_version) {
120  if (database_version->dbo) {
122  }
125  free(database_version);
126  }
127 }
128 
130  const db_value_set_t* value_set;
131 
132  if (!database_version) {
133  return DB_ERROR_UNKNOWN;
134  }
135  if (!result) {
136  return DB_ERROR_UNKNOWN;
137  }
138 
141  if (!(value_set = db_result_value_set(result))
142  || db_value_set_size(value_set) != 3
143  || db_value_copy(&(database_version->id), db_value_set_at(value_set, 0))
144  || db_value_copy(&(database_version->rev), db_value_set_at(value_set, 1))
146  {
147  return DB_ERROR_UNKNOWN;
148  }
149 
150  return DB_OK;
151 }
152 
154  if (!database_version) {
155  return 0;
156  }
157 
158  return database_version->version;
159 }
160 
161 /* DATABASE VERSION LIST */
162 
163 
164 
168 
169  if (database_version_list) {
170  if (!(database_version_list->dbo = __database_version_new_object(connection))) {
171  free(database_version_list);
172  return NULL;
173  }
174  }
175 
176  return database_version_list;
177 }
178 
180  size_t i;
181 
182  if (database_version_list) {
183  if (database_version_list->dbo) {
185  }
188  }
191  }
192  for (i = 0; i < database_version_list->object_list_size; i++) {
195  }
196  }
199  }
200  free(database_version_list);
201  }
202 }
203 
204 static int database_version_list_get_associated(database_version_list_t* database_version_list) {
205  (void)database_version_list;
206  return DB_OK;
207 }
208 
210  size_t i;
211 
212  if (!database_version_list) {
213  return DB_ERROR_UNKNOWN;
214  }
215  if (!database_version_list->dbo) {
216  return DB_ERROR_UNKNOWN;
217  }
218 
221  }
223  for (i = 0; i < database_version_list->object_list_size; i++) {
226  }
227  }
230  }
234  }
237  {
238  return DB_ERROR_UNKNOWN;
239  }
241  && database_version_list_get_associated(database_version_list))
242  {
243  return DB_ERROR_UNKNOWN;
244  }
245  return DB_OK;
246 }
247 
250 
251  if (!connection) {
252  return NULL;
253  }
254 
257  {
259  return NULL;
260  }
261 
262  return database_version_list;
263 }
264 
266  const db_result_t* result;
267 
268  if (!database_version_list) {
269  return NULL;
270  }
271 
275  return NULL;
276  }
278  return NULL;
279  }
281  return NULL;
282  }
285  }
289  }
290  else {
292  }
294  return NULL;
295  }
298  return NULL;
299  }
301  return NULL;
302  }
304  return NULL;
305  }
307  return NULL;
308  }
309  }
311  } else {
314  }
315 
317  return NULL;
318  }
319 
321  return NULL;
322  }
325  return NULL;
326  }
327  }
329  return NULL;
330  }
332 }
db_value_reset
void db_value_reset(db_value_t *value)
Definition: db_value.c:60
db_result_list_size
size_t db_result_list_size(const db_result_list_t *result_list)
Definition: db_result.c:333
db_result
Definition: db_result.h:56
DB_TYPE_PRIMARY_KEY
@ DB_TYPE_PRIMARY_KEY
Definition: db_type.h:62
database_version::dbo
db_object_t * dbo
Definition: database_version.h:46
db_object_field_list_add
int db_object_field_list_add(db_object_field_list_t *object_field_list, db_object_field_t *object_field)
Definition: db_object.c:254
db_object_field_set_type
int db_object_field_set_type(db_object_field_t *object_field, db_type_t type)
Definition: db_object.c:122
db_object_field_list_new
db_object_field_list_t * db_object_field_list_new(void)
Definition: db_object.c:174
db_object_field_set_name
int db_object_field_set_name(db_object_field_t *object_field, const char *name)
Definition: db_object.c:110
database_version::id
db_value_t id
Definition: database_version.h:47
database_version_from_result
int database_version_from_result(database_version_t *database_version, const db_result_t *result)
Definition: database_version.c:129
db_object_set_object_field_list
int db_object_set_object_field_list(db_object_t *object, db_object_field_list_t *object_field_list)
Definition: db_object.c:386
db_object_set_primary_key_name
int db_object_set_primary_key_name(db_object_t *object, const char *primary_key_name)
Definition: db_object.c:371
db_object_set_connection
int db_object_set_connection(db_object_t *object, const db_connection_t *connection)
Definition: db_object.c:341
database_version_list::object_list_first
int object_list_first
Definition: database_version.h:92
db_object
Definition: db_object.h:201
db_object_connection
const db_connection_t * db_object_connection(const db_object_t *object)
Definition: db_object.c:320
db_error.h
db_object_field
Definition: db_object.h:52
db_object_free
void db_object_free(db_object_t *object)
Definition: db_object.c:311
database_version_list_free
void database_version_list_free(database_version_list_t *database_version_list)
Definition: database_version.c:179
database_version_version
unsigned int database_version_version(const database_version_t *database_version)
Definition: database_version.c:153
database_version_list::object_list_size
size_t object_list_size
Definition: database_version.h:90
database_version_list_next
const database_version_t * database_version_list_next(database_version_list_t *database_version_list)
Definition: database_version.c:265
database_version_new
database_version_t * database_version_new(const db_connection_t *connection)
Definition: database_version.c:102
database_version_list_get
int database_version_list_get(database_version_list_t *database_version_list)
Definition: database_version.c:209
db_value_set
Definition: db_value.h:281
database_version_list
Definition: database_version.h:83
db_value_set_at
const db_value_t * db_value_set_at(const db_value_set_t *value_set, size_t at)
Definition: db_value.c:742
database_version
Definition: database_version.h:45
db_result_list_free
void db_result_list_free(db_result_list_t *result_list)
Definition: db_result.c:160
database_version_list::result_list
db_result_list_t * result_list
Definition: database_version.h:85
DB_TYPE_UINT32
@ DB_TYPE_UINT32
Definition: db_type.h:70
db_object_read
db_result_list_t * db_object_read(const db_object_t *object, const db_join_list_t *join_list, const db_clause_list_t *clause_list)
Definition: db_object.c:424
db_result_value_set
const db_value_set_t * db_result_value_set(const db_result_t *result)
Definition: db_result.c:97
DB_TYPE_REVISION
@ DB_TYPE_REVISION
Definition: db_type.h:97
database_version_list::object_list
database_version_t ** object_list
Definition: database_version.h:89
db_value_to_uint32
int db_value_to_uint32(const db_value_t *value, db_type_uint32_t *to_uint32)
Definition: db_value.c:372
db_object_field_free
void db_object_field_free(db_object_field_t *object_field)
Definition: db_object.c:69
db_object_field_list
Definition: db_object.h:142
db_object_field_new
db_object_field_t * db_object_field_new(void)
Definition: db_object.c:40
database_version_list::database_version
database_version_t * database_version
Definition: database_version.h:87
db_value_copy
int db_value_copy(db_value_t *value, const db_value_t *from_value)
Definition: db_value.c:77
database_version_list_new_get
database_version_list_t * database_version_list_new_get(const db_connection_t *connection)
Definition: database_version.c:248
database_version_list_new
database_version_list_t * database_version_list_new(const db_connection_t *connection)
Definition: database_version.c:165
db_object_set_table
int db_object_set_table(db_object_t *object, const char *table)
Definition: db_object.c:356
database_version_free
void database_version_free(database_version_t *database_version)
Definition: database_version.c:118
database_version_list::object_list_position
size_t object_list_position
Definition: database_version.h:91
database_version_list::object_store
int object_store
Definition: database_version.h:88
database_version_list::associated_fetch
int associated_fetch
Definition: database_version.h:93
database_version::version
unsigned int version
Definition: database_version.h:49
db_object_field_list_free
void db_object_field_list_free(db_object_field_list_t *object_field_list)
Definition: db_object.c:199
database_version_list::dbo
db_object_t * dbo
Definition: database_version.h:84
db_object_new
db_object_t * db_object_new(void)
Definition: db_object.c:304
db_value_set_size
size_t db_value_set_size(const db_value_set_t *value_set)
Definition: db_value.c:734
db_connection
Definition: db_connection.h:46
DB_ERROR_UNKNOWN
#define DB_ERROR_UNKNOWN
Definition: db_error.h:40
DB_OK
#define DB_OK
Definition: db_error.h:36
database_version::rev
db_value_t rev
Definition: database_version.h:48
db_result_list_fetch_all
int db_result_list_fetch_all(db_result_list_t *result_list)
Definition: db_result.c:341
db_result_list_next
const db_result_t * db_result_list_next(db_result_list_t *result_list)
Definition: db_result.c:310
database_version.h