/usr/include/dballe/db/cursor.h is in libdballe-dev 5.10-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | /*
* db/cursor - manage select queries
*
* Copyright (C) 2005--2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Author: Enrico Zini <enrico@enricozini.com>
*/
/** @file
* @ingroup db
*
* Functions used to manage a general DB-ALLe query
*/
#ifndef DBA_DB_CURSOR_H
#define DBA_DB_CURSOR_H
#include <dballe/db/odbcworkarounds.h>
#include <wreport/varinfo.h>
#include <sqltypes.h>
#include <vector>
namespace dballe {
struct DB;
struct Record;
namespace db {
struct Statement;
/**
* Structure used to build and execute a query, and to iterate through the
* results
*/
struct Cursor
{
/** Database to operate on */
DB& db;
/** ODBC statement to use for the query */
db::Statement* stm;
/** What values are wanted from the query */
unsigned int wanted;
/** Modifier flags to enable special query behaviours */
unsigned int modifiers;
/** What is in the FROM part of the query, used to know what output fields
* are bound */
unsigned int from_wanted;
/** Query results
* @{
*/
DBALLE_SQL_C_SINT_TYPE out_lat;
DBALLE_SQL_C_SINT_TYPE out_lon;
char out_ident[64]; SQLLEN out_ident_ind;
DBALLE_SQL_C_SINT_TYPE out_ltype1;
DBALLE_SQL_C_SINT_TYPE out_l1;
DBALLE_SQL_C_SINT_TYPE out_ltype2;
DBALLE_SQL_C_SINT_TYPE out_l2;
DBALLE_SQL_C_SINT_TYPE out_pind;
DBALLE_SQL_C_SINT_TYPE out_p1;
DBALLE_SQL_C_SINT_TYPE out_p2;
wreport::Varcode out_varcode;
SQL_TIMESTAMP_STRUCT out_datetime;
char out_value[255];
DBALLE_SQL_C_SINT_TYPE out_rep_cod;
DBALLE_SQL_C_SINT_TYPE out_ana_id;
DBALLE_SQL_C_SINT_TYPE out_context_id;
DBALLE_SQL_C_SINT_TYPE out_priority;
/** @} */
/** Number of results still to be fetched */
DBALLE_SQL_C_SINT_TYPE count;
Cursor(DB& db);
~Cursor();
/**
* Create and execute a database query.
*
* The results are retrieved by iterating the cursor.
*
* @param query
* The record with the query data (see technical specifications, par. 1.6.4
* "parameter output/input"
* @param wanted
* The values wanted in output
* @param modifiers
* Optional modifiers to ask for special query behaviours
* @return
* The count of items in the results
*/
int query(const Record& query, unsigned int wanted, unsigned int modifiers);
/**
* Get the number of rows still to be fetched
*
* @return
* The number of rows still to be queried. The value is undefined if no
* query has been successfully peformed yet using this cursor.
*/
int remaining() const;
/**
* Get a new item from the results of a query
*
* @returns
* true if a new record has been read, false if there is no more data to read
*/
bool next();
/// Discard the results that have not been read yet
void discard_rest();
/**
* Fill in a record with the contents of a dba_db_cursor
*
* @param rec
* The record where to store the values
*/
void to_record(Record& rec);
/**
* Query attributes for the current variable
*/
unsigned query_attrs(const std::vector<wreport::Varcode>& qcs, Record& attrs);
protected:
/// Reset the cursor at the beginning of a query
void reset();
/// Query extra station info and add it to \a rec
void add_station_info(Record& rec);
/**
* Return the number of results for a query.
*
* This is the same as Cursor::query, but it does a SELECT COUNT(*) only.
*
* @warning: do not use it except to get an approximate row count:
* insert/delete/update queries run between the count and the select will
* change the size of the result set.
*/
int getcount(const Record& query, unsigned int wanted, unsigned int modifiers);
};
} // namespace db
} // namespace dballe
/* vim:set ts=4 sw=4: */
#endif
|