-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
fix: handle limit(0) and offset(0) correctly in SelectQueryBuilder #11507
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: handle limit(0) and offset(0) correctly in SelectQueryBuilder #11507
Conversation
- Fix JavaScript falsy value issue where limit(0) was treated as undefined - Now limit(0) correctly generates 'LIMIT 0' SQL clause instead of being ignored - Add helper functions hasLimit/hasOffset to distinguish between undefined and 0 - Add comprehensive test cases for zero value handling in limit/offset/take/skip - Prevents potential security issue where limit(0) returned all records Fixes potential data exposure when limit(0) was intended to return empty result
|
""" WalkthroughThe changes update the internal logic of the Changes
Poem
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
npm error Exit handler never called! 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/query-builder/SelectQueryBuilder.ts (1)
2556-2558: SimplifyhasLimitandhasOffsetnull checksYou can tighten these definitions using a single nullish comparison:
- const hasLimit = limit !== undefined && limit !== null - const hasOffset = offset !== undefined && offset !== null + const hasLimit = limit != null + const hasOffset = offset != nulltest/functional/query-builder/select/query-builder-select.ts (1)
623-794: Consider expanding test coverage for robustness.The test suite is well-structured but could benefit from additional coverage:
- Multi-driver testing: Current tests only run on SQLite. Consider testing across multiple database drivers as mentioned in the PR objectives.
- Negative test cases: Add tests ensuring non-zero limits/offsets still work correctly to prevent regressions.
- Edge case combinations: Test scenarios like
limit(1).offset(0)orlimit(0).offset(0).Consider adding these additional test cases:
it("should work correctly with non-zero limits and offsets", () => Promise.all( connections.map(async (connection) => { const sql = connection .createQueryBuilder(Post, "post") .limit(5) .offset(10) .disableEscaping() .getSql() expect(sql).to.contain("LIMIT 5 OFFSET 10") }) )) it("should handle limit(0) with offset(0)", () => Promise.all( connections.map(async (connection) => { const sql = connection .createQueryBuilder(Post, "post") .limit(0) .offset(0) .disableEscaping() .getSql() expect(sql).to.contain("LIMIT 0 OFFSET 0") }) ))
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
src/query-builder/SelectQueryBuilder.ts(3 hunks)test/functional/query-builder/select/query-builder-select.ts(1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/query-builder/SelectQueryBuilder.ts (4)
src/query-builder/UpdateQueryBuilder.ts (1)
limit(425-428)src/query-builder/SoftDeleteQueryBuilder.ts (1)
limit(394-397)src/driver/DriverUtils.ts (1)
DriverUtils(8-297)src/error/OffsetWithoutLimitNotSupportedError.ts (1)
OffsetWithoutLimitNotSupportedError(6-14)
🔇 Additional comments (14)
src/query-builder/SelectQueryBuilder.ts (7)
2548-2554: Improve fallback logic forskip/takewhen no explicitoffset/limitis setThe new condition ensures that
skipandtakeare only used if bothoffsetandlimitremain unset and no joins exist. This prevents unintended overrides whenlimit(0)oroffset(0)is explicitly called.
2568-2572: Correctly inject dummyORDER BYfor MSSQL when using pagingUsing
(hasLimit || hasOffset)avoids skipping zero values. The prefix only appears when noORDER BYis defined.
2574-2587: Handle zerolimit/offsetexplicitly in MSSQL branchesThe explicit
hasLimit/hasOffsetchecks ensureLIMIT 0orOFFSET 0generate valid SQL (OFFSET 0 ROWS/FETCH NEXT 0 ROWS).
2594-2596: Enforce MySQL behavior: throw onOFFSETwithoutLIMITThe code correctly throws
OffsetWithoutLimitNotSupportedErrorfor MySQL when only offset is set. Zero offsets now pass the defined check.
2598-2600: Implement SQLite’sLIMIT -1syntax for offset-only queriesUsing
"LIMIT -1 OFFSET x"matches SQLite’s convention for offset without limit; zero offsets are handled correctly.
2601-2610: Apply proper Oracle syntax for zerolimit/offsetThe branches for Oracle now respect
hasLimitandhasOffset, generatingOFFSET 0 ROWS,FETCH NEXT 0 ROWS ONLY, or both.
2613-2615: Correct default SQL generation for other dialectsThe generic branch now uses explicit checks to emit
"LIMIT 0","OFFSET 0", or both when zero values are provided.test/functional/query-builder/select/query-builder-select.ts (7)
623-644: LGTM: Comprehensive test for LIMIT 0 SQL generation.The test correctly verifies that
limit(0)generates SQL with "LIMIT 0" clause, ensuring zero limits are no longer treated as falsy values.
646-667: LGTM: Proper test for combined LIMIT 0 and OFFSET.The test validates the important edge case where both limit and offset are specified, with limit being zero. The expected SQL "LIMIT 0 OFFSET 5" is correct.
669-690: LGTM: Correct test for OFFSET 0 handling.The test ensures that
offset(0)is properly included in SQL generation when combined with a non-zero limit, validating the fix for zero offset values.
692-712: LGTM: Good coverage for take() alias method.The test verifies that the
take(0)method (alias forlimit(0)) works correctly, ensuring consistency across different method names.
714-735: LGTM: Appropriate test for skip() alias method.The test validates that
skip(0)(alias foroffset(0)) generates proper SQL, maintaining consistency with the offset method.
737-764: LGTM: Essential test for actual query execution behavior.This test is crucial as it validates the actual runtime behavior, ensuring that
limit(0)returns an empty array rather than all records, which was the core issue being fixed.
766-793: LGTM: Complete coverage for take() execution behavior.The test ensures that
take(0)also returns an empty array during actual execution, providing comprehensive coverage for both method aliases.
commit: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your contribution @yeonghun104 💜
This looks good. Can you fix the formatting error detected in CI please?
Also I agree with the nitpick comment from CodeRabbit that we are lacking tests for non-zero limit/offset. Let's add the suggested tests.
|
Beware that some database engines will throw an error when given In SQL Server, However this outcome seems safer than ignoring the limit entirely, so I don't think it's a reason not to do this. |
69ea2d7 to
e1da140
Compare
I completely agree. While some databases like SQL Server may throw errors with LIMIT 0, |
sgarner
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
No need to do anything in this PR, but I'm slightly alarmed to notice that TypeORM interpolates the limit and offset values directly into the SQL with no other validation. There could be an SQL injection risk here; for further investigation.
I mean, it usually does not make sense to select 0 rows (not in what you can do with TypeORM, it might in procedures, but that's something else). We also had this issue in our project and we realized that if limit = 0, we don't need to issue the query at all and if offset = 0 it doesn't need to be passed since it's the default value. I don't remember if we opened an issue, but we dismissed the idea after some time when we realized it's unnecessary :) Basically, for offset it's irrelevant, but we can maybe accept the PR to fix the situation when you accidentally call limit(0) and get all results. |
 <h3>Snyk has created this PR to upgrade typeorm from 0.3.24 to 0.3.25.</h3> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. <hr/> - The recommended version is **22 versions** ahead of your current version. - The recommended version was released **22 days ago**. <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>typeorm</b></summary> <ul> <li> <b>0.3.25</b> - <a href="https://redirect.github.com/typeorm/typeorm/releases/tag/0.3.25">2025-06-19</a></br><h2>What's Changed</h2> <ul> <li>docs: use correct SQL statements in softDelete/restore comments by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3081453606" data-permission-text="Title is private" data-url="typeorm/typeorm#11489" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11489/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11489">#11489</a></li> <li>fix: resolve alias or table name in upsert and orUpdate for PostgreSQL driver conditionally by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmarifat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mmarifat">@ mmarifat</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3047096667" data-permission-text="Title is private" data-url="typeorm/typeorm#11452" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11452/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11452">#11452</a></li> <li>feat(spanner): use credentials from connection options by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/denes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/denes">@ denes</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3086575395" data-permission-text="Title is private" data-url="typeorm/typeorm#11492" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11492/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11492">#11492</a></li> <li>feat: add upsert support for Oracle, SQLServer and SAP HANA by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Yuuki-Sakura/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/Yuuki-Sakura">@ Yuuki-Sakura</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2404532307" data-permission-text="Title is private" data-url="typeorm/typeorm#10974" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/10974/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/10974">#10974</a></li> <li>fix: handle limit(0) and offset(0) correctly in SelectQueryBuilder by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yeonghun104/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/yeonghun104">@ yeonghun104</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3116497992" data-permission-text="Title is private" data-url="typeorm/typeorm#11507" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11507/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11507">#11507</a></li> <li>fix: add collation update detection in PostgresDriver by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asn6878/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/asn6878">@ asn6878</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3040527205" data-permission-text="Title is private" data-url="typeorm/typeorm#11441" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11441/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11441">#11441</a></li> <li>feat: add typesense/docsearch-scraper by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gioboa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gioboa">@ gioboa</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3003003060" data-permission-text="Title is private" data-url="typeorm/typeorm#11424" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11424/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11424">#11424</a></li> <li>chore: improve linting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3122060339" data-permission-text="Title is private" data-url="typeorm/typeorm#11510" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11510/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11510">#11510</a></li> <li>chore: improve linting (fixup) by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3122508176" data-permission-text="Title is private" data-url="typeorm/typeorm#11511" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11511/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11511">#11511</a></li> <li>docs: new website initial commit by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/naorpeled/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/naorpeled">@ naorpeled</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2991307150" data-permission-text="Title is private" data-url="typeorm/typeorm#11408" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11408/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11408">#11408</a></li> <li>fix: fix up doc search workflow by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gioboa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gioboa">@ gioboa</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3125253351" data-permission-text="Title is private" data-url="typeorm/typeorm#11513" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11513/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11513">#11513</a></li> <li>chore: update workflows to ignore changes in docs directory by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dlhck/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/dlhck">@ dlhck</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3132733241" data-permission-text="Title is private" data-url="typeorm/typeorm#11518" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11518/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11518">#11518</a></li> <li>feat(docs): add Plausible analytics script to Docusaurus config by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dlhck/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/dlhck">@ dlhck</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3132688431" data-permission-text="Title is private" data-url="typeorm/typeorm#11517" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11517/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11517">#11517</a></li> <li>docs: add note about using YugabyteDB by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3137325649" data-permission-text="Title is private" data-url="typeorm/typeorm#11521" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11521/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11521">#11521</a></li> <li>chore(docs): improve website generation config by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3143665449" data-permission-text="Title is private" data-url="typeorm/typeorm#11527" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11527/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11527">#11527</a></li> <li>fix(tree-entity): closure junction table primary key definition should match parent table by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gongAll/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gongAll">@ gongAll</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3002433767" data-permission-text="Title is private" data-url="typeorm/typeorm#11422" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11422/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11422">#11422</a></li> <li>docs: add heading to Getting Started page by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3151614715" data-permission-text="Title is private" data-url="typeorm/typeorm#11531" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11531/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11531">#11531</a></li> <li>fix: Multiple relations with same columns cause invalid SQL to be generated by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yevhen-komarov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/yevhen-komarov">@ yevhen-komarov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2984486062" data-permission-text="Title is private" data-url="typeorm/typeorm#11400" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11400/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11400">#11400</a></li> <li>fix: fix null pointer exception on date array column comparison by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mnbaccari/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mnbaccari">@ mnbaccari</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3153601577" data-permission-text="Title is private" data-url="typeorm/typeorm#11532" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11532/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11532">#11532</a></li> <li>chore(ci): simplify workflows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3147752910" data-permission-text="Title is private" data-url="typeorm/typeorm#11530" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11530/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11530">#11530</a></li> <li>fix: improve async calls on disconnect by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3139265175" data-permission-text="Title is private" data-url="typeorm/typeorm#11523" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11523/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11523">#11523</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmarifat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mmarifat">@ mmarifat</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3047096667" data-permission-text="Title is private" data-url="typeorm/typeorm#11452" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11452/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11452">#11452</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yeonghun104/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/yeonghun104">@ yeonghun104</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3116497992" data-permission-text="Title is private" data-url="typeorm/typeorm#11507" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11507/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11507">#11507</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asn6878/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/asn6878">@ asn6878</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3040527205" data-permission-text="Title is private" data-url="typeorm/typeorm#11441" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11441/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11441">#11441</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gongAll/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gongAll">@ gongAll</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3002433767" data-permission-text="Title is private" data-url="typeorm/typeorm#11422" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11422/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11422">#11422</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://redirect.github.com/typeorm/typeorm/compare/0.3.24...0.3.25"><tt>0.3.24...0.3.25</tt></a></p> </li> <li> <b>0.3.25-dev.eb3093d</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.ead4f98</b> - 2025-06-18 </li> <li> <b>0.3.25-dev.ce23d46</b> - 2025-06-16 </li> <li> <b>0.3.25-dev.b1e93f7</b> - 2025-06-18 </li> <li> <b>0.3.25-dev.af9ecc0</b> - 2025-06-17 </li> <li> <b>0.3.25-dev.a9c16ee</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.930eefd</b> - 2025-06-06 </li> <li> <b>0.3.25-dev.86f12c9</b> - 2025-06-10 </li> <li> <b>0.3.25-dev.65d5a00</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.63a3b9a</b> - 2025-06-17 </li> <li> <b>0.3.25-dev.61753b1</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.5003aaa</b> - 2025-05-21 </li> <li> <b>0.3.25-dev.4b0ffee</b> - 2025-06-06 </li> <li> <b>0.3.25-dev.42e7cbe</b> - 2025-06-17 </li> <li> <b>0.3.25-dev.42913b9</b> - 2025-06-11 </li> <li> <b>0.3.25-dev.413f0a6</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.2bfa300</b> - 2025-06-04 </li> <li> <b>0.3.25-dev.24c3e38</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.12a71e4</b> - 2025-05-14 </li> <li> <b>0.3.25-dev.07d7913</b> - 2025-06-04 </li> <li> <b>0.3.25-dev.03faa78</b> - 2025-06-14 </li> <li> <b>0.3.24</b> - <a href="https://redirect.github.com/typeorm/typeorm/releases/tag/0.3.24">2025-05-14</a></br><h2>What's Changed</h2> <ul> <li>feat: add tagged template for executing raw SQL queries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Newbie012/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/Newbie012">@ Newbie012</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3028712893" data-permission-text="Title is private" data-url="typeorm/typeorm#11432" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11432/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11432">#11432</a></li> <li>chore: Add husky and lint-staged by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/maxbronnikov10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/maxbronnikov10">@ maxbronnikov10</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3044164801" data-permission-text="Title is private" data-url="typeorm/typeorm#11448" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11448/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11448">#11448</a></li> <li>fix: resolve pkg.pr.new issue by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/naorpeled/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/naorpeled">@ naorpeled</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3054189764" data-permission-text="Title is private" data-url="typeorm/typeorm#11463" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11463/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11463">#11463</a></li> <li>perf: improve save performance during entities update by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lotczyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/lotczyk">@ lotczyk</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3049144737" data-permission-text="Title is private" data-url="typeorm/typeorm#11456" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11456/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11456">#11456</a></li> <li>refactor: remove unused NamingStrategyNotFoundError by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3053756244" data-permission-text="Title is private" data-url="typeorm/typeorm#11462" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11462/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11462">#11462</a></li> <li>chore: add note about breaking change in 0.3.23 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3057590521" data-permission-text="Title is private" data-url="typeorm/typeorm#11469" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11469/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11469">#11469</a></li> <li>build: include db version in coveralls flag-name by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3053694931" data-permission-text="Title is private" data-url="typeorm/typeorm#11461" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11461/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11461">#11461</a></li> <li>chore: include warning about update({}) in changelog by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3058303343" data-permission-text="Title is private" data-url="typeorm/typeorm#11471" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11471/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11471">#11471</a></li> <li>feat: add updateAll and deleteAll methods to EntityManager and Repository APIs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3051787023" data-permission-text="Title is private" data-url="typeorm/typeorm#11459" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11459/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11459">#11459</a></li> <li>Fix/11466 mssql find operator by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/christian-forgacs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/christian-forgacs">@ christian-forgacs</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3056841300" data-permission-text="Title is private" data-url="typeorm/typeorm#11468" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11468/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11468">#11468</a></li> <li>feat(spanner): support insert returning by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/denes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/denes">@ denes</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3052844885" data-permission-text="Title is private" data-url="typeorm/typeorm#11460" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11460/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11460">#11460</a></li> <li>chore: clarify commit practices by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3058510988" data-permission-text="Title is private" data-url="typeorm/typeorm#11472" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11472/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11472">#11472</a></li> <li>fix(mssql): avoid mutating input parameter array values by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3061331662" data-permission-text="Title is private" data-url="typeorm/typeorm#11476" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11476/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11476">#11476</a></li> <li>fix: capacitor driver PRAGMA bug by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlexAzartsev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/AlexAzartsev">@ AlexAzartsev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3056524220" data-permission-text="Title is private" data-url="typeorm/typeorm#11467" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11467/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11467">#11467</a></li> <li>chore: version 0.3.24 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3063696327" data-permission-text="Title is private" data-url="typeorm/typeorm#11478" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11478/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11478">#11478</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/denes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/denes">@ denes</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3052844885" data-permission-text="Title is private" data-url="typeorm/typeorm#11460" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11460/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11460">#11460</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlexAzartsev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/AlexAzartsev">@ AlexAzartsev</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3056524220" data-permission-text="Title is private" data-url="typeorm/typeorm#11467" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11467/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11467">#11467</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://redirect.github.com/typeorm/typeorm/compare/0.3.23...0.3.24"><tt>0.3.23...0.3.24</tt></a></p> </li> </ul> from <a href="https://redirect.github.com/typeorm/typeorm/releases">typeorm GitHub release notes</a> </details> </details> --- > [!IMPORTANT] > > - Check the changes in this PR to ensure they won't cause issues with your project. > - This PR was automatically created by Snyk using the credentials of a real user. > - Snyk has automatically assigned this pull request, [set who gets assigned](/settings/integration). --- **Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._ **For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiIwYjZmODgzMy0xZWFiLTRmYjItOGY5My1mNDAxMmRhYmFkZWQiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjBiNmY4ODMzLTFlYWItNGZiMi04ZjkzLWY0MDEyZGFiYWRlZCJ9fQ==" width="0" height="0"/> > - 🧐 [View latest project report](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 👩💻 [Set who automatically gets assigned](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr/) > - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template) > - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5/settings/integration?pkg=typeorm&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) [//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"typeorm","from":"0.3.24","to":"0.3.25"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"0b6f8833-1eab-4fb2-8f93-f4012dabaded","prPublicId":"0b6f8833-1eab-4fb2-8f93-f4012dabaded","packageManager":"npm","priorityScoreList":[],"projectPublicId":"31d5132a-e6b1-4b8a-a6a3-43b157a71ac5","projectUrl":"https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5?utm_source=github&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":22,"publishedDate":"2025-06-19T18:32:25.818Z"},"vulns":[]}' Co-authored-by: snyk-bot <[email protected]>
|
I think this should be marked as "Breaking Change" or at least "Potentially breaking Change" in case somebody used to give a limit of 0 to fetch all values. |
|
Generally speaking a change is not breaking if it changes some behavior that was not documented or which contradicted the documented behavior. I think that applies in this case; if a user was relying on I guess the most likely impact of this is where the limit value comes from user input. It's a good reminder to always and strictly validate all user input. |
…ypeorm#11507) * fix: handle limit(0) and offset(0) correctly in SelectQueryBuilder - Fix JavaScript falsy value issue where limit(0) was treated as undefined - Now limit(0) correctly generates 'LIMIT 0' SQL clause instead of being ignored - Add helper functions hasLimit/hasOffset to distinguish between undefined and 0 - Add comprehensive test cases for zero value handling in limit/offset/take/skip - Prevents potential security issue where limit(0) returned all records Fixes potential data exposure when limit(0) was intended to return empty result * fix: prettier formatting * test: expand test coverage for LIMIT/OFFSET edge cases and regression prevention
🐛 Bug Fix
Description of change
Problem:
Currently, when
limit(0)oroffset(0)is used in SelectQueryBuilder, they are treated as falsy values in JavaScript and completely ignored, causing the query to return all records instead of the expected empty result. This is a potential security issue and goes against SQL standard behavior.Root Cause:
JavaScript falsy value evaluation in conditional statements:
Solution:
!limit) with explicit undefined/null checks (limit === undefined)hasLimitandhasOffsetto properly distinguish between unset values and zero valuesCurrent Behavior:
New Behavior:
Changes Made:
SelectQueryBuilder.ts:
createLimitOffsetExpression()to handle zero values correctlyTest Coverage:
limit(0),offset(0),take(0),skip(0)Verification:
Pull-Request Checklist
masterbranchFixes #00000(N/A - no existing issue)Breaking Changes
None. This is a bug fix that makes the behavior match developer expectations and SQL standards.
Database Compatibility
LIMIT 0LIMIT 0LIMIT 0FETCH NEXT 0 ROWS ONLYFETCH NEXT 0 ROWS ONLYBefore vs After Examples
Before (Broken Behavior)
After (Fixed Behavior)
Use Cases This Fixes
This fix ensures TypeORM behaves predictably and securely when developers explicitly set limit or offset to zero.
Summary by CodeRabbit