Skip to content

Commit c9c1c51

Browse files
Copilothotlong
andcommitted
fix build: align driver method signatures with IDataDriver (QueryAST, return types)
- driver-memory: updateMany/deleteMany use QueryAST, return number (not { count }) - driver-sql: all query methods use QueryAST, count query is optional - Both drivers build successfully with strict type checking Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> Agent-Logs-Url: https://github.com/objectstack-ai/spec/sessions/b04909b4-c504-4ebb-b035-9774568c5bf0
1 parent bff8e7b commit c9c1c51

2 files changed

Lines changed: 15 additions & 15 deletions

File tree

packages/plugins/driver-memory/src/memory-driver.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ export class InMemoryDriver implements IDataDriver {
255255
// CRUD
256256
// ===================================
257257

258-
async find(object: string, query: QueryInput, options?: DriverOptions) {
258+
async find(object: string, query: QueryAST, options?: DriverOptions) {
259259
this.logger.debug('Find operation', { object, query });
260260

261261
const table = this.getTable(object);
@@ -300,7 +300,7 @@ export class InMemoryDriver implements IDataDriver {
300300
return results;
301301
}
302302

303-
async *findStream(object: string, query: QueryInput, options?: DriverOptions) {
303+
async *findStream(object: string, query: QueryAST, options?: DriverOptions) {
304304
this.logger.debug('FindStream operation', { object });
305305

306306
const results = await this.find(object, query, options);
@@ -309,7 +309,7 @@ export class InMemoryDriver implements IDataDriver {
309309
}
310310
}
311311

312-
async findOne(object: string, query: QueryInput, options?: DriverOptions) {
312+
async findOne(object: string, query: QueryAST, options?: DriverOptions) {
313313
this.logger.debug('FindOne operation', { object, query });
314314

315315
const results = await this.find(object, { ...query, limit: 1 }, options);
@@ -406,7 +406,7 @@ export class InMemoryDriver implements IDataDriver {
406406
return true;
407407
}
408408

409-
async count(object: string, query?: QueryInput, options?: DriverOptions) {
409+
async count(object: string, query?: QueryAST, options?: DriverOptions) {
410410
let records = this.getTable(object);
411411
if (query?.where) {
412412
const mongoQuery = this.convertToMongoQuery(query.where);
@@ -431,7 +431,7 @@ export class InMemoryDriver implements IDataDriver {
431431
return results;
432432
}
433433

434-
async updateMany(object: string, query: QueryInput, data: Record<string, any>, options?: DriverOptions) {
434+
async updateMany(object: string, query: QueryAST, data: Record<string, any>, options?: DriverOptions): Promise<number> {
435435
this.logger.debug('UpdateMany operation', { object, query });
436436

437437
const table = this.getTable(object);
@@ -461,10 +461,10 @@ export class InMemoryDriver implements IDataDriver {
461461

462462
if (count > 0) this.markDirty();
463463
this.logger.debug('UpdateMany completed', { object, count });
464-
return { count };
464+
return count;
465465
}
466466

467-
async deleteMany(object: string, query: QueryInput, options?: DriverOptions) {
467+
async deleteMany(object: string, query: QueryAST, options?: DriverOptions): Promise<number> {
468468
this.logger.debug('DeleteMany operation', { object, query });
469469

470470
const table = this.getTable(object);
@@ -489,7 +489,7 @@ export class InMemoryDriver implements IDataDriver {
489489
const count = initialLength - this.db[object].length;
490490
if (count > 0) this.markDirty();
491491
this.logger.debug('DeleteMany completed', { object, count });
492-
return { count };
492+
return count;
493493
}
494494

495495
// Compatibility aliases

packages/plugins/driver-sql/src/sql-driver.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Supports PostgreSQL, MySQL, SQLite, and other SQL databases.
88
*/
99

10-
import type { QueryInput, DriverOptions } from '@objectstack/spec/data';
10+
import type { QueryAST, DriverOptions } from '@objectstack/spec/data';
1111
import type { IDataDriver } from '@objectstack/spec/contracts';
1212
import knex, { Knex } from 'knex';
1313
import { nanoid } from 'nanoid';
@@ -167,7 +167,7 @@ export class SqlDriver implements IDataDriver {
167167
// CRUD — DriverInterface core
168168
// ===================================
169169

170-
async find(object: string, query: QueryInput, options?: DriverOptions): Promise<any[]> {
170+
async find(object: string, query: QueryAST, options?: DriverOptions): Promise<any[]> {
171171
const builder = this.getBuilder(object, options);
172172

173173
// SELECT
@@ -228,7 +228,7 @@ export class SqlDriver implements IDataDriver {
228228
return results;
229229
}
230230

231-
async findOne(object: string, query: QueryInput, options?: DriverOptions): Promise<any> {
231+
async findOne(object: string, query: QueryAST, options?: DriverOptions): Promise<any> {
232232
// When called with a string/number id fall back gracefully
233233
if (typeof query === 'string' || typeof query === 'number') {
234234
const res = await this.getBuilder(object, options).where('id', query).first();
@@ -248,7 +248,7 @@ export class SqlDriver implements IDataDriver {
248248
* NOTE: Current implementation fetches all results then yields them.
249249
* TODO: Use Knex .stream() for true cursor-based streaming on large datasets.
250250
*/
251-
async *findStream(object: string, query: QueryInput, options?: DriverOptions): AsyncGenerator<Record<string, any>> {
251+
async *findStream(object: string, query: QueryAST, options?: DriverOptions): AsyncGenerator<Record<string, any>> {
252252
const results = await this.find(object, query, options);
253253
for (const row of results) {
254254
yield row;
@@ -345,23 +345,23 @@ export class SqlDriver implements IDataDriver {
345345
await builder.whereIn('id', ids).delete();
346346
}
347347

348-
async updateMany(object: string, query: QueryInput, data: any, options?: DriverOptions): Promise<number> {
348+
async updateMany(object: string, query: QueryAST, data: any, options?: DriverOptions): Promise<number> {
349349
const builder = this.getBuilder(object, options);
350350
const filters = query.where || (query as any).filters || query;
351351
if (filters) this.applyFilters(builder, filters);
352352
const count = await builder.update(data);
353353
return count || 0;
354354
}
355355

356-
async deleteMany(object: string, query: QueryInput, options?: DriverOptions): Promise<number> {
356+
async deleteMany(object: string, query: QueryAST, options?: DriverOptions): Promise<number> {
357357
const builder = this.getBuilder(object, options);
358358
const filters = query.where || (query as any).filters || query;
359359
if (filters) this.applyFilters(builder, filters);
360360
const count = await builder.delete();
361361
return count || 0;
362362
}
363363

364-
async count(object: string, query: QueryInput, options?: DriverOptions): Promise<number> {
364+
async count(object: string, query?: QueryAST, options?: DriverOptions): Promise<number> {
365365
const builder = this.getBuilder(object, options);
366366

367367
let actualFilters = query as any;

0 commit comments

Comments
 (0)