@itrocks/mysql 0.0.23 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/mysql.d.ts CHANGED
@@ -38,6 +38,7 @@ export declare class Mysql extends DataSource {
38
38
  database: string;
39
39
  });
40
40
  connect(): Promise<Connection>;
41
+ count<T extends object>(type: Type<T>, search?: SearchType<T>): Promise<number>;
41
42
  delete<T extends object>(object: Entity<T>, property?: KeyOf<Entity<T>>): Promise<T>;
42
43
  deleteId<T extends object>(type: ObjectOrType<T>, id: any, property?: KeyOf<Entity<T>>): Promise<void>;
43
44
  deleteRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
package/cjs/mysql.js CHANGED
@@ -54,6 +54,16 @@ class Mysql extends storage_1.DataSource {
54
54
  });
55
55
  return this.connection = await (0, mariadb_1.createConnection)(mariaDbConfig);
56
56
  }
57
+ async count(type, search = {}) {
58
+ const connection = this.connection ?? await this.connect();
59
+ Object.setPrototypeOf(search, type.prototype);
60
+ const sql = this.propertiesToSearchSql(search);
61
+ const [values] = await this.valuesToDb(search);
62
+ if (exports.DEBUG)
63
+ console.log('SELECT COUNT(*) FROM `' + depends.storeOf(type) + '`' + sql, JSON.stringify(values));
64
+ const row = (await connection.query('SELECT COUNT(*) `count` FROM `' + depends.storeOf(type) + '`' + sql, Object.values(values)))[0];
65
+ return row?.count;
66
+ }
57
67
  async delete(object, property = 'id') {
58
68
  await this.deleteId(object, object[property], property);
59
69
  return this.disconnectObject(object);
@@ -112,11 +122,15 @@ class Mysql extends storage_1.DataSource {
112
122
  .map(([name, value]) => {
113
123
  let sql;
114
124
  if (value instanceof depends.QueryFunction) {
115
- [search[name], sql] = depends.queryFunctionCall(value);
125
+ [value, sql] = depends.queryFunctionCall(value);
126
+ search[name] = value;
116
127
  }
117
128
  else {
118
129
  sql = ' = ?';
119
130
  }
131
+ if ((typeof value)[0] === 'o') {
132
+ name = Array.isArray(value) ? 'id' : (name + '_id');
133
+ }
120
134
  return '`' + depends.columnOf(name) + '`' + sql;
121
135
  })
122
136
  .join(' AND ');
@@ -315,7 +329,7 @@ class Mysql extends storage_1.DataSource {
315
329
  const sql = this.propertiesToSearchSql(search);
316
330
  const [values] = await this.valuesToDb(search);
317
331
  if (exports.DEBUG)
318
- console.log('SELECT ' + propertiesSql + ' FROM `' + depends.storeOf(type) + '`' + sql, '[', values, ']');
332
+ console.log('SELECT ' + propertiesSql + ' FROM `' + depends.storeOf(type) + '`' + sql, JSON.stringify(values));
319
333
  const limit = limitOption?.limit ? ' LIMIT ' + limitOption.limit : '';
320
334
  const offset = limitOption?.offset ? ' OFFSET ' + limitOption.offset : '';
321
335
  const sort = sortOption?.properties.length
package/esm/mysql.d.ts CHANGED
@@ -38,6 +38,7 @@ export declare class Mysql extends DataSource {
38
38
  database: string;
39
39
  });
40
40
  connect(): Promise<Connection>;
41
+ count<T extends object>(type: Type<T>, search?: SearchType<T>): Promise<number>;
41
42
  delete<T extends object>(object: Entity<T>, property?: KeyOf<Entity<T>>): Promise<T>;
42
43
  deleteId<T extends object>(type: ObjectOrType<T>, id: any, property?: KeyOf<Entity<T>>): Promise<void>;
43
44
  deleteRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
package/esm/mysql.js CHANGED
@@ -49,6 +49,16 @@ export class Mysql extends DataSource {
49
49
  });
50
50
  return this.connection = await createConnection(mariaDbConfig);
51
51
  }
52
+ async count(type, search = {}) {
53
+ const connection = this.connection ?? await this.connect();
54
+ Object.setPrototypeOf(search, type.prototype);
55
+ const sql = this.propertiesToSearchSql(search);
56
+ const [values] = await this.valuesToDb(search);
57
+ if (DEBUG)
58
+ console.log('SELECT COUNT(*) FROM `' + depends.storeOf(type) + '`' + sql, JSON.stringify(values));
59
+ const row = (await connection.query('SELECT COUNT(*) `count` FROM `' + depends.storeOf(type) + '`' + sql, Object.values(values)))[0];
60
+ return row?.count;
61
+ }
52
62
  async delete(object, property = 'id') {
53
63
  await this.deleteId(object, object[property], property);
54
64
  return this.disconnectObject(object);
@@ -107,11 +117,15 @@ export class Mysql extends DataSource {
107
117
  .map(([name, value]) => {
108
118
  let sql;
109
119
  if (value instanceof depends.QueryFunction) {
110
- [search[name], sql] = depends.queryFunctionCall(value);
120
+ [value, sql] = depends.queryFunctionCall(value);
121
+ search[name] = value;
111
122
  }
112
123
  else {
113
124
  sql = ' = ?';
114
125
  }
126
+ if ((typeof value)[0] === 'o') {
127
+ name = Array.isArray(value) ? 'id' : (name + '_id');
128
+ }
115
129
  return '`' + depends.columnOf(name) + '`' + sql;
116
130
  })
117
131
  .join(' AND ');
@@ -310,7 +324,7 @@ export class Mysql extends DataSource {
310
324
  const sql = this.propertiesToSearchSql(search);
311
325
  const [values] = await this.valuesToDb(search);
312
326
  if (DEBUG)
313
- console.log('SELECT ' + propertiesSql + ' FROM `' + depends.storeOf(type) + '`' + sql, '[', values, ']');
327
+ console.log('SELECT ' + propertiesSql + ' FROM `' + depends.storeOf(type) + '`' + sql, JSON.stringify(values));
314
328
  const limit = limitOption?.limit ? ' LIMIT ' + limitOption.limit : '';
315
329
  const offset = limitOption?.offset ? ' OFFSET ' + limitOption.offset : '';
316
330
  const sort = sortOption?.properties.length
package/package.json CHANGED
@@ -59,5 +59,5 @@
59
59
  "build:esm": "tsc -p tsconfig.esm.json"
60
60
  },
61
61
  "types": "./esm/mysql.d.ts",
62
- "version": "0.0.23"
62
+ "version": "0.0.26"
63
63
  }