Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 17 additions & 50 deletions internal/database/mariadb/component.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,6 @@ var componentObject = DbObject[*entity.Component]{
},
}

func ensureComponentFilter(filter *entity.ComponentFilter) *entity.ComponentFilter {
if filter == nil {
filter = &entity.ComponentFilter{}
}

return EnsurePagination(filter)
}

func needSingleComponentByServiceVulnerabilityCounts(filter *entity.ComponentFilter, order *Order) bool {
return order.ByCount() && (len(filter.Id) > 0 && (len(filter.ServiceCCRN) > 0))
}
Expand Down Expand Up @@ -187,44 +179,20 @@ func (s *SqlDatabase) buildComponentStatement(
order []entity.Order,
l *logrus.Entry,
) (Stmt, []any, error) {
filter = ensureComponentFilter(filter)
l.WithFields(logrus.Fields{"filter": filter})

cursorFields, err := DecodeCursor(filter.After)
if err != nil {
return nil, nil, fmt.Errorf("failed to decode Remediation cursor: %w", err)
}

ord := NewOrder(order, entity.Order{By: entity.ComponentId, Direction: entity.OrderDirectionAsc})
joins := componentObject.GetJoins(filter, ord)
whereClause, hasFilter := componentObject.GetFilterWhereClause(filter, withCursor)
cursorQuery := componentObject.GetCursorQuery(&hasFilter, cursorFields, &withCursor, false)

var query string
if withCursor {
query = fmt.Sprintf(baseQuery, joins, whereClause, cursorQuery, ord)
} else {
query = fmt.Sprintf(baseQuery, joins, whereClause, ord)
}

// construct prepared statement and if where clause does exist add parameters
stmt, err := s.db.PreparexContext(ctx, query)
if err != nil {
msg := ERROR_MSG_PREPARED_STMT
l.WithFields(
logrus.Fields{
"error": err,
"query": query,
"stmt": stmt,
},
).Error(msg)

return nil, nil, fmt.Errorf("%s", msg)
statement := Statement{
Db: s.db,
L: l,
Obj: &componentObject,
BaseQuery: baseQuery,
Order: NewOrder(order, entity.Order{By: entity.ComponentId, Direction: entity.OrderDirectionAsc}),
WithCursor: withCursor,
CheckCursorInWhere: true,
CheckCursor: true,
CheckFilter: true,
Aggregated: false,
}

filterParameters := componentObject.GetFilterParameters(filter, withCursor, cursorFields)

return stmt, filterParameters, nil
return BuildStatement(ctx, statement, filter)
}

func (s *SqlDatabase) GetAllComponentCursors(
Expand All @@ -243,7 +211,7 @@ func (s *SqlDatabase) GetAllComponentCursors(
%s GROUP BY C.component_id ORDER BY %s
`

filter = ensureComponentFilter(filter)
filter = EnsureFilter(filter)
columns := s.getComponentColumns(order)
baseQuery = fmt.Sprintf(baseQuery, columns, "%s", "%s", "%s")

Expand Down Expand Up @@ -301,7 +269,7 @@ func (s *SqlDatabase) GetComponents(
%s GROUP BY C.component_id ORDER BY %s LIMIT ?
`

filter = ensureComponentFilter(filter)
filter = EnsureFilter(filter)
columns := s.getComponentColumns(order)
baseQuery = fmt.Sprintf(baseQuery, columns, "%s", "%s", "%s", "%s")

Expand Down Expand Up @@ -387,7 +355,7 @@ func (s *SqlDatabase) CountComponentVulnerabilities(
filterParameters []any
)

filter = ensureComponentFilter(filter)
filter = EnsureFilter(filter)

query := `
SELECT CVR.critical_count, CVR.high_count, CVR.medium_count, CVR.low_count, CVR.none_count FROM %s AS CVR
Expand Down Expand Up @@ -441,8 +409,7 @@ func (s *SqlDatabase) CountComponentVulnerabilities(
"error": err,
"query": query,
"stmt": stmt,
},
).Error(msg)
}).Error(msg)

return nil, fmt.Errorf("%s", msg)
}
Expand Down Expand Up @@ -490,7 +457,7 @@ func (s *SqlDatabase) GetComponentCcrns(ctx context.Context, filter *entity.Comp
`

// Ensure the filter is initialized
filter = ensureComponentFilter(filter)
filter = EnsureFilter(filter)
order := []entity.Order{
{
By: entity.ComponentCcrn,
Expand Down
64 changes: 13 additions & 51 deletions internal/database/mariadb/component_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -267,16 +267,6 @@ var componentInstanceObject = DbObject[*entity.ComponentInstance]{
},
}

func ensureComponentInstanceFilter(
filter *entity.ComponentInstanceFilter,
) *entity.ComponentInstanceFilter {
if filter == nil {
filter = &entity.ComponentInstanceFilter{}
}

return EnsurePagination(filter)
}

func (s *SqlDatabase) buildComponentInstanceStatement(
ctx context.Context,
baseQuery string,
Expand All @@ -285,48 +275,20 @@ func (s *SqlDatabase) buildComponentInstanceStatement(
order []entity.Order,
l *logrus.Entry,
) (Stmt, []any, error) {
filter = ensureComponentInstanceFilter(filter)
l.WithFields(logrus.Fields{"filter": filter})

cursorFields, err := DecodeCursor(filter.After)
if err != nil {
return nil, nil, fmt.Errorf("failed to decode cursor: %w", err)
}

ord := NewOrder(order, entity.Order{By: entity.ComponentInstanceId, Direction: entity.OrderDirectionAsc})
joins := componentInstanceObject.GetJoins(filter, ord)
whereClause, hasFilter := componentInstanceObject.GetFilterWhereClause(filter, withCursor)
cursorQuery := componentInstanceObject.GetCursorQuery(&hasFilter, cursorFields, &withCursor, false)

var query string
if withCursor {
query = fmt.Sprintf(baseQuery, joins, whereClause, cursorQuery, ord)
} else {
query = fmt.Sprintf(baseQuery, joins, whereClause, ord)
}

// construct prepared statement and if where clause does exist add parameters
stmt, err := s.db.PreparexContext(ctx, query)
if err != nil {
msg := ERROR_MSG_PREPARED_STMT
l.WithFields(
logrus.Fields{
"error": err,
"query": query,
"stmt": stmt,
},
).Error(msg)

return nil, nil, fmt.Errorf("failed to prepare ComponentInstance statement: %w", err)
statement := Statement{
Db: s.db,
L: l,
Obj: &componentInstanceObject,
BaseQuery: baseQuery,
Order: NewOrder(order, entity.Order{By: entity.ComponentInstanceId, Direction: entity.OrderDirectionAsc}),
WithCursor: withCursor,
CheckCursorInWhere: true,
CheckCursor: true,
CheckFilter: true,
Aggregated: false,
}

filterParameters := componentInstanceObject.GetFilterParameters(
filter,
withCursor,
cursorFields,
)

return stmt, filterParameters, nil
return BuildStatement(ctx, statement, filter)
}

func (s *SqlDatabase) GetComponentInstances(
Expand Down Expand Up @@ -516,7 +478,7 @@ func (s *SqlDatabase) getComponentInstanceAttr(
baseQuery = fmt.Sprintf(baseQuery, attrName, "%s", "%s", "%s")

// Ensure the filter is initialized
filter = ensureComponentInstanceFilter(filter)
filter = EnsureFilter(filter)

order := []entity.Order{
{By: entity.ComponentInstanceCcrn, Direction: entity.OrderDirectionAsc},
Expand Down
76 changes: 20 additions & 56 deletions internal/database/mariadb/component_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,16 +195,6 @@ var componentVersionObject = DbObject[*entity.ComponentVersion]{
},
}

func ensureComponentVersionFilter(
filter *entity.ComponentVersionFilter,
) *entity.ComponentVersionFilter {
if filter == nil {
filter = &entity.ComponentVersionFilter{}
}

return EnsurePagination(filter)
}

func (s *SqlDatabase) getComponentVersionColumns(order []entity.Order) string {
columns := ""

Expand Down Expand Up @@ -249,46 +239,20 @@ func (s *SqlDatabase) buildComponentVersionStatement(
order []entity.Order,
l *logrus.Entry,
) (Stmt, []any, error) {
filter = ensureComponentVersionFilter(filter)
l.WithFields(logrus.Fields{"filter": filter})

cursorFields, err := DecodeCursor(filter.After)
if err != nil {
return nil, nil, err
statement := Statement{
Db: s.db,
L: l,
Obj: &componentVersionObject,
BaseQuery: baseQuery,
Order: NewOrder(order, entity.Order{By: entity.ComponentVersionId, Direction: entity.OrderDirectionAsc}),
WithCursor: withCursor,
CheckCursorInWhere: false,
CheckCursor: true,
CheckFilter: false,
Aggregated: true,
}

ord := NewOrder(order, entity.Order{By: entity.ComponentVersionId, Direction: entity.OrderDirectionAsc})
joins := componentVersionObject.GetJoins(filter, ord)
whereClause, _ := componentVersionObject.GetFilterWhereClause(filter, false)
cursorQuery := componentVersionObject.GetCursorQuery(nil, cursorFields, &withCursor, true)

var query string

columns := s.getComponentVersionColumns(order)
if withCursor {
query = fmt.Sprintf(baseQuery, columns, joins, whereClause, cursorQuery, ord)
} else {
query = fmt.Sprintf(baseQuery, columns, joins, whereClause, ord)
}

// construct prepared statement and if where clause does exist add parameters
stmt, err := s.db.PreparexContext(ctx, query)
if err != nil {
msg := ERROR_MSG_PREPARED_STMT
l.WithFields(
logrus.Fields{
"error": err,
"query": query,
"stmt": stmt,
},
).Error(msg)

return nil, nil, fmt.Errorf("%s", msg)
}

filterParameters := componentVersionObject.GetFilterParameters(filter, withCursor, cursorFields)

return stmt, filterParameters, nil
return BuildStatement(ctx, statement, filter)
}

func (s *SqlDatabase) GetAllComponentVersionCursors(
Expand All @@ -301,11 +265,11 @@ func (s *SqlDatabase) GetAllComponentVersionCursors(
"event": "database.GetAllComponentVersionCursors",
})

baseQuery := `
SELECT CV.* %s FROM ComponentVersion CV
baseQuery := fmt.Sprintf(`
SELECT CV.* %s FROM ComponentVersion CV
%s
%s GROUP BY CV.componentversion_id ORDER BY %s
`
`, s.getComponentVersionColumns(order), "%s", "%s", "%s")

stmt, filterParameters, err := s.buildComponentVersionStatement(
ctx,
Expand Down Expand Up @@ -355,14 +319,14 @@ func (s *SqlDatabase) GetComponentVersions(
"event": "database.GetComponentVersions",
})

baseQuery := `
SELECT CV.* %s FROM ComponentVersion CV
baseQuery := fmt.Sprintf(`
SELECT CV.* %s FROM ComponentVersion CV
%s
%s
GROUP BY CV.componentversion_id %s ORDER BY %s LIMIT ?
`
`, s.getComponentVersionColumns(order), "%s", "%s", "%s", "%s")

filter = ensureComponentVersionFilter(filter)
filter = EnsureFilter(filter)

stmt, filterParameters, err := s.buildComponentVersionStatement(
ctx,
Expand Down Expand Up @@ -415,7 +379,7 @@ func (s *SqlDatabase) CountComponentVersions(ctx context.Context, filter *entity
})

baseQuery := `
SELECT count(distinct CV.componentversion_id) %s FROM ComponentVersion CV
SELECT count(distinct CV.componentversion_id) FROM ComponentVersion CV
%s
%s
ORDER BY %s
Expand Down
Loading
Loading