File: pg_fld.h

package info (click to toggle)
kamailio 4.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 56,100 kB
  • sloc: ansic: 552,832; xml: 166,484; sh: 8,659; makefile: 7,676; sql: 6,235; perl: 3,487; yacc: 3,428; python: 1,457; cpp: 1,219; php: 1,047; java: 449; pascal: 194; cs: 40; awk: 27
file content (146 lines) | stat: -rw-r--r-- 5,704 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* 
 * Portions Copyright (C) 2001-2003 FhG FOKUS
 * Copyright (C) 2003 August.Net Services, LLC
 * Portions Copyright (C) 2005-2008 iptelorg GmbH
 *
 * This file is part of SER, a free SIP server.
 *
 * SER is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version
 *
 * For a license to use the ser software under conditions other than those
 * described here, or to purchase support for this software, please contact
 * iptel.org by e-mail at the following addresses: info@iptel.org
 *
 * SER is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc., 59
 * Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

#ifndef _PG_FLD_H
#define _PG_FLD_H


/*!
 * \file
 * \brief DB_POSTGRES :: Implementation of pg_fld data structure
 * 
 * Implementation of pg_fld data structure representing PostgreSQL fields and related functions.
 * \ingroup db_postgres
 * Module: \ref db_postgres
 */

#include "pg_oid.h"
#include "pg_cmd.h"
#include "../../ut.h"
#include "../../lib/srdb2/db_gen.h"
#include "../../lib/srdb2/db_fld.h"
#include <libpq-fe.h>

struct pg_fld {
	db_drv_t gen;

	char* name;
	/**
	 * A union of varius data types from db_fld, postgres expects binary
	 * data in network byte order so we use these variables as temporary
	 * buffer to store values after the conversion.
	 */
	union {
		int          int4[2]; /**< Integer value in network byte order */
		short        int2[4];
		float        flt;     /**< Float value in network byte order */
		double       dbl;     /**< Double value in network byte order */
		time_t       time;    /**< Unix timestamp in network byte order */
		unsigned int bitmap;  /**< Bitmap value in network byte order */ 
		long long    int8;    /**< 8-byte integer value in network byte order */
		char         byte[8];
	} v;
	char buf[INT2STR_MAX_LEN]; /**< Buffer for int2str conversions */
	Oid oid;                   /**< Type of the field on the server */
};


/** Creates a new PostgreSQL specific payload.
 * This function creates a new PostgreSQL specific payload structure and
 * attaches the structure to the generic db_fld structure.
 * @param fld A generic db_fld structure to be exended.
 * @param table Name of the table on the server.
 * @return 0 on success, negative number on error.
 */
int pg_fld(db_fld_t* fld, char* table);

int pg_resolve_param_oids(db_fld_t* vals, db_fld_t* match, 
						  int n1, int n2, PGresult* res);

int pg_resolve_result_oids(db_fld_t* fld, int n, PGresult* res);


/** Converts arrays of db_fld fields to PostgreSQL parameters.
 * The function converts fields in SER db_fld format to parameters suitable
 * for PostgreSQL API functions.
 * @param dst An array of pointers to values in PostgreSQL format. The
 *               function will store pointers to converted values there.
 * @param off offset 
 * @param types A type conversion table.
 * @param src An array of db_fld fields to be converted.
 * @param flags Connection flags controlling how values are converted.
 * @todo Implement support for bit fields with size bigger than 32 
 * @todo Implement support for varbit properly to remove leading zeroes
 * @todo Check if timezones are handled properly
 * @todo Support for DB_NONE in pg_pg2fld and pg_check_pg2fld
 * @todo local->UTC conversion (also check the SQL command in ser-oob)
 */
int pg_fld2pg(struct pg_params* dst, int off, pg_type_t* types, 
			  db_fld_t* src, unsigned int flags);


/** Converts fields from result in PGresult format into SER format.
 * The function converts fields from PostgreSQL result (PGresult structure)
 * into the internal format used in SER. The function converts one row at a
 * time.
 * @param dst The destination array of db_fld fields to be filled with converted
 *            values.
 * @param src A PostgreSQL result structure to be converted into SER format.
 * @param row Number of the row to be converted.
 * @param types A type conversion table.
 * @param flags Connection flags controlling how values are converted.
 * @retval 0 on success
 * @retval A negative number on error.
 * @todo UTC->local conversion
 */
int pg_pg2fld(db_fld_t* dst, PGresult* src, int row, pg_type_t* types, 
			  unsigned int flags);


/** Checks if all db_fld fields have types compatible with corresponding field 
 * types on the server.
 * The functions checks whether all db_fld fields in the last parameter are
 * compatible with column types on the server, for conversion to postgres format.
 * @param fld An array of db_fld fields to be checked.
 * @param types An array used to map internal field types to Oids.
 * @retval 0 on success
 * @retval A negative number on error.
 */
int pg_check_fld2pg(db_fld_t* fld, pg_type_t* types);

/** Checks if all db_fld fields have types compatible with corresponding field 
 * types on the server.
 * The functions checks whether all db_fld fields in the last parameter are
 * compatible with column types on the server, for conversion to interal DB format.
 * @param fld An array of db_fld fields to be checked.
 * @param types An array used to map internal field types to Oids.
 * @retval 0 on success
 * @retval A negative number on error.
 */
int pg_check_pg2fld(db_fld_t* fld, pg_type_t* types);


#endif /* _PG_FLD_H */