/usr/include/dballe/db/sql.h is in libdballe-dev 7.7-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 | /*
* db/sql - Generic infrastructure for talking with SQL databases
*
* Copyright (C) 2005--2014 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>
*/
#ifndef DBALLE_DB_INTERNALS_H
#define DBALLE_DB_INTERNALS_H
#include <wreport/error.h>
#include <string>
#include <memory>
/// Define this to enable referential integrity
#undef USE_REF_INT
/** Trace macros internally used for debugging
* @{
*/
// #define TRACE_DB
#ifdef TRACE_DB
#define TRACE(...) fprintf(stderr, __VA_ARGS__)
#define IFTRACE if (1)
#else
/** Ouput a trace message */
#define TRACE(...) do { } while (0)
/** Prefix a block of code to compile only if trace is enabled */
#define IFTRACE if (0)
#endif
/** @} */
namespace dballe {
class Datetime;
class Querybuf;
namespace db {
class Transaction;
class Statement;
/**
* Supported SQL servers.
*/
enum class ServerType
{
MYSQL,
SQLITE,
ORACLE,
POSTGRES,
};
class Connection
{
protected:
std::string url;
public:
/**
* Type of SQL server we are connected to.
*
* Use this to tell which SQL dialect to use, in case standard SQL
* behaviour is not enough
*/
ServerType server_type;
virtual ~Connection();
const std::string& get_url() const { return url; }
/**
* Begin a transaction.
*
* The transaction will be controller by the returned Transaction object,
* and will end when its destuctor is called.
*/
virtual std::unique_ptr<Transaction> transaction() = 0;
/// Check if the database contains a table
virtual bool has_table(const std::string& name) = 0;
/**
* Get a value from the settings table.
*
* Returns the empty string if the table does not exist.
*/
virtual std::string get_setting(const std::string& key) = 0;
/**
* Set a value in the settings table.
*
* The table is created if it does not exist.
*/
virtual void set_setting(const std::string& key, const std::string& value) = 0;
/// Drop the settings table
virtual void drop_settings() = 0;
/// Format a datetime and add it to the querybuf
virtual void add_datetime(Querybuf& qb, const Datetime& dt) const;
/// Create a new connection from a URL
static std::unique_ptr<Connection> create_from_url(const char* url);
/// Create a new connection from a URL
static std::unique_ptr<Connection> create_from_url(const std::string& url);
};
/**
* A RAII transaction interface.
*
* The transaction will be valid during the lifetime of this object.
*
* You can commit or rollback the transaction using its methods. If at
* destruction time the transaction has not been committed or rolled back, a
* rollback is automatically performed.
*/
class Transaction
{
public:
virtual ~Transaction() {}
/// Commit this transaction
virtual void commit() = 0;
/// Roll back this transaction
virtual void rollback() = 0;
/// Get an exclusive lock on the given table until the end of the
/// transaction
virtual void lock_table(const char* name) = 0;
};
}
}
#endif
|