uql-orm 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -2
- package/README.md +18 -6
- package/dist/browser/querier/httpQuerier.d.ts +3 -3
- package/dist/browser/querier/httpQuerier.js.map +1 -1
- package/dist/browser/uql-browser.min.js +3 -4
- package/dist/browser/uql-browser.min.js.map +1 -1
- package/dist/dialect/abstractSqlDialect.d.ts +6 -0
- package/dist/dialect/abstractSqlDialect.d.ts.map +1 -1
- package/dist/dialect/abstractSqlDialect.js +24 -12
- package/dist/dialect/abstractSqlDialect.js.map +1 -1
- package/dist/dialect/queryContext.d.ts +3 -3
- package/dist/dialect/queryContext.d.ts.map +1 -1
- package/dist/dialect/queryContext.js +4 -4
- package/dist/dialect/queryContext.js.map +1 -1
- package/dist/entity/decorator/definition.d.ts.map +1 -1
- package/dist/entity/decorator/definition.js +3 -4
- package/dist/entity/decorator/definition.js.map +1 -1
- package/dist/maria/mariaDialect.d.ts.map +1 -1
- package/dist/maria/mariaDialect.js +4 -4
- package/dist/maria/mariaDialect.js.map +1 -1
- package/dist/maria/mariadbQuerier.d.ts +1 -0
- package/dist/maria/mariadbQuerier.d.ts.map +1 -1
- package/dist/maria/mariadbQuerier.js +11 -0
- package/dist/maria/mariadbQuerier.js.map +1 -1
- package/dist/migrate/schemaGenerator.d.ts.map +1 -1
- package/dist/migrate/schemaGenerator.js +3 -4
- package/dist/migrate/schemaGenerator.js.map +1 -1
- package/dist/mongo/mongodbQuerier.d.ts +4 -0
- package/dist/mongo/mongodbQuerier.d.ts.map +1 -1
- package/dist/mongo/mongodbQuerier.js +41 -29
- package/dist/mongo/mongodbQuerier.js.map +1 -1
- package/dist/mysql/mysql2Querier.d.ts +1 -0
- package/dist/mysql/mysql2Querier.d.ts.map +1 -1
- package/dist/mysql/mysql2Querier.js +12 -0
- package/dist/mysql/mysql2Querier.js.map +1 -1
- package/dist/postgres/pgQuerier.d.ts +1 -0
- package/dist/postgres/pgQuerier.d.ts.map +1 -1
- package/dist/postgres/pgQuerier.js +12 -0
- package/dist/postgres/pgQuerier.js.map +1 -1
- package/dist/querier/abstractQuerier.d.ts +10 -0
- package/dist/querier/abstractQuerier.d.ts.map +1 -1
- package/dist/querier/abstractQuerier.js +4 -0
- package/dist/querier/abstractQuerier.js.map +1 -1
- package/dist/querier/abstractSqlQuerier.d.ts +7 -0
- package/dist/querier/abstractSqlQuerier.d.ts.map +1 -1
- package/dist/querier/abstractSqlQuerier.js +19 -1
- package/dist/querier/abstractSqlQuerier.js.map +1 -1
- package/dist/sqlite/sqliteDialect.d.ts.map +1 -1
- package/dist/sqlite/sqliteDialect.js +1 -6
- package/dist/sqlite/sqliteDialect.js.map +1 -1
- package/dist/sqlite/sqliteQuerier.d.ts +1 -0
- package/dist/sqlite/sqliteQuerier.d.ts.map +1 -1
- package/dist/sqlite/sqliteQuerier.js +5 -0
- package/dist/sqlite/sqliteQuerier.js.map +1 -1
- package/dist/type/entity.d.ts +0 -4
- package/dist/type/entity.d.ts.map +1 -1
- package/dist/type/querier.d.ts +6 -0
- package/dist/type/querier.d.ts.map +1 -1
- package/dist/type/querier.js.map +1 -1
- package/dist/type/query.d.ts +1 -1
- package/dist/type/query.d.ts.map +1 -1
- package/dist/type/universalQuerier.d.ts +9 -0
- package/dist/type/universalQuerier.d.ts.map +1 -1
- package/dist/util/sql.util.d.ts +5 -0
- package/dist/util/sql.util.d.ts.map +1 -1
- package/dist/util/sql.util.js +26 -21
- package/dist/util/sql.util.js.map +1 -1
- package/package.json +9 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# [0.4.0](https://github.com/rogerpadilla/uql/compare/uql-orm@0.3.3...uql-orm@0.4.0) (2026-03-13)
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
### Features
|
|
10
10
|
|
|
11
|
-
*
|
|
11
|
+
* implement cursor-based stream with across all queriers and deprecate in favor of ([536b67b](https://github.com/rogerpadilla/uql/commit/536b67b6bb0ab8024449f557a83c43a3b4f09fb5))
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
@@ -20,6 +20,37 @@ All notable changes to this project will be documented in this file. Please add
|
|
|
20
20
|
|
|
21
21
|
date format is [yyyy-mm-dd]
|
|
22
22
|
|
|
23
|
+
## [0.4.0] - 2026-03-13
|
|
24
|
+
### New Features
|
|
25
|
+
- **`findManyStream()` — Cursor-Based Async Iteration**: Stream query results row-by-row via `for await...of`. No relation-filling or lifecycle hooks — optimized for raw throughput on large result sets.
|
|
26
|
+
```ts
|
|
27
|
+
for await (const user of querier.findManyStream(User, { $where: { active: true } })) {
|
|
28
|
+
process.stdout.write(user.name + '\n');
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
Supports both the classic `(Entity, query)` and `$entity`-field dual-API patterns.
|
|
32
|
+
- **Native Streaming for All Major Drivers**: Each driver now uses its optimal streaming API instead of falling back to `internalAll()`:
|
|
33
|
+
- **SQLite** (`better-sqlite3`): `.iterate()` — sync, zero-copy row iteration.
|
|
34
|
+
- **MongoDB**: `FindCursor` async iterable — native driver cursor with `buildFindCursor` helper (extracted from `findMany` for DRY reuse).
|
|
35
|
+
- **MariaDB**: `queryStream()` — first-class streaming API since v3.0, with backpressure.
|
|
36
|
+
- **PostgreSQL**: `pg-query-stream` — server-side cursors via optional peer dependency.
|
|
37
|
+
- **MySQL2**: `Connection.query().stream()` — Readable stream from non-promise connection.
|
|
38
|
+
- **LibSQL / D1 / Neon**: Graceful fallback to `internalAll()` (HTTP-based, no streaming API).
|
|
39
|
+
|
|
40
|
+
### Breaking Changes
|
|
41
|
+
- **Removed deprecated `reference` field option**: Use `references` instead. The deprecated `FieldOptions.reference` property and its internal usage in `definition.ts` have been removed.
|
|
42
|
+
|
|
43
|
+
### Test Coverage
|
|
44
|
+
- **Integration Tests**: `shouldFindManyStream` (data flow, filter, empty) across all DB drivers. `shouldDistinct` and `shouldFindManyStream` (insert→stream→compare) in SQL-only spec.
|
|
45
|
+
- **Unit Tests**: `findManyStream` dual-API pattern, `unflatObject` (flat, deep nested, null skipping, equivalence with `unflatObjects`), 6 `$distinct` SQL generation tests (with `$select`, `$where`+`$sort`, `$limit`+`$skip`, `false` flag).
|
|
46
|
+
|
|
47
|
+
## [0.3.3] - 2026-03-12
|
|
48
|
+
### Bug Fixes
|
|
49
|
+
- **Upsert `onUpdate` Semantics**: `onUpdate`-only fields (e.g. `updatedAt`) are no longer included in the `INSERT VALUES` clause of upserts. They now use direct parameter values in the `UPDATE SET` clause, giving correct semantics: newly inserted rows have `updatedAt = NULL`, updated rows get a fresh timestamp.
|
|
50
|
+
|
|
51
|
+
### Improvements
|
|
52
|
+
- **Variadic `pushValue`**: `QueryContext.pushValue()` now accepts multiple values (`...values`), simplifying internal param collection and eliminating `forEach` loops.
|
|
53
|
+
|
|
23
54
|
## [0.3.2] - 2026-03-12
|
|
24
55
|
### Improvements
|
|
25
56
|
- **Upsert `created` Flag**: added `created?: boolean` to `QueryUpdateResult` — `true` when the record was inserted, `false` when updated. Supported on PostgreSQL, MySQL, and MongoDB. Returns `undefined` on SQLite and MariaDB where the driver cannot determine this.
|
package/README.md
CHANGED
|
@@ -32,6 +32,7 @@ const users = await querier.findMany(User, {
|
|
|
32
32
|
| **[Lifecycle Hooks](https://uql-orm.dev/entities/lifecycle-hooks)**| `@BeforeInsert`, `@AfterLoad` and 5 more decorators for validation, timestamps, and computed fields. |
|
|
33
33
|
| **[Aggregate Queries](https://uql-orm.dev/querying/aggregate)** | `GROUP BY`, `HAVING`, `COUNT`, `SUM`, `AVG`, `MIN`, `MAX`, and `DISTINCT` across all dialects. |
|
|
34
34
|
| **[Semantic Search](https://uql-orm.dev/querying/semantic-search)** | Vector similarity via `$sort` with `$vector`/`$distance`. Supports `vector`, `halfvec`, `sparsevec` types, HNSW/IVFFlat indexes, and 5 distance metrics across Postgres, MariaDB, SQLite, and MongoDB Atlas. |
|
|
35
|
+
| **[Cursor Streaming](https://uql-orm.dev/querying/streaming)** | `findManyStream()` with native cursor-based iteration for SQLite, MongoDB, MariaDB, PostgreSQL, and MySQL. |
|
|
35
36
|
| **[Modern & Versatile](https://uql-orm.dev/entities/virtual-fields)** | **Pure ESM**, high-res timing, [Soft-delete](https://uql-orm.dev/entities/soft-delete), and **JSONB/JSON** support. |
|
|
36
37
|
| **[Database Migrations](https://www.uql-orm.dev/migrations)** | Built-in [Entity-First synchronization](https://uql-orm.dev/migrations#3-entity-first-synchronization-development) and a robust CLI for version-controlled schema evolution. |
|
|
37
38
|
| **[Logging & Monitoring](https://www.uql-orm.dev/logging)** | Professional-grade monitoring with slow-query detection and colored output. |
|
|
@@ -84,13 +85,12 @@ Annotate your classes with decorators. UQL's engine uses this metadata for both
|
|
|
84
85
|
| :-------------- | :----------------------------------------------------------------------------- |
|
|
85
86
|
| `@Entity()` | Marks a class as a database table/collection. |
|
|
86
87
|
| `@Id()` | Defines the Primary Key with support for `onInsert` generators (UUIDs, etc). |
|
|
87
|
-
| `@Field()` | Standard column. Use `{
|
|
88
|
+
| `@Field()` | Standard column. Use `{ references: ... }` for Foreign Keys. |
|
|
88
89
|
| `@Index()` | Defines a composite or custom index on one or more columns. |
|
|
89
90
|
| `@OneToOne` | Defines a one-to-one relationship. |
|
|
90
91
|
| `@OneToMany` | Defines a one-to-many relationship. |
|
|
91
92
|
| `@ManyToOne` | Defines a many-to-one relationship. |
|
|
92
93
|
| `@ManyToMany` | Defines a many-to-many relationship. |
|
|
93
|
-
| `@Virtual()` | Defines a read-only field calculated via SQL (see Advanced). |
|
|
94
94
|
| `@BeforeInsert` / `@AfterInsert` | Lifecycle hooks fired around `insert` operations. |
|
|
95
95
|
| `@BeforeUpdate` / `@AfterUpdate` | Lifecycle hooks fired around `update` operations. |
|
|
96
96
|
| `@BeforeDelete` / `@AfterDelete` | Lifecycle hooks fired around `delete` operations. |
|
|
@@ -176,7 +176,7 @@ export class Profile {
|
|
|
176
176
|
@Field()
|
|
177
177
|
bio?: string;
|
|
178
178
|
|
|
179
|
-
@Field({
|
|
179
|
+
@Field({ references: () => User, foreignKey: 'fk_profile_user' })
|
|
180
180
|
userId?: string;
|
|
181
181
|
|
|
182
182
|
@OneToOne({ entity: () => User })
|
|
@@ -191,7 +191,7 @@ export class Post {
|
|
|
191
191
|
@Field()
|
|
192
192
|
title?: string;
|
|
193
193
|
|
|
194
|
-
@Field({
|
|
194
|
+
@Field({ references: () => User })
|
|
195
195
|
authorId?: string;
|
|
196
196
|
|
|
197
197
|
@ManyToOne({ entity: () => User })
|
|
@@ -218,10 +218,10 @@ export class PostTag {
|
|
|
218
218
|
@Id({ type: 'uuid', onInsert: () => uuidv7() })
|
|
219
219
|
id?: string;
|
|
220
220
|
|
|
221
|
-
@Field({
|
|
221
|
+
@Field({ references: () => Post })
|
|
222
222
|
postId?: number;
|
|
223
223
|
|
|
224
|
-
@Field({
|
|
224
|
+
@Field({ references: () => Tag })
|
|
225
225
|
tagId?: string;
|
|
226
226
|
}
|
|
227
227
|
```
|
|
@@ -393,6 +393,18 @@ const names = await querier.findMany(User, {
|
|
|
393
393
|
|
|
394
394
|
|
|
395
395
|
|
|
396
|
+
### Cursor-Based Streaming
|
|
397
|
+
|
|
398
|
+
For large result sets, use `findManyStream()` to iterate row-by-row without loading everything into memory. Each driver uses its optimal native cursor API.
|
|
399
|
+
|
|
400
|
+
```ts
|
|
401
|
+
for await (const user of querier.findManyStream(User, { $where: { active: true } })) {
|
|
402
|
+
process.stdout.write(JSON.stringify(user) + '\n');
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
396
408
|
### Thread-Safe Transactions
|
|
397
409
|
|
|
398
410
|
UQL is one of the few ORMs with a **centralized serialization engine**. Transactions are guaranteed to be race-condition free.
|
|
@@ -8,11 +8,11 @@ export declare class HttpQuerier implements ClientQuerier {
|
|
|
8
8
|
findMany<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions): Promise<RequestSuccessResponse<E[]>>;
|
|
9
9
|
findManyAndCount<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions): Promise<RequestSuccessResponse<E[]>>;
|
|
10
10
|
count<E>(entity: Type<E>, q: QuerySearch<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
11
|
-
insertOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<
|
|
11
|
+
insertOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;
|
|
12
12
|
updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: UpdatePayload<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
13
|
-
saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<
|
|
13
|
+
saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<{
|
|
14
14
|
data: NonNullable<E[IdKey<E>]>;
|
|
15
|
-
}
|
|
15
|
+
}> | Promise<RequestSuccessResponse<IdValue<E>>>;
|
|
16
16
|
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
17
17
|
deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
18
18
|
getBasePath<E>(entity: Type<E>): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpQuerier.js","sourceRoot":"","sources":["../../../src/browser/querier/httpQuerier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAWhD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,OAAO,WAAW;IACD;IAArB,YAAqB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEzC,WAAW,CACT,MAAe,EACf,EAAc,EACd,CAAe,EACf,IAAqB;QAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAgB,GAAG,QAAQ,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAI,MAAe,EAAE,CAAc,EAAE,IAAqB;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAgB,GAAG,QAAQ,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAI,MAAe,EAAE,CAAW,EAAE,IAAyB;QACjE,MAAM,IAAI,GAAmC,EAAE,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,GAAG,CAAM,GAAG,QAAQ,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,gBAAgB,CAAI,MAAe,EAAE,CAAW,EAAE,IAAyB;QACzE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAI,MAAe,EAAE,CAAiB,EAAE,IAAqB;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAS,GAAG,QAAQ,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,CAAI,MAAe,EAAE,OAAU,EAAE,IAAqB;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"httpQuerier.js","sourceRoot":"","sources":["../../../src/browser/querier/httpQuerier.ts"],"names":[],"mappings":"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"}
|
|
@@ -887,14 +887,13 @@ function fillThroughRelations(entity) {
|
|
|
887
887
|
meta.relations = getKeys(meta.fields).reduce((relations, key)=>{
|
|
888
888
|
const field = meta.fields[key];
|
|
889
889
|
if (!field) return relations;
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
const relEntity = reference();
|
|
890
|
+
if (field.references) {
|
|
891
|
+
const relEntity = field.references();
|
|
893
892
|
const relMeta = ensureMeta(relEntity);
|
|
894
893
|
const relIdKey = relMeta.id;
|
|
895
894
|
const relKey = key.slice(0, -relIdKey.length);
|
|
896
895
|
const relOpts = {
|
|
897
|
-
entity:
|
|
896
|
+
entity: field.references,
|
|
898
897
|
cardinality: 'm1',
|
|
899
898
|
references: [
|
|
900
899
|
{
|