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_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);
void bdb_list_files(JCR *jcr, FILE_DBR *fr, DB_RESULT_HANDLER *sendit, void *ctx);
}
}
-void parse_plugin_object_string(char **obj_str, OBJECT_DBR *obj_r)
+void OBJECT_DBR::parse_plugin_object_string(char **obj_str)
{
+ /* TODO: Do some sanity checks on the input format */
char *p = *obj_str;
-
- obj_r->JobId = str_to_int32(p);
- skip_nonspaces(&p); /* skip JobId */
- skip_spaces(&p);
-
- obj_r->Path = p;
+ int fnl, pnl;
+ char* tmp_path = p;
skip_nonspaces(&p); /* skip Path */
skip_spaces(&p);
- char *c = strpbrk(obj_r->Path, " ");
+ char *c = strpbrk(tmp_path, " ");
if (c) {
*c = '\0';
}
- obj_r->Filename = p;
- skip_nonspaces(&p); /* skip FileName */
+ if (tmp_path[strlen(tmp_path) - 1] == '/') {
+ pm_strcpy(Path, tmp_path);
+ unbash_spaces(Path);
+ } else {
+ split_path_and_filename(tmp_path, &Path, &pnl, &Filename, &fnl);
+ unbash_spaces(Path);
+ unbash_spaces(Filename);
+ }
+
+ char *tmp = p;
+ skip_nonspaces(&p); /* skip PluginName */
skip_spaces(&p);
- c = strpbrk(obj_r->Filename, " ");
+ c = strpbrk(tmp, " ");
if (c) {
*c = '\0';
}
+ pm_strcpy(PluginName, tmp);
+ unbash_spaces(PluginName);
- obj_r->PluginName = p;
- skip_nonspaces(&p); /* skip PluginName */
+ tmp = p;
+ skip_nonspaces(&p); /* skip ObjectType */
skip_spaces(&p);
- c = strpbrk(obj_r->PluginName, " ");
+ c = strpbrk(tmp, " ");
if (c) {
*c = '\0';
}
+ bstrncpy(ObjectCategory, tmp, sizeof(ObjectCategory));
+ unbash_spaces(ObjectCategory);
- char *obj_type = p;
+ tmp = p;
skip_nonspaces(&p); /* skip ObjectType */
skip_spaces(&p);
- c = strpbrk(obj_type, " ");
+ c = strpbrk(tmp, " ");
if (c) {
*c = '\0';
}
- bstrncpy(obj_r->ObjectType, obj_type, sizeof(obj_r->ObjectType));
+ bstrncpy(ObjectType, tmp, sizeof(ObjectType));
+ unbash_spaces(ObjectType);
- obj_r->ObjectName = p;
+ tmp = p;
skip_nonspaces(&p); /* skip ObjectName */
skip_spaces(&p);
- c = strpbrk(obj_r->ObjectName, " ");
+ c = strpbrk(tmp, " ");
if (c) {
*c = '\0';
}
+ bstrncpy(ObjectName, tmp, sizeof(ObjectName));
+ unbash_spaces(ObjectName);
- obj_r->ObjectSource = p;
+ tmp = p;
skip_nonspaces(&p); /* skip ObjectSource */
skip_spaces(&p);
- c = strpbrk(obj_r->ObjectSource, " ");
+ c = strpbrk(tmp, " ");
if (c) {
*c = '\0';
}
+ bstrncpy(ObjectSource, tmp, sizeof(ObjectSource));
+ unbash_spaces(ObjectSource);
- obj_r->ObjectUUID = p;
+ tmp = p;
skip_nonspaces(&p); /* skip ObjectUuid */
skip_spaces(&p);
- c = strpbrk(obj_r->ObjectUUID, " ");
+ c = strpbrk(tmp, " ");
if (c) {
*c = '\0';
}
+ bstrncpy(ObjectUUID, tmp, sizeof(ObjectUUID));
+ unbash_spaces(ObjectUUID);
- obj_r->ObjectSize = str_to_uint64(p);
+ ObjectSize = str_to_uint64(p);
}
-void parse_restore_object_string(char **r_obj_str, ROBJECT_DBR *robj_r)
-{
- char *p = *r_obj_str;
- int len;
-
- robj_r->FileIndex = str_to_int32(p); /* FileIndex */
- skip_nonspaces(&p);
- skip_spaces(&p);
- robj_r->FileType = str_to_int32(p); /* FileType */
- skip_nonspaces(&p);
- skip_spaces(&p);
- robj_r->object_index = str_to_int32(p); /* Object Index */
- skip_nonspaces(&p);
- skip_spaces(&p);
- robj_r->object_len = str_to_int32(p); /* object length possibly compressed */
- skip_nonspaces(&p);
- skip_spaces(&p);
- robj_r->object_full_len = str_to_int32(p); /* uncompressed object length */
- skip_nonspaces(&p);
- skip_spaces(&p);
- robj_r->object_compression = str_to_int32(p); /* compression */
- skip_nonspaces(&p);
- skip_spaces(&p);
-
- robj_r->plugin_name = p; /* point to plugin name */
- len = strlen(robj_r->plugin_name);
- robj_r->object_name = &robj_r->plugin_name[len+1]; /* point to object name */
- len = strlen(robj_r->object_name);
- robj_r->object = &robj_r->object_name[len+1]; /* point to object */
- robj_r->object[robj_r->object_len] = 0; /* add zero for those who attempt printing */
- Dmsg7(100, "oname=%s stream=%d FT=%d FI=%d JobId=%ld, obj_len=%d\nobj=\"%s\"\n",
- robj_r->object_name, robj_r->Stream, robj_r->FileType, robj_r->FileIndex, robj_r->JobId,
- robj_r->object_len, robj_r->object);
-}
-
#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */
class OBJECT_DBR {
public:
- OBJECT_DBR() { bmemset(this, 0, sizeof(OBJECT_DBR)); };
- ~OBJECT_DBR() { };
+ OBJECT_DBR() {
+ Path = get_pool_memory(PM_FNAME);
+ Filename = get_pool_memory(PM_FNAME);
+ PluginName = get_pool_memory(PM_FNAME);
+ reset();
+ };
+ ~OBJECT_DBR() {
+ free_pool_memory(Path);
+ free_pool_memory(Filename);
+ free_pool_memory(PluginName);
+ };
+ /* reset memory */
+ void reset() {
+ JobId = 0;
+ ObjectId = 0;
+ ObjectSize = 0;
+ *Path = *Filename = *PluginName = 0;
+ *ObjectCategory = *ObjectType = *ObjectName = *ObjectSource = *ObjectUUID = *ClientName = 0;
+ limit = 0;
+ order = 0;
+ };
+ /* Parse OBJECT record from stream */
+ void parse_plugin_object_string(char **obj_str);
DBId_t ObjectId;
JobId_t JobId;
- char *Path;
- char *Filename;
- char *PluginName;
+ POOLMEM *Path;
+ POOLMEM *Filename;
+ POOLMEM *PluginName;
+ char ObjectCategory[MAX_NAME_LENGTH];
char ObjectType[MAX_NAME_LENGTH];
- char *ObjectName;
- char *ObjectSource;
- char *ObjectUUID;
+ char ObjectName[MAX_NAME_LENGTH];
+ char ObjectSource[MAX_NAME_LENGTH];
+ char ObjectUUID[MAX_NAME_LENGTH];
uint64_t ObjectSize;
+
+ /* Fields not stored in db directly */
+ char ClientName[MAX_NAME_LENGTH];
+
+ int limit;
+ int order;
};
struct ROBJECT_DBR {
void split_path_and_file(JCR *jcr, BDB *mdb, const char *fname);
/* Helper functions */
-void parse_plugin_object_string(char **obj_str, OBJECT_DBR *obj_r);
void parse_restore_object_string(char **obj_str, ROBJECT_DBR *r_r);
#endif /* __CATS_H_ */
(
ObjectId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
- JobId integer not null,
- Path BLOB NOT NULL,
- Filename BLOB NOT NULL,
- PluginName TINYBLOB NOT NULL,
-
- ObjectType TINYBLOB NOT NULL,
- ObjectName TINYBLOB NOT NULL,
- ObjectSource TINYBLOB NOT NULL,
- ObjectUUID TINYBLOB NOT NULL,
- ObjectSize bigint NOT NULL,
+ JobId integer not null,
+ Path BLOB NOT NULL,
+ Filename BLOB NOT NULL,
+ PluginName TINYBLOB NOT NULL,
+
+ ObjectCategory TINYBLOB NOT NULL,
+ ObjectType TINYBLOB NOT NULL,
+ ObjectName TINYBLOB NOT NULL,
+ ObjectSource TINYBLOB NOT NULL,
+ ObjectUUID TINYBLOB NOT NULL,
+ ObjectSize bigint NOT NULL,
primary key (ObjectId)
);
Filename text not null,
PluginName text not null,
- ObjectType text not null,
- ObjectName text not null,
- ObjectSource text not null,
- ObjectUUID text not null,
- ObjectSize bigint not null,
+ ObjectCategory text not null,
+ ObjectType text not null,
+ ObjectName text not null,
+ ObjectSource text not null,
+ ObjectUUID text not null,
+ ObjectSize bigint not null,
primary key (ObjectId)
);
mdb->bdb_list_events_records(jcr, rec, sendit, ctx, type)
#define db_list_base_files_for_job(jcr, mdb, jobid, sendit, ctx) \
mdb->bdb_list_base_files_for_job(jcr, jobid, sendit, ctx)
+#define db_list_plugin_object_types(jcr, mdb, sendit, ctx, type) \
+ 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_restore_objects(jcr, mdb, rr, sendit, ctx, type) \
POOLMEM *esc_path = get_pool_memory(PM_MESSAGE);
POOLMEM *esc_filename = get_pool_memory(PM_MESSAGE);
POOLMEM *esc_plugin_name = get_pool_memory(PM_MESSAGE);
- POOLMEM *esc_obj_type = get_pool_memory(PM_MESSAGE);
- POOLMEM *esc_obj_name = get_pool_memory(PM_MESSAGE);
- POOLMEM *esc_obj_source = get_pool_memory(PM_MESSAGE);
- POOLMEM *esc_obj_uuid = get_pool_memory(PM_MESSAGE);
+ char esc_obj_category[MAX_ESCAPE_NAME_LENGTH];
+ char esc_obj_type[MAX_ESCAPE_NAME_LENGTH];
+ char esc_obj_name[MAX_ESCAPE_NAME_LENGTH];
+ char esc_obj_source[MAX_ESCAPE_NAME_LENGTH];
+ char esc_obj_uuid[MAX_ESCAPE_NAME_LENGTH];
str_len = strlen(obj->Path);
esc_path = check_pool_memory_size(esc_path, str_len*2+1);
esc_plugin_name = check_pool_memory_size(esc_plugin_name, str_len*2+1);
bdb_escape_string(jcr, esc_plugin_name, obj->PluginName, str_len);
- str_len = strlen(obj->ObjectType);
- esc_obj_type = check_pool_memory_size(esc_obj_type, str_len*2+1);
- bdb_escape_string(jcr, esc_obj_type, obj->ObjectType, str_len);
-
- str_len = strlen(obj->ObjectName);
- esc_obj_name = check_pool_memory_size(esc_obj_name, str_len*2+1);
- bdb_escape_string(jcr, esc_obj_name, obj->ObjectName, str_len);
-
- str_len = strlen(obj->ObjectSource);
- esc_obj_source = check_pool_memory_size(esc_obj_source, str_len*2+1);
- bdb_escape_string(jcr, esc_obj_source, obj->ObjectSource, str_len);
-
- str_len = strlen(obj->ObjectUUID);
- esc_obj_uuid= check_pool_memory_size(esc_obj_uuid, str_len*2+1);
- bdb_escape_string(jcr, esc_obj_uuid, obj->ObjectUUID, str_len);
+ bdb_escape_string(jcr, esc_obj_category, obj->ObjectCategory, strlen(obj->ObjectCategory));
+ bdb_escape_string(jcr, esc_obj_type, obj->ObjectType, strlen(obj->ObjectType));
+ bdb_escape_string(jcr, esc_obj_name, obj->ObjectName, strlen(obj->ObjectName));
+ bdb_escape_string(jcr, esc_obj_source, obj->ObjectSource, strlen(obj->ObjectSource));
+ bdb_escape_string(jcr, esc_obj_uuid, obj->ObjectUUID, strlen(obj->ObjectUUID));
bdb_lock();
Mmsg(cmd,
- "INSERT INTO Object (JobId, Path, Filename, PluginName, "
+ "INSERT INTO Object (JobId, Path, Filename, PluginName, ObjectCategory, "
"ObjectType, ObjectName, ObjectSource, ObjectUUID, ObjectSize) "
- "VALUES (%u, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %llu)",
- obj->JobId, esc_path, esc_filename, esc_plugin_name,
+ "VALUES (%lu, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %llu)",
+ obj->JobId, esc_path, esc_filename, esc_plugin_name, esc_obj_category,
esc_obj_type, esc_obj_name, esc_obj_source, esc_obj_uuid,
obj->ObjectSize);
free_pool_memory(esc_path);
free_pool_memory(esc_filename);
free_pool_memory(esc_plugin_name);
- free_pool_memory(esc_obj_type);
- free_pool_memory(esc_obj_name);
- free_pool_memory(esc_obj_source);
- free_pool_memory(esc_obj_uuid);
-
return ret;
}
bfree_and_null(obj_r->Path);
bfree_and_null(obj_r->Filename);
bfree_and_null(obj_r->PluginName);
- bfree_and_null(obj_r->ObjectName);
- bfree_and_null(obj_r->ObjectSource);
- bfree_and_null(obj_r->ObjectUUID);
}
/*
* */
bool BDB::bdb_get_plugin_object_record(JCR *jcr, OBJECT_DBR *obj_r)
{
+ //TODO cleanup it as well so that append_filter is used
SQL_ROW row;
- POOLMEM *where_str = get_pool_memory(PM_MESSAGE);
+ POOL_MEM where_str(PM_MESSAGE);
+ POOL_MEM tmp(PM_MESSAGE);
+ POOL_MEM esc(PM_MESSAGE);
int stat = false;
- Mmsg(where_str, "JobID=%lu AND ObjectID=%lu", obj_r->JobId, obj_r->ObjectId);
+ if (obj_r->JobId > 0) {
+ Mmsg(tmp, "%s JobId=%lu ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->JobId);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ if (obj_r->ObjectId > 0) {
+ Mmsg(tmp, "%s ObjectId=%lu ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->ObjectId);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ //TODO is that surely needed for bdb_escape_string() calls?
+ bdb_lock();
+
+ esc.check_size(strlen(obj_r->Path)*2+1);
+ if (*obj_r->Path) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->Path, strlen(obj_r->Path));
+ Mmsg(tmp, "%s Path='%s' ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->Path);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ esc.check_size(strlen(obj_r->Filename)*2+1);
+ if (*obj_r->Filename) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->Filename, strlen(obj_r->Filename));
+ Mmsg(tmp, "%s Filename='%s' ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->Filename);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ esc.check_size(strlen(obj_r->PluginName)*2+1);
+ if (*obj_r->PluginName) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->PluginName, strlen(obj_r->PluginName));
+ Mmsg(tmp, "%s PluginName='%s' ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->PluginName);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ // Other fields are fixed-size
+ esc.check_size(MAX_ESCAPE_NAME_LENGTH);
+ if (*obj_r->ObjectType) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->ObjectType, strlen(obj_r->ObjectType));
+ Mmsg(tmp, "%s ObjectType='%s' ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->ObjectType);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ if (*obj_r->ObjectName) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->ObjectName, strlen(obj_r->ObjectName));
+ Mmsg(tmp, "%s ObjectName='%s' ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->ObjectName);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ if (*obj_r->ObjectSource) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->ObjectSource, strlen(obj_r->ObjectSource));
+ Mmsg(tmp, "%s ObjectSource='%s' ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->ObjectSource);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ if (*obj_r->ObjectUUID) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->ObjectUUID, strlen(obj_r->ObjectUUID));
+ Mmsg(tmp, "%s ObjectUUID='%s' ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->ObjectUUID);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
+ if (obj_r->ObjectSize) {
+ Mmsg(tmp, "%s ObjectSize=%llu ",
+ where_str.c_str()[0] == 0? "WHERE" : "AND",
+ obj_r->ObjectSize);
+ pm_strcat(where_str, tmp.c_str());
+ }
+
Mmsg(cmd,
"SELECT ObjectId, JobId, Path, Filename, PluginName, "
"ObjectType, ObjectName, ObjectSource, ObjectUUID, ObjectSize "
- "FROM Object WHERE %s", where_str);
+ "FROM Object %s", where_str.c_str());
- bdb_lock();
if (QueryDB(jcr, cmd)) {
if (sql_num_rows() > 1) {
char ed1[30];
Mmsg2(errmsg, _("PluginOjbect with JobId=%lu ObjectId=%lu not found.\n"),
obj_r->JobId, obj_r->ObjectId);
} else {
- db_free_pluginobject_record(jcr, obj_r);
-
obj_r->ObjectId = str_to_uint64(row[0]);
obj_r->JobId = str_to_uint64(row[1]);
- obj_r->Path = bstrdup(row[2]);
- obj_r->Filename = bstrdup(row[3]);
- obj_r->PluginName = bstrdup(row[4]);
- bstrncpy(obj_r->ObjectType, row[5], 128);
- obj_r->ObjectName = row[6];
- obj_r->ObjectName = bstrdup(row[7]);
- obj_r->ObjectSource = bstrdup(row[8]);
- obj_r->ObjectUUID = bstrdup(row[8]);
+ pm_strcpy(obj_r->Path, row[2]);
+ pm_strcpy(obj_r->Filename, row[3]);
+ pm_strcpy(obj_r->PluginName, row[4]);
+ bstrncpy(obj_r->ObjectType, row[5], sizeof(obj_r->ObjectType));
+ bstrncpy(obj_r->ObjectName, row[6], sizeof(obj_r->ObjectName));
+ bstrncpy(obj_r->ObjectSource, row[7], sizeof(obj_r->ObjectSource));
+ bstrncpy(obj_r->ObjectUUID, row[8], sizeof(obj_r->ObjectUUID));
obj_r->ObjectSize = str_to_uint64(row[9]);
+
stat = true;
}
} else {
bdb_unlock();
-bail_out:
- free_pool_memory(where_str);
return stat;
}
/*
/* build a jobid list ie: 1,2,3,4 */
Mmsg(query, "SELECT JobId FROM btemp3%s ORDER by JobTDate", jobid);
- bdb_sql_query(query.c_str(), db_list_handler, jobids);
+ if(!bdb_sql_query(query.c_str(), db_list_handler, jobids)) {
+ goto bail_out;
+ }
Dmsg1(1, "db_get_accurate_jobids=%s\n", jobids->list);
ret = true;
}
+/*
+ * List plugin objects types
+ */
+void BDB::bdb_list_plugin_object_types(JCR *jcr, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
+{
+ Mmsg(cmd, "SELECT DISTINCT ObjectType FROM Object");
+ 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 plugin objects
*/
void BDB::bdb_list_plugin_objects(JCR *jcr, OBJECT_DBR *obj_r, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
{
- char esc[MAX_ESCAPE_NAME_LENGTH];
+ POOL_MEM esc(PM_MESSAGE), tmp(PM_MESSAGE), where(PM_MESSAGE), join(PM_MESSAGE);
bdb_lock();
- if (type == HORZ_LIST) {
- if (obj_r->ObjectType[0] != 0) {
- bdb_escape_string(jcr, esc, obj_r->ObjectType, strlen(obj_r->ObjectType));
- Mmsg(cmd,
- "SELECT ObjectId, JobId, "
- "ObjectType, ObjectName "
- "FROM Object WHERE ObjectType='%s'",
- esc);
- } else {
- Mmsg(cmd,
- "SELECT ObjectId, JobId, "
- "ObjectType, ObjectName "
- "FROM Object ORDER BY ObjectId");
- }
- } else {
- if (obj_r->ObjectType[0] != 0) {
- bdb_escape_string(jcr, esc, obj_r->ObjectType, strlen(obj_r->ObjectType));
+ //TODO add ACL part
+ if (obj_r->ObjectName[0] != 0) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->ObjectName, strlen(obj_r->ObjectName));
+ Mmsg(tmp, " Object.ObjectName='%s'", esc.c_str());
+ append_filter(where.addr(), tmp.c_str());
+ }
+
+ if (obj_r->ObjectType[0] != 0) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->ObjectType, strlen(obj_r->ObjectType));
+ Mmsg(tmp, " Object.ObjectType='%s'", esc.c_str());
+ append_filter(where.addr(), tmp.c_str());
+ }
+
+ if (obj_r->ObjectId != 0) {
+ Mmsg(tmp, " Object.ObjectId=%d", obj_r->ObjectId);
+ append_filter(where.addr(), tmp.c_str());
+ }
+
+ if (obj_r->JobId != 0) {
+ Mmsg(tmp, " Object.JobId=%d", obj_r->JobId);
+ append_filter(where.addr(), tmp.c_str());
+ }
+
+ if (obj_r->ClientName[0] != 0) {
+ bdb_escape_string(jcr, esc.c_str(), obj_r->ClientName, strlen(obj_r->ClientName));
+ Mmsg(tmp, " Client.Name='%s'", esc.c_str());
+ append_filter(where.addr(), tmp.c_str());
+ Mmsg(join, " INNER JOIN Job On Object.JobId=Job.JobId "
+ " INNER JOIN Client ON Job.ClientId=Client.ClientId ");
+ }
+
+
+ Mmsg(tmp, " ORDER BY ObjectId %s ", obj_r->order ? "DESC" : "ASC");
+ pm_strcat(where, tmp.c_str());
+
+ if (obj_r->limit) {
+ Mmsg(tmp, " LIMIT %d ", obj_r->limit);
+ pm_strcat(where, tmp.c_str());
+ }
+
+ switch (type) {
+ case VERT_LIST:
Mmsg(cmd,
- "SELECT ObjectId, JobId, Path, Filename, "
- "ObjectType, ObjectName, ObjectSource, ObjectUUID, ObjectSize "
- "FROM Object WHERE ObjectType='%s'", esc);
- } else {
+ "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 %s %s", join.c_str(), where.c_str());
+ break;
+ case HORZ_LIST:
Mmsg(cmd,
- "SELECT ObjectId, JobId, Path, Filename, "
- "ObjectType, ObjectName, ObjectSource, ObjectUUID, ObjectSize "
- "FROM Object ORDER BY ObjectId");
- }
+ "SELECT Object.ObjectId, Object.JobId, Object.ObjectCategory, "
+ "Object.ObjectType, Object.ObjectName "
+ "FROM Object %s %s", join.c_str(), where.c_str());
+ break;
+ default:
+ break;
}
if (!QueryDB(jcr, cmd)) {