-typedef enum {
- SQL_INTERFACE_TYPE_MYSQL = 0,
- SQL_INTERFACE_TYPE_POSTGRESQL = 1,
- SQL_INTERFACE_TYPE_SQLITE3 = 2,
- SQL_INTERFACE_TYPE_INGRES = 3,
- SQL_INTERFACE_TYPE_DBI = 4
-} SQL_INTERFACETYPE;
-
-typedef enum {
- SQL_TYPE_MYSQL = 0,
- SQL_TYPE_POSTGRESQL = 1,
- SQL_TYPE_SQLITE3 = 2,
- SQL_TYPE_INGRES = 3,
- SQL_TYPE_UNKNOWN = 99
-} SQL_DBTYPE;
-
-typedef void (DB_LIST_HANDLER)(void *, const char *);
-typedef int (DB_RESULT_HANDLER)(void *, int, char **);
-
-#define db_lock(mdb) mdb->_db_lock(__FILE__, __LINE__)
-#define db_unlock(mdb) mdb->_db_unlock(__FILE__, __LINE__)
-
-/* Current database version number for all drivers */
-#define BDB_VERSION 14
-
-class B_DB: public SMARTALLOC {
-protected:
- brwlock_t m_lock; /* transaction lock */
- dlink m_link; /* queue control */
- SQL_INTERFACETYPE m_db_interface_type; /* type of backend used */
- SQL_DBTYPE m_db_type; /* database type */
- int m_ref_count; /* reference count */
- bool m_connected; /* connection made to db */
- bool m_have_batch_insert; /* have batch insert support ? */
- char *m_db_driver; /* database driver */
- char *m_db_driverdir; /* database driver dir */
- char *m_db_name; /* database name */
- char *m_db_user; /* database user */
- char *m_db_address; /* host name address */
- char *m_db_socket; /* socket for local access */
- char *m_db_password; /* database password */
- int m_db_port; /* port for host name address */
- bool m_disabled_batch_insert; /* explicitly disabled batch insert mode ? */
-
-public:
- POOLMEM *errmsg; /* nicely edited error message */
- POOLMEM *cmd; /* SQL command string */
- POOLMEM *cached_path; /* cached path name */
- int cached_path_len; /* length of cached path */
- uint32_t cached_path_id; /* cached path id */
- int changes; /* changes during transaction */
- POOLMEM *fname; /* Filename only */
- POOLMEM *path; /* Path only */
- POOLMEM *esc_name; /* Escaped file name */
- POOLMEM *esc_path; /* Escaped path name */
- POOLMEM *esc_obj; /* Escaped restore object */
- int fnl; /* file name length */
- int pnl; /* path name length */
-
- /* methods */
- B_DB() {};
- virtual ~B_DB() {};
- const char *get_db_name(void) { return m_db_name; };
- const char *get_db_user(void) { return m_db_user; };
- bool is_connected(void) { return m_connected; };
- bool batch_insert_available(void) { return m_have_batch_insert; };
- void increment_refcount(void) { m_ref_count++; };
-
- /* low level methods */
- bool db_match_database(const char *db_driver, const char *db_name,
- const char *db_address, int db_port);
- B_DB *db_clone_database_connection(JCR *jcr, bool mult_db_connections);
- int db_get_type_index(void) { return m_db_type; };
- const char *db_get_type(void);
- void _db_lock(const char *file, int line);
- void _db_unlock(const char *file, int line);
- bool db_sql_query(const char *query, int flags=0);
- void print_lock_info(FILE *fp);
-
- /* Pure virtual low level methods */
- virtual bool db_open_database(JCR *jcr) = 0;
- virtual void db_close_database(JCR *jcr) = 0;
- virtual void db_thread_cleanup(void) = 0;
- virtual void db_escape_string(JCR *jcr, char *snew, char *old, int len) = 0;
- virtual char *db_escape_object(JCR *jcr, char *old, int len) = 0;
- virtual void db_unescape_object(JCR *jcr, char *from, int32_t expected_len,
- POOLMEM **dest, int32_t *len) = 0;
- virtual void db_start_transaction(JCR *jcr) = 0;
- virtual void db_end_transaction(JCR *jcr) = 0;
- virtual bool db_sql_query(const char *query, DB_RESULT_HANDLER *result_handler, void *ctx) = 0;
-
- /* By default, we use db_sql_query */
- virtual bool db_big_sql_query(const char *query,
- DB_RESULT_HANDLER *result_handler, void *ctx) {
- return db_sql_query(query, result_handler, ctx);
- };
-};
-
-/* sql_query Query Flags */