1 /* Copyright (C) 2000-2015 Lavtech.com corp. All rights reserved.
2 
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; either version 2 of the License, or
6    (at your option) any later version.
7 
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12 
13    You should have received a copy of the GNU General Public License
14    along with this program; if not, write to the Free Software
15    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16 */
17 
18 #include "udm_config.h"
19 
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
23 #include <sys/types.h>
24 #include <errno.h>
25 
26 #include "udm_common.h"
27 #include "udm_vars.h"
28 #include "udm_db.h"           /* For UdmFind() */
29 #include "udm_sqldbms.h"
30 #include "udm_db_int.h"
31 #include "udm_prog.h"
32 
33 #ifdef HAVE_SQL /* TODO34 */
34 
35 
36 typedef struct
37 {
38   UDM_VALUE generic;
39   UDM_SQLRES Result;
40 } UDM_VALUE_SQLRES;
41 
42 
43 typedef struct
44 {
45   UDM_VAR_HEADER Header;
46   UDM_VALUE_SQLRES Value;
47 } UDM_VAR_SQLRES;
48 
49 
50 static udm_rc_t
UdmValueSQLResultDump(const char * Data,const char * name,FILE * f)51 UdmValueSQLResultDump(const char *Data, const char *name, FILE *f)
52 {
53   return UDM_NOTARGET;
54 }
55 
56 
57 static udm_var_flag_t
UdmValueSQLResultFlags(const char * Data)58 UdmValueSQLResultFlags(const char *Data)
59 {
60   return UDM_VARFLAG_READONLY;
61 }
62 
63 
64 static udm_secno_t
UdmValueSQLResultSecno(const char * Data)65 UdmValueSQLResultSecno(const char *Data)
66 {
67   return 0;
68 }
69 
70 
71 static size_t
UdmValueSQLResultMemUsed(const char * Data)72 UdmValueSQLResultMemUsed(const char *Data)
73 {
74   return sizeof(UDM_SQLRES);
75 }
76 
77 
78 static udm_rc_t
UdmValueSQLResultConstructor(char * Data,const UDM_VALUE ** args,size_t nargs)79 UdmValueSQLResultConstructor(char *Data,
80                              const UDM_VALUE **args, size_t nargs)
81 {
82   UDM_BZERO(Data, sizeof(UDM_SQLRES));
83   return UDM_OK;
84 }
85 
86 
87 static size_t
UdmValueSQLResultVarSize(void)88 UdmValueSQLResultVarSize(void)
89 {
90   return sizeof(UDM_VAR_SQLRES);
91 }
92 
93 
94 static size_t
UdmValueSQLResultValueSize(void)95 UdmValueSQLResultValueSize(void)
96 {
97   return sizeof(UDM_VALUE_SQLRES);
98 }
99 
100 
101 static size_t
UdmValueSQLResultDataOffset(void)102 UdmValueSQLResultDataOffset(void)
103 {
104   return offsetof(UDM_VALUE_SQLRES, Result);
105 }
106 
107 
108 static size_t
UdmValueSQLResultDataSize(void)109 UdmValueSQLResultDataSize(void)
110 {
111   return sizeof(UDM_SQLRES);
112 }
113 
114 
115 static size_t
UdmValueSQLResultDataAlignment(void)116 UdmValueSQLResultDataAlignment(void)
117 {
118   return sizeof(size_t);
119 }
120 
121 
122 static void
UdmValueSQLResultDestructor(char * Data)123 UdmValueSQLResultDestructor(char *Data)
124 {
125   UdmSQLFree((UDM_SQLRES*) Data);
126 }
127 
128 
129 static udm_rc_t
UdmValueSQLResultCopyValue(char * D,const char * S)130 UdmValueSQLResultCopyValue(char *D, const char *S)
131 {
132   UDM_ASSERT(0); /* TODO34: Add CloneVar(), with reference */
133   memmove(D, S, sizeof(UDM_SQLRES));
134   return UDM_OK;
135 }
136 
137 
138 static void
UdmValueSQLResultGetConstStr(const char * Data,UDM_CONST_STR * Val)139 UdmValueSQLResultGetConstStr(const char *Data, UDM_CONST_STR *Val)
140 {
141   static const UDM_CONST_STR name= {UDM_CSTR_WITH_LEN("#SQLResult#")};
142   *Val= name;
143 }
144 
145 
146 static void
UdmValueSQLResultGetBool(const char * Data,udm_bool_t * val)147 UdmValueSQLResultGetBool(const char *Data, udm_bool_t *val)
148 {
149   *val= UDM_TRUE;
150 }
151 
152 
153 static void
UdmValueSQLResultGetInt(const char * Data,int * val)154 UdmValueSQLResultGetInt(const char *Data, int *val)
155 {
156   *val= 0;
157 }
158 
159 
160 static void
UdmValueSQLResultGetUInt(const char * Data,unsigned int * val)161 UdmValueSQLResultGetUInt(const char *Data, unsigned int *val)
162 {
163   *val= 0;
164 }
165 
166 
167 static void
UdmValueSQLResultGetDouble(const char * Data,double * val)168 UdmValueSQLResultGetDouble(const char *Data, double *val)
169 {
170   *val= 0.0;
171 }
172 
173 
174 static udm_rc_t
UdmValueSQLResultSetInt(char * Data,int value)175 UdmValueSQLResultSetInt(char *Data, int value)
176 {
177   return UDM_NOTARGET;
178 }
179 
180 
181 static udm_rc_t
UdmValueSQLResultSetDouble(char * Data,double value)182 UdmValueSQLResultSetDouble(char *Data, double value)
183 {
184   return UDM_NOTARGET;
185 }
186 
187 
188 static udm_rc_t
UdmValueSQLResultConvertCharset(char * Data,UDM_CONV * conv,int flags)189 UdmValueSQLResultConvertCharset(char *Data, UDM_CONV *conv, int flags)
190 {
191   return UDM_NOTARGET;
192 }
193 
194 
195 static udm_rc_t
UdmValueSQLResultAppendStrn(char * Data,const char * str,size_t length)196 UdmValueSQLResultAppendStrn(char *Data, const char *str, size_t length)
197 {
198   return UDM_NOTARGET;
199 }
200 
201 
202 static udm_rc_t
UdmValueSQLResultAppendConv(char * Data,size_t maxlen,UDM_CONV * cnv,int cnvflags,const char * src,size_t srclen)203 UdmValueSQLResultAppendConv(char *Data, size_t maxlen,
204                             UDM_CONV *cnv, int cnvflags,
205                             const char *src, size_t srclen)
206 {
207   return UDM_NOTARGET;
208 }
209 
210 
211 static udm_rc_t
UdmValueSQLResultSetStrn(char * Data,const char * str,size_t length)212 UdmValueSQLResultSetStrn(char *Data, const char *str, size_t length)
213 {
214   return UDM_NOTARGET;
215 }
216 
217 
218 static udm_rc_t
UdmValueSQLResultSetConv(char * Data,UDM_CONV * conv,int cnvflags,const char * src,size_t srclen)219 UdmValueSQLResultSetConv(char *Data, UDM_CONV *conv, int cnvflags,
220                          const char *src, size_t srclen)
221 {
222   return UDM_NOTARGET;
223 }
224 
225 
226 static udm_rc_t
UdmValueSQLResultPrintToFile(const char * Data,FILE * f)227 UdmValueSQLResultPrintToFile(const char *Data, FILE *f)
228 {
229   return UDM_OK;
230 }
231 
232 
233 static udm_rc_t
UdmValueSQLResultPrintToDSTR(const char * Data,UDM_DSTR * dstr)234 UdmValueSQLResultPrintToDSTR(const char *Data, UDM_DSTR *dstr)
235 {
236   return UDM_OK;
237 }
238 
239 
240 UDM_VALUE_HANDLER UdmValueHandlerSQLResult=
241 {
242   UDM_VALUE_HANDLER_TYPE_SQLRESULT,
243   UDM_VALUE_DATA_TYPE_SQLRESULT,
244   UDM_VALUE_DATA_TYPE_STR,
245   "UdmSQLResult",
246   UdmValueSQLResultConstructor,
247   UdmValueSQLResultDestructor,
248   UdmValueSQLResultCopyValue,
249   UdmValueSQLResultVarSize,
250   UdmValueSQLResultValueSize,
251   UdmValueSQLResultDataOffset,
252   UdmValueSQLResultDataSize,
253   UdmValueSQLResultDataAlignment,
254   UdmValueSQLResultDump,
255   UdmValueSQLResultFlags,
256   UdmValueSQLResultSecno,
257   UdmValueSQLResultMemUsed,
258   UdmValueSQLResultGetConstStr,
259   UdmValueSQLResultGetBool,
260   UdmValueSQLResultGetInt,
261   UdmValueSQLResultGetUInt,
262   UdmValueSQLResultGetDouble,
263   UdmValueSQLResultSetInt,
264   UdmValueSQLResultSetDouble,
265   UdmValueSQLResultSetStrn,
266   UdmValueSQLResultPrintToFile,
267   UdmValueSQLResultPrintToDSTR,
268   UdmValueSQLResultConvertCharset,
269   UdmValueSQLResultSetConv,
270   UdmValueSQLResultAppendStrn,
271   UdmValueSQLResultAppendConv,
272   NULL,
273 };
274 #endif /* HAVE_SQL */
275