OpenDNSSEC-enforcer  2.0.2
key_dependency.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 "key_dependency.h"
31 #include "db_error.h"
32 
33 
34 #include <string.h>
35 
41  { NULL, 0 }
42 };
43 
49 static db_object_t* __key_dependency_new_object(const db_connection_t* connection) {
50  db_object_field_list_t* object_field_list;
51  db_object_field_t* object_field;
52  db_object_t* object;
53 
54  if (!(object = db_object_new())
55  || db_object_set_connection(object, connection)
56  || db_object_set_table(object, "keyDependency")
57  || db_object_set_primary_key_name(object, "id")
58  || !(object_field_list = db_object_field_list_new()))
59  {
60  db_object_free(object);
61  return NULL;
62  }
63 
64  if (!(object_field = db_object_field_new())
65  || db_object_field_set_name(object_field, "id")
67  || db_object_field_list_add(object_field_list, object_field))
68  {
69  db_object_field_free(object_field);
70  db_object_field_list_free(object_field_list);
71  db_object_free(object);
72  return NULL;
73  }
74 
75  if (!(object_field = db_object_field_new())
76  || db_object_field_set_name(object_field, "rev")
78  || db_object_field_list_add(object_field_list, object_field))
79  {
80  db_object_field_free(object_field);
81  db_object_field_list_free(object_field_list);
82  db_object_free(object);
83  return NULL;
84  }
85 
86  if (!(object_field = db_object_field_new())
87  || db_object_field_set_name(object_field, "zoneId")
88  || db_object_field_set_type(object_field, DB_TYPE_ANY)
89  || db_object_field_list_add(object_field_list, object_field))
90  {
91  db_object_field_free(object_field);
92  db_object_field_list_free(object_field_list);
93  db_object_free(object);
94  return NULL;
95  }
96 
97  if (!(object_field = db_object_field_new())
98  || db_object_field_set_name(object_field, "fromKeyDataId")
99  || db_object_field_set_type(object_field, DB_TYPE_ANY)
100  || db_object_field_list_add(object_field_list, object_field))
101  {
102  db_object_field_free(object_field);
103  db_object_field_list_free(object_field_list);
104  db_object_free(object);
105  return NULL;
106  }
107 
108  if (!(object_field = db_object_field_new())
109  || db_object_field_set_name(object_field, "toKeyDataId")
110  || db_object_field_set_type(object_field, DB_TYPE_ANY)
111  || db_object_field_list_add(object_field_list, object_field))
112  {
113  db_object_field_free(object_field);
114  db_object_field_list_free(object_field_list);
115  db_object_free(object);
116  return NULL;
117  }
118 
119  if (!(object_field = db_object_field_new())
120  || db_object_field_set_name(object_field, "type")
121  || db_object_field_set_type(object_field, DB_TYPE_ENUM)
122  || db_object_field_set_enum_set(object_field, key_dependency_enum_set_type)
123  || db_object_field_list_add(object_field_list, object_field))
124  {
125  db_object_field_free(object_field);
126  db_object_field_list_free(object_field_list);
127  db_object_free(object);
128  return NULL;
129  }
130 
131  if (db_object_set_object_field_list(object, object_field_list)) {
132  db_object_field_list_free(object_field_list);
133  db_object_free(object);
134  return NULL;
135  }
136 
137  return object;
138 }
139 
140 /* KEY DEPENDENCY */
141 
142 
143 
146  (key_dependency_t*)calloc(1, sizeof(key_dependency_t));
147 
148  if (key_dependency) {
149  if (!(key_dependency->dbo = __key_dependency_new_object(connection))) {
150  free(key_dependency);
151  return NULL;
152  }
153  db_value_reset(&(key_dependency->id));
154  db_value_reset(&(key_dependency->rev));
155  db_value_reset(&(key_dependency->zone_id));
156  db_value_reset(&(key_dependency->from_key_data_id));
157  db_value_reset(&(key_dependency->to_key_data_id));
158  key_dependency->type = KEY_DEPENDENCY_TYPE_INVALID;
159  }
160 
161  return key_dependency;
162 }
163 
165  key_dependency_t* new_key_dependency;
166 
167  if (!key_dependency) {
168  return NULL;
169  }
170  if (!key_dependency->dbo) {
171  return NULL;
172  }
173 
174  if (!(new_key_dependency = key_dependency_new(db_object_connection(key_dependency->dbo)))
175  || key_dependency_copy(new_key_dependency, key_dependency))
176  {
177  key_dependency_free(new_key_dependency);
178  return NULL;
179  }
180  return new_key_dependency;
181 }
182 
184  if (key_dependency) {
185  if (key_dependency->dbo) {
186  db_object_free(key_dependency->dbo);
187  }
188  db_value_reset(&(key_dependency->id));
189  db_value_reset(&(key_dependency->rev));
190  db_value_reset(&(key_dependency->zone_id));
191  if (key_dependency->private_zone_id) {
192  zone_free(key_dependency->private_zone_id);
193  }
194  db_value_reset(&(key_dependency->from_key_data_id));
195  if (key_dependency->private_from_key_data_id) {
196  key_data_free(key_dependency->private_from_key_data_id);
197  }
198  db_value_reset(&(key_dependency->to_key_data_id));
199  if (key_dependency->private_to_key_data_id) {
200  key_data_free(key_dependency->private_to_key_data_id);
201  }
202  free(key_dependency);
203  }
204 }
205 
207  if (!key_dependency) {
208  return DB_ERROR_UNKNOWN;
209  }
210  if (!key_dependency_copy) {
211  return DB_ERROR_UNKNOWN;
212  }
213 
214  if (db_value_copy(&(key_dependency->id), &(key_dependency_copy->id))) {
215  return DB_ERROR_UNKNOWN;
216  }
217  if (db_value_copy(&(key_dependency->rev), &(key_dependency_copy->rev))) {
218  return DB_ERROR_UNKNOWN;
219  }
220  if (db_value_copy(&(key_dependency->zone_id), &(key_dependency_copy->zone_id))) {
221  return DB_ERROR_UNKNOWN;
222  }
223  if (key_dependency->private_zone_id) {
224  zone_free(key_dependency->private_zone_id);
225  key_dependency->private_zone_id = NULL;
226  }
227  if (key_dependency_copy->private_zone_id
228  && !(key_dependency->private_zone_id = zone_new_copy(key_dependency_copy->private_zone_id)))
229  {
230  return DB_ERROR_UNKNOWN;
231  }
232  key_dependency->associated_zone_id = NULL;
233  if (!key_dependency_copy->private_zone_id
234  && key_dependency_copy->associated_zone_id
235  && !(key_dependency->private_zone_id = zone_new_copy(key_dependency_copy->associated_zone_id)))
236  {
237  return DB_ERROR_UNKNOWN;
238  }
239  if (db_value_copy(&(key_dependency->from_key_data_id), &(key_dependency_copy->from_key_data_id))) {
240  return DB_ERROR_UNKNOWN;
241  }
242  if (key_dependency->private_from_key_data_id) {
243  key_data_free(key_dependency->private_from_key_data_id);
244  key_dependency->private_from_key_data_id = NULL;
245  }
246  if (key_dependency_copy->private_from_key_data_id
247  && !(key_dependency->private_from_key_data_id = key_data_new_copy(key_dependency_copy->private_from_key_data_id)))
248  {
249  return DB_ERROR_UNKNOWN;
250  }
251  key_dependency->associated_from_key_data_id = NULL;
252  if (!key_dependency_copy->private_from_key_data_id
253  && key_dependency_copy->associated_from_key_data_id
254  && !(key_dependency->private_from_key_data_id = key_data_new_copy(key_dependency_copy->associated_from_key_data_id)))
255  {
256  return DB_ERROR_UNKNOWN;
257  }
258  if (db_value_copy(&(key_dependency->to_key_data_id), &(key_dependency_copy->to_key_data_id))) {
259  return DB_ERROR_UNKNOWN;
260  }
261  if (key_dependency->private_to_key_data_id) {
262  key_data_free(key_dependency->private_to_key_data_id);
263  key_dependency->private_to_key_data_id = NULL;
264  }
265  if (key_dependency_copy->private_to_key_data_id
266  && !(key_dependency->private_to_key_data_id = key_data_new_copy(key_dependency_copy->private_to_key_data_id)))
267  {
268  return DB_ERROR_UNKNOWN;
269  }
270  key_dependency->associated_to_key_data_id = NULL;
271  if (!key_dependency_copy->private_to_key_data_id
272  && key_dependency_copy->associated_to_key_data_id
273  && !(key_dependency->private_to_key_data_id = key_data_new_copy(key_dependency_copy->associated_to_key_data_id)))
274  {
275  return DB_ERROR_UNKNOWN;
276  }
277  key_dependency->type = key_dependency_copy->type;
278  return DB_OK;
279 }
280 
282  const db_value_set_t* value_set;
283  int type;
284 
285  if (!key_dependency) {
286  return DB_ERROR_UNKNOWN;
287  }
288  if (!result) {
289  return DB_ERROR_UNKNOWN;
290  }
291 
292  db_value_reset(&(key_dependency->id));
293  db_value_reset(&(key_dependency->rev));
294  db_value_reset(&(key_dependency->zone_id));
295  db_value_reset(&(key_dependency->from_key_data_id));
296  db_value_reset(&(key_dependency->to_key_data_id));
297  if (!(value_set = db_result_value_set(result))
298  || db_value_set_size(value_set) != 6
299  || db_value_copy(&(key_dependency->id), db_value_set_at(value_set, 0))
300  || db_value_copy(&(key_dependency->rev), db_value_set_at(value_set, 1))
301  || db_value_copy(&(key_dependency->zone_id), db_value_set_at(value_set, 2))
302  || db_value_copy(&(key_dependency->from_key_data_id), db_value_set_at(value_set, 3))
303  || db_value_copy(&(key_dependency->to_key_data_id), db_value_set_at(value_set, 4))
304  || db_value_to_enum_value(db_value_set_at(value_set, 5), &type, key_dependency_enum_set_type))
305  {
306  return DB_ERROR_UNKNOWN;
307  }
308 
310  key_dependency->type = KEY_DEPENDENCY_TYPE_DS;
311  }
313  key_dependency->type = KEY_DEPENDENCY_TYPE_RRSIG;
314  }
316  key_dependency->type = KEY_DEPENDENCY_TYPE_DNSKEY;
317  }
319  key_dependency->type = KEY_DEPENDENCY_TYPE_RRSIGDNSKEY;
320  }
321  else {
322  return DB_ERROR_UNKNOWN;
323  }
324 
325  return DB_OK;
326 }
327 
329  if (!key_dependency) {
330  return NULL;
331  }
332 
333  return &(key_dependency->zone_id);
334 }
335 
337  if (!key_dependency) {
338  return NULL;
339  }
340 
341  return &(key_dependency->from_key_data_id);
342 }
343 
345  key_data_t* from_key_data_id = NULL;
346 
347  if (!key_dependency) {
348  return NULL;
349  }
350  if (!key_dependency->dbo) {
351  return NULL;
352  }
353  if (db_value_not_empty(&(key_dependency->from_key_data_id))) {
354  return NULL;
355  }
356 
357  if (!(from_key_data_id = key_data_new(db_object_connection(key_dependency->dbo)))) {
358  return NULL;
359  }
360  if (key_dependency->private_from_key_data_id) {
361  if (key_data_copy(from_key_data_id, key_dependency->private_from_key_data_id)) {
362  key_data_free(from_key_data_id);
363  return NULL;
364  }
365  }
366  else if (key_dependency->associated_from_key_data_id) {
367  if (key_data_copy(from_key_data_id, key_dependency->associated_from_key_data_id)) {
368  key_data_free(from_key_data_id);
369  return NULL;
370  }
371  }
372  else {
373  if (key_data_get_by_id(from_key_data_id, &(key_dependency->from_key_data_id))) {
374  key_data_free(from_key_data_id);
375  return NULL;
376  }
377  }
378 
379  return from_key_data_id;
380 }
381 
383  if (!key_dependency) {
384  return NULL;
385  }
386 
387  return &(key_dependency->to_key_data_id);
388 }
389 
391  if (!key_dependency) {
393  }
394 
395  return key_dependency->type;
396 }
397 
399  if (!key_dependency) {
400  return DB_ERROR_UNKNOWN;
401  }
402  if (!zone_id) {
403  return DB_ERROR_UNKNOWN;
404  }
405  if (db_value_not_empty(zone_id)) {
406  return DB_ERROR_UNKNOWN;
407  }
408 
409  db_value_reset(&(key_dependency->zone_id));
410  if (db_value_copy(&(key_dependency->zone_id), zone_id)) {
411  return DB_ERROR_UNKNOWN;
412  }
413 
414  return DB_OK;
415 }
416 
418  if (!key_dependency) {
419  return DB_ERROR_UNKNOWN;
420  }
421  if (!from_key_data_id) {
422  return DB_ERROR_UNKNOWN;
423  }
424  if (db_value_not_empty(from_key_data_id)) {
425  return DB_ERROR_UNKNOWN;
426  }
427 
428  db_value_reset(&(key_dependency->from_key_data_id));
429  if (db_value_copy(&(key_dependency->from_key_data_id), from_key_data_id)) {
430  return DB_ERROR_UNKNOWN;
431  }
432 
433  return DB_OK;
434 }
435 
437  if (!key_dependency) {
438  return DB_ERROR_UNKNOWN;
439  }
440  if (!to_key_data_id) {
441  return DB_ERROR_UNKNOWN;
442  }
443  if (db_value_not_empty(to_key_data_id)) {
444  return DB_ERROR_UNKNOWN;
445  }
446 
447  db_value_reset(&(key_dependency->to_key_data_id));
448  if (db_value_copy(&(key_dependency->to_key_data_id), to_key_data_id)) {
449  return DB_ERROR_UNKNOWN;
450  }
451 
452  return DB_OK;
453 }
454 
456  if (!key_dependency) {
457  return DB_ERROR_UNKNOWN;
458  }
459  if (type == KEY_DEPENDENCY_TYPE_INVALID) {
460  return DB_ERROR_UNKNOWN;
461  }
462 
463  key_dependency->type = type;
464 
465  return DB_OK;
466 }
467 
469  db_object_field_list_t* object_field_list;
470  db_object_field_t* object_field;
471  db_value_set_t* value_set;
472  int ret;
473 
474  if (!key_dependency) {
475  return DB_ERROR_UNKNOWN;
476  }
477  if (!key_dependency->dbo) {
478  return DB_ERROR_UNKNOWN;
479  }
480  if (!db_value_not_empty(&(key_dependency->id))) {
481  return DB_ERROR_UNKNOWN;
482  }
483  if (!db_value_not_empty(&(key_dependency->rev))) {
484  return DB_ERROR_UNKNOWN;
485  }
486  if (db_value_not_empty(&(key_dependency->zone_id))) {
487  return DB_ERROR_UNKNOWN;
488  }
489  if (db_value_not_empty(&(key_dependency->from_key_data_id))) {
490  return DB_ERROR_UNKNOWN;
491  }
492  if (db_value_not_empty(&(key_dependency->to_key_data_id))) {
493  return DB_ERROR_UNKNOWN;
494  }
495  /* TODO: validate content more */
496 
497  if (!(object_field_list = db_object_field_list_new())) {
498  return DB_ERROR_UNKNOWN;
499  }
500 
501  if (!(object_field = db_object_field_new())
502  || db_object_field_set_name(object_field, "zoneId")
503  || db_object_field_set_type(object_field, DB_TYPE_ANY)
504  || db_object_field_list_add(object_field_list, object_field))
505  {
506  db_object_field_free(object_field);
507  db_object_field_list_free(object_field_list);
508  return DB_ERROR_UNKNOWN;
509  }
510 
511  if (!(object_field = db_object_field_new())
512  || db_object_field_set_name(object_field, "fromKeyDataId")
513  || db_object_field_set_type(object_field, DB_TYPE_ANY)
514  || db_object_field_list_add(object_field_list, object_field))
515  {
516  db_object_field_free(object_field);
517  db_object_field_list_free(object_field_list);
518  return DB_ERROR_UNKNOWN;
519  }
520 
521  if (!(object_field = db_object_field_new())
522  || db_object_field_set_name(object_field, "toKeyDataId")
523  || db_object_field_set_type(object_field, DB_TYPE_ANY)
524  || db_object_field_list_add(object_field_list, object_field))
525  {
526  db_object_field_free(object_field);
527  db_object_field_list_free(object_field_list);
528  return DB_ERROR_UNKNOWN;
529  }
530 
531  if (!(object_field = db_object_field_new())
532  || db_object_field_set_name(object_field, "type")
533  || db_object_field_set_type(object_field, DB_TYPE_ENUM)
534  || db_object_field_set_enum_set(object_field, key_dependency_enum_set_type)
535  || db_object_field_list_add(object_field_list, object_field))
536  {
537  db_object_field_free(object_field);
538  db_object_field_list_free(object_field_list);
539  return DB_ERROR_UNKNOWN;
540  }
541 
542  if (!(value_set = db_value_set_new(4))) {
543  db_object_field_list_free(object_field_list);
544  return DB_ERROR_UNKNOWN;
545  }
546 
547  if (db_value_copy(db_value_set_get(value_set, 0), &(key_dependency->zone_id))
548  || db_value_copy(db_value_set_get(value_set, 1), &(key_dependency->from_key_data_id))
549  || db_value_copy(db_value_set_get(value_set, 2), &(key_dependency->to_key_data_id))
550  || db_value_from_enum_value(db_value_set_get(value_set, 3), key_dependency->type, key_dependency_enum_set_type))
551  {
552  db_value_set_free(value_set);
553  db_object_field_list_free(object_field_list);
554  return DB_ERROR_UNKNOWN;
555  }
556 
557  ret = db_object_create(key_dependency->dbo, object_field_list, value_set);
558  db_value_set_free(value_set);
559  db_object_field_list_free(object_field_list);
560  return ret;
561 }
562 
564  db_clause_list_t* clause_list;
565  db_clause_t* clause;
566  db_result_list_t* result_list;
567  const db_result_t* result;
568 
569  if (!key_dependency) {
570  return DB_ERROR_UNKNOWN;
571  }
572  if (!key_dependency->dbo) {
573  return DB_ERROR_UNKNOWN;
574  }
575  if (!id) {
576  return DB_ERROR_UNKNOWN;
577  }
578  if (db_value_not_empty(id)) {
579  return DB_ERROR_UNKNOWN;
580  }
581 
582  if (!(clause_list = db_clause_list_new())) {
583  return DB_ERROR_UNKNOWN;
584  }
585  if (!(clause = db_clause_new())
586  || db_clause_set_field(clause, "id")
588  || db_value_copy(db_clause_get_value(clause), id)
589  || db_clause_list_add(clause_list, clause))
590  {
591  db_clause_free(clause);
592  db_clause_list_free(clause_list);
593  return DB_ERROR_UNKNOWN;
594  }
595 
596  result_list = db_object_read(key_dependency->dbo, NULL, clause_list);
597  db_clause_list_free(clause_list);
598 
599  if (result_list) {
600  result = db_result_list_next(result_list);
601  if (result) {
602  if (key_dependency_from_result(key_dependency, result)) {
603  db_result_list_free(result_list);
604  return DB_ERROR_UNKNOWN;
605  }
606 
607  db_result_list_free(result_list);
608  return DB_OK;
609  }
610  }
611 
612  db_result_list_free(result_list);
613  return DB_ERROR_UNKNOWN;
614 }
615 
617  db_clause_list_t* clause_list;
618  db_clause_t* clause;
619  int ret;
620 
621  if (!key_dependency) {
622  return DB_ERROR_UNKNOWN;
623  }
624  if (!key_dependency->dbo) {
625  return DB_ERROR_UNKNOWN;
626  }
627  if (db_value_not_empty(&(key_dependency->id))) {
628  return DB_ERROR_UNKNOWN;
629  }
630 
631  if (!(clause_list = db_clause_list_new())) {
632  return DB_ERROR_UNKNOWN;
633  }
634 
635  if (!(clause = db_clause_new())
636  || db_clause_set_field(clause, "id")
638  || db_value_copy(db_clause_get_value(clause), &(key_dependency->id))
639  || db_clause_list_add(clause_list, clause))
640  {
641  db_clause_free(clause);
642  db_clause_list_free(clause_list);
643  return DB_ERROR_UNKNOWN;
644  }
645 
646  if (!(clause = db_clause_new())
647  || db_clause_set_field(clause, "rev")
649  || db_value_copy(db_clause_get_value(clause), &(key_dependency->rev))
650  || db_clause_list_add(clause_list, clause))
651  {
652  db_clause_free(clause);
653  db_clause_list_free(clause_list);
654  return DB_ERROR_UNKNOWN;
655  }
656 
657  ret = db_object_delete(key_dependency->dbo, clause_list);
658  db_clause_list_free(clause_list);
659  return ret;
660 }
661 
662 /* KEY DEPENDENCY LIST */
663 
664 
665 
668  (key_dependency_list_t*)calloc(1, sizeof(key_dependency_list_t));
669 
670  if (key_dependency_list) {
671  if (!(key_dependency_list->dbo = __key_dependency_new_object(connection))) {
672  free(key_dependency_list);
673  return NULL;
674  }
675  }
676 
677  return key_dependency_list;
678 }
679 
682 
683  if (!from_key_dependency_list) {
684  return NULL;
685  }
686  if (!from_key_dependency_list->dbo) {
687  return NULL;
688  }
689 
690  if (!(key_dependency_list = key_dependency_list_new(db_object_connection(from_key_dependency_list->dbo)))
691  || key_dependency_list_copy(key_dependency_list, from_key_dependency_list))
692  {
693  key_dependency_list_free(key_dependency_list);
694  return NULL;
695  }
696  return key_dependency_list;
697 }
698 
700  if (!key_dependency_list) {
701  return DB_ERROR_UNKNOWN;
702  }
703 
704  key_dependency_list->object_store = 1;
705 
706  return DB_OK;
707 }
708 
710  size_t i;
711 
712  if (key_dependency_list) {
713  if (key_dependency_list->dbo) {
714  db_object_free(key_dependency_list->dbo);
715  }
716  if (key_dependency_list->result_list) {
717  db_result_list_free(key_dependency_list->result_list);
718  }
719  if (key_dependency_list->key_dependency) {
720  key_dependency_free(key_dependency_list->key_dependency);
721  }
722  for (i = 0; i < key_dependency_list->object_list_size; i++) {
723  if (key_dependency_list->object_list[i]) {
724  key_dependency_free(key_dependency_list->object_list[i]);
725  }
726  }
727  if (key_dependency_list->object_list) {
728  free(key_dependency_list->object_list);
729  }
730  if (key_dependency_list->zone_id_list) {
731  zone_list_free(key_dependency_list->zone_id_list);
732  }
733  if (key_dependency_list->from_key_data_id_list) {
734  key_data_list_free(key_dependency_list->from_key_data_id_list);
735  }
736  if (key_dependency_list->to_key_data_id_list) {
737  key_data_list_free(key_dependency_list->to_key_data_id_list);
738  }
739  free(key_dependency_list);
740  }
741 }
742 
744  size_t i;
745 
746  if (!key_dependency_list) {
747  return DB_ERROR_UNKNOWN;
748  }
749  if (!from_key_dependency_list) {
750  return DB_ERROR_UNKNOWN;
751  }
752  if (from_key_dependency_list->object_list && !from_key_dependency_list->object_list_size) {
753  return DB_ERROR_UNKNOWN;
754  }
755 
756  if (key_dependency_list->result_list) {
757  db_result_list_free(key_dependency_list->result_list);
758  key_dependency_list->result_list = NULL;
759  }
760  if (from_key_dependency_list->result_list
761  && !(key_dependency_list->result_list = db_result_list_new_copy(from_key_dependency_list->result_list)))
762  {
763  return DB_ERROR_UNKNOWN;
764  }
765 
766  key_dependency_list->object_store = from_key_dependency_list->object_store;
767  for (i = 0; i < key_dependency_list->object_list_size; i++) {
768  if (key_dependency_list->object_list[i]) {
769  key_dependency_free(key_dependency_list->object_list[i]);
770  }
771  }
772  key_dependency_list->object_list_size = 0;
773  if (key_dependency_list->object_list) {
774  free(key_dependency_list->object_list);
775  key_dependency_list->object_list = NULL;
776  }
777  if (from_key_dependency_list->object_list) {
778  if (!(key_dependency_list->object_list = (key_dependency_t**)calloc(from_key_dependency_list->object_list_size, sizeof(key_dependency_t*)))) {
779  return DB_ERROR_UNKNOWN;
780  }
781  key_dependency_list->object_list_size = from_key_dependency_list->object_list_size;
782  for (i = 0; i < from_key_dependency_list->object_list_size; i++) {
783  if (!from_key_dependency_list->object_list[i]) {
784  continue;
785  }
786  if (!(key_dependency_list->object_list[i] = key_dependency_new_copy(from_key_dependency_list->object_list[i]))) {
787  return DB_ERROR_UNKNOWN;
788  }
789  }
790  }
791  key_dependency_list->object_list_position = 0;;
792  key_dependency_list->object_list_first = 1;
793  key_dependency_list->associated_fetch = from_key_dependency_list->associated_fetch;
794 
795  if (from_key_dependency_list->zone_id_list
796  && !(key_dependency_list->zone_id_list = zone_list_new_copy(from_key_dependency_list->zone_id_list)))
797  {
798  return DB_ERROR_UNKNOWN;
799  }
800 
801  if (from_key_dependency_list->from_key_data_id_list
802  && !(key_dependency_list->from_key_data_id_list = key_data_list_new_copy(from_key_dependency_list->from_key_data_id_list)))
803  {
804  return DB_ERROR_UNKNOWN;
805  }
806 
807  if (from_key_dependency_list->to_key_data_id_list
808  && !(key_dependency_list->to_key_data_id_list = key_data_list_new_copy(from_key_dependency_list->to_key_data_id_list)))
809  {
810  return DB_ERROR_UNKNOWN;
811  }
812 
813  return DB_OK;
814 }
815 
816 static int key_dependency_list_get_associated(key_dependency_list_t* key_dependency_list) {
817  const db_clause_t* clause_walk;
818  const zone_t* zone_zone_id;
819  const key_data_t* key_data_from_key_data_id;
820  const key_data_t* key_data_to_key_data_id;
821  int cmp;
822  size_t i;
823  db_clause_list_t* clause_list;
824  db_clause_t* clause;
826 
827  if (!key_dependency_list) {
828  return DB_ERROR_UNKNOWN;
829  }
830  if (!key_dependency_list->dbo) {
831  return DB_ERROR_UNKNOWN;
832  }
833  if (!key_dependency_list->associated_fetch) {
834  return DB_ERROR_UNKNOWN;
835  }
836  if (!key_dependency_list->result_list) {
837  return DB_ERROR_UNKNOWN;
838  }
839  if (key_dependency_list->object_list) {
840  return DB_ERROR_UNKNOWN;
841  }
842 
843  if (key_dependency_list->zone_id_list) {
844  zone_list_free(key_dependency_list->zone_id_list);
845  key_dependency_list->zone_id_list = NULL;
846  }
847  if (key_dependency_list->from_key_data_id_list) {
848  key_data_list_free(key_dependency_list->from_key_data_id_list);
849  key_dependency_list->from_key_data_id_list = NULL;
850  }
851  if (key_dependency_list->to_key_data_id_list) {
852  key_data_list_free(key_dependency_list->to_key_data_id_list);
853  key_dependency_list->to_key_data_id_list = NULL;
854  }
855 
856  if (!(clause_list = db_clause_list_new())) {
857  return DB_ERROR_UNKNOWN;
858  }
859  key_dependency = key_dependency_list_begin(key_dependency_list);
860  while (key_dependency) {
861  cmp = 1;
862  clause_walk = db_clause_list_begin(clause_list);
863  while (clause_walk) {
864  if (db_value_cmp(db_clause_value(clause_walk), key_dependency_zone_id(key_dependency), &cmp)) {
865  db_clause_list_free(clause_list);
866  return DB_ERROR_UNKNOWN;
867  }
868  if (!cmp) {
869  break;
870  }
871  clause_walk = db_clause_next(clause_walk);
872  }
873  if (cmp) {
874  if (!(clause = db_clause_new())
875  || db_clause_set_field(clause, "id")
878  || db_value_copy(db_clause_get_value(clause), key_dependency_zone_id(key_dependency))
879  || db_clause_list_add(clause_list, clause))
880  {
881  db_clause_free(clause);
882  db_clause_list_free(clause_list);
883  return DB_ERROR_UNKNOWN;
884  }
885  }
886 
887  key_dependency = key_dependency_list_next(key_dependency_list);
888  }
889 
890  if (!(key_dependency_list->zone_id_list = zone_list_new(db_object_connection(key_dependency_list->dbo)))
891  || zone_list_object_store(key_dependency_list->zone_id_list)
892  || zone_list_get_by_clauses(key_dependency_list->zone_id_list, clause_list))
893  {
894  if (key_dependency_list->zone_id_list) {
895  zone_list_free(key_dependency_list->zone_id_list);
896  key_dependency_list->zone_id_list = NULL;
897  }
898  db_clause_list_free(clause_list);
899  return DB_ERROR_UNKNOWN;
900  }
901  db_clause_list_free(clause_list);
902 
903  for (i = 0; i < key_dependency_list->object_list_size; i++) {
904  if (!(key_dependency_list->object_list[i])) {
905  return DB_ERROR_UNKNOWN;
906  }
907 
908  zone_zone_id = zone_list_begin(key_dependency_list->zone_id_list);
909  while (zone_zone_id) {
910  if (db_value_cmp(key_dependency_zone_id(key_dependency_list->object_list[i]), zone_id(zone_zone_id), &cmp)) {
911  return DB_ERROR_UNKNOWN;
912  }
913  if (!cmp) {
914  key_dependency_list->object_list[i]->associated_zone_id = zone_zone_id;
915  }
916 
917  zone_zone_id = zone_list_next(key_dependency_list->zone_id_list);
918  }
919  }
920 
921  if (!(clause_list = db_clause_list_new())) {
922  return DB_ERROR_UNKNOWN;
923  }
924  key_dependency = key_dependency_list_begin(key_dependency_list);
925  while (key_dependency) {
926  cmp = 1;
927  clause_walk = db_clause_list_begin(clause_list);
928  while (clause_walk) {
929  if (db_value_cmp(db_clause_value(clause_walk), key_dependency_from_key_data_id(key_dependency), &cmp)) {
930  db_clause_list_free(clause_list);
931  return DB_ERROR_UNKNOWN;
932  }
933  if (!cmp) {
934  break;
935  }
936  clause_walk = db_clause_next(clause_walk);
937  }
938  if (cmp) {
939  if (!(clause = db_clause_new())
940  || db_clause_set_field(clause, "id")
944  || db_clause_list_add(clause_list, clause))
945  {
946  db_clause_free(clause);
947  db_clause_list_free(clause_list);
948  return DB_ERROR_UNKNOWN;
949  }
950  }
951 
952  key_dependency = key_dependency_list_next(key_dependency_list);
953  }
954 
955  if (!(key_dependency_list->from_key_data_id_list = key_data_list_new(db_object_connection(key_dependency_list->dbo)))
956  || key_data_list_object_store(key_dependency_list->from_key_data_id_list)
957  || key_data_list_get_by_clauses(key_dependency_list->from_key_data_id_list, clause_list))
958  {
959  if (key_dependency_list->from_key_data_id_list) {
960  key_data_list_free(key_dependency_list->from_key_data_id_list);
961  key_dependency_list->from_key_data_id_list = NULL;
962  }
963  db_clause_list_free(clause_list);
964  return DB_ERROR_UNKNOWN;
965  }
966  db_clause_list_free(clause_list);
967 
968  for (i = 0; i < key_dependency_list->object_list_size; i++) {
969  if (!(key_dependency_list->object_list[i])) {
970  return DB_ERROR_UNKNOWN;
971  }
972 
973  key_data_from_key_data_id = key_data_list_begin(key_dependency_list->from_key_data_id_list);
974  while (key_data_from_key_data_id) {
975  if (db_value_cmp(key_dependency_from_key_data_id(key_dependency_list->object_list[i]), key_data_id(key_data_from_key_data_id), &cmp)) {
976  return DB_ERROR_UNKNOWN;
977  }
978  if (!cmp) {
979  key_dependency_list->object_list[i]->associated_from_key_data_id = key_data_from_key_data_id;
980  }
981 
982  key_data_from_key_data_id = key_data_list_next(key_dependency_list->from_key_data_id_list);
983  }
984  }
985 
986  if (!(clause_list = db_clause_list_new())) {
987  return DB_ERROR_UNKNOWN;
988  }
989  key_dependency = key_dependency_list_begin(key_dependency_list);
990  while (key_dependency) {
991  cmp = 1;
992  clause_walk = db_clause_list_begin(clause_list);
993  while (clause_walk) {
994  if (db_value_cmp(db_clause_value(clause_walk), key_dependency_to_key_data_id(key_dependency), &cmp)) {
995  db_clause_list_free(clause_list);
996  return DB_ERROR_UNKNOWN;
997  }
998  if (!cmp) {
999  break;
1000  }
1001  clause_walk = db_clause_next(clause_walk);
1002  }
1003  if (cmp) {
1004  if (!(clause = db_clause_new())
1005  || db_clause_set_field(clause, "id")
1009  || db_clause_list_add(clause_list, clause))
1010  {
1011  db_clause_free(clause);
1012  db_clause_list_free(clause_list);
1013  return DB_ERROR_UNKNOWN;
1014  }
1015  }
1016 
1017  key_dependency = key_dependency_list_next(key_dependency_list);
1018  }
1019 
1020  if (!(key_dependency_list->to_key_data_id_list = key_data_list_new(db_object_connection(key_dependency_list->dbo)))
1021  || key_data_list_object_store(key_dependency_list->to_key_data_id_list)
1022  || key_data_list_get_by_clauses(key_dependency_list->to_key_data_id_list, clause_list))
1023  {
1024  if (key_dependency_list->to_key_data_id_list) {
1025  key_data_list_free(key_dependency_list->to_key_data_id_list);
1026  key_dependency_list->to_key_data_id_list = NULL;
1027  }
1028  db_clause_list_free(clause_list);
1029  return DB_ERROR_UNKNOWN;
1030  }
1031  db_clause_list_free(clause_list);
1032 
1033  for (i = 0; i < key_dependency_list->object_list_size; i++) {
1034  if (!(key_dependency_list->object_list[i])) {
1035  return DB_ERROR_UNKNOWN;
1036  }
1037 
1038  key_data_to_key_data_id = key_data_list_begin(key_dependency_list->to_key_data_id_list);
1039  while (key_data_to_key_data_id) {
1040  if (db_value_cmp(key_dependency_to_key_data_id(key_dependency_list->object_list[i]), key_data_id(key_data_to_key_data_id), &cmp)) {
1041  return DB_ERROR_UNKNOWN;
1042  }
1043  if (!cmp) {
1044  key_dependency_list->object_list[i]->associated_to_key_data_id = key_data_to_key_data_id;
1045  }
1046 
1047  key_data_to_key_data_id = key_data_list_next(key_dependency_list->to_key_data_id_list);
1048  }
1049  }
1050 
1051  key_dependency_list->object_list_first = 1;
1052  return DB_OK;
1053 }
1054 
1055 int key_dependency_list_get_by_clauses(key_dependency_list_t* key_dependency_list, const db_clause_list_t* clause_list) {
1056  size_t i;
1057 
1058  if (!key_dependency_list) {
1059  return DB_ERROR_UNKNOWN;
1060  }
1061  if (!clause_list) {
1062  return DB_ERROR_UNKNOWN;
1063  }
1064  if (!key_dependency_list->dbo) {
1065  return DB_ERROR_UNKNOWN;
1066  }
1067 
1068  if (key_dependency_list->result_list) {
1069  db_result_list_free(key_dependency_list->result_list);
1070  }
1071  if (key_dependency_list->object_list_size) {
1072  for (i = 0; i < key_dependency_list->object_list_size; i++) {
1073  if (key_dependency_list->object_list[i]) {
1074  key_dependency_free(key_dependency_list->object_list[i]);
1075  }
1076  }
1077  key_dependency_list->object_list_size = 0;
1078  key_dependency_list->object_list_first = 0;
1079  }
1080  if (key_dependency_list->object_list) {
1081  free(key_dependency_list->object_list);
1082  key_dependency_list->object_list = NULL;
1083  }
1084  if (!(key_dependency_list->result_list = db_object_read(key_dependency_list->dbo, NULL, clause_list))
1085  || db_result_list_fetch_all(key_dependency_list->result_list))
1086  {
1087  return DB_ERROR_UNKNOWN;
1088  }
1089  if (key_dependency_list->associated_fetch
1090  && key_dependency_list_get_associated(key_dependency_list))
1091  {
1092  return DB_ERROR_UNKNOWN;
1093  }
1094  return DB_OK;
1095 }
1096 
1098  db_clause_list_t* clause_list;
1099  db_clause_t* clause;
1100  size_t i;
1101 
1102  if (!key_dependency_list) {
1103  return DB_ERROR_UNKNOWN;
1104  }
1105  if (!key_dependency_list->dbo) {
1106  return DB_ERROR_UNKNOWN;
1107  }
1108  if (!zone_id) {
1109  return DB_ERROR_UNKNOWN;
1110  }
1111  if (db_value_not_empty(zone_id)) {
1112  return DB_ERROR_UNKNOWN;
1113  }
1114 
1115  if (!(clause_list = db_clause_list_new())) {
1116  return DB_ERROR_UNKNOWN;
1117  }
1118  if (!(clause = db_clause_new())
1119  || db_clause_set_field(clause, "zoneId")
1121  || db_value_copy(db_clause_get_value(clause), zone_id)
1122  || db_clause_list_add(clause_list, clause))
1123  {
1124  db_clause_free(clause);
1125  db_clause_list_free(clause_list);
1126  return DB_ERROR_UNKNOWN;
1127  }
1128 
1129  if (key_dependency_list->result_list) {
1130  db_result_list_free(key_dependency_list->result_list);
1131  }
1132  if (key_dependency_list->object_list_size) {
1133  for (i = 0; i < key_dependency_list->object_list_size; i++) {
1134  if (key_dependency_list->object_list[i]) {
1135  key_dependency_free(key_dependency_list->object_list[i]);
1136  }
1137  }
1138  key_dependency_list->object_list_size = 0;
1139  key_dependency_list->object_list_first = 0;
1140  }
1141  if (key_dependency_list->object_list) {
1142  free(key_dependency_list->object_list);
1143  key_dependency_list->object_list = NULL;
1144  }
1145  if (!(key_dependency_list->result_list = db_object_read(key_dependency_list->dbo, NULL, clause_list))
1146  || db_result_list_fetch_all(key_dependency_list->result_list))
1147  {
1148  db_clause_list_free(clause_list);
1149  return DB_ERROR_UNKNOWN;
1150  }
1151  db_clause_list_free(clause_list);
1152  if (key_dependency_list->associated_fetch
1153  && key_dependency_list_get_associated(key_dependency_list))
1154  {
1155  return DB_ERROR_UNKNOWN;
1156  }
1157  return DB_OK;
1158 }
1159 
1161  key_dependency_list_t* key_dependency_list;
1162 
1163  if (!connection) {
1164  return NULL;
1165  }
1166  if (!zone_id) {
1167  return NULL;
1168  }
1169  if (db_value_not_empty(zone_id)) {
1170  return NULL;
1171  }
1172 
1173  if (!(key_dependency_list = key_dependency_list_new(connection))
1174  || key_dependency_list_get_by_zone_id(key_dependency_list, zone_id))
1175  {
1176  key_dependency_list_free(key_dependency_list);
1177  return NULL;
1178  }
1179 
1180  return key_dependency_list;
1181 }
1182 
1184  const db_result_t* result;
1185 
1186  if (!key_dependency_list) {
1187  return NULL;
1188  }
1189 
1190  if (key_dependency_list->object_store) {
1191  if (!key_dependency_list->object_list) {
1192  if (!key_dependency_list->result_list) {
1193  return NULL;
1194  }
1195  if (!db_result_list_size(key_dependency_list->result_list)) {
1196  return NULL;
1197  }
1198  if (!(key_dependency_list->object_list = (key_dependency_t**)calloc(db_result_list_size(key_dependency_list->result_list), sizeof(key_dependency_t*)))) {
1199  return NULL;
1200  }
1201  key_dependency_list->object_list_size = db_result_list_size(key_dependency_list->result_list);
1202  }
1203  if (!(key_dependency_list->object_list[0])) {
1204  if (!key_dependency_list->result_list) {
1205  return NULL;
1206  }
1207  if (!(result = db_result_list_begin(key_dependency_list->result_list))) {
1208  return NULL;
1209  }
1210  if (!(key_dependency_list->object_list[0] = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1211  return NULL;
1212  }
1213  if (key_dependency_from_result(key_dependency_list->object_list[0], result)) {
1214  return NULL;
1215  }
1216  }
1217  key_dependency_list->object_list_position = 0;
1218  return key_dependency_list->object_list[0];
1219  }
1220 
1221  if (!key_dependency_list->result_list) {
1222  return NULL;
1223  }
1224 
1225  if (!(result = db_result_list_begin(key_dependency_list->result_list))) {
1226  return NULL;
1227  }
1228  if (!key_dependency_list->key_dependency) {
1229  if (!(key_dependency_list->key_dependency = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1230  return NULL;
1231  }
1232  }
1233  if (key_dependency_from_result(key_dependency_list->key_dependency, result)) {
1234  return NULL;
1235  }
1236  return key_dependency_list->key_dependency;
1237 }
1238 
1240  const db_result_t* result;
1242 
1243  if (!key_dependency_list) {
1244  return NULL;
1245  }
1246 
1247  if (key_dependency_list->object_store) {
1248  if (!(key_dependency = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1249  return NULL;
1250  }
1251  if (key_dependency_copy(key_dependency, key_dependency_list_begin(key_dependency_list))) {
1252  key_dependency_free(key_dependency);
1253  return NULL;
1254  }
1255  return key_dependency;
1256  }
1257 
1258  if (!key_dependency_list->result_list) {
1259  return NULL;
1260  }
1261 
1262  if (!(result = db_result_list_begin(key_dependency_list->result_list))) {
1263  return NULL;
1264  }
1265  if (!(key_dependency = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1266  return NULL;
1267  }
1268  if (key_dependency_from_result(key_dependency, result)) {
1269  key_dependency_free(key_dependency);
1270  return NULL;
1271  }
1272  return key_dependency;
1273 }
1274 
1276  const db_result_t* result;
1277 
1278  if (!key_dependency_list) {
1279  return NULL;
1280  }
1281 
1282  if (key_dependency_list->object_store) {
1283  if (!key_dependency_list->object_list) {
1284  if (!key_dependency_list->result_list) {
1285  return NULL;
1286  }
1287  if (!db_result_list_size(key_dependency_list->result_list)) {
1288  return NULL;
1289  }
1290  if (!(key_dependency_list->object_list = (key_dependency_t**)calloc(db_result_list_size(key_dependency_list->result_list), sizeof(key_dependency_t*)))) {
1291  return NULL;
1292  }
1293  key_dependency_list->object_list_size = db_result_list_size(key_dependency_list->result_list);
1294  key_dependency_list->object_list_position = 0;
1295  }
1296  else if (key_dependency_list->object_list_first) {
1297  key_dependency_list->object_list_first = 0;
1298  key_dependency_list->object_list_position = 0;
1299  }
1300  else {
1301  key_dependency_list->object_list_position++;
1302  }
1303  if (key_dependency_list->object_list_position >= key_dependency_list->object_list_size) {
1304  return NULL;
1305  }
1306  if (!(key_dependency_list->object_list[key_dependency_list->object_list_position])) {
1307  if (!key_dependency_list->result_list) {
1308  return NULL;
1309  }
1310  if (!(result = db_result_list_next(key_dependency_list->result_list))) {
1311  return NULL;
1312  }
1313  if (!(key_dependency_list->object_list[key_dependency_list->object_list_position] = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1314  return NULL;
1315  }
1316  if (key_dependency_from_result(key_dependency_list->object_list[key_dependency_list->object_list_position], result)) {
1317  return NULL;
1318  }
1319  }
1320  return key_dependency_list->object_list[key_dependency_list->object_list_position];
1321  }
1322 
1323  if (!key_dependency_list->result_list) {
1324  return NULL;
1325  }
1326 
1327  if (!(result = db_result_list_next(key_dependency_list->result_list))) {
1328  return NULL;
1329  }
1330  if (!key_dependency_list->key_dependency) {
1331  if (!(key_dependency_list->key_dependency = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1332  return NULL;
1333  }
1334  }
1335  if (key_dependency_from_result(key_dependency_list->key_dependency, result)) {
1336  return NULL;
1337  }
1338  return key_dependency_list->key_dependency;
1339 }
1340 
1342  const db_result_t* result;
1344 
1345  if (!key_dependency_list) {
1346  return NULL;
1347  }
1348 
1349  if (key_dependency_list->object_store) {
1350  if (!(key_dependency = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1351  return NULL;
1352  }
1353  if (key_dependency_copy(key_dependency, key_dependency_list_next(key_dependency_list))) {
1354  key_dependency_free(key_dependency);
1355  return NULL;
1356  }
1357  return key_dependency;
1358  }
1359 
1360  if (!key_dependency_list->result_list) {
1361  return NULL;
1362  }
1363 
1364  if (!(result = db_result_list_next(key_dependency_list->result_list))) {
1365  return NULL;
1366  }
1367  if (!(key_dependency = key_dependency_new(db_object_connection(key_dependency_list->dbo)))) {
1368  return NULL;
1369  }
1370  if (key_dependency_from_result(key_dependency, result)) {
1371  key_dependency_free(key_dependency);
1372  return NULL;
1373  }
1374  return key_dependency;
1375 }
1376 
1377 size_t key_dependency_list_size(key_dependency_list_t* key_dependency_list) {
1378  if (!key_dependency_list) {
1379  return 0;
1380  }
1381 
1382  if (key_dependency_list->object_store
1383  && key_dependency_list->object_list)
1384  {
1385  return key_dependency_list->object_list_size;
1386  }
1387 
1388  if (!key_dependency_list->result_list) {
1389  return 0;
1390  }
1391 
1392  return db_result_list_size(key_dependency_list->result_list);
1393 }
key_dependency_t ** object_list
int key_dependency_from_result(key_dependency_t *key_dependency, const db_result_t *result)
int db_object_set_object_field_list(db_object_t *object, db_object_field_list_t *object_field_list)
Definition: db_object.c:386
int key_data_get_by_id(key_data_t *key_data, const db_value_t *id)
Definition: key_data.c:1296
int key_dependency_delete(key_dependency_t *key_dependency)
int db_value_from_enum_value(db_value_t *value, int enum_value, const db_enum_t *enum_set)
Definition: db_value.c:572
int db_object_set_primary_key_name(db_object_t *object, const char *primary_key_name)
Definition: db_object.c:371
db_object_field_list_t * db_object_field_list_new(void)
Definition: db_object.c:174
int db_object_field_set_name(db_object_field_t *object_field, const char *name)
Definition: db_object.c:110
const zone_t * zone_list_next(zone_list_t *zone_list)
Definition: zone.c:2600
const db_value_t * db_value_set_at(const db_value_set_t *value_set, size_t at)
Definition: db_value.c:742
void db_value_set_free(db_value_set_t *value_set)
Definition: db_value.c:697
key_dependency_type_t type
#define DB_ERROR_UNKNOWN
Definition: db_error.h:40
int db_value_copy(db_value_t *value, const db_value_t *from_value)
Definition: db_value.c:77
db_clause_list_t * db_clause_list_new(void)
Definition: db_clause.c:202
int key_data_list_get_by_clauses(key_data_list_t *key_data_list, const db_clause_list_t *clause_list)
Definition: key_data.c:2119
const key_data_t * associated_from_key_data_id
db_clause_t * db_clause_new(void)
Definition: db_clause.c:43
key_dependency_t * key_dependency_new_copy(const key_dependency_t *key_dependency)
int db_object_field_set_type(db_object_field_t *object_field, db_type_t type)
Definition: db_object.c:122
void zone_list_free(zone_list_t *zone_list)
Definition: zone.c:1989
key_data_list_t * to_key_data_id_list
const db_value_t * key_data_id(const key_data_t *key_data)
Definition: key_data.c:553
int key_dependency_list_object_store(key_dependency_list_t *key_dependency_list)
int db_clause_set_type(db_clause_t *clause, db_clause_type_t type)
Definition: db_clause.c:130
int zone_list_object_store(zone_list_t *zone_list)
Definition: zone.c:1979
zone_list_t * zone_list_new_copy(const zone_list_t *from_zone_list)
Definition: zone.c:1960
int db_object_set_connection(db_object_t *object, const db_connection_t *connection)
Definition: db_object.c:341
int db_value_not_empty(const db_value_t *value)
Definition: db_value.c:347
int key_dependency_set_zone_id(key_dependency_t *key_dependency, const db_value_t *zone_id)
const db_connection_t * db_object_connection(const db_object_t *object)
Definition: db_object.c:320
key_data_list_t * key_data_list_new_copy(const key_data_list_t *from_key_data_list)
Definition: key_data.c:1665
key_data_t * private_from_key_data_id
db_value_t zone_id
const db_clause_t * db_clause_list_begin(const db_clause_list_t *clause_list)
Definition: db_clause.c:255
int db_clause_set_field(db_clause_t *clause, const char *field)
Definition: db_clause.c:109
void zone_free(zone_t *zone)
Definition: zone.c:325
void db_clause_list_free(db_clause_list_t *clause_list)
Definition: db_clause.c:209
db_result_list_t * db_result_list_new_copy(const db_result_list_t *from_result_list)
Definition: db_result.c:142
size_t db_value_set_size(const db_value_set_t *value_set)
Definition: db_value.c:734
const db_value_t * key_dependency_to_key_data_id(const key_dependency_t *key_dependency)
db_value_t id
const db_clause_t * db_clause_next(const db_clause_t *clause)
Definition: db_clause.c:179
db_value_t to_key_data_id
int key_dependency_set_type(key_dependency_t *key_dependency, key_dependency_type_t type)
key_dependency_t * key_dependency_new(const db_connection_t *connection)
int db_clause_list_add(db_clause_list_t *clause_list, db_clause_t *clause)
Definition: db_clause.c:226
int db_value_cmp(const db_value_t *value_a, const db_value_t *value_b, int *result)
Definition: db_value.c:102
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
void db_object_free(db_object_t *object)
Definition: db_object.c:311
void key_dependency_list_free(key_dependency_list_t *key_dependency_list)
void db_result_list_free(db_result_list_t *result_list)
Definition: db_result.c:160
int key_dependency_list_copy(key_dependency_list_t *key_dependency_list, const key_dependency_list_t *from_key_dependency_list)
zone_list_t * zone_list_new(const db_connection_t *connection)
Definition: zone.c:1946
const key_dependency_t * key_dependency_list_next(key_dependency_list_t *key_dependency_list)
db_value_t rev
int key_dependency_list_get_by_clauses(key_dependency_list_t *key_dependency_list, const db_clause_list_t *clause_list)
int db_clause_set_operator(db_clause_t *clause, db_clause_operator_t clause_operator)
Definition: db_clause.c:142
void db_value_reset(db_value_t *value)
Definition: db_value.c:60
db_object_field_t * db_object_field_new(void)
Definition: db_object.c:40
key_data_t * key_data_new(const db_connection_t *connection)
Definition: key_data.c:264
const key_data_t * key_data_list_begin(key_data_list_t *key_data_list)
Definition: key_data.c:2267
void key_dependency_free(key_dependency_t *key_dependency)
db_result_list_t * result_list
int db_object_delete(const db_object_t *object, const db_clause_list_t *clause_list)
Definition: db_object.c:464
const db_value_t * key_dependency_from_key_data_id(const key_dependency_t *key_dependency)
const key_data_t * key_data_list_next(key_data_list_t *key_data_list)
Definition: key_data.c:2359
size_t db_result_list_size(const db_result_list_t *result_list)
Definition: db_result.c:333
int key_dependency_set_from_key_data_id(key_dependency_t *key_dependency, const db_value_t *from_key_data_id)
void db_object_field_free(db_object_field_t *object_field)
Definition: db_object.c:69
key_data_list_t * key_data_list_new(const db_connection_t *connection)
Definition: key_data.c:1651
zone_t * zone_new_copy(const zone_t *zone)
Definition: zone.c:306
int zone_list_get_by_clauses(zone_list_t *zone_list, const db_clause_list_t *clause_list)
Definition: zone.c:2416
key_dependency_type_t key_dependency_type(const key_dependency_t *key_dependency)
const zone_t * zone_list_begin(zone_list_t *zone_list)
Definition: zone.c:2544
void db_clause_free(db_clause_t *clause)
Definition: db_clause.c:56
db_value_set_t * db_value_set_new(size_t size)
Definition: db_value.c:622
size_t key_dependency_list_size(key_dependency_list_t *key_dependency_list)
const db_result_t * db_result_list_next(db_result_list_t *result_list)
Definition: db_result.c:310
key_dependency_t * key_dependency_list_get_next(key_dependency_list_t *key_dependency_list)
int db_object_field_set_enum_set(db_object_field_t *object_field, const db_enum_t *enum_set)
Definition: db_object.c:134
int key_dependency_create(key_dependency_t *key_dependency)
int db_object_create(const db_object_t *object, const db_object_field_list_t *object_field_list, const db_value_set_t *value_set)
Definition: db_object.c:401
key_dependency_t * key_dependency
void db_object_field_list_free(db_object_field_list_t *object_field_list)
Definition: db_object.c:199
void key_data_list_free(key_data_list_t *key_data_list)
Definition: key_data.c:1694
key_dependency_t * key_dependency_list_get_begin(key_dependency_list_t *key_dependency_list)
int key_data_copy(key_data_t *key_data, const key_data_t *key_data_copy)
Definition: key_data.c:326
const zone_t * associated_zone_id
void key_data_free(key_data_t *key_data)
Definition: key_data.c:304
db_object_t * db_object_new(void)
Definition: db_object.c:304
const key_dependency_t * key_dependency_list_begin(key_dependency_list_t *key_dependency_list)
const db_value_t * zone_id(const zone_t *zone)
Definition: zone.c:728
#define DB_OK
Definition: db_error.h:36
zone_t * private_zone_id
db_object_t * dbo
const key_data_t * associated_to_key_data_id
key_data_t * key_data_new_copy(const key_data_t *key_data)
Definition: key_data.c:285
key_data_t * private_to_key_data_id
const db_value_set_t * db_result_value_set(const db_result_t *result)
Definition: db_result.c:97
Definition: zone.h:46
int db_object_set_table(db_object_t *object, const char *table)
Definition: db_object.c:356
const db_enum_t key_dependency_enum_set_type[]
int db_result_list_fetch_all(db_result_list_t *result_list)
Definition: db_result.c:341
int key_dependency_list_get_by_zone_id(key_dependency_list_t *key_dependency_list, const db_value_t *zone_id)
const db_result_t * db_result_list_begin(db_result_list_t *result_list)
Definition: db_result.c:290
int db_value_to_enum_value(const db_value_t *value, int *to_int, const db_enum_t *enum_set)
Definition: db_value.c:438
const db_value_t * db_clause_value(const db_clause_t *clause)
Definition: db_clause.c:85
key_dependency_list_t * key_dependency_list_new_copy(const key_dependency_list_t *from_key_dependency_list)
int key_data_list_object_store(key_data_list_t *key_data_list)
Definition: key_data.c:1684
int key_dependency_set_to_key_data_id(key_dependency_t *key_dependency, const db_value_t *to_key_data_id)
key_dependency_list_t * key_dependency_list_new(const db_connection_t *connection)
enum key_dependency_type key_dependency_type_t
zone_list_t * zone_id_list
int key_dependency_copy(key_dependency_t *key_dependency, const key_dependency_t *key_dependency_copy)
const db_value_t * key_dependency_zone_id(const key_dependency_t *key_dependency)
key_data_t * key_dependency_get_from_key_data(const key_dependency_t *key_dependency)
db_value_t from_key_data_id
int key_dependency_get_by_id(key_dependency_t *key_dependency, const db_value_t *id)
key_data_list_t * from_key_data_id_list
db_value_t * db_clause_get_value(db_clause_t *clause)
Definition: db_clause.c:187
key_dependency_list_t * key_dependency_list_new_get_by_zone_id(const db_connection_t *connection, const db_value_t *zone_id)
db_value_t * db_value_set_get(db_value_set_t *value_set, size_t at)
Definition: db_value.c:756
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