Skip to content

Commit

Permalink
Fix the counts for tags in trash and refactor count function
Browse files Browse the repository at this point in the history
  • Loading branch information
a-h-abdelsalam committed Feb 6, 2025
1 parent fbc5c6b commit 2e491ea
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 42 deletions.
113 changes: 78 additions & 35 deletions src/manage_pg.c
Original file line number Diff line number Diff line change
Expand Up @@ -974,53 +974,96 @@ manage_create_sql_functions ()
" tag_id integer,"
" tag_type text)"
" RETURNS integer AS $$"
" DECLARE table_name text;"
" DECLARE count integer;"
" DECLARE usage_types text[];"
" BEGIN"
" IF $2 = 'audit' OR $2 = 'audit_report' OR $2 = 'policy'"
" IF tag_type = 'audit' OR tag_type = 'audit_report'"
" OR tag_type = 'policy'"
" THEN"
" usage_types := ARRAY['audit', 'policy'];"
" ELSIF $2 = 'task' OR $2 = 'report' OR $2 = 'config' "
" ELSIF tag_type = 'task' OR tag_type = 'report'"
" OR tag_type = 'config'"
" THEN"
" usage_types := ARRAY['scan'];"
" END IF;"
" CASE"
" WHEN $2 = 'audit' OR $2 = 'policy' OR $2 = 'task' OR $2 = 'config'"
" WHEN tag_type = 'audit' OR tag_type = 'task'"
" THEN RETURN (SELECT count(*)"
" FROM tag_resources"
" JOIN tasks"
" ON tasks.id = resource"
" WHERE tag_resources.tag = tag_id"
" AND tasks.usage_type = ANY(usage_types)"
" AND resource_location = " G_STRINGIFY (LOCATION_TABLE) ");"
" WHEN tag_type = 'policy' OR tag_type = 'config'"
" THEN RETURN (SELECT count(*)"
" FROM tag_resources"
" JOIN configs"
" ON configs.id = resource"
" WHERE tag_resources.tag = tag_id"
" AND configs.usage_type = ANY(usage_types)"
" AND resource_location = " G_STRINGIFY (LOCATION_TABLE) ");"
" WHEN tag_type = 'audit_report' OR tag_type = 'report'"
" THEN RETURN (SELECT count(*)"
" FROM tag_resources"
" JOIN tasks"
" ON tasks.id = (SELECT task FROM reports"
" WHERE reports.id = resource)"
" WHERE tag_resources.tag = tag_id"
" AND tasks.usage_type = ANY(usage_types)"
" AND resource_location = " G_STRINGIFY (LOCATION_TABLE) ");"
" ELSE"
" RETURN (SELECT count(*)"
" FROM tag_resources"
" WHERE tag_resources.tag = tag_id"
" AND resource_location = " G_STRINGIFY (LOCATION_TABLE) ");"
" END CASE;"
" END;"
" $$ LANGUAGE plpgsql"
" IMMUTABLE;");

sql ("CREATE OR REPLACE FUNCTION tag_resources_trash_count ("
" tag_id integer,"
" tag_type text)"
" RETURNS integer AS $$"
" DECLARE usage_types text[];"
" BEGIN"
" IF tag_type = 'audit' OR tag_type = 'audit_report'"
" OR tag_type = 'policy'"
" THEN"
" SELECT resource_type INTO table_name FROM tag_resources WHERE tag = $1;"
" table_name := table_name || 's';"
" EXECUTE"
" 'SELECT count(*)"
" FROM tag_resources"
" JOIN ' || table_name || '"
" ON ' || table_name || '.id = resource"
" WHERE tag= $1 AND ' || table_name || '.usage_type = ANY($2)"
" AND resource_location = " G_STRINGIFY (LOCATION_TABLE) ";'"
" INTO count"
" USING $1, usage_types;"
" WHEN $2 = 'audit_report' OR $2 = 'report'"
" usage_types := ARRAY['audit', 'policy'];"
" ELSIF tag_type = 'task' OR tag_type = 'report'"
" OR tag_type = 'config'"
" THEN"
" EXECUTE"
" 'SELECT count(*)"
" FROM tag_resources"
" JOIN tasks"
" ON tasks.id = (SELECT task FROM reports"
" WHERE reports.id = resource)"
" WHERE tag= $1 AND tasks.usage_type = ANY($2)"
" AND resource_location = " G_STRINGIFY (LOCATION_TABLE) ";'"
" INTO count"
" USING $1, usage_types; "
" usage_types := ARRAY['scan'];"
" END IF;"
" CASE"
" WHEN tag_type = 'audit' OR tag_type = 'task'"
" THEN RETURN (SELECT count(*)"
" FROM tag_resources_trash"
" JOIN tasks"
" ON tasks.id = resource"
" WHERE tag_resources_trash.tag = tag_id"
" AND tasks.usage_type = ANY(usage_types));"
" WHEN tag_type = 'policy' OR tag_type = 'config'"
" THEN RETURN (SELECT count(*)"
" FROM tag_resources_trash"
" JOIN configs"
" ON configs.id = resource"
" WHERE tag_resources_trash.tag = tag_id"
" AND configs.usage_type = ANY(usage_types));"
" WHEN tag_type = 'audit_report' OR tag_type = 'report'"
" THEN RETURN (SELECT count(*)"
" FROM tag_resources_trash"
" JOIN tasks"
" ON tasks.id = (SELECT task FROM reports"
" WHERE reports.id = resource)"
" WHERE tag_resources_trash.tag = tag_id"
" AND tasks.usage_type = ANY(usage_types));"
" ELSE"
" EXECUTE"
" 'SELECT count(*)"
" FROM tag_resources"
" WHERE tag = $1"
" AND resource_location = " G_STRINGIFY (LOCATION_TABLE) ";'"
" INTO count"
" USING $1;"
" RETURN (SELECT count(*)"
" FROM tag_resources_trash"
" WHERE tag_resources_trash.tag = tag_id);"
" END CASE;"
" RETURN count;"
" END;"
" $$ LANGUAGE plpgsql"
" IMMUTABLE;");
Expand Down
13 changes: 6 additions & 7 deletions src/manage_sql.c
Original file line number Diff line number Diff line change
Expand Up @@ -57051,15 +57051,15 @@ tag_add_resource_uuid (tag_t tag,
{
gchar *usage_type;
if (strcmp (type, "report"))
usage_type = sql_string("SELECT usage_type FROM %ss WHERE id = %llu",
usage_type = sql_string ("SELECT usage_type FROM %ss WHERE id = %llu",
type, resource);
else
{
task_t task;
if (report_task (resource, &task))
return -1;

usage_type = sql_string("SELECT usage_type FROM tasks WHERE id = %llu",
usage_type = sql_string ("SELECT usage_type FROM tasks WHERE id = %llu",
task);
}

Expand Down Expand Up @@ -57118,13 +57118,13 @@ tag_add_resources_list (tag_t tag, const char *type, array_t *uuids,
{
resource_permission = g_strdup ("get_tasks");
g_free (resource_type);
resource_type = g_strdup("task");
resource_type = g_strdup ("task");
}
else if (type_is_config_subtype (type))
{
resource_permission = g_strdup ("get_configs");
g_free (resource_type);
resource_type = g_strdup("config");
resource_type = g_strdup ("config");
}
else
resource_permission = g_strdup_printf ("get_%ss", type);
Expand Down Expand Up @@ -57956,7 +57956,7 @@ modify_tag (const char *tag_id, const char *name, const char *comment,
{ "resource_type", NULL, KEYWORD_TYPE_STRING }, \
{ "active", NULL, KEYWORD_TYPE_INTEGER }, \
{ "value", NULL, KEYWORD_TYPE_STRING }, \
{ "tag_resources_count (id, resource_type)", \
{ "tag_resources_count (tags.id, tags.resource_type)", \
"resources", KEYWORD_TYPE_INTEGER }, \
{ NULL, NULL, KEYWORD_TYPE_UNKNOWN } \
}
Expand All @@ -57970,8 +57970,7 @@ modify_tag (const char *tag_id, const char *name, const char *comment,
{ "resource_type", NULL, KEYWORD_TYPE_STRING }, \
{ "active", NULL, KEYWORD_TYPE_INTEGER }, \
{ "value", NULL, KEYWORD_TYPE_STRING }, \
{ "(SELECT count(*) FROM tag_resources_trash" \
" WHERE tag = tags_trash.id)", \
{ "tag_resources_trash_count (tags_trash.id, tags_trash.resource_type)", \
"resources", KEYWORD_TYPE_INTEGER }, \
{ NULL, NULL, KEYWORD_TYPE_UNKNOWN } \
}
Expand Down

0 comments on commit 2e491ea

Please sign in to comment.