gnunet_db_lib.h (2936B)
1 /* 2 This file is part of GNUnet 3 Copyright (C) 2017 GNUnet e.V. 4 5 GNUnet is free software: you can redistribute it and/or modify it 6 under the terms of the GNU Affero General Public License as published 7 by the Free Software Foundation, either version 3 of the License, 8 or (at your option) any later version. 9 10 GNUnet is distributed in the hope that it will be useful, but 11 WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Affero General Public License for more details. 14 15 You should have received a copy of the GNU Affero General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 SPDX-License-Identifier: AGPL3.0-or-later 19 */ 20 /** 21 * @file include/gnunet_db_lib.h 22 * @brief shared definitions for transactional databases 23 * @author Christian Grothoff 24 */ 25 #ifndef GNUNET_DB_LIB_H 26 #define GNUNET_DB_LIB_H 27 28 29 #include "gnunet_common.h" 30 31 /** 32 * Status code returned from functions running database commands. 33 * Can be combined with a function that returns the number 34 * of results, so all non-negative values indicate success. 35 */ 36 enum GNUNET_DB_QueryStatus 37 { 38 /** 39 * A hard error occurred, retrying will not help. 40 */ 41 GNUNET_DB_STATUS_HARD_ERROR = -2, 42 43 /** 44 * A soft error occurred, retrying the transaction may succeed. 45 * Includes DEADLOCKS and SERIALIZATION errors. 46 */ 47 GNUNET_DB_STATUS_SOFT_ERROR = -1, 48 49 /** 50 * The transaction succeeded, but yielded zero results. 51 * May include the case where an INSERT failed with UNIQUE 52 * violation (i.e. row already exists) or where DELETE 53 * failed to remove anything (i.e. nothing matched). 54 */ 55 GNUNET_DB_STATUS_SUCCESS_NO_RESULTS = 0, 56 57 /** 58 * The transaction succeeded, and yielded one result. 59 */ 60 GNUNET_DB_STATUS_SUCCESS_ONE_RESULT = 1 61 62 /* Larger values may be returned for SELECT statements 63 that returned more than one result. */ 64 }; 65 66 67 /** 68 * Handle for an active LISTENer to a database. 69 */ 70 struct GNUNET_DB_EventHandler; 71 72 /** 73 * Function called on events received from Postgres. 74 * 75 * @param cls closure 76 * @param extra additional event data provided 77 * @param extra_size number of bytes in @a extra 78 */ 79 typedef void 80 (*GNUNET_DB_EventCallback)(void *cls, 81 const void *extra, 82 size_t extra_size); 83 84 GNUNET_NETWORK_STRUCT_BEGIN 85 86 87 /** 88 * Header of a structure that describes an 89 * event channel we may subscribe to or notify on. 90 */ 91 struct GNUNET_DB_EventHeaderP 92 { 93 /** 94 * The length of the struct (in bytes, including the length field itself), 95 * in big-endian format. 96 */ 97 uint16_t size GNUNET_PACKED; 98 99 /** 100 * The type of the message (GNUNET_DB_EVENT_TYPE_XXXX), in big-endian format. 101 */ 102 uint16_t type GNUNET_PACKED; 103 104 }; 105 106 GNUNET_NETWORK_STRUCT_END 107 108 109 #endif