masterrecord 0.0.30 → 0.0.31
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/Entity/{EntityModel.js → entityModel.js} +0 -0
- package/Entity/{EntityModelBuilder.js → entityModelBuilder.js} +0 -0
- package/Entity/{EntityTrackerModel.js → entityTrackerModel.js} +0 -0
- package/Masterrecord.js +7 -240
- package/Migrations/cli.js +1 -1
- package/Migrations/schema.js +1 -1
- package/QueryLanguage/queryMethods.js +1 -1
- package/context.js +248 -0
- package/{DeleteManager.js → deleteManager.js} +0 -0
- package/{InsertManager.js → insertManager.js} +0 -0
- package/package.json +1 -1
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/Masterrecord.js
CHANGED
|
@@ -2,254 +2,21 @@
|
|
|
2
2
|
// https://github.com/kriasoft/node-sqlite
|
|
3
3
|
// https://www.learnentityframeworkcore.com/dbset/deleting-data
|
|
4
4
|
// version 1.0.19
|
|
5
|
+
var context = require("./context");
|
|
6
|
+
var schema = require("./Migrations/schema");
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
var query = require('masterrecord/QueryLanguage/queryMethods');
|
|
8
|
-
var tools = require('./Tools');
|
|
9
|
-
var SQLLiteEngine = require('masterrecord/SQLLiteEngine');
|
|
10
|
-
var MYSQLEngine = require('masterrecord/MYSQLEngine');
|
|
11
|
-
var insertManager = require('./InsertManager');
|
|
12
|
-
var deleteManager = require('./DeleteManager');
|
|
13
|
-
var globSearch = require("glob");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class Context {
|
|
17
|
-
_isModelValid = {
|
|
18
|
-
isValid: true,
|
|
19
|
-
errors: []
|
|
20
|
-
};
|
|
21
|
-
__entities = [];
|
|
22
|
-
__builderEntities = [];
|
|
23
|
-
__trackedEntities = [];
|
|
24
|
-
__relationshipModels = [];
|
|
25
|
-
__enviornment = "";
|
|
26
|
-
__name = "";
|
|
27
|
-
isSQite = false;
|
|
28
|
-
isMySQL = false;
|
|
8
|
+
class masterrecord{
|
|
29
9
|
|
|
30
10
|
constructor(){
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
33
|
-
this._SQLEngine = "";
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/*
|
|
37
|
-
SQLite expected model
|
|
38
|
-
{
|
|
39
|
-
"type": "better-sqlite3",
|
|
40
|
-
"connection" : "/db/",
|
|
41
|
-
"password": "",
|
|
42
|
-
"username": ""
|
|
43
|
-
}
|
|
44
|
-
*/
|
|
45
|
-
__SQLiteInit(env, sqlName){
|
|
46
|
-
try{
|
|
47
|
-
const sqlite3 = require(sqlName);
|
|
48
|
-
let DBAddress = env.completeConnection;
|
|
49
|
-
var db = new sqlite3(DBAddress, env);
|
|
50
|
-
db.__name = sqlName;
|
|
51
|
-
this._SQLEngine = new SQLLiteEngine();
|
|
52
|
-
return db;
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
console.log("error SQL", e);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/*
|
|
60
|
-
mysql expected model
|
|
61
|
-
{
|
|
62
|
-
"type": "mysql",
|
|
63
|
-
host : 'localhost',
|
|
64
|
-
user : 'me',
|
|
65
|
-
password : 'secret',
|
|
66
|
-
database : 'my_db'
|
|
67
|
-
}
|
|
68
|
-
*/
|
|
69
|
-
__mysqlInit(env, sqlName){
|
|
70
|
-
try{
|
|
71
|
-
const mysql = require(sqlName);
|
|
72
|
-
const connection = mysql.createConnection(env);
|
|
73
|
-
connection.connect();
|
|
74
|
-
db.__name = sqlName;
|
|
75
|
-
this._SQLEngine = new MYSQLEngine();
|
|
76
|
-
return connection;
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
catch (e) {
|
|
80
|
-
console.log("error SQL", e);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
__clearErrorHandler(){
|
|
87
|
-
this._isModelValid = {
|
|
88
|
-
isValid: true,
|
|
89
|
-
errors: []
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
__findSettings(root, rootFolderLocation, envType){
|
|
94
|
-
|
|
95
|
-
var rootFolder = `${root}/${rootFolderLocation}`;
|
|
96
|
-
var search = `${rootFolder}/**/*env.${envType}.json`;
|
|
97
|
-
var files = globSearch.sync(search, rootFolder);
|
|
98
|
-
var file = files[0];
|
|
99
|
-
if(file === undefined){
|
|
100
|
-
root = tools.removeBackwardSlashSection(root, 1, "/");
|
|
101
|
-
rootFolder = `${root}/${rootFolderLocation}`;
|
|
102
|
-
var search = `${rootFolder}/**/*env.${envType}.json`;
|
|
103
|
-
var files = globSearch.sync(search,rootFolder);
|
|
104
|
-
file = files[0];
|
|
105
|
-
if(file === undefined){
|
|
106
|
-
root = tools.removeBackwardSlashSection(root, 1, "/");
|
|
107
|
-
rootFolder = `${root}/${rootFolderLocation}`;
|
|
108
|
-
var search = `${rootFolder}/**/*env.${envType}.json`;
|
|
109
|
-
var files = globSearch.sync(search,rootFolder);
|
|
110
|
-
file = files[0];
|
|
111
|
-
if(file === undefined){
|
|
112
|
-
console.log(`could not find file - ${rootFolder}/env.${envType}.json`);
|
|
113
|
-
throw error(`could not find file - ${rootFolder}/env.${envType}.json`);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return {
|
|
121
|
-
file: file,
|
|
122
|
-
rootFolder : root
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
useSqlite(rootFolderLocation){
|
|
127
|
-
this.isSQite = true;
|
|
128
|
-
var root = process.cwd();
|
|
129
|
-
var envType = this.__enviornment;
|
|
130
|
-
var contextName = this.__name;
|
|
131
|
-
var file = this.__findSettings(root, rootFolderLocation, envType);
|
|
132
|
-
var settings = require(file.file);
|
|
133
|
-
var options = settings[contextName];
|
|
134
|
-
if(options === undefined){
|
|
135
|
-
console.log("settings missing context name settings");
|
|
136
|
-
throw error("settings missing context name settings");
|
|
137
|
-
}
|
|
138
|
-
this.validateSQLiteOptions(options);
|
|
139
|
-
options.completeConnection = `${file.rootFolder}${options.connection}`;
|
|
140
|
-
this.db = this.__SQLiteInit(options, "better-sqlite3");
|
|
141
|
-
this._SQLEngine.setDB(this.db, "better-sqlite3");
|
|
142
|
-
return this;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
validateSQLiteOptions(options){
|
|
146
|
-
if(options.hasOwnProperty('connect') === undefined){
|
|
147
|
-
console.log("connnect string settings is missing")
|
|
148
|
-
throw error("connection string settings is missing");
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
useMySql(options, rootFolderLocation){
|
|
154
|
-
if(options !== undefined){
|
|
155
|
-
this.db = this.__mysqlInit(options, "mysql");
|
|
156
|
-
this._SQLEngine.setDB(this.db, "mysql");
|
|
157
|
-
return this;
|
|
158
|
-
}
|
|
159
|
-
else{
|
|
160
|
-
console.log("database options not defined - Master Record");
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
dbset(model, name){
|
|
166
|
-
var validModel = modelBuilder.create(model);
|
|
167
|
-
validModel.__name = name === undefined ? model.name : name;
|
|
168
|
-
this.__entities.push(validModel); // model object
|
|
169
|
-
var buildMod = tools.createNewInstance(validModel, query, this);
|
|
170
|
-
this.__builderEntities.push(buildMod); // query builder entites
|
|
171
|
-
this[validModel.__name] = buildMod;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
modelState(){
|
|
175
|
-
return this._isModelValid;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
saveChanges(){
|
|
179
|
-
try{
|
|
180
|
-
var tracked = this.__trackedEntities;
|
|
181
|
-
// start transaction
|
|
182
|
-
this._SQLEngine.startTransaction();
|
|
183
|
-
for (var model in tracked) {
|
|
184
|
-
var currentModel = tracked[model];
|
|
185
|
-
switch(currentModel.__state) {
|
|
186
|
-
case "insert":
|
|
187
|
-
var insert = new insertManager(this._SQLEngine, this._isModelValid, this.__entities);
|
|
188
|
-
insert.init(currentModel);
|
|
189
|
-
|
|
190
|
-
break;
|
|
191
|
-
case "modified":
|
|
192
|
-
if(currentModel.__dirtyFields.length > 0){
|
|
193
|
-
var cleanCurrentModel = tools.removePrimarykeyandVirtual(currentModel, currentModel._entity);
|
|
194
|
-
// build columns equal to value string
|
|
195
|
-
var argu = this._SQLEngine._buildSQLEqualTo(cleanCurrentModel);
|
|
196
|
-
var primaryKey = tools.getPrimaryKeyObject(cleanCurrentModel.__entity);
|
|
197
|
-
var sqlUpdate = {tableName: cleanCurrentModel.__entity.__name, arg: argu, primaryKey : primaryKey, primaryKeyValue : cleanCurrentModel[primaryKey] };
|
|
198
|
-
this._SQLEngine.update(sqlUpdate);
|
|
199
|
-
}
|
|
200
|
-
else{
|
|
201
|
-
console.log("Tracked entity modified with no values being changed");
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// code block
|
|
205
|
-
break;
|
|
206
|
-
case "delete":
|
|
207
|
-
var deleteObject = new deleteManager(this._SQLEngine, this.__entities);
|
|
208
|
-
deleteObject.init(currentModel);
|
|
209
|
-
|
|
210
|
-
break;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
this.__clearErrorHandler();
|
|
214
|
-
this._SQLEngine.endTransaction();
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
catch(error){
|
|
218
|
-
this.__clearErrorHandler();
|
|
219
|
-
this._SQLEngine.errorTransaction();
|
|
220
|
-
console.log("error", error);
|
|
221
|
-
this.__clearTracked();
|
|
222
|
-
throw error;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
this.__clearTracked();
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// TODO: WHY WE HAVE DOUBLE TRACKED OBJECTS - LOOP THROUGH ALL TRACKED OBJECTS
|
|
230
|
-
__track(model){
|
|
231
|
-
this.__trackedEntities.push(model);
|
|
232
|
-
return model;
|
|
11
|
+
this.context = context;
|
|
12
|
+
this.schema = schema;
|
|
233
13
|
}
|
|
14
|
+
}
|
|
234
15
|
|
|
235
|
-
__findTracked(id){
|
|
236
|
-
if(id){
|
|
237
|
-
for (var model in this.__trackedEntities) {
|
|
238
|
-
if(this.__trackedEntities[model].__ID === id){
|
|
239
|
-
return this.__trackedEntities[model];
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
16
|
|
|
246
|
-
|
|
247
|
-
this.__trackedEntities = [];
|
|
248
|
-
}
|
|
249
|
-
}
|
|
17
|
+
module.exports = masterrecord;
|
|
250
18
|
|
|
251
19
|
|
|
252
|
-
module.exports = Context;
|
|
253
20
|
|
|
254
21
|
/*
|
|
255
22
|
|
package/Migrations/cli.js
CHANGED
|
@@ -16,7 +16,7 @@ const [,, ...args] = process.argv
|
|
|
16
16
|
|
|
17
17
|
program
|
|
18
18
|
.version('0.0.2')
|
|
19
|
-
.option('-v, --version', '0.0.
|
|
19
|
+
.option('-v, --version', '0.0.31')
|
|
20
20
|
.description('A ORM framework that facilitates the creation and use of business objects whose data requires persistent storage to a database');
|
|
21
21
|
|
|
22
22
|
// Instructions : to run command you must go to main project folder is located and run the command using the context file name.
|
package/Migrations/schema.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ALL THIS SHOULD DO IS BUILD A SQL QUERY
|
|
2
2
|
// version 1.0.222
|
|
3
3
|
// TODO: change name of queryManager to select manager;
|
|
4
|
-
var entityTrackerModel = require('masterrecord/Entity/
|
|
4
|
+
var entityTrackerModel = require('masterrecord/Entity/entityTrackerModel');
|
|
5
5
|
var tools = require('masterrecord/Tools');
|
|
6
6
|
var queryScript = require('masterrecord/QueryLanguage/queryScript');
|
|
7
7
|
|
package/context.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
|
|
2
|
+
var modelBuilder = require('./Entity/EntityModelBuilder');
|
|
3
|
+
var query = require('masterrecord/QueryLanguage/queryMethods');
|
|
4
|
+
var tools = require('./Tools');
|
|
5
|
+
var SQLLiteEngine = require('masterrecord/SQLLiteEngine');
|
|
6
|
+
var MYSQLEngine = require('masterrecord/MYSQLEngine');
|
|
7
|
+
var insertManager = require('./InsertManager');
|
|
8
|
+
var deleteManager = require('./DeleteManager');
|
|
9
|
+
var globSearch = require("glob");
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Context {
|
|
13
|
+
_isModelValid = {
|
|
14
|
+
isValid: true,
|
|
15
|
+
errors: []
|
|
16
|
+
};
|
|
17
|
+
__entities = [];
|
|
18
|
+
__builderEntities = [];
|
|
19
|
+
__trackedEntities = [];
|
|
20
|
+
__relationshipModels = [];
|
|
21
|
+
__enviornment = "";
|
|
22
|
+
__name = "";
|
|
23
|
+
isSQite = false;
|
|
24
|
+
isMySQL = false;
|
|
25
|
+
|
|
26
|
+
constructor(){
|
|
27
|
+
this. __enviornment = process.env.master;
|
|
28
|
+
this.__name = this.constructor.name;
|
|
29
|
+
this._SQLEngine = "";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
SQLite expected model
|
|
34
|
+
{
|
|
35
|
+
"type": "better-sqlite3",
|
|
36
|
+
"connection" : "/db/",
|
|
37
|
+
"password": "",
|
|
38
|
+
"username": ""
|
|
39
|
+
}
|
|
40
|
+
*/
|
|
41
|
+
__SQLiteInit(env, sqlName){
|
|
42
|
+
try{
|
|
43
|
+
const sqlite3 = require(sqlName);
|
|
44
|
+
let DBAddress = env.completeConnection;
|
|
45
|
+
var db = new sqlite3(DBAddress, env);
|
|
46
|
+
db.__name = sqlName;
|
|
47
|
+
this._SQLEngine = new SQLLiteEngine();
|
|
48
|
+
return db;
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console.log("error SQL", e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
mysql expected model
|
|
57
|
+
{
|
|
58
|
+
"type": "mysql",
|
|
59
|
+
host : 'localhost',
|
|
60
|
+
user : 'me',
|
|
61
|
+
password : 'secret',
|
|
62
|
+
database : 'my_db'
|
|
63
|
+
}
|
|
64
|
+
*/
|
|
65
|
+
__mysqlInit(env, sqlName){
|
|
66
|
+
try{
|
|
67
|
+
const mysql = require(sqlName);
|
|
68
|
+
const connection = mysql.createConnection(env);
|
|
69
|
+
connection.connect();
|
|
70
|
+
db.__name = sqlName;
|
|
71
|
+
this._SQLEngine = new MYSQLEngine();
|
|
72
|
+
return connection;
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
console.log("error SQL", e);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
__clearErrorHandler(){
|
|
83
|
+
this._isModelValid = {
|
|
84
|
+
isValid: true,
|
|
85
|
+
errors: []
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
__findSettings(root, rootFolderLocation, envType){
|
|
90
|
+
|
|
91
|
+
var rootFolder = `${root}/${rootFolderLocation}`;
|
|
92
|
+
var search = `${rootFolder}/**/*env.${envType}.json`;
|
|
93
|
+
var files = globSearch.sync(search, rootFolder);
|
|
94
|
+
var file = files[0];
|
|
95
|
+
if(file === undefined){
|
|
96
|
+
root = tools.removeBackwardSlashSection(root, 1, "/");
|
|
97
|
+
rootFolder = `${root}/${rootFolderLocation}`;
|
|
98
|
+
var search = `${rootFolder}/**/*env.${envType}.json`;
|
|
99
|
+
var files = globSearch.sync(search,rootFolder);
|
|
100
|
+
file = files[0];
|
|
101
|
+
if(file === undefined){
|
|
102
|
+
root = tools.removeBackwardSlashSection(root, 1, "/");
|
|
103
|
+
rootFolder = `${root}/${rootFolderLocation}`;
|
|
104
|
+
var search = `${rootFolder}/**/*env.${envType}.json`;
|
|
105
|
+
var files = globSearch.sync(search,rootFolder);
|
|
106
|
+
file = files[0];
|
|
107
|
+
if(file === undefined){
|
|
108
|
+
console.log(`could not find file - ${rootFolder}/env.${envType}.json`);
|
|
109
|
+
throw error(`could not find file - ${rootFolder}/env.${envType}.json`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
file: file,
|
|
118
|
+
rootFolder : root
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
useSqlite(rootFolderLocation){
|
|
123
|
+
this.isSQite = true;
|
|
124
|
+
var root = process.cwd();
|
|
125
|
+
var envType = this.__enviornment;
|
|
126
|
+
var contextName = this.__name;
|
|
127
|
+
var file = this.__findSettings(root, rootFolderLocation, envType);
|
|
128
|
+
var settings = require(file.file);
|
|
129
|
+
var options = settings[contextName];
|
|
130
|
+
if(options === undefined){
|
|
131
|
+
console.log("settings missing context name settings");
|
|
132
|
+
throw error("settings missing context name settings");
|
|
133
|
+
}
|
|
134
|
+
this.validateSQLiteOptions(options);
|
|
135
|
+
options.completeConnection = `${file.rootFolder}${options.connection}`;
|
|
136
|
+
this.db = this.__SQLiteInit(options, "better-sqlite3");
|
|
137
|
+
this._SQLEngine.setDB(this.db, "better-sqlite3");
|
|
138
|
+
return this;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
validateSQLiteOptions(options){
|
|
142
|
+
if(options.hasOwnProperty('connect') === undefined){
|
|
143
|
+
console.log("connnect string settings is missing")
|
|
144
|
+
throw error("connection string settings is missing");
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
useMySql(options, rootFolderLocation){
|
|
150
|
+
if(options !== undefined){
|
|
151
|
+
this.db = this.__mysqlInit(options, "mysql");
|
|
152
|
+
this._SQLEngine.setDB(this.db, "mysql");
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
else{
|
|
156
|
+
console.log("database options not defined - Master Record");
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
dbset(model, name){
|
|
162
|
+
var validModel = modelBuilder.create(model);
|
|
163
|
+
validModel.__name = name === undefined ? model.name : name;
|
|
164
|
+
this.__entities.push(validModel); // model object
|
|
165
|
+
var buildMod = tools.createNewInstance(validModel, query, this);
|
|
166
|
+
this.__builderEntities.push(buildMod); // query builder entites
|
|
167
|
+
this[validModel.__name] = buildMod;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
modelState(){
|
|
171
|
+
return this._isModelValid;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
saveChanges(){
|
|
175
|
+
try{
|
|
176
|
+
var tracked = this.__trackedEntities;
|
|
177
|
+
// start transaction
|
|
178
|
+
this._SQLEngine.startTransaction();
|
|
179
|
+
for (var model in tracked) {
|
|
180
|
+
var currentModel = tracked[model];
|
|
181
|
+
switch(currentModel.__state) {
|
|
182
|
+
case "insert":
|
|
183
|
+
var insert = new insertManager(this._SQLEngine, this._isModelValid, this.__entities);
|
|
184
|
+
insert.init(currentModel);
|
|
185
|
+
|
|
186
|
+
break;
|
|
187
|
+
case "modified":
|
|
188
|
+
if(currentModel.__dirtyFields.length > 0){
|
|
189
|
+
var cleanCurrentModel = tools.removePrimarykeyandVirtual(currentModel, currentModel._entity);
|
|
190
|
+
// build columns equal to value string
|
|
191
|
+
var argu = this._SQLEngine._buildSQLEqualTo(cleanCurrentModel);
|
|
192
|
+
var primaryKey = tools.getPrimaryKeyObject(cleanCurrentModel.__entity);
|
|
193
|
+
var sqlUpdate = {tableName: cleanCurrentModel.__entity.__name, arg: argu, primaryKey : primaryKey, primaryKeyValue : cleanCurrentModel[primaryKey] };
|
|
194
|
+
this._SQLEngine.update(sqlUpdate);
|
|
195
|
+
}
|
|
196
|
+
else{
|
|
197
|
+
console.log("Tracked entity modified with no values being changed");
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// code block
|
|
201
|
+
break;
|
|
202
|
+
case "delete":
|
|
203
|
+
var deleteObject = new deleteManager(this._SQLEngine, this.__entities);
|
|
204
|
+
deleteObject.init(currentModel);
|
|
205
|
+
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
this.__clearErrorHandler();
|
|
210
|
+
this._SQLEngine.endTransaction();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
catch(error){
|
|
214
|
+
this.__clearErrorHandler();
|
|
215
|
+
this._SQLEngine.errorTransaction();
|
|
216
|
+
console.log("error", error);
|
|
217
|
+
this.__clearTracked();
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
this.__clearTracked();
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// TODO: WHY WE HAVE DOUBLE TRACKED OBJECTS - LOOP THROUGH ALL TRACKED OBJECTS
|
|
226
|
+
__track(model){
|
|
227
|
+
this.__trackedEntities.push(model);
|
|
228
|
+
return model;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
__findTracked(id){
|
|
232
|
+
if(id){
|
|
233
|
+
for (var model in this.__trackedEntities) {
|
|
234
|
+
if(this.__trackedEntities[model].__ID === id){
|
|
235
|
+
return this.__trackedEntities[model];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
__clearTracked(){
|
|
243
|
+
this.__trackedEntities = [];
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
module.exports = Context;
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"glob" : "^8.0.3",
|
|
7
7
|
"deep-object-diff" : "^1.1.7"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.31",
|
|
10
10
|
"description": "An Object-relational mapping for the Master framework. Master Record connects classes to relational database tables to establish a database with almost zero-configuration ",
|
|
11
11
|
"homepage": "https://github.com/Tailor/MasterRecord#readme",
|
|
12
12
|
"repository": {
|