Skip to content

Commit

Permalink
Find limited to max number of results
Browse files Browse the repository at this point in the history
  • Loading branch information
ytsejam78 committed Aug 10, 2024
1 parent 98fd2a5 commit 85ec9b0
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 0 deletions.
20 changes: 20 additions & 0 deletions source/Sagan-Core-Tests/RepositoryBasedTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,26 @@ RepositoryBasedTest >> testFindAllMatching [
equals: 2
]

{ #category : 'tests - querying' }
RepositoryBasedTest >> testFindAllMatchingLimitedTo [

| results |
self extraterrestrials
store: self silvesterStallone;
store: self silvesterMcCoy;
store: self johnTravolta;
store: self johnLock.

results := self extraterrestrials
findAllMatching: [ :extraterrestrial :criteria |
criteria does: extraterrestrial lastName asUppercase includeSubstring: 'L' ]
limitedTo: 2.

self
assert: results size equals: 2;
assert: ( results allSatisfy: [ :result | result lastName asUppercase includesSubstring: 'L' ] )
]

{ #category : 'tests - querying' }
RepositoryBasedTest >> testFindAllMatchingSortedBy [

Expand Down
15 changes: 15 additions & 0 deletions source/Sagan-Core/InMemoryRepository.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,21 @@ InMemoryRepository >> findAllMatching: aCriteriaOrBlock [
^ contents select: ( self asMatchingCriteria: aCriteriaOrBlock )
]

{ #category : 'querying' }
InMemoryRepository >> findAllMatching: aCriteriaOrBlock limitedTo: aMaxNumberOfResults [

| results |
results := Set new.
contents do: [ :element |
results size < aMaxNumberOfResults
ifTrue: [
( ( self asMatchingCriteria: aCriteriaOrBlock ) value: element ) ifTrue: [
results add: element ] ]
ifFalse: [ ^ results ]
].
^ results
]

{ #category : 'querying' }
InMemoryRepository >> findAllMatching: aCriteriaOrBlock sortedBy: aSortFunction [

Expand Down
6 changes: 6 additions & 0 deletions source/Sagan-Core/RepositoryBehavior.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@ RepositoryBehavior >> findAllMatching: aCriteria [
^ self subclassResponsibility
]

{ #category : 'querying' }
RepositoryBehavior >> findAllMatching: aCriteriaOrBlock limitedTo: aMaxNumberOfResults [

^ self subclassResponsibility
]

{ #category : 'querying' }
RepositoryBehavior >> findAllMatching: aCriteria sortedBy: aSortCriteria [

Expand Down
15 changes: 15 additions & 0 deletions source/Sagan-GemStone/GemStoneRepository.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,21 @@ GemStoneRepository >> findAllMatching: aCriteriaOrBlock [
^ contents select: ( self asMatchingCriteria: aCriteriaOrBlock )
]

{ #category : 'querying' }
GemStoneRepository >> findAllMatching: aCriteriaOrBlock limitedTo: aMaxNumberOfResults [

| results |
results := Set new.
contents do: [ :element |
results size < aMaxNumberOfResults
ifTrue: [
( ( self asMatchingCriteria: aCriteriaOrBlock ) value: element ) ifTrue: [
results add: element ] ]
ifFalse: [ ^ results ]
].
^ results
]

{ #category : 'querying' }
GemStoneRepository >> findAllMatching: aCriteriaOrBlock sortedBy: aSortFunction [

Expand Down
9 changes: 9 additions & 0 deletions source/Sagan-RDBMS/RDBMSRepository.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,15 @@ RDBMSRepository >> findAllMatching: aCriteriaOrBlock [
^ self executeQuery: ( SimpleQuery read: modelObjectClass where: ( self asMatchingCriteria: aCriteriaOrBlock ) )
]

{ #category : 'querying' }
RDBMSRepository >> findAllMatching: aCriteriaOrBlock limitedTo: aMaxNumberOfResults [

^ self executeQuery: ( SimpleQuery
read: modelObjectClass
where: ( self asMatchingCriteria: aCriteriaOrBlock )
limit: aMaxNumberOfResults )
]

{ #category : 'querying' }
RDBMSRepository >> findAllMatching: aCriteriaOrBlock sortedBy: aSortFunction [

Expand Down

0 comments on commit 85ec9b0

Please sign in to comment.