libdsdb3  3.0
 All Data Structures Files Functions Variables Typedefs Enumerations Macros Groups
dbog_dod.c
Go to the documentation of this file.
1 /*******************************************************************************
2 *
3 * COPYRIGHT (C) 2010 Battelle Memorial Institute. All Rights Reserved.
4 *
5 ********************************************************************************
6 *
7 * Author:
8 * name: Brian Ermold
9 * phone: (509) 375-2277
10 * email: brian.ermold@pnl.gov
11 *
12 ********************************************************************************
13 *
14 * REPOSITORY INFORMATION:
15 * $Revision: 54207 $
16 * $Author: ermold $
17 * $Date: 2014-05-02 20:50:34 +0000 (Fri, 02 May 2014) $
18 *
19 *******************************************************************************/
20 
21 /** @file dbog_dod.c
22  * DOD object group functions.
23  */
24 
25 #include <stdlib.h>
26 #include <string.h>
27 #include "dbconn.h"
28 
29 /** @privatesection */
30 
31 /*******************************************************************************
32 * Highest DOD Version
33 */
34 
35 DBStatus dodog_get_highest_dod_version(
36  DBConn *dbconn,
37  const char *dsc_name,
38  const char *dsc_level,
39  char **result)
40 {
41  const char *command = "SELECT * FROM get_highest_dod_version($1,$2)";
42  const char *params[2];
43 
44  params[0] = dsc_name;
45  params[1] = dsc_level;
46 
47  return(dbconn_query_text(dbconn, command, 2, params, result));
48 }
49 
50 /*******************************************************************************
51 * DOD Dimensions
52 */
53 
54 DBStatus dodog_get_dod_dims(
55  DBConn *dbconn,
56  const char *dsc_name,
57  const char *dsc_level,
58  const char *dod_version,
59  DBResult **result)
60 {
61  const char *command = "SELECT * FROM get_dod_dims($1,$2,$3)";
62  const char *params[3];
63 
64  params[0] = dsc_name;
65  params[1] = dsc_level;
66  params[2] = dod_version;
67 
68  return(dbconn_query(dbconn, command, 3, params, result));
69 }
70 
71 /*******************************************************************************
72 * DOD Attributes
73 */
74 
75 DBStatus dodog_get_dod_atts(
76  DBConn *dbconn,
77  const char *dsc_name,
78  const char *dsc_level,
79  const char *dod_version,
80  DBResult **result)
81 {
82  const char *command = "SELECT * FROM get_dod_atts($1,$2,$3)";
83  const char *params[3];
84 
85  params[0] = dsc_name;
86  params[1] = dsc_level;
87  params[2] = dod_version;
88 
89  return(dbconn_query(dbconn, command, 3, params, result));
90 }
91 
92 /*******************************************************************************
93 * DOD Variables
94 */
95 
96 DBStatus dodog_get_dod_vars(
97  DBConn *dbconn,
98  const char *dsc_name,
99  const char *dsc_level,
100  const char *dod_version,
101  DBResult **result)
102 {
103  const char *command = "SELECT * FROM get_dod_vars($1,$2,$3)";
104  const char *params[3];
105 
106  params[0] = dsc_name;
107  params[1] = dsc_level;
108  params[2] = dod_version;
109 
110  return(dbconn_query(dbconn, command, 3, params, result));
111 }
112 
113 /*******************************************************************************
114 * DOD Variable Dimensions
115 */
116 
117 DBStatus dodog_get_dod_var_dims(
118  DBConn *dbconn,
119  const char *dsc_name,
120  const char *dsc_level,
121  const char *dod_version,
122  const char *var_name,
123  DBResult **result)
124 {
125  const char *command = "SELECT * FROM get_dod_var_dims($1,$2,$3,$4)";
126  const char *params[4];
127 
128  params[0] = dsc_name;
129  params[1] = dsc_level;
130  params[2] = dod_version;
131  params[3] = var_name;
132 
133  return(dbconn_query(dbconn, command, 4, params, result));
134 }
135 
136 /*******************************************************************************
137 * DOD Variable Attributes
138 */
139 
140 DBStatus dodog_get_dod_var_atts(
141  DBConn *dbconn,
142  const char *dsc_name,
143  const char *dsc_level,
144  const char *dod_version,
145  const char *var_name,
146  DBResult **result)
147 {
148  const char *command = "SELECT * FROM get_dod_var_atts($1,$2,$3,$4)";
149  const char *params[4];
150 
151  params[0] = dsc_name;
152  params[1] = dsc_level;
153  params[2] = dod_version;
154  params[3] = var_name;
155 
156  return(dbconn_query(dbconn, command, 4, params, result));
157 }
158 
159 /*******************************************************************************
160 * Datastream DODs
161 */
162 
163 void dodog_free_highest_version_dbres(DBResult *dbres)
164 {
165  if (dbres) {
166  if (dbres->data) {
167  if (dbres->data[0]) free(dbres->data[0]);
168  if (dbres->data[1]) free(dbres->data[1]);
169  free(dbres->data);
170  }
171  free(dbres);
172  }
173 }
174 
175 DBStatus dodog_get_ds_dod_versions(
176  DBConn *dbconn,
177  const char *site,
178  const char *facility,
179  const char *dsc_name,
180  const char *dsc_level,
181  DBResult **result)
182 {
183  const char *command = "SELECT * FROM get_ds_dod_versions($1,$2,$3,$4)";
184  const char *params[4];
185  DBStatus status;
186  char *highest_version;
187 
188  params[0] = site;
189  params[1] = facility;
190  params[2] = dsc_name;
191  params[3] = dsc_level;
192 
193  status = dbconn_query(dbconn, command, 4, params, result);
194 
195  /* SQLite doesn't provide a way to return the highest version number for
196  * the specified datastream if there are no dsdods found, so we have to
197  * implement this logic here. */
198 
199  if (dbconn->db_type == DB_SQLITE &&
200  status == DB_NULL_RESULT) {
201 
202  *result = (DBResult *)NULL;
203  highest_version = (char *)NULL;
204 
205  status = dodog_get_highest_dod_version(
206  dbconn, dsc_name, dsc_level, &highest_version);
207 
208  if (status == DB_NO_ERROR && highest_version) {
209 
210  *result = (DBResult *)malloc(sizeof(DBResult));
211  if (!*result) return(DB_MEM_ERROR);
212 
213  (*result)->nrows = 1;
214  (*result)->ncols = 2;
215  (*result)->dbres = (void *)NULL;
216  (*result)->free = dodog_free_highest_version_dbres;
217  (*result)->data = (char **)malloc(2 * sizeof(char *));
218  (*result)->data[0] = strdup("1970-01-01 00:00:00");
219  (*result)->data[1] = highest_version;
220  }
221  }
222 
223  return(status);
224 }
225 
226 /*******************************************************************************
227 * Datastream Attributes
228 */
229 
230 DBStatus dodog_get_ds_atts(
231  DBConn *dbconn,
232  const char *site,
233  const char *facility,
234  const char *dsc_name,
235  const char *dsc_level,
236  DBResult **result)
237 {
238  const char *command = "SELECT * FROM get_ds_atts($1,$2,$3,$4)";
239  const char *params[4];
240 
241  params[0] = site;
242  params[1] = facility;
243  params[2] = dsc_name;
244  params[3] = dsc_level;
245 
246  return(dbconn_query(dbconn, command, 4, params, result));
247 }
248 
249 /*******************************************************************************
250 * Time Varying Datastream Attributes
251 */
252 
253 DBStatus dodog_get_ds_att_times(
254  DBConn *dbconn,
255  const char *site,
256  const char *facility,
257  const char *dsc_name,
258  const char *dsc_level,
259  const char *att_name,
260  DBResult **result)
261 {
262  const char *command = "SELECT * FROM get_ds_att_times($1,$2,$3,$4,$5)";
263  const char *params[5];
264 
265  params[0] = site;
266  params[1] = facility;
267  params[2] = dsc_name;
268  params[3] = dsc_level;
269  params[4] = att_name;
270 
271  return(dbconn_query(dbconn, command, 5, params, result));
272 }
273 
274 DBStatus dodog_get_ds_time_atts(
275  DBConn *dbconn,
276  const char *site,
277  const char *facility,
278  const char *dsc_name,
279  const char *dsc_level,
280  time_t att_time,
281  DBResult **result)
282 {
283  const char *command = "SELECT * FROM get_ds_time_atts($1,$2,$3,$4,$5)";
284  const char *params[5];
285  char time_string[32];
286 
287  params[0] = site;
288  params[1] = facility;
289  params[2] = dsc_name;
290  params[3] = dsc_level;
291 
292  if (att_time) {
293  params[4] = dbconn_time_to_text(dbconn, att_time, time_string);
294  if (!params[4]) {
295  *result = (DBResult *)NULL;
296  return(DB_ERROR);
297  }
298  }
299  else {
300  params[4] = (const char *)NULL;
301  }
302 
303  return(dbconn_query(dbconn, command, 5, params, result));
304 }
305 
306 /*******************************************************************************
307 * Datastream Variable Attributes
308 */
309 
310 DBStatus dodog_get_ds_var_atts(
311  DBConn *dbconn,
312  const char *site,
313  const char *facility,
314  const char *dsc_name,
315  const char *dsc_level,
316  const char *var_name,
317  DBResult **result)
318 {
319  const char *command = "SELECT * FROM get_ds_var_atts($1,$2,$3,$4,$5)";
320  const char *params[5];
321 
322  params[0] = site;
323  params[1] = facility;
324  params[2] = dsc_name;
325  params[3] = dsc_level;
326  params[4] = var_name;
327 
328  return(dbconn_query(dbconn, command, 5, params, result));
329 }
330 
331 /*******************************************************************************
332 * Time Varying Datastream Variable Attributes
333 */
334 
335 DBStatus dodog_get_ds_var_att_times(
336  DBConn *dbconn,
337  const char *site,
338  const char *facility,
339  const char *dsc_name,
340  const char *dsc_level,
341  const char *var_name,
342  const char *att_name,
343  DBResult **result)
344 {
345  const char *command = "SELECT * FROM get_ds_var_att_times($1,$2,$3,$4,$5,$6)";
346  const char *params[6];
347 
348  params[0] = site;
349  params[1] = facility;
350  params[2] = dsc_name;
351  params[3] = dsc_level;
352  params[4] = var_name;
353  params[5] = att_name;
354 
355  return(dbconn_query(dbconn, command, 6, params, result));
356 }
357 
358 DBStatus dodog_get_ds_var_time_atts(
359  DBConn *dbconn,
360  const char *site,
361  const char *facility,
362  const char *dsc_name,
363  const char *dsc_level,
364  const char *var_name,
365  time_t att_time,
366  DBResult **result)
367 {
368  const char *command = "SELECT * FROM get_ds_var_time_atts($1,$2,$3,$4,$5,$6)";
369  const char *params[6];
370  char time_string[32];
371 
372  params[0] = site;
373  params[1] = facility;
374  params[2] = dsc_name;
375  params[3] = dsc_level;
376  params[4] = var_name;
377 
378  if (att_time) {
379  params[5] = dbconn_time_to_text(dbconn, att_time, time_string);
380  if (!params[5]) {
381  *result = (DBResult *)NULL;
382  return(DB_ERROR);
383  }
384  }
385  else {
386  params[5] = (const char *)NULL;
387  }
388 
389  return(dbconn_query(dbconn, command, 6, params, result));
390 }
391 
392 /*******************************************************************************
393 * Datastream Properties
394 */
395 
396 DBStatus dodog_get_ds_properties(
397  DBConn *dbconn,
398  const char *dsc_name,
399  const char *dsc_level,
400  const char *site,
401  const char *facility,
402  const char *var_name,
403  const char *prop_name,
404  DBResult **result)
405 {
406  const char *command = "SELECT * FROM get_ds_properties($1,$2,$3,$4,$5,$6)";
407  const char *params[6];
408 
409  params[0] = dsc_name;
410  params[1] = dsc_level;
411  params[2] = site;
412  params[3] = facility;
413  params[4] = var_name;
414  params[5] = prop_name;
415 
416  return(dbconn_query(dbconn, command, 6, params, result));
417 }