uql-orm 0.3.3 → 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.
Files changed (52) hide show
  1. package/CHANGELOG.md +27 -3
  2. package/README.md +18 -6
  3. package/dist/browser/querier/httpQuerier.d.ts +3 -3
  4. package/dist/browser/querier/httpQuerier.js.map +1 -1
  5. package/dist/browser/uql-browser.min.js +3 -4
  6. package/dist/browser/uql-browser.min.js.map +1 -1
  7. package/dist/entity/decorator/definition.d.ts.map +1 -1
  8. package/dist/entity/decorator/definition.js +3 -4
  9. package/dist/entity/decorator/definition.js.map +1 -1
  10. package/dist/maria/mariadbQuerier.d.ts +1 -0
  11. package/dist/maria/mariadbQuerier.d.ts.map +1 -1
  12. package/dist/maria/mariadbQuerier.js +11 -0
  13. package/dist/maria/mariadbQuerier.js.map +1 -1
  14. package/dist/migrate/schemaGenerator.d.ts.map +1 -1
  15. package/dist/migrate/schemaGenerator.js +3 -4
  16. package/dist/migrate/schemaGenerator.js.map +1 -1
  17. package/dist/mongo/mongodbQuerier.d.ts +3 -0
  18. package/dist/mongo/mongodbQuerier.d.ts.map +1 -1
  19. package/dist/mongo/mongodbQuerier.js +32 -19
  20. package/dist/mongo/mongodbQuerier.js.map +1 -1
  21. package/dist/mysql/mysql2Querier.d.ts +1 -0
  22. package/dist/mysql/mysql2Querier.d.ts.map +1 -1
  23. package/dist/mysql/mysql2Querier.js +12 -0
  24. package/dist/mysql/mysql2Querier.js.map +1 -1
  25. package/dist/postgres/pgQuerier.d.ts +1 -0
  26. package/dist/postgres/pgQuerier.d.ts.map +1 -1
  27. package/dist/postgres/pgQuerier.js +12 -0
  28. package/dist/postgres/pgQuerier.js.map +1 -1
  29. package/dist/querier/abstractQuerier.d.ts +10 -0
  30. package/dist/querier/abstractQuerier.d.ts.map +1 -1
  31. package/dist/querier/abstractQuerier.js +4 -0
  32. package/dist/querier/abstractQuerier.js.map +1 -1
  33. package/dist/querier/abstractSqlQuerier.d.ts +7 -0
  34. package/dist/querier/abstractSqlQuerier.d.ts.map +1 -1
  35. package/dist/querier/abstractSqlQuerier.js +19 -1
  36. package/dist/querier/abstractSqlQuerier.js.map +1 -1
  37. package/dist/sqlite/sqliteQuerier.d.ts +1 -0
  38. package/dist/sqlite/sqliteQuerier.d.ts.map +1 -1
  39. package/dist/sqlite/sqliteQuerier.js +5 -0
  40. package/dist/sqlite/sqliteQuerier.js.map +1 -1
  41. package/dist/type/entity.d.ts +0 -4
  42. package/dist/type/entity.d.ts.map +1 -1
  43. package/dist/type/querier.d.ts +6 -0
  44. package/dist/type/querier.d.ts.map +1 -1
  45. package/dist/type/querier.js.map +1 -1
  46. package/dist/type/universalQuerier.d.ts +9 -0
  47. package/dist/type/universalQuerier.d.ts.map +1 -1
  48. package/dist/util/sql.util.d.ts +5 -0
  49. package/dist/util/sql.util.d.ts.map +1 -1
  50. package/dist/util/sql.util.js +26 -21
  51. package/dist/util/sql.util.js.map +1 -1
  52. 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
- ## [0.3.3](https://github.com/rogerpadilla/uql/compare/uql-orm@0.3.2...uql-orm@0.3.3) (2026-03-13)
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
- ### Bug Fixes
9
+ ### Features
10
10
 
11
- * correct upsert field semantics and refactor to accept variadic ([363283a](https://github.com/rogerpadilla/uql/commit/363283a6cea5fbae343fb8162aa33e2568a6bc91))
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,30 @@ 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
+
23
47
  ## [0.3.3] - 2026-03-12
24
48
  ### Bug Fixes
25
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.
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 `{ reference: ... }` for Foreign Keys. |
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({ reference: () => User, foreignKey: 'fk_profile_user' })
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({ reference: () => User })
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({ reference: () => Post })
221
+ @Field({ references: () => Post })
222
222
  postId?: number;
223
223
 
224
- @Field({ reference: () => Tag })
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<any>>;
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<RequestSuccessResponse<any>> | 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":"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"}
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
- const reference = field.references ?? field.reference;
891
- if (reference) {
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: reference,
896
+ entity: field.references,
898
897
  cardinality: 'm1',
899
898
  references: [
900
899
  {