-
Notifications
You must be signed in to change notification settings - Fork 14
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(cqn2sql): $user.locale refs #431
Conversation
case '$now': return this.func({ func: 'session_context', args: [{ val: '$now', param: false }] }) // REVISIT: why do we need param: false here? | ||
case '$user': return this.func({ func: 'session_context', args: [{ val: '$user.'+ref[1]||'id', param: false }] }) // REVISIT: same here? |
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.
@BobdenOs can you answer the REVISIT questions? → Why do we need param: false
in here?
If there is a reason, we should know/document it, like in a comment somewhere.
If not, we should remove it.
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.
It is required to reduce the amount of values
used inside queries. As they cannot change it is best to have them embedded into the SQL. That way the optimizer doesn't need to consider all possible values. Additionally it is not required to send the value every execution.
case '$now': return this.func({ func: 'session_context', args: [{ val: '$now', param: false }] }) // REVISIT: why do we need param: false here? | |
case '$user': return this.func({ func: 'session_context', args: [{ val: '$user.'+ref[1]||'id', param: false }] }) // REVISIT: same here? | |
// param: false is used to ensure the value is embedded into the SQL as it will not change | |
case '$now': return this.func({ func: 'session_context', args: [{ val: '$now', param: false }] }) | |
case '$user': return this.func({ func: 'session_context', args: [{ val: '$user.'+ref[1]||'id', param: false }] }) |
🤖 I have created a release *beep* *boop* --- <details><summary>db-service: 1.6.0</summary> ## [1.6.0](db-service-v1.5.1...db-service-v1.6.0) (2024-02-02) ### Added * Add fallback for @cap-js/hana for unknown entities ([#403](#403)) ([e7dd6de](e7dd6de)) * SELECT returns binaries as Buffers ([#416](#416)) ([d4240d5](d4240d5)) * SELECT returns LargeBinaries as streams unless feature flag "stream_compat" is set ([#251](#251)) ([8165a4a](8165a4a)) * strict mode to validate input for `INSERT`, `UPDATE` and `UPSERT` ([#384](#384)) ([4644483](4644483)) * Support Readable Streams inside INSERT.entries ([#343](#343)) ([f6faf89](f6faf89)) ### Fixed * **`cqn4sql`:** only transform list if necessary ([#438](#438)) ([8a7ec65](8a7ec65)) * always generate unique subquery aliases ([#435](#435)) ([c875b7d](c875b7d)) * consider `list` in `from.where` ([#429](#429)) ([3288e94](3288e94)) * **cqn2sql:** $user.locale refs ([#431](#431)) ([ec55276](ec55276)) * **cqn4sql:** expand structured keys in on-conditions ([#421](#421)) ([b1e0677](b1e0677)) * Do not generate UUIDs for association keys ([#398](#398)) ([9970e14](9970e14)) * enumeration issue with session context in @cap-js/hana ([#399](#399)) ([8106a20](8106a20)) * make @cap-js/sqlite work with better-sqlite3@9.3.0 ([#422](#422)) ([44c0a59](44c0a59)) * pass context of navigation for list within infix filter ([#433](#433)) ([0ca077f](0ca077f)) * Restore former deep upsert behavior / error ([#406](#406)) ([284b1e3](284b1e3)) * Skip virtual fields on UPSERTs ([#405](#405)) ([1a05dcb](1a05dcb)) * sqlite date string compatibility parsing only for valid dates ([#410](#410)) ([2a8bb2d](2a8bb2d)), closes [#409](#409) * UPSERT for @cap-js/hana for entities with multiple keys ([#418](#418)) ([9bbac6e](9bbac6e)) </details> <details><summary>sqlite: 1.5.0</summary> ## [1.5.0](sqlite-v1.4.0...sqlite-v1.5.0) (2024-02-02) ### Added * SELECT returns LargeBinaries as streams unless feature flag "stream_compat" is set ([#251](#251)) ([8165a4a](8165a4a)) * Support Readable Streams inside INSERT.entries ([#343](#343)) ([f6faf89](f6faf89)) ### Fixed * config in streaming test with compat flag ([#412](#412)) ([335a178](335a178)) * Do not generate UUIDs for association keys ([#398](#398)) ([9970e14](9970e14)) * make @cap-js/sqlite work with better-sqlite3@9.3.0 ([#422](#422)) ([44c0a59](44c0a59)) * sqlite date string compatibility parsing only for valid dates ([#410](#410)) ([2a8bb2d](2a8bb2d)), closes [#409](#409) * UPSERT for @cap-js/hana for entities with multiple keys ([#418](#418)) ([9bbac6e](9bbac6e)) </details> <details><summary>postgres: 1.5.0</summary> ## [1.5.0](postgres-v1.4.1...postgres-v1.5.0) (2024-02-02) ### Added * SELECT returns LargeBinaries as streams unless feature flag "stream_compat" is set ([#251](#251)) ([8165a4a](8165a4a)) * Support Readable Streams inside INSERT.entries ([#343](#343)) ([f6faf89](f6faf89)) ### Fixed * switch Postgres from json to jsonb ([#402](#402)) ([c98a964](c98a964)) * UPSERT for @cap-js/hana for entities with multiple keys ([#418](#418)) ([9bbac6e](9bbac6e)) </details> <details><summary>hana: 0.0.4</summary> ## [0.0.4](hana-v0.0.3...hana-v0.0.4) (2024-02-02) ### Added * Add fallback for @cap-js/hana for unknown entities ([#403](#403)) ([e7dd6de](e7dd6de)) * SELECT returns binaries as Buffers ([#416](#416)) ([d4240d5](d4240d5)) * SELECT returns LargeBinaries as streams unless feature flag "stream_compat" is set ([#251](#251)) ([8165a4a](8165a4a)) * Support Readable Streams inside INSERT.entries ([#343](#343)) ([f6faf89](f6faf89)) ### Fixed * Ensure globally unique aliases with large expand queries ([#396](#396)) ([c1df747](c1df747)) * enumeration issue with session context in @cap-js/hana ([#399](#399)) ([8106a20](8106a20)) * ignore empty order by ([#392](#392)) ([a69fed0](a69fed0)) * improve `!=` and `==` implementation for @cap-js/hana ([#426](#426)) ([9b7b5a0](9b7b5a0)) * show clear error message when unable to load project package.json ([#419](#419)) ([2ebf783](2ebf783)) * UPSERT for @cap-js/hana for entities with multiple keys ([#418](#418)) ([9bbac6e](9bbac6e)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: sjvans <30337871+sjvans@users.noreply.github.com>
The implementation was simply plain wrong, e.g. for query
SELECT localized.title from Books
the$user.locale
in the infix filter of thelocalized
association was translated tosession_context('$user.id')
instead ofsession_context('$user.locale')
→ see the added tests