Skip to content

feat(rsql): add arrayContains operator for PostgreSQL array filtering - #39

Merged
sant1ago-da-hanoi merged 2 commits into
mainfrom
feat/array-contains-operator
Jun 12, 2026
Merged

feat(rsql): add arrayContains operator for PostgreSQL array filtering#39
sant1ago-da-hanoi merged 2 commits into
mainfrom
feat/array-contains-operator

Conversation

@sant1ago-da-hanoi

Copy link
Copy Markdown
Contributor

Summary

  • Add ARRAY_CONTAINS RSQL operator (=arrayContains= / =ac=) that generates 'value' = ANY(column) SQL for PostgreSQL TEXT[] columns
  • Add arrayContains() and arrayContainsIfPresent() convenience methods to FilterBuilder
  • Register handler in RSQLOperatorHandlers, update README with docs and examples

Closes #38

Test plan

  • Unit tests for ArrayContainsOperatorHandler (with/without alias, param deduplication)
  • Unit tests for FilterBuilder.arrayContains / arrayContainsIfPresent
  • CustomRSQLOperatorsTest updated for new operator symbols and count
  • Full mvn test passes

- Introduced `FilterBuilder.arrayContains()` and `arrayContainsIfPresent()`.
- Added `=arrayContains=` / `=ac=` operator syntax.
- Implemented `ArrayContainsOperatorHandler` for SQL generation.
- Updated tests, documentation, and operator registry.

@sant1ago-da-hanoi sant1ago-da-hanoi left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Files changed: 8 | Lines: +206 / -64

Summary

PR thêm operator =arrayContains= / =ac= cho PostgreSQL TEXT[] columns, generate SQL 'value' = ANY(column). Logic handler đúng, test coverage đủ cho alias/no-alias/dedup. README bị corrupt ở 1 chỗ cần fix trước khi merge, và thiếu null guard trên arrayContains().

Findings

Phải sửa

# File Category Issue Suggestion
1 README.md:591-598 Standards Code block bị corrupt — DatabaseContextHolder.clear() ngắt dòng, }finally{ thiếu khoảng trắng Sửa lại đúng format } finally { DatabaseContextHolder.clear(); }

Nên sửa

# File Category Issue Suggestion
2 ArrayContainsOperatorHandler.java:9 Code Quality Không có guard/Javadoc — operator chỉ hợp lệ với PostgreSQL TEXT[] nhưng không validate, sẽ fail ở runtime nếu dùng sai column type Thêm Javadoc note rõ "PostgreSQL only". Tốt hơn: check dialect + throw DbException
3 FilterBuilder.java:313 Code Quality arrayContains(field, null) throw NPE — List.of(null) không hợp lệ trong Java 9+ Thêm Objects.requireNonNull(value, "value must not be null") đầu method

Nhỏ

# File Category Issue Suggestion
4 FilterBuilder.java:313,445 Standards Thiếu Javadoc trên arrayContains()arrayContainsIfPresent() Thêm Javadoc mô tả PostgreSQL-only, = ANY(column), và null/blank skip behavior
5 ArrayContainsOperatorHandler.java:1 Standards Thiếu Javadoc class-level Thêm /** Handles =arrayContains= / =ac=. Generates :param = ANY(column) for PostgreSQL TEXT[] columns. */
6 README.md:210,233 Standards Indentation lệch ở 2 code block không liên quan tính năng chính Khôi phục indent gốc

Positive Patterns

  • reviewAndSetParam() tái dùng đúng cách — param deduplication hoạt động chính xác, có test case xác nhận
  • Test coverage đủ 3 nhánh: with alias, without alias, duplicate param key

Đánh giá: Nên sửa trước khi merge

1 phải sửa, 2 nên sửa, 3 nhỏ. Fix #1 (README corrupt) và #3 (NPE risk) trước — cái còn lại làm kèm được.

Comment thread README.md Outdated
Comment thread rsql/src/main/java/dev/suprim/query/rsql/builder/FilterBuilder.java
Comment thread rsql/src/main/java/dev/suprim/query/rsql/builder/FilterBuilder.java
- Add null guard on FilterBuilder.arrayContains()
- Add Javadoc on ArrayContainsOperatorHandler and FilterBuilder methods
- Fix corrupted DatabaseContextHolder code block in README
@sant1ago-da-hanoi
sant1ago-da-hanoi merged commit 8883c9c into main Jun 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add arrayContains operator for PostgreSQL array column filtering

1 participant