@iamkirbki/database-handler-core 4.0.0 → 4.0.2

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.
@@ -1,5 +1,5 @@
1
1
  import Repository from "../runtime/Repository.js";
2
- import { columnType, QueryCondition, QueryValues, ModelConfig, relation } from "../types/index.js";
2
+ import { columnType, QueryCondition, QueryValues, ModelConfig, relation, QueryOptions } from "../types/index.js";
3
3
  /** Abstract Model class for ORM-style database interactions */
4
4
  export default abstract class Model<ModelType extends columnType> {
5
5
  private _repository?;
@@ -11,9 +11,16 @@ export default abstract class Model<ModelType extends columnType> {
11
11
  protected exists: boolean;
12
12
  protected dirty: boolean;
13
13
  protected queryScopes?: QueryCondition;
14
+ protected queryOptions: QueryOptions;
14
15
  get primaryKeyColumn(): string;
15
16
  get primaryKey(): QueryValues | undefined;
16
17
  get values(): Partial<ModelType> | ModelType;
18
+ static limit<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, value: number): ParamterModelType;
19
+ limit(value: number): this;
20
+ static offset<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, value: number): ParamterModelType;
21
+ offset(value: number): this;
22
+ static orderBy<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, column: string, direction?: 'ASC' | 'DESC'): ParamterModelType;
23
+ orderBy(column: string, direction?: 'ASC' | 'DESC'): this;
17
24
  static where<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, conditions: QueryCondition): ParamterModelType;
18
25
  where(conditions: QueryCondition): this;
19
26
  static whereId<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, id: QueryValues): ParamterModelType;
@@ -22,12 +29,15 @@ export default abstract class Model<ModelType extends columnType> {
22
29
  find(primaryKeyValue: QueryValues): this;
23
30
  static findOrFail<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, primaryKeyValue: QueryValues): Partial<columnType>;
24
31
  findOrFail(primaryKeyValue?: QueryValues): Partial<ModelType> | ModelType;
25
- get(): Promise<Partial<ModelType> | ModelType>;
32
+ static first<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, primaryKeyValue?: string | number): Promise<Partial<columnType> | ParamterModelType>;
33
+ first(primaryKeyValue?: string | number): Promise<Partial<ModelType>>;
34
+ get(): Promise<Partial<ModelType>[]>;
35
+ static all<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType): Promise<Partial<columnType>[]>;
36
+ all(): Promise<Partial<ModelType>[]>;
26
37
  static set<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, attributes: Partial<columnType>): ParamterModelType;
27
38
  set(attributes: Partial<ModelType>): this;
28
39
  save(): this;
29
40
  update(attributes: Partial<ModelType>): this;
30
- all(): Promise<Partial<ModelType>[]>;
31
41
  protected joinedEntities: string[];
32
42
  protected relations: relation[];
33
43
  get JoinedEntities(): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/abstract/Model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/abstract/Model.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ export default class Model {
25
25
  this.attributes = {};
26
26
  this.exists = false;
27
27
  this.dirty = false;
28
+ this.queryOptions = {};
28
29
  this.joinedEntities = [];
29
30
  this.relations = [];
30
31
  }
@@ -46,6 +47,33 @@ export default class Model {
46
47
  get values() {
47
48
  return this.attributes;
48
49
  }
50
+ static limit(value) {
51
+ const instance = new this();
52
+ return instance.limit(value);
53
+ }
54
+ limit(value) {
55
+ this.queryOptions.limit = value;
56
+ return this;
57
+ }
58
+ static offset(value) {
59
+ const instance = new this();
60
+ return instance.offset(value);
61
+ }
62
+ offset(value) {
63
+ if (!this.queryOptions.limit) {
64
+ throw new Error("Offset cannot be set without a limit.");
65
+ }
66
+ this.queryOptions.offset = value;
67
+ return this;
68
+ }
69
+ static orderBy(column, direction = 'ASC') {
70
+ const instance = new this();
71
+ return instance.orderBy(column, direction);
72
+ }
73
+ orderBy(column, direction = 'ASC') {
74
+ this.queryOptions.orderBy = column + " " + direction;
75
+ return this;
76
+ }
49
77
  static where(conditions) {
50
78
  const instance = new this();
51
79
  return instance.where(conditions);
@@ -80,7 +108,7 @@ export default class Model {
80
108
  this.queryScopes = { [this.primaryKeyColumn]: primaryKeyValue };
81
109
  }
82
110
  const query = this.queryScopes || {};
83
- (_a = this.repository) === null || _a === void 0 ? void 0 : _a.get(query, this).then((record) => {
111
+ (_a = this.repository) === null || _a === void 0 ? void 0 : _a.first(query, this).then((record) => {
84
112
  if (!record) {
85
113
  throw new Error(`Record with primary key ${primaryKeyValue} not found.`);
86
114
  }
@@ -88,13 +116,31 @@ export default class Model {
88
116
  });
89
117
  return this.attributes;
90
118
  }
91
- get() {
119
+ static first(primaryKeyValue) {
120
+ return __awaiter(this, void 0, void 0, function* () {
121
+ const instance = new this();
122
+ return instance.first(primaryKeyValue);
123
+ });
124
+ }
125
+ first(primaryKeyValue) {
92
126
  return __awaiter(this, void 0, void 0, function* () {
93
127
  var _a;
94
- this.attributes = (yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.get(this.queryScopes || {}, this)));
128
+ this.attributes = (yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.first(primaryKeyValue ? { [this.configuration.primaryKey]: primaryKeyValue } : {}, this)));
95
129
  return this.attributes;
96
130
  });
97
131
  }
132
+ get() {
133
+ return __awaiter(this, void 0, void 0, function* () {
134
+ return this.repository.get(this.queryScopes || {}, this.queryOptions, this);
135
+ });
136
+ }
137
+ static all() {
138
+ const instance = new this();
139
+ return instance.all();
140
+ }
141
+ all() {
142
+ return this.repository.all(this);
143
+ }
98
144
  static set(attributes) {
99
145
  const instance = new this();
100
146
  return instance.set(attributes);
@@ -108,8 +154,8 @@ export default class Model {
108
154
  return this;
109
155
  }
110
156
  save() {
111
- this.repository.save(this.attributes, this.originalAttributes);
112
157
  this.originalAttributes = Object.assign(Object.assign({}, this.originalAttributes), this.attributes);
158
+ this.repository.save(this.originalAttributes);
113
159
  this.exists = true;
114
160
  this.dirty = false;
115
161
  return this;
@@ -122,9 +168,6 @@ export default class Model {
122
168
  (_a = this.repository) === null || _a === void 0 ? void 0 : _a.update(attributes);
123
169
  return this;
124
170
  }
125
- all() {
126
- return this.repository.all(this);
127
- }
128
171
  get JoinedEntities() {
129
172
  return this.joinedEntities;
130
173
  }
@@ -1,43 +1,25 @@
1
- import Table from "./Table.js";
2
- import { QueryCondition, QueryWhereParameters } from "../types/index.js";
3
- import Record from "./Record.js";
4
- import IDatabaseAdapter from "../interfaces/IDatabaseAdapter.js";
1
+ import { columnType, QueryCondition, QueryWhereParameters, TableColumnInfo } from "../types/index.js";
2
+ import { Record } from "../index.js";
5
3
  /** Query class for executing custom SQL queries */
6
4
  export default class Query {
7
- readonly Table: Table;
5
+ readonly TableName: string;
8
6
  private readonly _adapter;
9
7
  private _query;
10
8
  private _parameters;
11
9
  get Parameters(): QueryCondition;
12
10
  set Parameters(value: QueryCondition);
13
- constructor(Table: Table, Query: string, adapter: IDatabaseAdapter);
14
- /**
15
- * Execute a query that modifies data (INSERT, UPDATE, DELETE)
16
- *
17
- * @template Type - Expected return type (typically { lastInsertRowid: number, changes: number })
18
- * @returns Result object with lastInsertRowid and changes count
19
- *
20
- * @example
21
- * ```typescript
22
- * // INSERT query
23
- * const query = db.Query(users, 'INSERT INTO users (name, age) VALUES (@name, @age)');
24
- * query.Parameters = { name: 'John', age: 30 };
25
- * const result = query.Run<{ lastInsertRowid: number, changes: number }>();
26
- * console.log(`Inserted ID: ${result.lastInsertRowid}`);
27
- *
28
- * // UPDATE query
29
- * const update = db.Query(users, 'UPDATE users SET age = @age WHERE id = @id');
30
- * update.Parameters = { age: 31, id: 1 };
31
- * const updateResult = update.Run<{ changes: number }>();
32
- * console.log(`Updated ${updateResult.changes} rows`);
33
- * ```
34
- */
11
+ constructor(TableName: string, Query: string);
12
+ /** Execute a non-SELECT query (INSERT, UPDATE, DELETE, etc.) */
35
13
  Run<Type>(): Promise<Type>;
36
14
  /** Execute a SELECT query and return all matching rows */
37
- All<Type>(): Promise<Record<Type>[]>;
38
- static ConvertParamsToObject(params: QueryCondition): QueryWhereParameters;
39
- static ConvertIdToString(params: QueryWhereParameters): QueryWhereParameters;
15
+ All<Type extends columnType>(): Promise<Record<Type>[]>;
40
16
  /** Execute a SELECT query and return the first matching row */
41
- Get<Type>(): Promise<Record<Type> | undefined>;
17
+ Get<Type extends columnType>(): Promise<Record<Type> | undefined>;
18
+ static tableColumnInformation(tableName: string): Promise<TableColumnInfo[]>;
19
+ Count(): Promise<number>;
20
+ /** Convert various parameter formats to a consistent object format */
21
+ static ConvertParamsToObject(params: QueryCondition): QueryWhereParameters;
22
+ /** Databases don't like numeric values when inserting with a query */
23
+ static ConvertValueToString(params: QueryWhereParameters): QueryWhereParameters;
42
24
  }
43
25
  //# sourceMappingURL=Query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/base/Query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAEpE,mDAAmD;AACnD,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,SAAgB,KAAK,EAAE,KAAK,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAsB;IAEzC,IAAW,UAAU,IAAI,cAAc,CAEtC;IAED,IAAW,UAAU,CAAC,KAAK,EAAE,cAAc,EAE1C;gBAEW,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IAMlE;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IAKvC,0DAA0D;IAC7C,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;WAMnC,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,oBAAoB;WAanE,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB;IAQnF,+DAA+D;IAClD,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;CAK5D"}
1
+ {"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/base/Query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAa,MAAM,EAAoB,MAAM,gBAAgB,CAAC;AAErE,mDAAmD;AACnD,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IACnF,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAsB;IAEzC,IAAW,UAAU,IAAI,cAAc,CAEtC;IAED,IAAW,UAAU,CAAC,KAAK,EAAE,cAAc,EAE1C;gBAEW,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAK5C,gEAAgE;IACnD,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IAKvC,0DAA0D;IAC7C,GAAG,CAAC,IAAI,SAAS,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAMpE,+DAA+D;IAClD,GAAG,CAAC,IAAI,SAAS,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;WAM1D,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAI7E,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAMrC,sEAAsE;WACxD,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,oBAAoB;IAajF,sEAAsE;WACxD,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB;CAKvF"}
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import Record from "./Record.js";
10
+ import { Container, Record } from "../index.js";
11
11
  /** Query class for executing custom SQL queries */
12
12
  export default class Query {
13
13
  get Parameters() {
@@ -16,34 +16,14 @@ export default class Query {
16
16
  set Parameters(value) {
17
17
  this._parameters = Query.ConvertParamsToObject(value);
18
18
  }
19
- constructor(Table, Query, adapter) {
19
+ constructor(TableName, Query) {
20
+ this._adapter = Container.getInstance().getAdapter();
20
21
  this._query = "";
21
22
  this._parameters = {};
22
- this.Table = Table;
23
+ this.TableName = TableName;
23
24
  this._query = Query;
24
- this._adapter = adapter;
25
25
  }
26
- /**
27
- * Execute a query that modifies data (INSERT, UPDATE, DELETE)
28
- *
29
- * @template Type - Expected return type (typically { lastInsertRowid: number, changes: number })
30
- * @returns Result object with lastInsertRowid and changes count
31
- *
32
- * @example
33
- * ```typescript
34
- * // INSERT query
35
- * const query = db.Query(users, 'INSERT INTO users (name, age) VALUES (@name, @age)');
36
- * query.Parameters = { name: 'John', age: 30 };
37
- * const result = query.Run<{ lastInsertRowid: number, changes: number }>();
38
- * console.log(`Inserted ID: ${result.lastInsertRowid}`);
39
- *
40
- * // UPDATE query
41
- * const update = db.Query(users, 'UPDATE users SET age = @age WHERE id = @id');
42
- * update.Parameters = { age: 31, id: 1 };
43
- * const updateResult = update.Run<{ changes: number }>();
44
- * console.log(`Updated ${updateResult.changes} rows`);
45
- * ```
46
- */
26
+ /** Execute a non-SELECT query (INSERT, UPDATE, DELETE, etc.) */
47
27
  Run() {
48
28
  return __awaiter(this, void 0, void 0, function* () {
49
29
  const stmt = yield this._adapter.prepare(this._query);
@@ -55,9 +35,30 @@ export default class Query {
55
35
  return __awaiter(this, void 0, void 0, function* () {
56
36
  const stmt = yield this._adapter.prepare(this._query);
57
37
  const results = yield stmt.all(this.Parameters);
58
- return results.map(res => new Record(res, this._adapter, this.Table));
38
+ return results.map(res => new Record(res, this.TableName));
59
39
  });
60
40
  }
41
+ /** Execute a SELECT query and return the first matching row */
42
+ Get() {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ const stmt = yield this._adapter.prepare(this._query);
45
+ const results = yield stmt.get(this.Parameters);
46
+ return results ? new Record(results, this.TableName) : undefined;
47
+ });
48
+ }
49
+ static tableColumnInformation(tableName) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ return Container.getInstance().getAdapter().tableColumnInformation(tableName);
52
+ });
53
+ }
54
+ Count() {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const stmt = yield this._adapter.prepare(this._query);
57
+ const result = yield stmt.get(this.Parameters);
58
+ return parseInt(result.count) || 0;
59
+ });
60
+ }
61
+ /** Convert various parameter formats to a consistent object format */
61
62
  static ConvertParamsToObject(params) {
62
63
  const paramObject = {};
63
64
  if (Array.isArray(params)) {
@@ -68,20 +69,12 @@ export default class Query {
68
69
  else {
69
70
  Object.assign(paramObject, params);
70
71
  }
71
- return this.ConvertIdToString(paramObject);
72
+ return this.ConvertValueToString(paramObject);
72
73
  }
73
- static ConvertIdToString(params) {
74
- if (params.id && typeof params.id === 'number') {
75
- return Object.assign(Object.assign({}, params), { id: params.id.toString() });
76
- }
77
- return params;
78
- }
79
- /** Execute a SELECT query and return the first matching row */
80
- Get() {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- const stmt = yield this._adapter.prepare(this._query);
83
- const results = yield stmt.get(this.Parameters);
84
- return results ? new Record(results, this._adapter, this.Table) : undefined;
85
- });
74
+ /** Databases don't like numeric values when inserting with a query */
75
+ static ConvertValueToString(params) {
76
+ return Object.entries(params).map(([key, value]) => {
77
+ return { [key]: value !== null && value !== undefined ? value.toString() : value };
78
+ }).reduce((acc, curr) => (Object.assign(Object.assign({}, acc), curr)), {});
86
79
  }
87
80
  }
@@ -1,16 +1,15 @@
1
1
  import { inspect } from "util";
2
- import Table from "./Table.js";
3
- import IDatabaseAdapter from "../interfaces/IDatabaseAdapter.js";
2
+ import { columnType } from "../types/index.js";
4
3
  /** Record class represents a single database row */
5
- export default class Record<ColumnValuesType> {
6
- private readonly _adapter;
4
+ export default class Record<ColumnValuesType extends columnType> {
7
5
  private _values;
8
- private readonly _table;
9
- constructor(values: ColumnValuesType, adapter: IDatabaseAdapter, table: Table);
6
+ private readonly _tableName;
7
+ constructor(values: ColumnValuesType, table: string);
10
8
  /** Get the raw values object for this record */
11
9
  get values(): ColumnValuesType;
10
+ Insert(): Promise<this | undefined>;
12
11
  /** Update this record in the database */
13
- Update(newValues: object): Promise<void>;
12
+ Update(newValues: Partial<ColumnValuesType>): Promise<void>;
14
13
  /** Delete this record from the database */
15
14
  Delete(): Promise<void>;
16
15
  /** Returns the values object for JSON.stringify() */
@@ -1 +1 @@
1
- {"version":3,"file":"Record.d.ts","sourceRoot":"","sources":["../../src/base/Record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAGpE,oDAAoD;AACpD,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,gBAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAEnB,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;IAM7E,gDAAgD;IAChD,IAAW,MAAM,IAAI,gBAAgB,CAEpC;IAED,yCAAyC;IAC5B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BrD,2CAA2C;IAC9B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,qDAAqD;IAC9C,MAAM,IAAI,gBAAgB;IAIjC,mDAAmD;IAC5C,QAAQ,IAAI,MAAM;IAIzB,uCAAuC;IACvC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,gBAAgB;CAGvC"}
1
+ {"version":3,"file":"Record.d.ts","sourceRoot":"","sources":["../../src/base/Record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,UAAU,EAA0D,MAAM,sBAAsB,CAAC;AAG1G,oDAAoD;AACpD,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,gBAAgB,SAAS,UAAU;IAC3D,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM;IAKnD,gDAAgD;IAChD,IAAW,MAAM,IAAI,gBAAgB,CAEpC;IAEY,MAAM,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAuChD,yCAAyC;IAC5B,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxE,2CAA2C;IAC9B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,qDAAqD;IAC9C,MAAM,IAAI,gBAAgB;IAIjC,mDAAmD;IAC5C,QAAQ,IAAI,MAAM;IAIzB,uCAAuC;IACvC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,gBAAgB;CAGvC"}
@@ -9,34 +9,62 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { inspect } from "util";
11
11
  import Query from "./Query.js";
12
+ import QueryStatementBuilder from "../helpers/QueryStatementBuilder.js";
12
13
  /** Record class represents a single database row */
13
14
  export default class Record {
14
- constructor(values, adapter, table) {
15
+ constructor(values, table) {
15
16
  this._values = {};
16
17
  this._values = values;
17
- this._adapter = adapter;
18
- this._table = table;
18
+ this._tableName = table;
19
19
  }
20
20
  /** Get the raw values object for this record */
21
21
  get values() {
22
22
  return this._values;
23
23
  }
24
24
  ;
25
+ Insert() {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ var _a, _b;
28
+ const columns = Object.keys(this._values);
29
+ if (columns.length === 0) {
30
+ throw new Error("Cannot insert record with no columns");
31
+ }
32
+ const queryStr = QueryStatementBuilder.BuildInsert(this._tableName, this._values);
33
+ const query = new Query(this._tableName, queryStr);
34
+ query.Parameters = this._values;
35
+ const result = yield query.Run();
36
+ let recordId;
37
+ // For PostgreSQL compatibility: use 'id' from values if lastInsertRowid is undefined
38
+ if (Array.isArray(this._values)) {
39
+ recordId = (_a = result === null || result === void 0 ? void 0 : result.lastInsertRowid) !== null && _a !== void 0 ? _a : this._values.map(v => v.column === 'id' ? v.value : undefined);
40
+ }
41
+ else {
42
+ recordId = (_b = result === null || result === void 0 ? void 0 : result.lastInsertRowid) !== null && _b !== void 0 ? _b : this._values.id;
43
+ }
44
+ if (recordId === undefined) {
45
+ return undefined;
46
+ }
47
+ const queryStrSelect = QueryStatementBuilder.BuildSelect(this._tableName, { where: Object.assign({}, this._values) });
48
+ const querySelect = new Query(this._tableName, queryStrSelect);
49
+ querySelect.Parameters = Object.assign({}, this._values);
50
+ const insertedRecord = yield querySelect.All();
51
+ if (insertedRecord.length > 0) {
52
+ this._values = insertedRecord[insertedRecord.length - 1].values;
53
+ }
54
+ this._values = Object.assign(Object.assign({}, this._values), { id: recordId });
55
+ return this;
56
+ });
57
+ }
25
58
  /** Update this record in the database */
26
59
  Update(newValues) {
27
60
  return __awaiter(this, void 0, void 0, function* () {
28
- const setClauses = Object.keys(newValues)
29
- .map(key => `${key} = @${key}`)
30
- .join(", ");
31
61
  const originalValues = this._values;
32
62
  if (originalValues.updated_at !== undefined) {
33
63
  newValues.updated_at = new Date().toISOString();
34
64
  }
35
- const whereClauses = Object.keys(originalValues)
36
- .map(key => `${key} = @where_${key}`)
37
- .join(" AND ");
38
- const query = `UPDATE "${this._table.Name}" SET ${setClauses} WHERE ${whereClauses};`;
39
- const _query = new Query(this._table, query, this._adapter);
65
+ const queryStr = QueryStatementBuilder.BuildUpdate(this._tableName, newValues, originalValues);
66
+ const _query = new Query(this._tableName, queryStr);
67
+ // Merge newValues and originalValues for parameters (with 'where_' prefix for where clause)
40
68
  const params = Object.assign({}, newValues);
41
69
  Object.entries(originalValues).forEach(([key, value]) => {
42
70
  params[`where_${key}`] = value;
@@ -49,10 +77,8 @@ export default class Record {
49
77
  /** Delete this record from the database */
50
78
  Delete() {
51
79
  return __awaiter(this, void 0, void 0, function* () {
52
- const whereClauses = Object.keys(this._values)
53
- .map(key => `${key} = @${key}`)
54
- .join(" AND ");
55
- const _query = new Query(this._table, `DELETE FROM "${this._table.Name}" WHERE ${whereClauses};`, this._adapter);
80
+ const queryStr = QueryStatementBuilder.BuildDelete(this._tableName, this._values);
81
+ const _query = new Query(this._tableName, queryStr);
56
82
  _query.Parameters = Object.assign({}, this._values);
57
83
  yield _query.Run();
58
84
  });
@@ -1,27 +1,25 @@
1
1
  import { DefaultQueryOptions, Join, QueryOptions, ReadableTableColumnInfo, TableColumnInfo, columnType } from "../types/index.js";
2
- import Record from "../base/Record.js";
2
+ import { Record } from "../index.js";
3
3
  /** Table class for interacting with a database table */
4
4
  export default class Table {
5
5
  private readonly _name;
6
- private readonly _adapter;
7
6
  /** Private constructor - use Table.create() */
8
7
  constructor(name: string);
9
- /** Get the table name */
10
- get Name(): string;
11
8
  /** Get raw column information */
12
9
  TableColumnInformation(): Promise<TableColumnInfo[]>;
13
10
  /** Get readable, formatted column information */
14
11
  ReadableTableColumnInformation(): Promise<ReadableTableColumnInfo[]>;
15
12
  Drop(): Promise<void>;
16
13
  /** Fetch records with optional filtering, ordering, and pagination */
17
- Records<Type>(options?: DefaultQueryOptions & QueryOptions): Promise<Record<Type>[]>;
14
+ Records<Type extends columnType>(options?: DefaultQueryOptions & QueryOptions): Promise<Record<Type>[]>;
18
15
  /** Fetch a single record from the table */
19
- Record<Type>(options?: DefaultQueryOptions & QueryOptions): Promise<Record<Type> | undefined>;
16
+ Record<Type extends columnType>(options?: DefaultQueryOptions & QueryOptions): Promise<Record<Type> | undefined>;
20
17
  /** Get the total count of records */
21
18
  RecordsCount(): Promise<number>;
22
19
  /** Insert a record into the table */
23
- Insert<Type>(values: columnType): Promise<Record<Type> | undefined>;
20
+ Insert<Type extends columnType>(values: Type): Promise<Record<Type> | undefined>;
24
21
  /** Perform JOIN operations with other tables */
25
- Join<Type>(Joins: Join | Join[], options?: DefaultQueryOptions & QueryOptions): Promise<Record<Type>[]>;
22
+ Join<Type extends columnType>(Joins: Join | Join[], options?: DefaultQueryOptions & QueryOptions): Promise<Record<Type>[]>;
23
+ private splitJoinValues;
26
24
  }
27
25
  //# sourceMappingURL=Table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/base/Table.ts"],"names":[],"mappings":"AACA,OAAO,EACH,mBAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,uBAAuB,EAEvB,eAAe,EAEf,UAAU,EACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAI1C,wDAAwD;AACxD,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IAEnF,+CAA+C;gBACnC,IAAI,EAAE,MAAM;IAIxB,yBAAyB;IACzB,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,iCAAiC;IACpB,sBAAsB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjE,iDAAiD;IACpC,8BAA8B,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAWpE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,sEAAsE;IACzD,OAAO,CAAC,IAAI,EACrB,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAoB1B,2CAA2C;IAC9B,MAAM,CAAC,IAAI,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAWpC,qCAAqC;IACxB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAM5C,qCAAqC;IACxB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IA+BhF,gDAAgD;IACnC,IAAI,CAAC,IAAI,EAClB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;CAW7B"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/base/Table.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,uBAAuB,EACvB,eAAe,EACf,UAAU,EACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAS,MAAM,gBAAgB,CAAC;AAE/C,wDAAwD;AACxD,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,+CAA+C;gBACnC,IAAI,EAAE,MAAM;IAIxB,iCAAiC;IACpB,sBAAsB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjE,iDAAiD;IACpC,8BAA8B,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAWpE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,sEAAsE;IACzD,OAAO,CAAC,IAAI,SAAS,UAAU,EACxC,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAkB1B,2CAA2C;IAC9B,MAAM,CAAC,IAAI,SAAS,UAAU,EACvC,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAWpC,qCAAqC;IACxB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAM5C,qCAAqC;IACxB,MAAM,CAAC,IAAI,SAAS,UAAU,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAM7F,gDAAgD;IACnC,IAAI,CAAC,IAAI,SAAS,UAAU,EACrC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAcZ,eAAe;CA0BhC"}
@@ -7,24 +7,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import Query from "../base/Query.js";
11
10
  import QueryStatementBuilder from "../helpers/QueryStatementBuilder.js";
12
- import Container from "../runtime/Container.js";
11
+ import { Record, Query } from "../index.js";
13
12
  /** Table class for interacting with a database table */
14
13
  export default class Table {
15
14
  /** Private constructor - use Table.create() */
16
15
  constructor(name) {
17
- this._adapter = Container.getInstance().getAdapter();
18
16
  this._name = name;
19
17
  }
20
- /** Get the table name */
21
- get Name() {
22
- return this._name;
23
- }
24
18
  /** Get raw column information */
25
19
  TableColumnInformation() {
26
20
  return __awaiter(this, void 0, void 0, function* () {
27
- return this._adapter.tableColumnInformation(this._name);
21
+ return Query.tableColumnInformation(this._name);
28
22
  });
29
23
  }
30
24
  /** Get readable, formatted column information */
@@ -43,25 +37,24 @@ export default class Table {
43
37
  Drop() {
44
38
  return __awaiter(this, void 0, void 0, function* () {
45
39
  const queryStr = `DROP TABLE IF EXISTS "${this._name}";`;
46
- const query = new Query(this, queryStr, this._adapter);
40
+ const query = new Query(this._name, queryStr);
47
41
  yield query.Run();
48
42
  });
49
43
  }
50
44
  /** Fetch records with optional filtering, ordering, and pagination */
51
45
  Records(options) {
52
46
  return __awaiter(this, void 0, void 0, function* () {
53
- const queryStr = QueryStatementBuilder.BuildSelect(this, {
47
+ const queryStr = QueryStatementBuilder.BuildSelect(this._name, {
54
48
  select: options === null || options === void 0 ? void 0 : options.select,
55
49
  where: options === null || options === void 0 ? void 0 : options.where,
56
50
  orderBy: options === null || options === void 0 ? void 0 : options.orderBy,
57
51
  limit: options === null || options === void 0 ? void 0 : options.limit,
58
52
  offset: options === null || options === void 0 ? void 0 : options.offset,
59
53
  });
60
- const query = new Query(this, queryStr, this._adapter);
54
+ const query = new Query(this._name, queryStr);
61
55
  if ((options === null || options === void 0 ? void 0 : options.where) && Object.keys(options.where).length > 0)
62
56
  query.Parameters = options.where;
63
57
  const results = yield query.All();
64
- // Wrap each result in a Record object
65
58
  return results;
66
59
  });
67
60
  }
@@ -80,49 +73,55 @@ export default class Table {
80
73
  /** Get the total count of records */
81
74
  RecordsCount() {
82
75
  return __awaiter(this, void 0, void 0, function* () {
83
- const stmt = yield this._adapter.prepare(`SELECT COUNT(*) as count FROM "${this._name}";`);
84
- const count = yield stmt.get({});
85
- return parseInt(count.count) || 0;
76
+ const query = new Query(this._name, `SELECT COUNT(*) as count FROM "${this._name}";`);
77
+ const count = yield query.Count();
78
+ return count || 0;
86
79
  });
87
80
  }
88
81
  /** Insert a record into the table */
89
82
  Insert(values) {
90
83
  return __awaiter(this, void 0, void 0, function* () {
91
- var _a, _b;
92
- const columns = Object.keys(values);
93
- if (columns.length === 0) {
94
- throw new Error("Cannot insert record with no columns");
95
- }
96
- const queryStr = QueryStatementBuilder.BuildInsert(this, values);
97
- const query = new Query(this, queryStr, this._adapter);
98
- query.Parameters = values;
99
- const result = yield query.Run();
100
- let recordId;
101
- // For PostgreSQL compatibility: use 'id' from values if lastInsertRowid is undefined
102
- if (Array.isArray(values)) {
103
- recordId = (_a = result === null || result === void 0 ? void 0 : result.lastInsertRowid) !== null && _a !== void 0 ? _a : values.map(v => v.column === 'id' ? v.value : undefined);
104
- }
105
- else {
106
- recordId = (_b = result === null || result === void 0 ? void 0 : result.lastInsertRowid) !== null && _b !== void 0 ? _b : values.id;
107
- }
108
- if (recordId === undefined) {
109
- return undefined;
110
- }
111
- return this.Record({
112
- where: { id: recordId }
113
- });
84
+ const record = new Record(values, this._name);
85
+ yield record.Insert();
86
+ return record;
114
87
  });
115
88
  }
116
89
  /** Perform JOIN operations with other tables */
117
90
  Join(Joins, options) {
118
91
  return __awaiter(this, void 0, void 0, function* () {
119
- const queryString = QueryStatementBuilder.BuildJoin(this, Joins, options);
120
- const query = new Query(this, queryString, this._adapter);
92
+ const queryString = QueryStatementBuilder.BuildJoin(this._name, Joins, options);
93
+ const query = new Query(this._name, queryString);
121
94
  // Set parameters if WHERE clause is present
122
95
  if (options === null || options === void 0 ? void 0 : options.where) {
123
96
  query.Parameters = options.where;
124
97
  }
125
- return yield query.All();
98
+ const joinedTables = Array.isArray(Joins) ? Joins.map(j => j.fromTable) : [Joins.fromTable];
99
+ const records = yield query.All();
100
+ return yield this.splitJoinValues(records, joinedTables);
101
+ });
102
+ }
103
+ splitJoinValues(records, joinedTables) {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ const thisRecordColumns = (yield this.TableColumnInformation()).map(col => col.name);
106
+ const tableColumnsMap = new Map();
107
+ for (const tableName of joinedTables) {
108
+ const columns = (yield Query.tableColumnInformation(tableName)).map(col => col.name);
109
+ tableColumnsMap.set(tableName, columns);
110
+ }
111
+ return records.map(record => {
112
+ if (!record.values)
113
+ return record;
114
+ const thisRecordEntries = thisRecordColumns
115
+ .map(colName => [colName, record.values[colName]])
116
+ .filter(([, value]) => value !== undefined);
117
+ const joinedRecords = {};
118
+ for (const [tableName, tableColumns] of tableColumnsMap) {
119
+ const joinedRecordEntries = Object.entries(record.values)
120
+ .filter(([key]) => tableColumns.includes(key));
121
+ joinedRecords[tableName] = Object.fromEntries(joinedRecordEntries);
122
+ }
123
+ return new Record(Object.assign(Object.assign({}, Object.fromEntries(thisRecordEntries)), joinedRecords), this._name);
124
+ });
126
125
  });
127
126
  }
128
127
  }
@@ -1,5 +1,4 @@
1
1
  import { DefaultQueryOptions, QueryOptions, QueryCondition, Join, QueryWhereParameters } from "../types/index.js";
2
- import Table from "../base/Table";
3
2
  /** Utility class for building SQL query strings */
4
3
  export default class QueryStatementBuilder {
5
4
  /**
@@ -26,7 +25,7 @@ export default class QueryStatementBuilder {
26
25
  * // "SELECT id, name, email FROM users WHERE status = @status AND age = @age ORDER BY created_at DESC LIMIT 10 OFFSET 20"
27
26
  * ```
28
27
  */
29
- static BuildSelect(table: Table, options?: DefaultQueryOptions & QueryOptions): string;
28
+ static BuildSelect(tableName: string, options?: DefaultQueryOptions & QueryOptions): string;
30
29
  /**
31
30
  * Build an INSERT SQL statement with named parameter placeholders
32
31
  *
@@ -46,7 +45,7 @@ export default class QueryStatementBuilder {
46
45
  * // Note: The actual values will be bound separately using the Parameters object
47
46
  * ```
48
47
  */
49
- static BuildInsert(table: Table, record: QueryWhereParameters): string;
48
+ static BuildInsert(tableName: string, record: QueryWhereParameters): string;
50
49
  /**
51
50
  * Build an UPDATE SQL statement with SET clause and WHERE conditions
52
51
  *
@@ -73,7 +72,7 @@ export default class QueryStatementBuilder {
73
72
  * // "UPDATE users SET status = @status WHERE status = @status AND last_login = @last_login"
74
73
  * ```
75
74
  */
76
- static BuildUpdate(table: Table, record: QueryCondition, where: QueryCondition): string;
75
+ static BuildUpdate(tableName: string, record: QueryCondition, where: QueryCondition): string;
77
76
  /**
78
77
  * Build a DELETE SQL statement with WHERE conditions
79
78
  *
@@ -94,7 +93,7 @@ export default class QueryStatementBuilder {
94
93
  * // "DELETE FROM users WHERE status = @status AND last_login = @last_login"
95
94
  * ```
96
95
  */
97
- static BuildDelete(table: Table, where: QueryCondition): string;
96
+ static BuildDelete(tableName: string, where: QueryCondition): string;
98
97
  /**
99
98
  * Build a COUNT SQL statement to count rows, optionally with WHERE conditions
100
99
  *
@@ -116,7 +115,7 @@ export default class QueryStatementBuilder {
116
115
  * // "SELECT COUNT(*) as count FROM users WHERE status = @status AND age = @age"
117
116
  * ```
118
117
  */
119
- static BuildCount(table: Table, where?: QueryCondition): string;
118
+ static BuildCount(tableName: string, where?: QueryCondition): string;
120
119
  /**
121
120
  * Build a WHERE clause from parameter conditions (helper method)
122
121
  *
@@ -192,7 +191,7 @@ export default class QueryStatementBuilder {
192
191
  * );
193
192
  * ```
194
193
  */
195
- static BuildJoin(fromTable: Table, joins: Join | Join[], options?: DefaultQueryOptions & QueryOptions): string;
194
+ static BuildJoin(fromTableName: string, joins: Join | Join[], options?: DefaultQueryOptions & QueryOptions): string;
196
195
  /**
197
196
  * Build JOIN clause(s) recursively (helper method)
198
197
  *
@@ -232,7 +231,7 @@ export default class QueryStatementBuilder {
232
231
  * // "INNER JOIN orders ON users.id = orders.user_id INNER JOIN products ON orders.id = products.product_id"
233
232
  * ```
234
233
  */
235
- static BuildJoinPart(fromTable: Table, joins: Join | Join[]): string;
234
+ static BuildJoinPart(fromTableName: string, joins: Join | Join[]): string;
236
235
  /**
237
236
  * Build ON clause for JOIN operations (helper method)
238
237
  *
@@ -265,7 +264,7 @@ export default class QueryStatementBuilder {
265
264
  * // "ON users.id = orders.user_id AND users.company_id = orders.company_id"
266
265
  * ```
267
266
  */
268
- static BuildJoinOnPart(table: Table, joinTable: Table, on: QueryWhereParameters | QueryWhereParameters[]): string;
267
+ static BuildJoinOnPart(tableName: string, joinTableName: string, on: QueryWhereParameters | QueryWhereParameters[]): string;
269
268
  /**
270
269
  * Build query options clause (ORDER BY, LIMIT, OFFSET) (helper method)
271
270
  *
@@ -1 +1 @@
1
- {"version":3,"file":"QueryStatementBuilder.d.ts","sourceRoot":"","sources":["../../src/helpers/QueryStatementBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAmB,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACtI,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,mDAAmD;AACnD,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACtC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;WACW,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAAG,MAAM;IAY7F;;;;;;;;;;;;;;;;;;OAkBG;WACW,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,GAAG,MAAM;IAY7E;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;WACW,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM;IAW9F;;;;;;;;;;;;;;;;;;;OAmBG;WACW,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM;IAStE;;;;;;;;;;;;;;;;;;;;OAoBG;WACW,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,MAAM;IAQtE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;WACW,UAAU,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,MAAM;IAgBxD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAStC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAK/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;WACW,SAAS,CACnB,SAAS,EAAE,KAAK,EAChB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,MAAM;IAWT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;WACW,aAAa,CACvB,SAAS,EAAE,KAAK,EAChB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GACrB,MAAM;IAcT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;WACW,eAAe,CACzB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,KAAK,EAChB,EAAE,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,GAClD,MAAM;IAWT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;WACW,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;CAiBjE"}
1
+ {"version":3,"file":"QueryStatementBuilder.d.ts","sourceRoot":"","sources":["../../src/helpers/QueryStatementBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAmB,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEtI,mDAAmD;AACnD,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACtC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;WACW,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAAG,MAAM;IAWlG;;;;;;;;;;;;;;;;;;OAkBG;WACW,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,MAAM;IAYlF;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;WACW,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM;IAWnG;;;;;;;;;;;;;;;;;;;OAmBG;WACW,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM;IAS3E;;;;;;;;;;;;;;;;;;;;OAoBG;WACW,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,MAAM;IAQ3E;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;WACW,UAAU,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,MAAM;IAgBxD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAStC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAK/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;WACW,SAAS,CACnB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAC7C,MAAM;IAWT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;WACW,aAAa,CACvB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GACrB,MAAM;IAcT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;WACW,eAAe,CACzB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,GAClD,MAAM;IAWT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;WACW,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;CAiBjE"}
@@ -24,11 +24,11 @@ export default class QueryStatementBuilder {
24
24
  * // "SELECT id, name, email FROM users WHERE status = @status AND age = @age ORDER BY created_at DESC LIMIT 10 OFFSET 20"
25
25
  * ```
26
26
  */
27
- static BuildSelect(table, options) {
27
+ static BuildSelect(tableName, options) {
28
28
  var _a;
29
29
  const queryParts = [];
30
30
  queryParts.push(`SELECT ${(_a = options === null || options === void 0 ? void 0 : options.select) !== null && _a !== void 0 ? _a : "*"}`);
31
- queryParts.push(`FROM "${table.Name}"`);
31
+ queryParts.push(`FROM "${tableName}"`);
32
32
  queryParts.push(this.BuildWhere(options === null || options === void 0 ? void 0 : options.where));
33
33
  queryParts.push(this.BuildQueryOptions(options !== null && options !== void 0 ? options : {}));
34
34
  return queryParts.join(" ");
@@ -52,12 +52,12 @@ export default class QueryStatementBuilder {
52
52
  * // Note: The actual values will be bound separately using the Parameters object
53
53
  * ```
54
54
  */
55
- static BuildInsert(table, record) {
55
+ static BuildInsert(tableName, record) {
56
56
  const queryParts = [];
57
57
  const columns = Object.keys(record);
58
58
  const placeholders = columns.map(col => `@${col}`);
59
- queryParts.push(`INSERT INTO "${table.Name}"`);
60
- queryParts.push(`(${columns.join(", ")})`);
59
+ queryParts.push(`INSERT INTO "${tableName}"`);
60
+ queryParts.push(`(${columns.map(c => `"${c}"`).join(", ")})`);
61
61
  queryParts.push(`VALUES (${placeholders.join(", ")})`);
62
62
  return queryParts.join(" ");
63
63
  }
@@ -87,10 +87,10 @@ export default class QueryStatementBuilder {
87
87
  * // "UPDATE users SET status = @status WHERE status = @status AND last_login = @last_login"
88
88
  * ```
89
89
  */
90
- static BuildUpdate(table, record, where) {
90
+ static BuildUpdate(tableName, record, where) {
91
91
  const queryParts = [];
92
92
  const setClauses = Object.keys(record).map(col => `${col} = @${col}`);
93
- queryParts.push(`UPDATE "${table.Name}"`);
93
+ queryParts.push(`UPDATE "${tableName}"`);
94
94
  queryParts.push(`SET ${setClauses.join(", ")}`);
95
95
  queryParts.push(this.BuildWhere(where));
96
96
  return queryParts.join(" ");
@@ -115,9 +115,9 @@ export default class QueryStatementBuilder {
115
115
  * // "DELETE FROM users WHERE status = @status AND last_login = @last_login"
116
116
  * ```
117
117
  */
118
- static BuildDelete(table, where) {
118
+ static BuildDelete(tableName, where) {
119
119
  const queryParts = [];
120
- queryParts.push(`DELETE FROM "${table.Name}"`);
120
+ queryParts.push(`DELETE FROM "${tableName}"`);
121
121
  queryParts.push(this.BuildWhere(where));
122
122
  return queryParts.join(" ");
123
123
  }
@@ -142,9 +142,9 @@ export default class QueryStatementBuilder {
142
142
  * // "SELECT COUNT(*) as count FROM users WHERE status = @status AND age = @age"
143
143
  * ```
144
144
  */
145
- static BuildCount(table, where) {
145
+ static BuildCount(tableName, where) {
146
146
  const queryParts = [];
147
- queryParts.push(`SELECT COUNT(*) as count FROM "${table.Name}"`);
147
+ queryParts.push(`SELECT COUNT(*) as count FROM "${tableName}"`);
148
148
  queryParts.push(this.BuildWhere(where));
149
149
  return queryParts.join(" ");
150
150
  }
@@ -245,12 +245,12 @@ export default class QueryStatementBuilder {
245
245
  * );
246
246
  * ```
247
247
  */
248
- static BuildJoin(fromTable, joins, options) {
248
+ static BuildJoin(fromTableName, joins, options) {
249
249
  var _a;
250
250
  const queryParts = [];
251
251
  queryParts.push(`SELECT ${(_a = options === null || options === void 0 ? void 0 : options.select) !== null && _a !== void 0 ? _a : "*"}`);
252
- queryParts.push(`FROM "${fromTable.Name}"`);
253
- queryParts.push(this.BuildJoinPart(fromTable, joins));
252
+ queryParts.push(`FROM "${fromTableName}"`);
253
+ queryParts.push(this.BuildJoinPart(fromTableName, joins));
254
254
  queryParts.push(this.BuildWhere(options === null || options === void 0 ? void 0 : options.where));
255
255
  queryParts.push(this.BuildQueryOptions(options !== null && options !== void 0 ? options : {}));
256
256
  return queryParts.join(" ");
@@ -294,14 +294,14 @@ export default class QueryStatementBuilder {
294
294
  * // "INNER JOIN orders ON users.id = orders.user_id INNER JOIN products ON orders.id = products.product_id"
295
295
  * ```
296
296
  */
297
- static BuildJoinPart(fromTable, joins) {
297
+ static BuildJoinPart(fromTableName, joins) {
298
298
  const queryParts = [];
299
299
  const joinsArray = Array.isArray(joins) ? joins : [joins];
300
- let currentTable = fromTable;
300
+ let currentTableName = fromTableName;
301
301
  for (const join of joinsArray) {
302
- queryParts.push(`${join.joinType} JOIN "${join.fromTable.Name}"`);
303
- queryParts.push(this.BuildJoinOnPart(currentTable, join.fromTable, join.on));
304
- currentTable = join.fromTable;
302
+ queryParts.push(`${join.joinType} JOIN "${join.fromTable}"`);
303
+ queryParts.push(this.BuildJoinOnPart(currentTableName, join.fromTable, join.on));
304
+ currentTableName = join.fromTable;
305
305
  }
306
306
  return queryParts.join(" ");
307
307
  }
@@ -337,11 +337,11 @@ export default class QueryStatementBuilder {
337
337
  * // "ON users.id = orders.user_id AND users.company_id = orders.company_id"
338
338
  * ```
339
339
  */
340
- static BuildJoinOnPart(table, joinTable, on) {
340
+ static BuildJoinOnPart(tableName, joinTableName, on) {
341
341
  const queryParts = [];
342
342
  const onArray = Array.isArray(on) ? on : [on];
343
343
  for (const onPart of onArray) {
344
- queryParts.push(`ON ${table.Name}.${Object.values(onPart)[0]} = ${joinTable.Name}.${Object.keys(onPart)[0]}`);
344
+ queryParts.push(`ON ${tableName}.${Object.values(onPart)[0]} = ${joinTableName}.${Object.keys(onPart)[0]}`);
345
345
  }
346
346
  return queryParts.join(" AND ");
347
347
  }
package/dist/index.d.ts CHANGED
@@ -44,7 +44,6 @@
44
44
  *
45
45
  * @packageDocumentation
46
46
  */
47
- import Database from "./base/Database.js";
48
47
  import Table from "./base/Table.js";
49
48
  import Record from "./base/Record.js";
50
49
  import Query from "./base/Query.js";
@@ -58,6 +57,6 @@ import IStatementAdapter from "./interfaces/IStatementAdapter.js";
58
57
  import IController from "./interfaces/IController.js";
59
58
  import IMigration from "./interfaces/IMigration.js";
60
59
  import ISchemaBuilder from "./interfaces/ISchemaBuilder.js";
61
- export { Database, Model, Table, Query, Record, Repository, Container, SchemaTableBuilder, AbstractSchemaBuilder, IDatabaseAdapter, IStatementAdapter, IController, IMigration, ISchemaBuilder, };
60
+ export { Model, Table, Query, Record, Repository, Container, SchemaTableBuilder, AbstractSchemaBuilder, IDatabaseAdapter, IStatementAdapter, IController, IMigration, ISchemaBuilder, };
62
61
  export * from "./types/index.js";
63
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,MAAM,iBAAiB,CAAC;AAEpC,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAClE,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AAEvE,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAE/C,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EACH,QAAQ,EACR,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,EAET,kBAAkB,EAClB,qBAAqB,EAErB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,cAAc,GACjB,CAAC;AAEF,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,MAAM,iBAAiB,CAAC;AAEpC,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAClE,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AAEvE,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAE/C,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EACH,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,EAET,kBAAkB,EAClB,qBAAqB,EAErB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,cAAc,GACjB,CAAC;AAEF,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -44,7 +44,6 @@
44
44
  *
45
45
  * @packageDocumentation
46
46
  */
47
- import Database from "./base/Database.js";
48
47
  import Table from "./base/Table.js";
49
48
  import Record from "./base/Record.js";
50
49
  import Query from "./base/Query.js";
@@ -52,5 +51,5 @@ import Model from "./abstract/Model.js";
52
51
  import SchemaTableBuilder from "./abstract/SchemaTableBuilder.js";
53
52
  import Repository from "./runtime/Repository.js";
54
53
  import Container from "./runtime/Container.js";
55
- export { Database, Model, Table, Query, Record, Repository, Container, SchemaTableBuilder, };
54
+ export { Model, Table, Query, Record, Repository, Container, SchemaTableBuilder, };
56
55
  export * from "./types/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/runtime/Container.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAEpE,cAAM,SAAS;IACX,OAAO,CAAC,MAAM,CAAC,SAAS,CAAY;IACpC,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,eAAe,CAAC,CAAmB;IAE3C,OAAO;WAEO,WAAW,IAAI,SAAS;IAO/B,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,UAAQ,GAAG,IAAI;IAOjF,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB;CASrD;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/runtime/Container.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAEpE,cAAM,SAAS;IACX,OAAO,CAAC,MAAM,CAAC,SAAS,CAAY;IACpC,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,eAAe,CAAC,CAAmB;IAE3C,OAAO;WAEO,WAAW,IAAI,SAAS;IAO/B,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,UAAQ,GAAG,IAAI;IAYjF,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB;CASrD;AAED,eAAe,SAAS,CAAC"}
@@ -11,6 +11,10 @@ class Container {
11
11
  registerAdapter(name, adapter, isDefault = false) {
12
12
  this._adapters.set(name, adapter);
13
13
  if (isDefault || !this._defaultAdapter) {
14
+ if (this._defaultAdapter) {
15
+ // eslint-disable-next-line no-undef
16
+ console.warn(`Setting default adapter to '${name}'`);
17
+ }
14
18
  this._defaultAdapter = adapter;
15
19
  }
16
20
  }
@@ -1,5 +1,5 @@
1
1
  import type Model from "../abstract/Model.js";
2
- import { columnType, QueryCondition } from "../types/index";
2
+ import { columnType, QueryCondition, QueryOptions } from "../types/index";
3
3
  export default class Repository<Type extends columnType, ModelType extends Model<Type>> {
4
4
  private static _instances;
5
5
  private models;
@@ -8,10 +8,11 @@ export default class Repository<Type extends columnType, ModelType extends Model
8
8
  static getInstance<ModelType extends columnType>(ModelClass: new () => Model<ModelType>, tableName: string): Repository<ModelType, Model<ModelType>>;
9
9
  syncModel(model: ModelType): void;
10
10
  getModel(name: string): ModelType;
11
- save(attributes: Partial<Type>, oldAttributes: Partial<Type>): Promise<void>;
12
- get(conditions: QueryCondition, Model: Model<Type>): Promise<Type | null>;
13
- update(attributes: Partial<Type>): Promise<this>;
11
+ save(attributes: Type): Promise<void>;
12
+ first(conditions: QueryCondition, Model: Model<Type>): Promise<Type | null>;
13
+ get(conditions: QueryCondition, queryOptions: QueryOptions, Model: Model<Type>): Promise<Type[]>;
14
14
  all(Model: Model<Type>): Promise<Type[]>;
15
+ update(attributes: Partial<Type>): Promise<this>;
15
16
  private join;
16
17
  }
17
18
  //# sourceMappingURL=Repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/runtime/Repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAQ,cAAc,EAAY,MAAM,mBAAmB,CAAC;AAE/E,MAAM,CAAC,OAAO,OAAO,UAAU,CAAC,IAAI,SAAS,UAAU,EAAE,SAAS,SAAS,KAAK,CAAC,IAAI,CAAC;IAClF,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqE;IAC9F,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,KAAK,CAAO;gBAER,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS;WAMtC,WAAW,CAAC,SAAS,SAAS,UAAU,EAClD,UAAU,EAAE,UAAU,KAAK,CAAC,SAAS,CAAC,EACtC,SAAS,EAAE,MAAM,GAClB,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAWnC,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAI3B,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAWzE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAehD,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAQvC,IAAI;CAoBrB"}
1
+ {"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/runtime/Repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAQ,cAAc,EAAE,YAAY,EAAY,MAAM,mBAAmB,CAAC;AAE7F,MAAM,CAAC,OAAO,OAAO,UAAU,CAAC,IAAI,SAAS,UAAU,EAAE,SAAS,SAAS,KAAK,CAAC,IAAI,CAAC;IAClF,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqE;IAC9F,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,KAAK,CAAO;gBAER,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS;WAMtC,WAAW,CAAC,SAAS,SAAS,UAAU,EAClD,UAAU,EAAE,UAAU,KAAK,CAAC,SAAS,CAAC,EACtC,SAAS,EAAE,MAAM,GAClB,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAWnC,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAI3B,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAW3E,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQhG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQxC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAe/C,IAAI;CAoBrB"}
@@ -33,17 +33,16 @@ class Repository {
33
33
  getModel(name) {
34
34
  return this.models.get(name);
35
35
  }
36
- save(attributes, oldAttributes) {
36
+ save(attributes) {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
- const dataToSave = Object.assign(Object.assign({}, oldAttributes), attributes);
39
- yield this.Table.Insert(dataToSave);
38
+ yield this.Table.Insert(attributes);
40
39
  });
41
40
  }
42
- get(conditions, Model) {
41
+ first(conditions, Model) {
43
42
  return __awaiter(this, void 0, void 0, function* () {
44
43
  let record;
45
44
  if (Model.JoinedEntities.length > 0) {
46
- record = yield this.join(Model, conditions);
45
+ record = yield this.join(Model, conditions, { limit: 1 }).then(results => results[0]);
47
46
  }
48
47
  else {
49
48
  record = yield this.Table.Record({ where: conditions });
@@ -51,20 +50,14 @@ class Repository {
51
50
  return record ? record.values : null;
52
51
  });
53
52
  }
54
- update(attributes) {
53
+ get(conditions, queryOptions, Model) {
55
54
  return __awaiter(this, void 0, void 0, function* () {
56
- const primaryKey = this.models.values().next().value.Configuration.primaryKey;
57
- const pkValue = attributes[primaryKey];
58
- if (pkValue) {
59
- const record = yield this.Table.Record({ where: { [primaryKey]: pkValue } });
60
- if (record) {
61
- yield record.Update(attributes);
62
- }
55
+ if (Model.JoinedEntities.length > 0) {
56
+ return yield this.join(Model, conditions, queryOptions);
63
57
  }
64
58
  else {
65
- throw new Error("Primary key value is required for update.");
59
+ return yield this.Table.Records(Object.assign({ where: conditions }, queryOptions)).then(records => records.map(record => record.values));
66
60
  }
67
- return this;
68
61
  });
69
62
  }
70
63
  all(Model) {
@@ -77,7 +70,23 @@ class Repository {
77
70
  }
78
71
  });
79
72
  }
80
- join(Model, conditions) {
73
+ update(attributes) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ const primaryKey = this.models.values().next().value.Configuration.primaryKey;
76
+ const pkValue = attributes[primaryKey];
77
+ if (pkValue) {
78
+ const record = yield this.Table.Record({ where: { [primaryKey]: pkValue } });
79
+ if (record) {
80
+ yield record.Update(attributes);
81
+ }
82
+ }
83
+ else {
84
+ throw new Error("Primary key value is required for update.");
85
+ }
86
+ return this;
87
+ });
88
+ }
89
+ join(Model, conditions, queryOptions) {
81
90
  return __awaiter(this, void 0, void 0, function* () {
82
91
  const Join = Model.JoinedEntities.map(join => {
83
92
  const relation = Model.Relations.find(rel => rel.model.Configuration.table.toLowerCase() === join.toLowerCase());
@@ -86,14 +95,14 @@ class Repository {
86
95
  }
87
96
  const JoinType = relation.type === 'hasOne' || relation.type === 'belongsTo' ? 'INNER' : 'LEFT';
88
97
  return {
89
- fromTable: new Table(relation.model.Configuration.table),
98
+ fromTable: relation.model.Configuration.table,
90
99
  joinType: JoinType,
91
100
  on: [
92
101
  { [relation.foreignKey]: relation.localKey }
93
102
  ]
94
103
  };
95
104
  });
96
- return (yield this.Table.Join(Join, { where: conditions })).map(record => record.values);
105
+ return (yield this.Table.Join(Join, Object.assign({ where: conditions }, queryOptions))).map(record => record.values);
97
106
  });
98
107
  }
99
108
  }
@@ -1,5 +1,4 @@
1
1
  import { QueryValues, QueryWhereParameters } from "../index";
2
- import Table from "../base/Table.js";
3
2
  export type TableColumnInfo = {
4
3
  cid: number;
5
4
  name: string;
@@ -25,7 +24,7 @@ export type ColumnDefinition = {
25
24
  autoincrement?: boolean;
26
25
  };
27
26
  export type Join = {
28
- fromTable: Table;
27
+ fromTable: string;
29
28
  joinType: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
30
29
  on: QueryWhereParameters | QueryWhereParameters[];
31
30
  where?: QueryWhereParameters | QueryWhereParameters[];
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/types/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,MAAM,MAAM,eAAe,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACf,SAAS,EAAE,KAAK,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9C,EAAE,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,CAAC;CACzD,CAAA"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/types/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9C,EAAE,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,CAAC;CACzD,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamkirbki/database-handler-core",
3
- "version": "4.0.0",
3
+ "version": "4.0.2",
4
4
  "author": "iamkirbki",
5
5
  "description": "Core database abstractions and interfaces",
6
6
  "license": "ISC",
@@ -1,13 +0,0 @@
1
- import Table from "./Table.js";
2
- import Query from "./Query.js";
3
- import IDatabaseAdapter from "../interfaces/IDatabaseAdapter.js";
4
- /** Main Database class */
5
- export default class Database {
6
- adapter: IDatabaseAdapter;
7
- constructor(adapter: IDatabaseAdapter);
8
- /** Get a Table instance for an existing table */
9
- Table(name: string): Promise<Table>;
10
- /** Create a Query object for executing custom SQL */
11
- Query(table: Table, query: string): Query;
12
- }
13
- //# sourceMappingURL=Database.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../src/base/Database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAEpE,0BAA0B;AAC1B,MAAM,CAAC,OAAO,OAAO,QAAQ;IACpB,OAAO,EAAE,gBAAgB,CAAC;gBAErB,OAAO,EAAE,gBAAgB;IAIrC,iDAAiD;IACpC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIhD,qDAAqD;IAC9C,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;CAGjD"}
@@ -1,27 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import Table from "./Table.js";
11
- import Query from "./Query.js";
12
- /** Main Database class */
13
- export default class Database {
14
- constructor(adapter) {
15
- this.adapter = adapter;
16
- }
17
- /** Get a Table instance for an existing table */
18
- Table(name) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- return new Table(name);
21
- });
22
- }
23
- /** Create a Query object for executing custom SQL */
24
- Query(table, query) {
25
- return new Query(table, query, this.adapter);
26
- }
27
- }