Skip to content
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

Merged
merged 1 commit into from
Jan 31, 2024
Merged

fix(cqn2sql): $user.locale refs #431

merged 1 commit into from
Jan 31, 2024

Conversation

danjoa
Copy link
Contributor

@danjoa danjoa commented Jan 31, 2024

The implementation was simply plain wrong, e.g. for querySELECT localized.title from Books the $user.locale in the infix filter of the localized association was translated to session_context('$user.id') instead of session_context('$user.locale')

→ see the added tests

@danjoa danjoa added bug Something isn't working next release pr to be checked for next release labels Jan 31, 2024
Comment on lines +808 to +809
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?
Copy link
Contributor Author

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.

Copy link
Contributor

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.

Suggested change
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 }] })

@danjoa danjoa enabled auto-merge (squash) January 31, 2024 13:14
@danjoa danjoa changed the title fix: implementation of $user.locale refs fix(cqn2sql): $user.locale refs wrongly handled Jan 31, 2024
@danjoa danjoa changed the title fix(cqn2sql): $user.locale refs wrongly handled fix(cqn2sql): $user.locale refs Jan 31, 2024
@danjoa danjoa disabled auto-merge January 31, 2024 14:01
@danjoa danjoa merged commit ec55276 into main Jan 31, 2024
7 of 8 checks passed
@danjoa danjoa deleted the fix-pseudo-refs branch January 31, 2024 14:01
@cap-bots cap-bots mentioned this pull request Jan 31, 2024
patricebender pushed a commit that referenced this pull request Feb 2, 2024
🤖 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>
@cap-bots cap-bots mentioned this pull request Jul 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working next release pr to be checked for next release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants