-
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: make @cap-js/sqlite work with [email protected] #422
Conversation
db-service/lib/cqn2sql.js
Outdated
for (let i = 0; i < cols.length; i += 48) { | ||
obj = `json${isRoot ? '' : 'b'}_insert(${obj},${cols.slice(i, i + 48)})` | ||
} | ||
|
||
|
||
return `SELECT ${SELECT.one || SELECT.expand === 'root' ? obj : `json_group_array(${obj.includes('json_merge') ? `json_insert(${obj})` : obj})`} as _json_ FROM (${sql})` | ||
return `SELECT ${isRoot || SELECT.one ? obj : `jsonb_group_array(${obj})`} as _json_ FROM (${sql})` |
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.
just wondering about the sqlite specific stuff in the generic db-service
, could you elaborate why we need this 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.
It has always been in the generic db-service
. The original reason for having it here is that there is no SQL
specified uniform API
to create json
values. Therefor taking SQLite
makes it easy for other database services to find their equivalent functions.
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.
Got it. Thanks!
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.
Looks good to me
🤖 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 [email protected] ([#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 [email protected] ([#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 <[email protected]>
With the release of
[email protected]
it bumped the sqlite version to3.45.0
. Which comes with a complete rework of thejson
functions. With the big difference being that it now supports an internaljsonb
format. Which is supposed to be only used bysqlite
itself, but with this new change all thejson
functions acceptbinary
data as thejsonb
format. Therefor as the json that we produced was being converted intoBuffer
s it resulted inbetter-sqlite3
providing them asbinaries
to thejson_each
function which made it interoperate it as an malformedjsonb
. So this change forced thejson
to be bound as astrings
which makes everything in its own behavior.Additionally now that the
json_insert
function has ajsonb_insert
equavelant it fixes a memory issuesqlite
had introduced in the past and we can remove thejson_merge
custom function again. Which removes the requirement to call back tojs
when selecting more then50
columns. Which should make reading many columns faster again.