/usr/include/dballe/db/v6/qbuilder.h is in libdballe-dev 7.21-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 | #ifndef DBA_DB_V6_QBUILDER_H
#define DBA_DB_V6_QBUILDER_H
#include <dballe/sql/querybuf.h>
#include <dballe/db/v6/db.h>
#include <dballe/core/query.h>
#include <regex.h>
namespace dballe {
namespace db {
namespace v6 {
/// Build SQL queries for V6 databases
struct QueryBuilder
{
dballe::sql::Connection& conn;
/** Database to operate on */
DB& db;
/**
* If defined, it need to point to the identifier to be used as the only
* bound input parameter.
*
* If not defined, there are no bound input parameters in this query
*/
const char* bind_in_ident = nullptr;
bool select_station = false; // ana_id, lat, lon, ident
bool select_varinfo = false; // rep_cod, id_ltr, varcode
// IdQuery
bool select_data_id = false; // id_data
// DataQuery
bool select_data = false; // datetime, value
// SummaryQuery
bool select_summary_details = false; // id_data, datetime, datetimemax
/// Query object
const core::Query& query;
/** Dynamically generated SQL query */
dballe::sql::Querybuf sql_query;
/// FROM part of the SQL query
dballe::sql::Querybuf sql_from;
/// WHERE part of the SQL query
dballe::sql::Querybuf sql_where;
/// Modifier flags to enable special query behaviours
const unsigned int modifiers;
/// True if we are querying station information, rather than measured data
bool query_station_vars;
QueryBuilder(DB& db, const core::Query& query, unsigned int modifiers, bool query_station_vars);
virtual ~QueryBuilder() {}
void build();
protected:
// Add WHERE conditions
bool add_pa_where(const char* tbl);
bool add_dt_where(const char* tbl);
bool add_ltr_where(const char* tbl);
bool add_varcode_where(const char* tbl);
bool add_repinfo_where(const char* tbl);
bool add_datafilter_where(const char* tbl);
bool add_attrfilter_where(const char* tbl);
virtual void build_select() = 0;
virtual bool build_where() = 0;
virtual void build_order_by() = 0;
};
struct StationQueryBuilder : public QueryBuilder
{
StationQueryBuilder(DB& db, const core::Query& query, unsigned int modifiers)
: QueryBuilder(db, query, modifiers, false) {}
virtual void build_select();
virtual bool build_where();
virtual void build_order_by();
};
struct DataQueryBuilder : public QueryBuilder
{
DataQueryBuilder(DB& db, const core::Query& query, unsigned int modifiers, bool query_station_vars);
virtual void build_select();
virtual bool build_where();
virtual void build_order_by();
};
struct IdQueryBuilder : public DataQueryBuilder
{
IdQueryBuilder(DB& db, const core::Query& query, unsigned int modifiers, bool query_station_vars)
: DataQueryBuilder(db, query, modifiers, query_station_vars) {}
virtual void build_select();
virtual void build_order_by();
};
struct SummaryQueryBuilder : public DataQueryBuilder
{
SummaryQueryBuilder(DB& db, const core::Query& query, unsigned int modifiers, bool query_station_vars)
: DataQueryBuilder(db, query, modifiers, query_station_vars) {}
virtual void build_select();
virtual void build_order_by();
};
}
}
}
#endif
|