duckdb-tinyorm 1.0.43 → 2.0.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 (45) hide show
  1. package/README.md +387 -46
  2. package/dist/constants/data-type.decorator.d.ts +20 -1
  3. package/dist/constants/data-type.decorator.js +62 -14
  4. package/dist/constants/data-type.decorator.js.map +1 -1
  5. package/dist/errors/orm-errors.d.ts +27 -0
  6. package/dist/errors/orm-errors.js +80 -0
  7. package/dist/errors/orm-errors.js.map +1 -0
  8. package/dist/helpers/bulk-insert.helper.d.ts +1 -0
  9. package/dist/helpers/bulk-insert.helper.js +19 -0
  10. package/dist/helpers/bulk-insert.helper.js.map +1 -0
  11. package/dist/helpers/db.helper.d.ts +10 -0
  12. package/dist/helpers/db.helper.js +62 -0
  13. package/dist/helpers/db.helper.js.map +1 -1
  14. package/dist/helpers/mapping.helper.d.ts +1 -1
  15. package/dist/helpers/mapping.helper.js +35 -35
  16. package/dist/helpers/mapping.helper.js.map +1 -1
  17. package/dist/helpers/table-util.helper.js +46 -19
  18. package/dist/helpers/table-util.helper.js.map +1 -1
  19. package/dist/index.d.ts +9 -3
  20. package/dist/index.js +24 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/migration/migration.d.ts +22 -0
  23. package/dist/migration/migration.js +143 -0
  24. package/dist/migration/migration.js.map +1 -0
  25. package/dist/pagination/pagination.d.ts +10 -0
  26. package/dist/pagination/pagination.js +3 -0
  27. package/dist/pagination/pagination.js.map +1 -0
  28. package/dist/query/query-builder.d.ts +27 -0
  29. package/dist/query/query-builder.js +113 -0
  30. package/dist/query/query-builder.js.map +1 -0
  31. package/dist/repositories/base.interface.d.ts +19 -2
  32. package/dist/repositories/base.repository.d.ts +18 -2
  33. package/dist/repositories/base.repository.js +159 -14
  34. package/dist/repositories/base.repository.js.map +1 -1
  35. package/dist/repositories/duckdb.repository.d.ts +18 -0
  36. package/dist/repositories/duckdb.repository.js +91 -16
  37. package/dist/repositories/duckdb.repository.js.map +1 -1
  38. package/dist/repositories/transaction.d.ts +9 -0
  39. package/dist/repositories/transaction.js +48 -0
  40. package/dist/repositories/transaction.js.map +1 -0
  41. package/dist/test.d.ts +4 -3
  42. package/dist/test.js +126 -28
  43. package/dist/test.js.map +1 -1
  44. package/package.json +3 -2
  45. package/tsconfig.json +9 -1
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationRunner = exports.Migration = void 0;
4
+ class Migration {
5
+ }
6
+ exports.Migration = Migration;
7
+ class MigrationRunner {
8
+ connection;
9
+ migrationTableName;
10
+ constructor(connection, options = {}) {
11
+ this.connection = connection;
12
+ this.migrationTableName = options.tableName ?? 'migrations';
13
+ }
14
+ async initialize() {
15
+ await this.createMigrationTableIfNotExists();
16
+ }
17
+ async createMigrationTableIfNotExists() {
18
+ const query = `
19
+ CREATE TABLE IF NOT EXISTS ${this.migrationTableName} (
20
+ id INTEGER PRIMARY KEY,
21
+ version VARCHAR NOT NULL UNIQUE,
22
+ applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
23
+ )
24
+ `;
25
+ return new Promise((resolve, reject) => {
26
+ this.connection.run(query, (err) => {
27
+ if (err) {
28
+ reject(err);
29
+ }
30
+ else {
31
+ resolve();
32
+ }
33
+ });
34
+ });
35
+ }
36
+ async applyMigrations(migrations) {
37
+ await this.initialize();
38
+ // Sort migrations by version
39
+ migrations.sort((a, b) => a.version.localeCompare(b.version));
40
+ // Check which migrations have been applied
41
+ const appliedMigrations = await this.getAppliedMigrations();
42
+ const appliedVersions = new Set(appliedMigrations.map(m => m.version));
43
+ // Apply migrations that haven't been applied yet
44
+ for (const migration of migrations) {
45
+ if (!appliedVersions.has(migration.version)) {
46
+ await this.applyMigration(migration);
47
+ }
48
+ }
49
+ }
50
+ async revertMigrations(migrations, targetVersion) {
51
+ await this.initialize();
52
+ // Sort migrations by version in descending order
53
+ migrations.sort((a, b) => b.version.localeCompare(a.version));
54
+ // Check which migrations have been applied
55
+ const appliedMigrations = await this.getAppliedMigrations();
56
+ const appliedVersions = new Map(appliedMigrations.map(m => [m.version, m]));
57
+ // Revert migrations until target version
58
+ for (const migration of migrations) {
59
+ if (appliedVersions.has(migration.version)) {
60
+ if (targetVersion && migration.version <= targetVersion) {
61
+ // Stop if we've reached or gone past the target version
62
+ break;
63
+ }
64
+ await this.revertMigration(migration);
65
+ }
66
+ }
67
+ }
68
+ async getAppliedMigrations() {
69
+ const query = `SELECT * FROM ${this.migrationTableName} ORDER BY id ASC`;
70
+ return new Promise((resolve, reject) => {
71
+ this.connection.all(query, (err, result) => {
72
+ if (err) {
73
+ reject(err);
74
+ }
75
+ else {
76
+ // Cast the result to the expected type
77
+ const typedResult = result.map((row) => ({
78
+ id: typeof row.id === 'number' ? row.id : Number(row.id),
79
+ version: String(row.version),
80
+ applied_at: String(row.applied_at)
81
+ }));
82
+ resolve(typedResult);
83
+ }
84
+ });
85
+ });
86
+ }
87
+ async applyMigration(migration) {
88
+ const upQuery = migration.up();
89
+ const insertQuery = `INSERT INTO ${this.migrationTableName} (version) VALUES ('${migration.version}')`;
90
+ // Start transaction
91
+ await this.executeQuery('BEGIN TRANSACTION');
92
+ try {
93
+ // Apply migration
94
+ await this.executeQuery(upQuery);
95
+ // Record migration
96
+ await this.executeQuery(insertQuery);
97
+ // Commit transaction
98
+ await this.executeQuery('COMMIT');
99
+ console.log(`Migration ${migration.version} applied successfully`);
100
+ }
101
+ catch (error) {
102
+ // Rollback transaction on error
103
+ await this.executeQuery('ROLLBACK');
104
+ console.error(`Failed to apply migration ${migration.version}:`, error);
105
+ throw error;
106
+ }
107
+ }
108
+ async revertMigration(migration) {
109
+ const downQuery = migration.down();
110
+ const deleteQuery = `DELETE FROM ${this.migrationTableName} WHERE version = '${migration.version}'`;
111
+ // Start transaction
112
+ await this.executeQuery('BEGIN TRANSACTION');
113
+ try {
114
+ // Revert migration
115
+ await this.executeQuery(downQuery);
116
+ // Remove migration record
117
+ await this.executeQuery(deleteQuery);
118
+ // Commit transaction
119
+ await this.executeQuery('COMMIT');
120
+ console.log(`Migration ${migration.version} reverted successfully`);
121
+ }
122
+ catch (error) {
123
+ // Rollback transaction on error
124
+ await this.executeQuery('ROLLBACK');
125
+ console.error(`Failed to revert migration ${migration.version}:`, error);
126
+ throw error;
127
+ }
128
+ }
129
+ async executeQuery(query) {
130
+ return new Promise((resolve, reject) => {
131
+ this.connection.run(query, (err, result) => {
132
+ if (err) {
133
+ reject(err);
134
+ }
135
+ else {
136
+ resolve(result);
137
+ }
138
+ });
139
+ });
140
+ }
141
+ }
142
+ exports.MigrationRunner = MigrationRunner;
143
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/migration/migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface Pageable {
2
+ page: number;
3
+ size: number;
4
+ }
5
+ export interface Page<T> {
6
+ content: T[];
7
+ pageable: Pageable;
8
+ totalElements: number;
9
+ totalPages: number;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/pagination/pagination.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ export declare class QueryBuilder<T> {
2
+ private selectClauses;
3
+ private fromTable;
4
+ private whereClauses;
5
+ private orderByClauses;
6
+ private limitValue?;
7
+ private offsetValue?;
8
+ private groupByClauses;
9
+ private havingClauses;
10
+ private joinClauses;
11
+ private parameters;
12
+ constructor(entityClass: new () => T);
13
+ select(columns: string | string[]): QueryBuilder<T>;
14
+ where(condition: string, ...params: any[]): QueryBuilder<T>;
15
+ andWhere(condition: string, ...params: any[]): QueryBuilder<T>;
16
+ orWhere(condition: string, ...params: any[]): QueryBuilder<T>;
17
+ orderBy(column: string, direction?: 'ASC' | 'DESC'): QueryBuilder<T>;
18
+ limit(limit: number): QueryBuilder<T>;
19
+ offset(offset: number): QueryBuilder<T>;
20
+ groupBy(column: string | string[]): QueryBuilder<T>;
21
+ having(condition: string, ...params: any[]): QueryBuilder<T>;
22
+ join(table: string, condition: string): QueryBuilder<T>;
23
+ leftJoin(table: string, condition: string): QueryBuilder<T>;
24
+ rightJoin(table: string, condition: string): QueryBuilder<T>;
25
+ getQuery(): string;
26
+ getParameters(): any[];
27
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryBuilder = void 0;
4
+ class QueryBuilder {
5
+ selectClauses = ['*'];
6
+ fromTable = '';
7
+ whereClauses = [];
8
+ orderByClauses = [];
9
+ limitValue;
10
+ offsetValue;
11
+ groupByClauses = [];
12
+ havingClauses = [];
13
+ joinClauses = [];
14
+ parameters = [];
15
+ constructor(entityClass) {
16
+ // Use metadata to get the table name
17
+ const tableName = Reflect.getMetadata('TableName', entityClass) || entityClass.name;
18
+ this.fromTable = `main.${tableName}`;
19
+ }
20
+ select(columns) {
21
+ this.selectClauses = Array.isArray(columns) ? columns : [columns];
22
+ return this;
23
+ }
24
+ where(condition, ...params) {
25
+ this.whereClauses.push(condition);
26
+ this.parameters.push(...params);
27
+ return this;
28
+ }
29
+ andWhere(condition, ...params) {
30
+ if (this.whereClauses.length > 0) {
31
+ this.whereClauses.push(`AND ${condition}`);
32
+ }
33
+ else {
34
+ this.whereClauses.push(condition);
35
+ }
36
+ this.parameters.push(...params);
37
+ return this;
38
+ }
39
+ orWhere(condition, ...params) {
40
+ if (this.whereClauses.length > 0) {
41
+ this.whereClauses.push(`OR ${condition}`);
42
+ }
43
+ else {
44
+ this.whereClauses.push(condition);
45
+ }
46
+ this.parameters.push(...params);
47
+ return this;
48
+ }
49
+ orderBy(column, direction = 'ASC') {
50
+ this.orderByClauses.push(`${column} ${direction}`);
51
+ return this;
52
+ }
53
+ limit(limit) {
54
+ this.limitValue = limit;
55
+ return this;
56
+ }
57
+ offset(offset) {
58
+ this.offsetValue = offset;
59
+ return this;
60
+ }
61
+ groupBy(column) {
62
+ const columns = Array.isArray(column) ? column : [column];
63
+ this.groupByClauses.push(...columns);
64
+ return this;
65
+ }
66
+ having(condition, ...params) {
67
+ this.havingClauses.push(condition);
68
+ this.parameters.push(...params);
69
+ return this;
70
+ }
71
+ join(table, condition) {
72
+ this.joinClauses.push(`JOIN ${table} ON ${condition}`);
73
+ return this;
74
+ }
75
+ leftJoin(table, condition) {
76
+ this.joinClauses.push(`LEFT JOIN ${table} ON ${condition}`);
77
+ return this;
78
+ }
79
+ rightJoin(table, condition) {
80
+ this.joinClauses.push(`RIGHT JOIN ${table} ON ${condition}`);
81
+ return this;
82
+ }
83
+ getQuery() {
84
+ let query = `SELECT ${this.selectClauses.join(', ')} FROM ${this.fromTable}`;
85
+ if (this.joinClauses.length > 0) {
86
+ query += ` ${this.joinClauses.join(' ')}`;
87
+ }
88
+ if (this.whereClauses.length > 0) {
89
+ query += ` WHERE ${this.whereClauses.join(' ')}`;
90
+ }
91
+ if (this.groupByClauses.length > 0) {
92
+ query += ` GROUP BY ${this.groupByClauses.join(', ')}`;
93
+ }
94
+ if (this.havingClauses.length > 0) {
95
+ query += ` HAVING ${this.havingClauses.join(' AND ')}`;
96
+ }
97
+ if (this.orderByClauses.length > 0) {
98
+ query += ` ORDER BY ${this.orderByClauses.join(', ')}`;
99
+ }
100
+ if (this.limitValue !== undefined) {
101
+ query += ` LIMIT ${this.limitValue}`;
102
+ }
103
+ if (this.offsetValue !== undefined) {
104
+ query += ` OFFSET ${this.offsetValue}`;
105
+ }
106
+ return query;
107
+ }
108
+ getParameters() {
109
+ return this.parameters;
110
+ }
111
+ }
112
+ exports.QueryBuilder = QueryBuilder;
113
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,24 @@
1
- export interface IRepository<T, Tid> {
1
+ import { Page, Pageable } from '../pagination/pagination';
2
+ import { QueryBuilder } from '../query/query-builder';
3
+ import { Transaction } from './transaction';
4
+ import { ExportOptions } from './duckdb.repository';
5
+ export interface IRepository<T extends object, Tid> {
6
+ init(): Promise<void>;
2
7
  save(entity: T): Promise<T>;
8
+ saveAll(entities: T[]): Promise<T[]>;
9
+ insert(entity: T): Promise<T>;
10
+ bulkInsert(entities: T[]): Promise<T[]>;
3
11
  findAll(): Promise<T[]>;
4
12
  findById(id: Tid): Promise<T>;
5
- findBy(entity: T, columns: string[]): Promise<T[]>;
13
+ findByIdOrThrow(id: Tid): Promise<T>;
14
+ existsById(id: Tid): Promise<boolean>;
15
+ findBy(entity: Partial<T>, columns: string[]): Promise<T[]>;
16
+ findWithPagination(pageable: Pageable): Promise<Page<T>>;
6
17
  removeById(id: Tid): Promise<T>;
18
+ removeAll(): Promise<void>;
19
+ createQueryBuilder(): Promise<QueryBuilder<T>>;
20
+ withTransaction<R>(callback: (transaction: Transaction) => Promise<R>): Promise<R>;
21
+ toEntity(data: Record<string, any>): T;
22
+ exportData(options: ExportOptions): Promise<void>;
23
+ exportQuery(query: string, options: ExportOptions): Promise<void>;
7
24
  }
@@ -1,16 +1,32 @@
1
1
  import 'reflect-metadata';
2
- import { DuckDbRepository } from './duckdb.repository';
2
+ import { DuckDbRepository, ExportOptions } from './duckdb.repository';
3
3
  import { IRepository } from './base.interface';
4
- export declare class BaseRepository<T, Tid> implements IRepository<T, Tid> {
4
+ import { QueryBuilder } from '../query/query-builder';
5
+ import { Transaction } from './transaction';
6
+ import { Page, Pageable } from '../pagination/pagination';
7
+ export declare class BaseRepository<T extends object, Tid> implements IRepository<T, Tid> {
5
8
  protected repository: DuckDbRepository;
6
9
  protected classType: new () => T;
10
+ protected tableName: string;
7
11
  private primaryColumnId;
8
12
  constructor(repository: DuckDbRepository);
9
13
  init(): Promise<void>;
10
14
  private initializeTable;
11
15
  removeById(id: Tid): Promise<T>;
12
16
  save(entity: T): Promise<T>;
17
+ saveAll(entities: T[]): Promise<T[]>;
18
+ insert(entity: T): Promise<T>;
19
+ bulkInsert(entities: T[]): Promise<T[]>;
13
20
  findAll(): Promise<T[]>;
14
21
  findById(id: Tid): Promise<T>;
22
+ existsById(id: Tid): Promise<boolean>;
23
+ findByIdOrThrow(id: Tid): Promise<T>;
24
+ findWithPagination(pageable: Pageable): Promise<Page<T>>;
15
25
  findBy(entity: Partial<T>, columns: string[]): Promise<T[]>;
26
+ removeAll(): Promise<void>;
27
+ createQueryBuilder(): Promise<QueryBuilder<T>>;
28
+ withTransaction<R>(callback: (transaction: Transaction) => Promise<R>): Promise<R>;
29
+ toEntity(data: Record<string, any>): T;
30
+ exportData(options: ExportOptions): Promise<void>;
31
+ exportQuery(query: string, options: ExportOptions): Promise<void>;
16
32
  }
@@ -3,9 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BaseRepository = void 0;
4
4
  require("reflect-metadata");
5
5
  const table_util_helper_1 = require("../helpers/table-util.helper");
6
+ const query_builder_1 = require("../query/query-builder");
7
+ const orm_errors_1 = require("../errors/orm-errors");
8
+ // Add 'extends object' constraint to T
6
9
  class BaseRepository {
7
10
  repository;
8
11
  classType;
12
+ tableName;
9
13
  primaryColumnId = '';
10
14
  constructor(repository) {
11
15
  this.repository = repository;
@@ -14,6 +18,8 @@ class BaseRepository {
14
18
  if (!this.classType) {
15
19
  throw new Error('Class type is not defined!');
16
20
  }
21
+ // Get the table name from metadata or use the class name
22
+ this.tableName = Reflect.getMetadata('TableName', this.classType) || this.classType.name;
17
23
  }
18
24
  async init() {
19
25
  await this.initializeTable();
@@ -29,37 +35,138 @@ class BaseRepository {
29
35
  }
30
36
  async removeById(id) {
31
37
  const deletedItem = await this.findById(id);
32
- const query = `DELETE FROM main.${this.classType.name} WHERE ${this.primaryColumnId}='${id}'`;
38
+ const query = `DELETE FROM main.${this.tableName} WHERE ${this.primaryColumnId}='${id}'`;
33
39
  await this.repository.executeQuery(query);
34
40
  return deletedItem;
35
41
  }
42
+ // Update the save method:
36
43
  async save(entity) {
37
- // console.log('Saving entity:', entity);
38
- // console.log('Class type:', this.classType.name);
39
- // // Create the table if it doesn't exist
40
- // await this.repository.createTableIfNotExists(this.classType.name, this.classType);
41
- // Save the entity to DuckDB
42
- await this.repository.saveToDuckDB(this.classType.name, this.classType, [entity]);
43
- return entity;
44
+ // Handle auto-increment fields
45
+ const propertyNames = Object.getOwnPropertyNames(entity);
46
+ const fields = [];
47
+ const values = [];
48
+ // Collect non-auto-increment fields and values
49
+ for (const propertyName of propertyNames) {
50
+ const autoIncrement = Reflect.getMetadata('AutoIncrement', this.classType.prototype, propertyName);
51
+ const isPrimaryKey = Reflect.getMetadata('PrimaryKey', this.classType.prototype, propertyName);
52
+ if (autoIncrement && isPrimaryKey) {
53
+ continue; // Skip auto-increment primary key
54
+ }
55
+ const value = entity[propertyName];
56
+ fields.push(propertyName);
57
+ if (value === undefined || value === null) {
58
+ values.push('NULL');
59
+ }
60
+ else if (typeof value === 'string') {
61
+ const escapedValue = value.replace(/'/g, "''");
62
+ values.push(`'${escapedValue}'`);
63
+ }
64
+ else if (typeof value === 'boolean') {
65
+ values.push(value ? 'TRUE' : 'FALSE');
66
+ }
67
+ else {
68
+ values.push(`${value}`);
69
+ }
70
+ }
71
+ // Build and execute the INSERT statement
72
+ const insertSQL = `INSERT INTO main.${this.tableName} (${fields.join(', ')}) VALUES (${values.join(', ')})`;
73
+ console.log("Insert SQL:", insertSQL);
74
+ try {
75
+ await this.repository.executeQuery(insertSQL);
76
+ // For auto-increment fields, fetch the last inserted ID
77
+ for (const propertyName of propertyNames) {
78
+ const autoIncrement = Reflect.getMetadata('AutoIncrement', this.classType.prototype, propertyName);
79
+ const isPrimaryKey = Reflect.getMetadata('PrimaryKey', this.classType.prototype, propertyName);
80
+ if (autoIncrement && isPrimaryKey) {
81
+ const query = `SELECT MAX(${propertyName}) as last_id FROM main.${this.tableName}`;
82
+ const result = await this.repository.executeQuery(query);
83
+ if (result && result.length > 0) {
84
+ entity[propertyName] = result[0].last_id;
85
+ }
86
+ }
87
+ }
88
+ return entity;
89
+ }
90
+ catch (error) {
91
+ console.error("Error saving entity:", error);
92
+ throw error;
93
+ }
94
+ }
95
+ async saveAll(entities) {
96
+ if (!entities.length)
97
+ return [];
98
+ await this.repository.saveToDuckDB(this.classType.name, this.classType, entities);
99
+ return entities;
100
+ }
101
+ async insert(entity) {
102
+ return this.save(entity);
103
+ }
104
+ async bulkInsert(entities) {
105
+ return this.saveAll(entities);
44
106
  }
45
107
  async findAll() {
46
- const query = `SELECT * FROM main.${this.classType.name}`;
47
- const result = await this.repository.executeQuery(query);
48
- return result;
108
+ const query = `SELECT * FROM main.${this.tableName}`;
109
+ return this.repository.executeQuery(query);
49
110
  }
50
111
  async findById(id) {
51
112
  // Get the property names from the class using reflection
52
113
  if (!this.primaryColumnId)
53
114
  this.primaryColumnId = (0, table_util_helper_1.getPrimaryId)(this.classType);
115
+ if (!this.primaryColumnId) {
116
+ throw new orm_errors_1.PrimaryKeyError("The table doesn't have any primary key declared!");
117
+ }
118
+ const query = `SELECT * FROM main.${this.tableName} WHERE ${this.primaryColumnId}='${id}'`;
119
+ try {
120
+ const result = await this.repository.executeQuery(query);
121
+ if (!result?.length) {
122
+ throw new orm_errors_1.EntityNotFoundError(this.classType.name, id);
123
+ }
124
+ return result[0];
125
+ }
126
+ catch (error) {
127
+ if (error instanceof orm_errors_1.EntityNotFoundError) {
128
+ throw error;
129
+ }
130
+ throw new orm_errors_1.QueryExecutionError(query, error);
131
+ }
132
+ }
133
+ async existsById(id) {
134
+ if (!this.primaryColumnId) {
135
+ this.primaryColumnId = (0, table_util_helper_1.getPrimaryId)(this.classType);
136
+ }
54
137
  if (!this.primaryColumnId) {
55
138
  throw new Error("The table doesn't have any primary key declared!");
56
139
  }
57
- const query = `SELECT * FROM main.${this.classType.name} WHERE ${this.primaryColumnId}='${id}'`;
140
+ const query = `SELECT COUNT(*) as count FROM main.${this.tableName} WHERE ${this.primaryColumnId}='${id}'`;
58
141
  const result = await this.repository.executeQuery(query);
59
- return result?.length ? result[0] : undefined;
142
+ return result[0].count > 0;
143
+ }
144
+ async findByIdOrThrow(id) {
145
+ const entity = await this.findById(id);
146
+ if (!entity) {
147
+ throw new Error(`Entity with id ${id} not found`);
148
+ }
149
+ return entity;
150
+ }
151
+ async findWithPagination(pageable) {
152
+ const countQuery = `SELECT COUNT(*) as count FROM main.${this.tableName}`;
153
+ const countResult = await this.repository.executeQuery(countQuery);
154
+ // Convert BigInt to Number before using in Math.ceil
155
+ const totalElements = Number(countResult[0].count);
156
+ const query = `SELECT * FROM main.${this.tableName} LIMIT ${pageable.size} OFFSET ${pageable.page * pageable.size}`;
157
+ const content = await this.repository.executeQuery(query);
158
+ return {
159
+ content,
160
+ pageable: {
161
+ page: pageable.page,
162
+ size: pageable.size
163
+ },
164
+ totalElements,
165
+ totalPages: Math.ceil(totalElements / pageable.size)
166
+ };
60
167
  }
61
168
  async findBy(entity, columns) {
62
- let query = `SELECT * FROM main.${this.classType.name} WHERE `;
169
+ let query = `SELECT * FROM main.${this.tableName} WHERE `;
63
170
  for (const column of columns) {
64
171
  query += `${column}='${entity[column]}' AND `;
65
172
  }
@@ -67,6 +174,44 @@ class BaseRepository {
67
174
  const result = await this.repository.executeQuery(query);
68
175
  return result;
69
176
  }
177
+ async removeAll() {
178
+ const query = `DELETE FROM main.${this.tableName}`;
179
+ await this.repository.executeQuery(query);
180
+ }
181
+ async createQueryBuilder() {
182
+ return new query_builder_1.QueryBuilder(this.classType);
183
+ }
184
+ // Support for transactions
185
+ async withTransaction(callback) {
186
+ const transaction = this.repository.createTransaction();
187
+ try {
188
+ await transaction.begin();
189
+ const result = await callback(transaction);
190
+ await transaction.commit();
191
+ return result;
192
+ }
193
+ catch (error) {
194
+ try {
195
+ await transaction.rollback();
196
+ }
197
+ catch (rollbackError) {
198
+ throw new orm_errors_1.TransactionError('rollback', rollbackError);
199
+ }
200
+ throw new orm_errors_1.TransactionError('execution', error);
201
+ }
202
+ }
203
+ toEntity(data) {
204
+ const entity = new this.classType();
205
+ Object.assign(entity, data);
206
+ return entity;
207
+ }
208
+ // Add this method to your BaseRepository class
209
+ async exportData(options) {
210
+ return this.repository.exportTable(this.tableName, options);
211
+ }
212
+ async exportQuery(query, options) {
213
+ return this.repository.exportQuery(query, options);
214
+ }
70
215
  }
71
216
  exports.BaseRepository = BaseRepository;
72
217
  //# sourceMappingURL=base.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../../src/repositories/base.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../../src/repositories/base.repository.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { Transaction } from './transaction';
1
2
  export declare enum DuckDbLocation {
2
3
  File = "",
3
4
  Memory = ":memory:"
@@ -27,4 +28,21 @@ export declare class DuckDbRepository {
27
28
  dropTable(tableName: string): Promise<void>;
28
29
  deleteTableData(tableName: string): Promise<any[]>;
29
30
  saveQueryToParquet(name: string, query: string, folder: string): Promise<void>;
31
+ createTransaction(): Transaction;
32
+ exportTable<T>(tableName: string, options: ExportOptions): Promise<void>;
33
+ exportQuery(query: string, options: ExportOptions): Promise<void>;
34
+ }
35
+ export interface ExportOptions {
36
+ format: 'csv' | 'json' | 'parquet';
37
+ fileName: string;
38
+ csvOptions?: {
39
+ header?: boolean;
40
+ delimiter?: string;
41
+ };
42
+ jsonOptions?: {
43
+ pretty?: boolean;
44
+ };
45
+ parquetOptions?: {
46
+ compression?: string;
47
+ };
30
48
  }