From: Michal Rakowski Date: Tue, 8 Dec 2020 09:14:04 +0000 (+0100) Subject: Introduce 'bdb_list_plugin_objects_ids' helper method X-Git-Tag: Release-11.3.2~800 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6d254afcbb272aa432e67d2ea0926228b8f9420;p=thirdparty%2Fbacula.git Introduce 'bdb_list_plugin_objects_ids' helper method --- diff --git a/bacula/src/cats/bdb.h b/bacula/src/cats/bdb.h index c5d1f5d39..79811a548 100644 --- a/bacula/src/cats/bdb.h +++ b/bacula/src/cats/bdb.h @@ -269,6 +269,7 @@ public: void bdb_list_base_files_for_job(JCR *jcr, JobId_t jobid, DB_LIST_HANDLER *sendit, void *ctx); void bdb_list_restore_objects(JCR *jcr, ROBJECT_DBR *rr, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type); void bdb_list_plugin_objects(JCR *jcr, OBJECT_DBR *obj_r, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type); + void bdb_list_plugin_objects_ids(JCR *jcr, char* id_list, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type); void bdb_list_plugin_object_types(JCR *jcr, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type); void bdb_list_snapshot_records(JCR *jcr, SNAPSHOT_DBR *sdbr, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type); diff --git a/bacula/src/cats/protos.h b/bacula/src/cats/protos.h index 3b6c5b27a..86eba128e 100644 --- a/bacula/src/cats/protos.h +++ b/bacula/src/cats/protos.h @@ -287,6 +287,8 @@ void bdb_free_restoreobject_record(JCR *jcr, ROBJECT_DBR *rr); mdb->bdb_list_plugin_object_types(jcr, sendit, ctx, type) #define db_list_plugin_objects(jcr, mdb, obj_r, sendit, ctx, type) \ mdb->bdb_list_plugin_objects(jcr, obj_r, sendit, ctx, type) +#define db_list_plugin_objects_ids(jcr, mdb, id_list, sendit, ctx, type) \ + mdb->bdb_list_plugin_objects_ids(jcr, id_list, sendit, ctx, type); #define db_list_restore_objects(jcr, mdb, rr, sendit, ctx, type) \ mdb->bdb_list_restore_objects(jcr, rr, sendit, ctx, type) #define db_list_snapshot_records(jcr, mdb, snapdbr, sendit, ua, llist) \ diff --git a/bacula/src/cats/sql_list.c b/bacula/src/cats/sql_list.c index c11f3cedb..68708f0a7 100644 --- a/bacula/src/cats/sql_list.c +++ b/bacula/src/cats/sql_list.c @@ -151,7 +151,7 @@ void BDB::bdb_list_plugin_object_types(JCR *jcr, DB_LIST_HANDLER *sendit, void * } /* - * List plugin objects + * List plugin objects (search is based on object provided) */ void BDB::bdb_list_plugin_objects(JCR *jcr, OBJECT_DBR *obj_r, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type) { @@ -234,6 +234,43 @@ void BDB::bdb_list_plugin_objects(JCR *jcr, OBJECT_DBR *obj_r, DB_LIST_HANDLER * bdb_unlock(); } +/* + * List plugin objects from list of ids provided + */ +void BDB::bdb_list_plugin_objects_ids(JCR *jcr, char* id_list, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type) +{ + POOL_MEM msg; + + switch (type) { + case VERT_LIST: + Mmsg(cmd, + "SELECT Object.ObjectId, Object.JobId, Object.Path, Object.Filename, Object.PluginName, Object.ObjectCategory, " + "Object.ObjectType, Object.ObjectName, Object.ObjectSource, Object.ObjectUUID, Object.ObjectSize " + "FROM Object WHERE ObjectId IN (%s) ORDER BY ObjectId ASC", id_list); + break; + case HORZ_LIST: + Mmsg(cmd, + "SELECT Object.ObjectId, Object.JobId, Object.ObjectCategory, " + "Object.ObjectType, Object.ObjectName, Object.ObjectUUID " + "FROM Object WHERE ObjectId IN (%s) ORDER BY ObjectId ASC", id_list); + break; + default: + break; + } + + bdb_lock(); + + if (!QueryDB(jcr, cmd)) { + Jmsg(jcr, M_ERROR, 0, _("Query %s failed!\n"), cmd); + bdb_unlock(); + return; + } + + list_result(jcr, this, sendit, ctx, type); + + sql_free_result(); + bdb_unlock(); +} /* * List restore objects *