@reldens/storage 0.36.0 → 0.38.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.
package/README.md CHANGED
@@ -104,7 +104,7 @@ Then, use the PrismaDataServer in your code:
104
104
  const { PrismaDataServer } = require('@reldens/storage');
105
105
 
106
106
  const server = new PrismaDataServer({
107
- client: 'mysql2',
107
+ client: 'mysql',
108
108
  config: {
109
109
  user: 'reldens',
110
110
  password: 'reldens',
package/index.js CHANGED
@@ -29,6 +29,11 @@ module.exports = {
29
29
  'mikro-orm': MikroOrmDataServer,
30
30
  'prisma': PrismaDataServer
31
31
  },
32
+ DriversClassMap: {
33
+ 'ObjectionJsDataServer': 'objection-js',
34
+ 'MikroOrmDataServer': 'mikro-orm',
35
+ 'PrismaDataServer': 'prisma-server'
36
+ },
32
37
  // objection-js:
33
38
  ObjectionJsDataServer,
34
39
  ObjectionJsDriver,
@@ -37,6 +37,11 @@ class EntitiesGenerator
37
37
  'mikro-orm': MikroOrmDataServer,
38
38
  'prisma': PrismaDataServer
39
39
  };
40
+ this.driversClassMap = {
41
+ 'ObjectionJsDataServer': 'objection-js',
42
+ 'MikroOrmDataServer': 'mikro-orm',
43
+ 'PrismaDataServer': 'prisma-server'
44
+ };
40
45
  this.server = sc.get(props, 'server', false);
41
46
  this.connectionData = sc.get(props, 'connectionData', false);
42
47
  if(!this.server && !this.connectionData){
@@ -194,7 +199,7 @@ class EntitiesGenerator
194
199
 
195
200
  addTypeAttribute(props, column, type)
196
201
  {
197
- if(this.isForeignKey(column)){
202
+ if(column.referencedTable){
198
203
  props.push('type: \'reference\'');
199
204
  props.push('reference: \''+this.getReferenceTable(column)+'\'');
200
205
  return;
@@ -247,8 +252,7 @@ class EntitiesGenerator
247
252
  return [];
248
253
  }
249
254
  let valuesString = match[1];
250
- let values = valuesString.split('\',\'');
251
- return values;
255
+ return valuesString.split('\',\'');
252
256
  }
253
257
 
254
258
  addRequiredAttribute(props, column)
@@ -258,14 +262,6 @@ class EntitiesGenerator
258
262
  }
259
263
  }
260
264
 
261
- isForeignKey(column)
262
- {
263
- if(column.referencedTable){
264
- return true;
265
- }
266
- return false;
267
- }
268
-
269
265
  getReferenceTable(column)
270
266
  {
271
267
  if(column.referencedTable){
@@ -562,14 +558,24 @@ class EntitiesGenerator
562
558
  try {
563
559
  await this.server.connect();
564
560
  } catch (error) {
565
- ErrorManager.error('Failed to connect to database: '+error.message);
561
+ Logger.critical('Failed to connect to database: '+error.message);
562
+ return false;
566
563
  }
567
564
  let tables = await this.server.fetchEntitiesFromDatabase();
568
565
  if(!tables){
569
- ErrorManager.error('Failed to fetch tables from database.');
566
+ Logger.critical('EntitiesGenerator tables fetch failed.');
567
+ return false;
570
568
  }
571
569
  this.ensureFoldersExist();
572
- let driverKey = sc.get(this.connectionData, 'driver', 'objection-js');
570
+ let driverKey = sc.get(
571
+ this.connectionData,
572
+ 'driver',
573
+ (this.server ? sc.get(this.driversClassMap, this.server.constructor.name, false) : false)
574
+ );
575
+ if(!driverKey){
576
+ Logger.critical('Failed to fetch driver key.');
577
+ return false;
578
+ }
573
579
  for(let tableName in tables){
574
580
  let tableData = tables[tableName];
575
581
  await this.generateEntityFile(tableName, tableData);
@@ -583,6 +589,9 @@ class EntitiesGenerator
583
589
 
584
590
  createServer()
585
591
  {
592
+ if(this.server){
593
+ return this.server;
594
+ }
586
595
  let driverKey = sc.get(this.connectionData, 'driver', 'objection-js');
587
596
  let driverClassMapped = this.driverMap[driverKey];
588
597
  if(!driverClassMapped){
@@ -598,6 +607,7 @@ class EntitiesGenerator
598
607
  port: sc.get(this.connectionData, 'port', 3306)
599
608
  }
600
609
  });
610
+ return this.server;
601
611
  }
602
612
 
603
613
  }
@@ -102,7 +102,7 @@ class MikroOrmDataServer extends BaseDataServer
102
102
  async fetchEntitiesFromDatabase()
103
103
  {
104
104
  if(!this.initialized){
105
- Logger.error('Connection was not initialized, please use the connect method first.');
105
+ Logger.critical('Connection was not initialized, please use the connect method first.');
106
106
  return false;
107
107
  }
108
108
  try {
@@ -120,10 +120,11 @@ class MikroOrmDataServer extends BaseDataServer
120
120
  }
121
121
  return tables;
122
122
  }
123
- ErrorManager.error('Unsupported client type: '+this.client);
123
+ Logger.critical('Unsupported client type: '+this.client);
124
124
  } catch(error) {
125
- ErrorManager.error('Failed to fetch tables from database: ' + error.message);
125
+ Logger.critical('MikroORM tables fetch failed. ' + error.message);
126
126
  }
127
+ return false;
127
128
  }
128
129
 
129
130
  }
@@ -11,8 +11,7 @@ class MySQLTablesProvider
11
11
 
12
12
  static async fetchTables(server)
13
13
  {
14
- let tablesQuery =
15
- 'SELECT ' +
14
+ let tablesQuery = 'SELECT ' +
16
15
  ' TABLE_NAME, ' +
17
16
  ' COLUMN_NAME, ' +
18
17
  ' DATA_TYPE, ' +
@@ -27,7 +26,7 @@ class MySQLTablesProvider
27
26
  'WHERE ' +
28
27
  ' TABLE_SCHEMA = \'' + server.config.database + '\' ' +
29
28
  'ORDER BY ' +
30
- ' TABLE_NAME, ORDINAL_POSITION';
29
+ ' TABLE_NAME, ORDINAL_POSITION;';
31
30
  try {
32
31
  let result = await server.rawQuery(tablesQuery);
33
32
  if(!sc.isArray(result) || 0 === result.length){
@@ -52,8 +51,7 @@ class MySQLTablesProvider
52
51
  default: row.COLUMN_DEFAULT
53
52
  };
54
53
  }
55
- let foreignKeysQuery =
56
- 'SELECT ' +
54
+ let foreignKeysQuery = 'SELECT ' +
57
55
  ' TABLE_NAME, ' +
58
56
  ' COLUMN_NAME, ' +
59
57
  ' REFERENCED_TABLE_NAME, ' +
@@ -62,15 +60,12 @@ class MySQLTablesProvider
62
60
  ' information_schema.KEY_COLUMN_USAGE ' +
63
61
  'WHERE ' +
64
62
  ' TABLE_SCHEMA = \'' + server.config.database + '\' ' +
65
- ' AND REFERENCED_TABLE_NAME IS NOT NULL';
66
-
63
+ ' AND REFERENCED_TABLE_NAME IS NOT NULL;';
64
+
67
65
  let foreignKeysResult = await server.rawQuery(foreignKeysQuery);
68
66
  if(sc.isArray(foreignKeysResult) && 0 < foreignKeysResult.length){
69
67
  for(let row of foreignKeysResult){
70
- if(
71
- tables[row.TABLE_NAME] &&
72
- tables[row.TABLE_NAME].columns[row.COLUMN_NAME]
73
- ){
68
+ if(tables[row.TABLE_NAME] && tables[row.TABLE_NAME].columns[row.COLUMN_NAME]){
74
69
  tables[row.TABLE_NAME].columns[row.COLUMN_NAME].referencedTable = row.REFERENCED_TABLE_NAME;
75
70
  tables[row.TABLE_NAME].columns[row.COLUMN_NAME].referencedColumn = row.REFERENCED_COLUMN_NAME;
76
71
  }
@@ -7,7 +7,7 @@
7
7
  const { BaseDataServer } = require('../base-data-server');
8
8
  const { PrismaDriver } = require('./prisma-driver');
9
9
  const { MySQLTablesProvider } = require('../mysql-tables-provider');
10
- const { ErrorManager, Logger, sc } = require('@reldens/utils');
10
+ const { Logger } = require('@reldens/utils');
11
11
 
12
12
  class PrismaDataServer extends BaseDataServer
13
13
  {
@@ -85,8 +85,7 @@ class PrismaDataServer extends BaseDataServer
85
85
  continue;
86
86
  }
87
87
  try {
88
- let queryResult = await this.prisma.$executeRawUnsafe(cleanStatement);
89
- results.push(queryResult);
88
+ results.push(await this.executeStatement(cleanStatement));
90
89
  } catch(stmtError) {
91
90
  Logger.error('Statement "'+cleanStatement+'" execution failed: '+stmtError.message);
92
91
  return false;
@@ -102,6 +101,14 @@ class PrismaDataServer extends BaseDataServer
102
101
  }
103
102
  }
104
103
 
104
+ async executeStatement(statement)
105
+ {
106
+ if(statement.trim().toUpperCase().startsWith('SELECT')){
107
+ return await this.prisma.$queryRawUnsafe(statement);
108
+ }
109
+ return await this.prisma.$executeRawUnsafe(statement);
110
+ }
111
+
105
112
  splitSqlStatements(sqlContent)
106
113
  {
107
114
  let statements = [];
@@ -177,13 +184,14 @@ class PrismaDataServer extends BaseDataServer
177
184
  async fetchEntitiesFromDatabase()
178
185
  {
179
186
  if(!this.initialized){
180
- Logger.error('Connection was not initialized, please use the connect method first.');
187
+ Logger.critical('Connection was not initialized, please use the connect method first.');
181
188
  return false;
182
189
  }
183
190
  try {
184
191
  return await MySQLTablesProvider.fetchTables(this);
185
192
  } catch(error) {
186
- ErrorManager.error('Failed to fetch tables from database: '+error.message);
193
+ Logger.critical('Prisma Data Server tables fetch failed. '+error.message);
194
+ return false;
187
195
  }
188
196
  }
189
197
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@reldens/storage",
3
3
  "scope": "@reldens",
4
- "version": "0.36.0",
4
+ "version": "0.38.0",
5
5
  "description": "Reldens - Storage",
6
6
  "author": "Damian A. Pastorini",
7
7
  "license": "MIT",
@@ -25,6 +25,8 @@
25
25
  "mikro",
26
26
  "mikroorm",
27
27
  "mikro-orm",
28
+ "prisma",
29
+ "prisma-orm",
28
30
  "driver",
29
31
  "orm",
30
32
  "database",