char *db_password;
int db_port; /* port for host name address */
bool connected; /* connection made to db */
- bool have_insert_id; /* do not have insert id */
bool fields_defined; /* set when fields defined */
char *sqlite_errmsg; /* error message returned by sqlite */
POOLMEM *errmsg; /* nicely edited error message */
*
* S Q L I T E
*/
-#define sql_store_result(x) (x)->result
-#define sql_free_result(x) my_sqlite_free_table(x)
-#define sql_fetch_row(x) my_sqlite_fetch_row(x)
-#define sql_query(x, y) my_sqlite_query((x), (y))
+#define sql_store_result(x) (x)->result
+#define sql_free_result(x) my_sqlite_free_table(x)
+#define sql_fetch_row(x) my_sqlite_fetch_row(x)
+#define sql_query(x, y) my_sqlite_query((x), (y))
+#define sql_insert_autokey_record(x, y, z) my_sqlite_insert_autokey_record((x), (y), (z))
#ifdef HAVE_SQLITE3
-#define sql_insert_id(x,y) sqlite3_last_insert_rowid((x)->db)
-#define sql_close(x) sqlite3_close((x)->db)
-#define sql_affected_rows(x) sqlite3_changes((x)->db)
+#define sql_close(x) sqlite3_close((x)->db)
+#define sql_affected_rows(x) sqlite3_changes((x)->db)
#else
-#define sql_insert_id(x,y) sqlite_last_insert_rowid((x)->db)
-#define sql_close(x) sqlite_close((x)->db)
-#define sql_affected_rows(x) 1
+#define sql_close(x) sqlite_close((x)->db)
+#define sql_affected_rows(x) 1
#endif
-#define sql_strerror(x) (x)->sqlite_errmsg?(x)->sqlite_errmsg:"unknown"
-#define sql_num_rows(x) (x)->nrow
-#define sql_data_seek(x, i) (x)->row = (i)
-#define sql_field_seek(x, y) my_sqlite_field_seek((x), (y))
-#define sql_fetch_field(x) my_sqlite_fetch_field(x)
-#define sql_num_fields(x) ((x)->ncolumn)
-#define SQL_ROW char**
-#define SQL_MATCH "MATCH"
+#define sql_strerror(x) (x)->sqlite_errmsg?(x)->sqlite_errmsg:"unknown"
+#define sql_num_rows(x) (x)->nrow
+#define sql_data_seek(x, i) (x)->row = (i)
+#define sql_field_seek(x, y) my_sqlite_field_seek((x), (y))
+#define sql_fetch_field(x) my_sqlite_fetch_field(x)
+#define sql_num_fields(x) ((x)->ncolumn)
+#define SQL_ROW char**
+#define SQL_MATCH "MATCH"
#define sql_batch_start(x,y) my_batch_start(x,y)
#define sql_batch_end(x,y,z) my_batch_end(x,y,z)
int my_sqlite_query(B_DB *mdb, const char *cmd);
void my_sqlite_field_seek(B_DB *mdb, int field);
SQL_FIELD *my_sqlite_fetch_field(B_DB *mdb);
+int my_sqlite_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name);
extern const char* my_sqlite_batch_lock_query;
extern const char* my_sqlite_batch_unlock_query;
extern const char* my_sqlite_batch_fill_filename_query;
char *db_password;
int db_port; /* port for host name address */
bool connected; /* connection made to db */
- bool have_insert_id; /* do not have insert id */
bool fields_defined; /* set when fields defined */
char *sqlite_errmsg; /* error message returned by sqlite */
POOLMEM *errmsg; /* nicely edited error message */
*
* S Q L I T E 3
*/
-#define sql_store_result(x) (x)->result
-#define sql_free_result(x) my_sqlite_free_table(x)
-#define sql_fetch_row(x) my_sqlite_fetch_row(x)
-#define sql_query(x, y) my_sqlite_query((x), (y))
+#define sql_store_result(x) (x)->result
+#define sql_free_result(x) my_sqlite_free_table(x)
+#define sql_fetch_row(x) my_sqlite_fetch_row(x)
+#define sql_query(x, y) my_sqlite_query((x), (y))
+#define sql_insert_autokey_record(x, y, z) my_sqlite_insert_autokey_record((x), (y), (z))
#ifdef HAVE_SQLITE3
-#define sql_insert_id(x,y) sqlite3_last_insert_rowid((x)->db)
-#define sql_close(x) sqlite3_close((x)->db)
+#define sql_close(x) sqlite3_close((x)->db)
#else
-#define sql_insert_id(x,y) sqlite_last_insert_rowid((x)->db)
-#define sql_close(x) sqlite_close((x)->db)
+#define sql_close(x) sqlite_close((x)->db)
#endif
-#define sql_strerror(x) (x)->sqlite_errmsg?(x)->sqlite_errmsg:"unknown"
-#define sql_num_rows(x) (x)->nrow
-#define sql_data_seek(x, i) (x)->row = (i)
-#define sql_affected_rows(x) sqlite3_changes((x)->db)
-#define sql_field_seek(x, y) my_sqlite_field_seek((x), (y))
-#define sql_fetch_field(x) my_sqlite_fetch_field(x)
-#define sql_num_fields(x) ((x)->ncolumn)
+#define sql_strerror(x) (x)->sqlite_errmsg?(x)->sqlite_errmsg:"unknown"
+#define sql_num_rows(x) (x)->nrow
+#define sql_data_seek(x, i) (x)->row = (i)
+#define sql_affected_rows(x) sqlite3_changes((x)->db)
+#define sql_field_seek(x, y) my_sqlite_field_seek((x), (y))
+#define sql_fetch_field(x) my_sqlite_fetch_field(x)
+#define sql_num_fields(x) ((x)->ncolumn)
#define sql_batch_start(x,y) my_batch_start(x,y)
#define sql_batch_end(x,y,z) my_batch_end(x,y,z)
#define sql_batch_insert(x,y,z) my_batch_insert(x,y,z)
int my_sqlite_query(B_DB *mdb, const char *cmd);
void my_sqlite_field_seek(B_DB *mdb, int field);
SQL_FIELD *my_sqlite_fetch_field(B_DB *mdb);
+int my_sqlite_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name);
extern const char* my_sqlite_batch_lock_query;
extern const char* my_sqlite_batch_unlock_query;
extern const char* my_sqlite_batch_fill_filename_query;
char *db_address; /* host address */
char *db_socket; /* socket for local access */
int db_port; /* port of host address */
- int have_insert_id; /* do have insert_id() */
bool connected;
POOLMEM *errmsg; /* nicely edited error message */
POOLMEM *cmd; /* SQL command string */
#define DB_STATUS int
/* "Generic" names for easier conversion */
-#define sql_store_result(x) mysql_store_result((x)->db)
-#define sql_use_result(x) mysql_use_result((x)->db)
-#define sql_free_result(x) my_mysql_free_result(x)
-#define sql_fetch_row(x) mysql_fetch_row((x)->result)
-#define sql_query(x, y) mysql_query((x)->db, (y))
-#define sql_strerror(x) mysql_error((x)->db)
-#define sql_num_rows(x) mysql_num_rows((x)->result)
-#define sql_data_seek(x, i) mysql_data_seek((x)->result, (i))
-#define sql_affected_rows(x) mysql_affected_rows((x)->db)
-#define sql_insert_id(x,y) mysql_insert_id((x)->db)
-#define sql_field_seek(x, y) mysql_field_seek((x)->result, (y))
-#define sql_fetch_field(x) mysql_fetch_field((x)->result)
-#define sql_num_fields(x) (int)mysql_num_fields((x)->result)
-#define SQL_ROW MYSQL_ROW
-#define SQL_FIELD MYSQL_FIELD
-#define SQL_MATCH "MATCH"
+#define sql_store_result(x) mysql_store_result((x)->db)
+#define sql_use_result(x) mysql_use_result((x)->db)
+#define sql_free_result(x) my_mysql_free_result(x)
+#define sql_fetch_row(x) mysql_fetch_row((x)->result)
+#define sql_query(x, y) mysql_query((x)->db, (y))
+#define sql_strerror(x) mysql_error((x)->db)
+#define sql_num_rows(x) mysql_num_rows((x)->result)
+#define sql_data_seek(x, i) mysql_data_seek((x)->result, (i))
+#define sql_affected_rows(x) mysql_affected_rows((x)->db)
+#define sql_insert_autokey_record(x, y, z) my_mysql_insert_autokey_record((x), (y), (z))
+#define sql_field_seek(x, y) mysql_field_seek((x)->result, (y))
+#define sql_fetch_field(x) mysql_fetch_field((x)->result)
+#define sql_num_fields(x) (int)mysql_num_fields((x)->result)
+#define SQL_ROW MYSQL_ROW
+#define SQL_FIELD MYSQL_FIELD
+#define SQL_MATCH "MATCH"
#define sql_batch_start(x,y) my_batch_start(x,y)
#define sql_batch_end(x,y,z) my_batch_end(x,y,z)
extern const char* my_mysql_batch_fill_filename_query;
extern const char* my_mysql_batch_fill_path_query;
extern void my_mysql_free_result(B_DB *mdb);
+extern int my_mysql_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name);
#else
char *db_address; /* host address */
char *db_socket; /* socket for local access */
int db_port; /* port of host address */
- int have_insert_id; /* do have insert_id() */
bool connected;
POOLMEM *errmsg; /* nicely edited error message */
POOLMEM *cmd; /* SQL command string */
POSTGRESQL_ROW my_postgresql_fetch_row (B_DB *mdb);
int my_postgresql_query (B_DB *mdb, const char *query);
void my_postgresql_data_seek (B_DB *mdb, int row);
-int my_postgresql_currval (B_DB *mdb, const char *table_name);
+int my_postgresql_insert_autokey_record (B_DB *mdb, const char *query, const char *table_name);
void my_postgresql_field_seek (B_DB *mdb, int row);
POSTGRESQL_FIELD * my_postgresql_fetch_field(B_DB *mdb);
#define sql_num_rows(x) ((unsigned) PQntuples((x)->result))
#define sql_data_seek(x, i) my_postgresql_data_seek((x), (i))
#define sql_affected_rows(x) ((unsigned) atoi(PQcmdTuples((x)->result)))
-#define sql_insert_id(x,y) my_postgresql_currval((x), (y))
+#define sql_insert_autokey_record(x, y, z) my_postgresql_insert_autokey_record((x), (y), (z))
#define sql_field_seek(x, y) my_postgresql_field_seek((x), (y))
#define sql_fetch_field(x) my_postgresql_fetch_field(x)
#define sql_num_fields(x) ((x)->num_fields)
#ifdef HAVE_INGRES
#include "myingres.h"
-#include "lib/breg.h"
#define BDB_VERSION 12
char *db_socket; /* socket for local access */
int db_port; /* port of host address */
int session_id; /* unique session id */
- int have_insert_id; /* do have insert_id() */
bool connected;
POOLMEM *errmsg; /* nicely edited error message */
POOLMEM *cmd; /* SQL command string */
POOLMEM *path; /* Path only */
POOLMEM *esc_name; /* Escaped file name */
POOLMEM *esc_path; /* Escaped path name */
- BREGEXP *limit_filter; /* Filter LIMIT function in queries into supported SQL */
+ alist *query_filters; /* Filters to convert sql queries into supported Ingres SQL */
int fnl; /* file name length */
int pnl; /* path name length */
};
INGRES_ROW my_ingres_fetch_row (B_DB *mdb);
int my_ingres_query (B_DB *mdb, const char *query);
void my_ingres_data_seek (B_DB *mdb, int row);
-int my_ingres_currval (B_DB *mdb, const char *table_name);
void my_ingres_field_seek (B_DB *mdb, int row);
INGRES_FIELD * my_ingres_fetch_field(B_DB *mdb);
void my_ingres_close (B_DB *mdb);
+int my_ingres_insert_autokey_record (B_DB *mdb, const char *query, const char *table_name);
-int my_ingres_batch_start(JCR *jcr, B_DB *mdb);
-int my_ingres_batch_end(JCR *jcr, B_DB *mdb, const char *error);
+bool my_ingres_batch_start(JCR *jcr, B_DB *mdb);
+bool my_ingres_batch_end(JCR *jcr, B_DB *mdb, const char *error);
typedef struct ATTR_DBR ATTR_DBR;
-int my_ingres_batch_insert(JCR *jcr, B_DB *mdb, ATTR_DBR *ar);
+bool my_ingres_batch_insert(JCR *jcr, B_DB *mdb, ATTR_DBR *ar);
char *my_ingres_copy_escape(char *dest, char *src, size_t len);
extern const char* my_ingres_batch_lock_path_query;
extern const char* my_ingres_batch_fill_path_query;
/* "Generic" names for easier conversion */
-#define sql_store_result(x) ((x)->result)
-#define sql_free_result(x) my_ingres_free_result(x)
-#define sql_fetch_row(x) my_ingres_fetch_row(x)
-#define sql_query(x, y) my_ingres_query((x), (y))
-#define sql_close(x) my_ingres_close(x)
-#define sql_strerror(x) INGerrorMessage((x)->db)
-#define sql_num_rows(x) ((unsigned) INGntuples((x)->result))
-#define sql_data_seek(x, i) my_ingres_data_seek((x), (i))
-#define sql_affected_rows(x) ((x)->num_rows)
-#define sql_insert_id(x,y) my_ingres_currval((x), (y))
-#define sql_field_seek(x, y) my_ingres_field_seek((x), (y))
-#define sql_fetch_field(x) my_ingres_fetch_field(x)
-#define sql_num_fields(x) ((x)->num_fields)
+#define sql_store_result(x) ((x)->result)
+#define sql_free_result(x) my_ingres_free_result(x)
+#define sql_fetch_row(x) my_ingres_fetch_row(x)
+#define sql_query(x, y) my_ingres_query((x), (y))
+#define sql_close(x) my_ingres_close(x)
+#define sql_strerror(x) INGerrorMessage((x)->db)
+#define sql_num_rows(x) ((unsigned) INGntuples((x)->result))
+#define sql_data_seek(x, i) my_ingres_data_seek((x), (i))
+#define sql_affected_rows(x) ((x)->num_rows)
+#define sql_insert_autokey_record(x, y, z) my_ingres_insert_autokey_record((x), (y), (z))
+#define sql_field_seek(x, y) my_ingres_field_seek((x), (y))
+#define sql_fetch_field(x) my_ingres_fetch_field(x)
+#define sql_num_fields(x) ((x)->num_fields)
#define sql_batch_start(x,y) my_ingres_batch_start(x,y)
#define sql_batch_end(x,y,z) my_ingres_batch_end(x,y,z)
char *db_address; /* host address */
char *db_socket; /* socket for local access */
int db_port; /* port of host address */
- int have_insert_id; /* do have insert_id() */
bool connected;
POOLMEM *errmsg; /* nicely edited error message */
POOLMEM *cmd; /* SQL command string */
int my_dbi_getisnull (dbi_result *result, int row_number, int column_number);
char * my_dbi_getvalue (dbi_result *result, int row_number, unsigned int column_number);
//int my_dbi_getvalue (dbi_result *result, int row_number, unsigned int column_number, char *value);
-int my_dbi_sql_insert_id(B_DB *mdb, char *table_name);
+int my_dbi_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name);
int my_dbi_batch_start(JCR *jcr, B_DB *mdb);
int my_dbi_batch_end(JCR *jcr, B_DB *mdb, const char *error);
#define SQL_MATCH my_dbi_match[db_type]
/* #define sql_affected_rows(x) dbi_result_get_numrows_affected((x)->result) */
#define sql_affected_rows(x) 1
-#define sql_insert_id(x,y) my_dbi_sql_insert_id((x), (y))
-#define sql_field_seek(x, y) my_dbi_field_seek((x), (y))
-#define sql_fetch_field(x) my_dbi_fetch_field(x)
-#define sql_num_fields(x) ((x)->num_fields)
+#define sql_insert_autokey_record(x, y, z) my_dbi_insert_autokey_record((x), (y), (z))
+#define sql_field_seek(x, y) my_dbi_field_seek((x), (y))
+#define sql_fetch_field(x) my_dbi_fetch_field(x)
+#define sql_num_fields(x) ((x)->num_fields)
#define sql_batch_start(x,y) my_dbi_batch_start(x,y)
#define sql_batch_end(x,y,z) my_dbi_batch_end(x,y,z)
#define sql_batch_insert(x,y,z) my_dbi_batch_insert(x,y,z)
int DigestType;
};
+struct ROBJECT_DBR {
+ char *object_name;
+ char *object;
+ char *plugin_name;
+ uint32_t object_len;
+ uint32_t object_index;
+ int32_t object_compression;
+ uint32_t FileIndex;
+ uint32_t Stream;
+ uint32_t FileType;
+ JobId_t JobId;
+ DBId_t RestoreObjectId;
+};
+
/* File record -- same format as database */
struct FILE_DBR {