Nested collection comparison
Nobody has claimed this yet.
- Dominant language
- Clojure
- Stars
- 5.8k
- Forks
- 318
- PR merge metrics
- No merged PRs in 30d
Description
(compare [1] [2]) ;; -1 is ok because vecotors are Comparable.
(compare '(1) '(2)) ;; BOOM throws an exception because lists are not Comparable, it's expected.
(compare ['(1)] ['(2)]) ;; BOOM it is also expected.
(db/value-compare [1] [2]) ;; -1
(db/value-compare '(1) '(2)) ;; -22.. it works because lists are compared by hash
(db/value-compare ['(1)] ['(2)]) ;; BOOM This case is too strange, I can compare vectors and lists but I can't compare vectors of lists.
I can wrap my vectors in a hash-map or a list and it works: (db/value-compare {:value ['(1)]} {:value ['(2)]}). But it's a hack.
Should we provide our own Compare protocol with hash support? In this case, we have to repeat a .compareTo method for all collections. It looks like .compareTo but calls our value-compare instead of Util/compare https://github.com/clojure/clojure/blob/c1ede7899d8d7dd4dcd6072d5c0f072b9b2be391/src/jvm/clojure/lang/APersistentVector.java#L439
This issue has a low priority.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the db/value-compare entry point and reproduce the three comparison examples, especially vectors containing lists. Review how nested collection values are currently compared and the referenced Clojure APersistentVector comparison for context. Done would require an agreed comparison approach, coverage for the failing nested case, and tests for the existing successful cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- clojure
- Domain
- databases
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100