annotate main/database/src/command.cc @ 11422:b1f26b72b61a octave-forge

Large object import/export also from/to pipes.
author i7tiol
date Tue, 29 Jan 2013 18:20:21 +0000
parents 6c22f62f2b64
children d14a23884d9c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
1 /*
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
2
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
3 Copyright (C) 2012, 2013 Olaf Till <i7tiol@t-online.de>
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
4
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
5 This program is free software; you can redistribute it and/or modify
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
7 the Free Software Foundation; either version 3 of the License, or
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
8 (at your option) any later version.
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
9
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
13 GNU General Public License for more details.
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
14
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
16 along with this program; If not, see <http://www.gnu.org/licenses/>.
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
17
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
18 */
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
19
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
20 #include <octave/oct.h>
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
21 #include <octave/ov-struct.h>
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
22 #include <octave/Cell.h>
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
23 #include <octave/lo-ieee.h>
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
24
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
25 #include <iostream>
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
26 #include <fstream>
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
27
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
28 #include "command.h"
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
29
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
30 #define ERROR_RETURN_NO_PG_TYPE \
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
31 { \
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
32 error ("could not determine postgresql type for Octave parameter"); \
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
33 return NULL; \
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
34 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
35
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
36 command::command (octave_pq_connection &connection, std::string &cmd,
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
37 Cell &rtypes,std::string &who) :
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
38 valid (1), conn (connection), caller (who), res (NULL), all_fetched (0),
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
39 rettypes (rtypes)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
40 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
41 if (! (cptr = conn.octave_pq_get_conn ()))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
42 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
43 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
44 error ("%s: connection not open", caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
45 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
46
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
47 if (! PQsendQuery (cptr, cmd.c_str ()))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
48 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
49 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
50 error ("%s: could not dispatch command: %s", caller.c_str (),
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
51 PQerrorMessage (cptr));
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
52 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
53 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
54 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
55 res = PQgetResult (cptr);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
56 check_first_result ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
57 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
58 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
59
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
60 command::command (octave_pq_connection &connection, std::string &cmd,
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
61 Cell &params, Cell &ptypes, Cell &rtypes, std::string &who)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
62 : valid (1), conn (connection), caller (who), res (NULL), all_fetched (1),
11407
f4098c7d5b35 Wrong implementation of copy-in from argument.
i7tiol
parents: 11398
diff changeset
63 rettypes (rtypes)
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
64 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
65 if (! (cptr = conn.octave_pq_get_conn ()))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
66 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
67 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
68 error ("%s: connection not open", caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
69 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
70
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
71 int npars = params.length ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
72
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
73 char *vals [npars];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
74 std::vector<oct_pq_dynvec_t> valsvec;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
75 valsvec.resize (npars);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
76 int pl [npars];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
77 int pf [npars];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
78 Oid oids [npars];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
79
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
80 for (int i = 0; i < npars; i++)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
81 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
82 pf[i] = 1; // means binary format
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
83
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
84 if (params(i).is_real_scalar () && params(i).isna ().bool_value ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
85 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
86 vals[i] = NULL;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
87
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
88 oids[i] = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
89 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
90 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
91 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
92 oct_type_t oct_type;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
93 oct_pq_conv_t *conv;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
94 oct_pq_from_octave_fp_t conv_fcn;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
95
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
96 if (ptypes(i).is_empty ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
97 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
98 oct_type = simple;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
99
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
100 if (! (conv = pgtype_from_octtype (params(i))))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
101 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
102 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
103 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
104 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
105
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
106 // array not possible here
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
107 oids[i] = conv->oid;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
108 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
109 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
110 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
111 std::string s = ptypes(i).string_value ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
112 if (error_state)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
113 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
114 error ("%s: parameter type specification no string",
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
115 caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
116 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
117 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
118 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
119
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
120 if (! (conv = pgtype_from_spec (s, oct_type)))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
121 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
122 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
123 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
124 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
125
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
126 if (oct_type == array)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
127 oids[i] = conv->aoid;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
128 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
129 oids[i] = conv->oid;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
130 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
131
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
132 switch (oct_type)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
133 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
134 case simple:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
135 conv_fcn = conv->from_octave_bin;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
136 if (conv_fcn (params(i), valsvec[i]))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
137 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
138 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
139
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
140 case array:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
141 if (from_octave_bin_array (params(i), valsvec[i], conv))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
142 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
143 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
144
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
145 case composite:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
146 if (from_octave_bin_composite (params(i), valsvec[i], conv))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
147 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
148 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
149
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
150 default:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
151 // should not get here
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
152 error ("%s: internal error, undefined type identifier",
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
153 caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
154
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
155 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
156 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
157
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
158 if (! valid) break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
159
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
160 vals[i] = &(valsvec[i].front ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
161 pl[i] = valsvec[i].size ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
162 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
163 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
164
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
165 if (valid)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
166 {
11422
b1f26b72b61a Large object import/export also from/to pipes.
i7tiol
parents: 11408
diff changeset
167 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
b1f26b72b61a Large object import/export also from/to pipes.
i7tiol
parents: 11408
diff changeset
168
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
169 res = PQexecParams (cptr, cmd.c_str (), npars, oids, vals, pl, pf, 1);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
170
11422
b1f26b72b61a Large object import/export also from/to pipes.
i7tiol
parents: 11408
diff changeset
171 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
b1f26b72b61a Large object import/export also from/to pipes.
i7tiol
parents: 11408
diff changeset
172
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
173 check_first_result ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
174 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
175 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
176
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
177 oct_pq_conv_t *command::pgtype_from_spec (std::string &name,
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
178 oct_type_t &oct_type)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
179 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
180 oct_pq_conv_t *conv = NULL;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
181
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
182 // printf ("pgtype_from_spec(%s): simple ", name.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
183
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
184 oct_type = simple; // default
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
185 int l;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
186 while (name.size () >= 2 && ! name.compare (l = name.size () - 2, 2, "[]"))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
187 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
188 name.erase (l, 2);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
189 oct_type = array;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
190
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
191 // printf ("array ");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
192 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
193
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
194 oct_pq_name_conv_map_t::iterator iter;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
195
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
196 if ((iter = conn.name_conv_map.find (name.c_str ())) ==
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
197 conn.name_conv_map.end ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
198 error ("%s: no converter found for type %s", caller.c_str (),
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
199 name.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
200 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
201 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
202 // printf ("(looked up in name map) ");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
203
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
204 conv = iter->second;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
205
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
206 if (oct_type == array && ! conv->aoid)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
207 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
208 error ("%s: internal error, type %s, specified as array, has no array type in system catalog", name.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
209 return conv;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
210 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
211
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
212 if (! (oct_type == array) && conv->is_composite)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
213 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
214 oct_type = composite;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
215
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
216 // printf ("composite ");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
217 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
218 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
219
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
220 // printf ("\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
221
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
222 return conv;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
223 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
224
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
225 oct_pq_conv_t *command::pgtype_from_spec (Oid oid, oct_type_t &oct_type)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
226 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
227 // printf ("pgtype_from_spec(%u): ", oid);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
228
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
229 oct_pq_conv_t *conv = NULL;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
230
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
231 oct_pq_conv_map_t::iterator iter;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
232
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
233 if ((iter = conn.conv_map.find (oid)) == conn.conv_map.end ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
234 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
235 error ("%s: no converter found for element oid %u",
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
236 caller.c_str (), oid);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
237 return conv;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
238 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
239 conv = iter->second;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
240 // printf ("(looked up %s in oid map) ", conv->name.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
241
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
242 if (conv->aoid == oid)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
243 oct_type = array;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
244 else if (conv->is_composite)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
245 oct_type = composite;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
246 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
247 oct_type = simple;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
248
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
249 // printf ("oct_type: %i\n", oct_type);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
250
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
251 return conv;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
252 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
253
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
254 octave_value command::process_single_result (const std::string &infile,
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
255 const std::string &outfile)
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
256 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
257 octave_value retval;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
258
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
259 // first result is already fetched
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
260 if (! res && (res = PQgetResult (cptr)))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
261 state = PQresultStatus (res);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
262
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
263 if (! res)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
264 all_fetched = 1;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
265 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
266 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
267 switch (state)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
268 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
269 case PGRES_BAD_RESPONSE:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
270 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
271 error ("%s: server response not understood", caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
272 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
273 case PGRES_FATAL_ERROR:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
274 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
275 error ("%s: fatal error: %s", caller.c_str (),
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
276 PQresultErrorMessage (res));
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
277 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
278 case PGRES_COMMAND_OK:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
279 retval = command_ok_handler ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
280 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
281 case PGRES_TUPLES_OK:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
282 retval = tuples_ok_handler ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
283 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
284 case PGRES_COPY_OUT:
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
285 retval = copy_out_handler (outfile);
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
286 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
287 case PGRES_COPY_IN:
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
288 retval = copy_in_handler (infile);
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
289 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
290 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
291
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
292 if (res) // could have been changed by a handler
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
293 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
294 PQclear (res);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
295 res = NULL;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
296 }
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
297 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
298
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
299 return retval;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
300 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
301
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
302 octave_value command::tuples_ok_handler (void)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
303 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
304 octave_map ret;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
305
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
306 int nt = PQntuples (res);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
307 int nf = PQnfields (res);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
308
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
309 Cell data (nt, nf);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
310 Cell columns (1, nf);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
311
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
312 bool rtypes_given;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
313 int l = rettypes.length ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
314 if (l > 0)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
315 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
316 if (l != nf)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
317 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
318 error ("%s: wrong number of given returned types", caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
319 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
320 return octave_value_list ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
321 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
322 rtypes_given = true;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
323 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
324 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
325 rtypes_given = false;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
326
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
327 for (int j = 0; j < nf; j++) // j is column
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
328 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
329 columns(j) = octave_value (PQfname (res, j));
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
330
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
331 int f = PQfformat (res, j);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
332
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
333 oct_pq_to_octave_fp_t simple_type_to_octave;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
334 to_octave_array_fp_t array_to_octave;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
335 to_octave_composite_fp_t composite_to_octave;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
336
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
337 oct_pq_conv_t *conv;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
338 oct_type_t oct_type;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
339
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
340 // perform next block only if there are any rows, since
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
341 // otherwise no converter will be needed and we can spare a
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
342 // possible error of not finding a suitable one
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
343 if (nt > 0)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
344 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
345 if (rtypes_given) // for internal reading of system tables
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
346 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
347 std::string type = rettypes(j).string_value ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
348 if (error_state)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
349 error ("%s: could not convert given type to string",
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
350 caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
351 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
352 conv = pgtype_from_spec (type, oct_type);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
353
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
354 if (error_state)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
355 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
356 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
357 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
358 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
359 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
360 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
361 if (! (conv = pgtype_from_spec (PQftype (res, j), oct_type)))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
362 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
363 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
364 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
365 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
366
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
367 if (f)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
368 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
369 array_to_octave = &command::to_octave_bin_array;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
370 composite_to_octave = &command::to_octave_bin_composite;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
371 // will be NULL for non-simple converters
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
372 simple_type_to_octave = conv->to_octave_bin;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
373 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
374 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
375 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
376 array_to_octave = &command::to_octave_str_array;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
377 composite_to_octave = &command::to_octave_str_composite;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
378 // will be NULL for non-simple converters
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
379 simple_type_to_octave = conv->to_octave_str;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
380 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
381 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
382
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
383 // FIXME: To avoid map-lookups of converters for elements of
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
384 // composite types in arbitrarily deep recursions (over
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
385 // composite types and possibly arrays) to be repeated in each
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
386 // row, build up a tree of pointers to looked up converter
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
387 // structures in the first row and pass branches of it, getting
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
388 // smaller through the recursions of type conversions, in the
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
389 // next rows.
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
390 for (int i = 0; i < nt; i++) // i is row
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
391 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
392 if (PQgetisnull (res, i, j))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
393 data(i, j) = octave_value (octave_NA);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
394 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
395 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
396 char *v = PQgetvalue (res, i, j);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
397 int nb = PQgetlength (res, i, j);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
398 octave_value ov;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
399
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
400 switch (oct_type)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
401 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
402 case simple:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
403 if (simple_type_to_octave (v, ov, nb))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
404 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
405 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
406
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
407 case array:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
408 if ((this->*array_to_octave) (v, ov, nb, conv))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
409 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
410 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
411
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
412 case composite:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
413 if ((this->*composite_to_octave) (v, ov, nb))
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
414 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
415 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
416
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
417 default:
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
418 // should not get here
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
419 error ("%s: internal error, undefined type identifier",
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
420 caller.c_str ());
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
421
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
422 valid = 0;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
423 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
424
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
425 if (valid)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
426 data(i, j) = ov;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
427 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
428 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
429 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
430 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
431
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
432 if (! valid)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
433 break;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
434 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
435
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
436 if (error_state)
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
437 return octave_value_list ();
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
438 else
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
439 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
440 ret.assign ("data", octave_value (data));
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
441 ret.assign ("columns", octave_value (columns));
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
442
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
443 return octave_value (ret);
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
444 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
445 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
446
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
447 octave_value command::copy_out_handler (const std::string &outfile)
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
448 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
449 octave_value retval;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
450
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
451 if (! outfile.empty ())
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
452 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
453 // store unchecked output in file
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
454
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
455 std::ofstream ostr (outfile.c_str (), std::ios_base::out);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
456 if (ostr.fail ())
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
457 error ("could not open output file %s", outfile.c_str ());
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
458
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
459 char *data;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
460 int nb;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
461 while ((nb = PQgetCopyData (cptr, &data, 0)) > 0)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
462 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
463 if (! (ostr.fail () || ostr.bad ()))
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
464 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
465 ostr.write (data, nb);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
466 if (ostr.bad ())
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
467 error ("write to file failed");
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
468 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
469 PQfreemem (data);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
470 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
471
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
472 if (! error_state)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
473 ostr.close ();
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
474
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
475 if (nb == -2)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
476 error ("server error in copy-out: %s", PQerrorMessage (cptr));
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
477 else
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
478 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
479 PQclear (res);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
480
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
481 if (res = PQgetResult (cptr))
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
482 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
483 if ((state = PQresultStatus (res)) == PGRES_FATAL_ERROR)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
484 error ("server error in copy-out: %s", PQerrorMessage (cptr));
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
485 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
486 else
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
487 error ("unexpectedly got no result information");
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
488 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
489 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
490 else
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
491 error ("no filename given for copy-out");
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
492
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
493 if (error_state)
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
494 valid = 0;
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
495
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
496 return retval;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
497 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
498
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
499 octave_value command::copy_in_handler (const std::string &infile)
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
500 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
501 octave_value retval;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
502
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
503 #define OCT_PQ_READSIZE 4096
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
504
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
505 char buff [OCT_PQ_READSIZE];
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
506
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
507 if (! infile.empty ())
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
508 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
509 // read unchecked input from file
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
510
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
511 std::ifstream istr (infile.c_str (), std::ios_base::in);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
512 if (istr.fail ())
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
513 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
514 error ("could not open input file %s", infile.c_str ());
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
515
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
516 PQputCopyEnd (cptr, "could not open input file");
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
517
11407
f4098c7d5b35 Wrong implementation of copy-in from argument.
i7tiol
parents: 11398
diff changeset
518 error ("server error: %s", PQerrorMessage (cptr));
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
519
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
520 valid = 0;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
521
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
522 return retval;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
523 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
524
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
525 do
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
526 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
527 istr.read (buff, OCT_PQ_READSIZE);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
528
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
529 if (istr.bad ())
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
530 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
531 error ("could not read file %s", infile.c_str ());
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
532
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
533 break;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
534 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
535 else
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
536 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
537 int nb;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
538
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
539 if ((nb = istr.gcount ()) > 0)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
540 if (PQputCopyData (cptr, buff, nb) == -1)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
541 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
542 error ("%s", PQerrorMessage (cptr));
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
543
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
544 break;
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
545 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
546 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
547 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
548 while (! istr.eof ());
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
549
11398
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
550 istr.close ();
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
551
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
552 if (error_state)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
553 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
554 PQputCopyEnd (cptr, "copy-in interrupted");
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
555
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
556 error ("%s", PQerrorMessage (cptr));
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
557 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
558 else
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
559 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
560 if (PQputCopyEnd (cptr, NULL) == -1)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
561 error ("%s", PQerrorMessage (cptr));
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
562 else
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
563 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
564 PQclear (res);
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
565
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
566 if (res = PQgetResult (cptr))
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
567 {
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
568 if ((state = PQresultStatus (res)) == PGRES_FATAL_ERROR)
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
569 error ("server error in copy-in: %s", PQerrorMessage (cptr));
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
570 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
571 else
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
572 error ("unexpectedly got no result information");
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
573 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
574 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
575 }
913ac5491db1 Copy in/out from/to local file hacked in. Doc change waits till copy in/out from/to variable.
i7tiol
parents: 11394
diff changeset
576 else
11408
6c22f62f2b64 Resumed to and finished copy-in/-out only from/to files.
i7tiol
parents: 11407
diff changeset
577 error ("no filename given for copy-in");
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
578
11407
f4098c7d5b35 Wrong implementation of copy-in from argument.
i7tiol
parents: 11398
diff changeset
579 if (error_state)
f4098c7d5b35 Wrong implementation of copy-in from argument.
i7tiol
parents: 11398
diff changeset
580 valid = 0;
f4098c7d5b35 Wrong implementation of copy-in from argument.
i7tiol
parents: 11398
diff changeset
581
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
582 return retval;
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
583 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
584
11407
f4098c7d5b35 Wrong implementation of copy-in from argument.
i7tiol
parents: 11398
diff changeset
585 oct_pq_conv_t *command::pgtype_from_octtype (const octave_value &param)
11394
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
586 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
587 // printf ("pgtype_from_octtype: ");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
588
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
589 if (param.is_bool_scalar ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
590 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
591 // printf ("bool\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
592 return conn.name_conv_map["bool"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
593 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
594 else if (param.is_real_scalar ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
595 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
596 if (param.is_double_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
597 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
598 // printf ("float8\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
599 return conn.name_conv_map["float8"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
600 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
601 else if (param.is_single_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
602 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
603 // printf ("float4\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
604 return conn.name_conv_map["float4"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
605 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
606 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
607
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
608 if (param.is_scalar_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
609 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
610 if (param.is_int16_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
611 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
612 // printf ("int2\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
613 return conn.name_conv_map["int2"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
614 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
615 else if (param.is_int32_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
616 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
617 // printf ("int4\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
618 return conn.name_conv_map["int4"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
619 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
620 else if (param.is_int64_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
621 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
622 // printf ("int8\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
623 return conn.name_conv_map["int8"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
624 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
625 else if (param.is_uint32_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
626 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
627 // printf ("oid\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
628 return conn.name_conv_map["oid"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
629 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
630 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
631
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
632 if (param.is_uint8_type ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
633 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
634 // printf ("bytea\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
635 return conn.name_conv_map["bytea"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
636 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
637 else if (param.is_string ())
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
638 {
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
639 // printf ("text\n");
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
640 return conn.name_conv_map["text"];
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
641 }
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
642
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
643 ERROR_RETURN_NO_PG_TYPE
9aee227e296c Populated new database package with initial postgresql interface.
i7tiol
parents:
diff changeset
644 }