AMO-Tools-Suite  v.0.9.0
Set of tools for calculating energy efficiency in industrial equipment
All Classes Namespaces Files Functions Variables Enumerations Friends Macros Pages
db.h
1 #ifndef AMO_TOOLS_SUITE_DB_H
2 #define AMO_TOOLS_SUITE_DB_H
3 #include <nan.h>
4 #include <node.h>
5 #include <sqlite/SQLite.h>
6 #include <fstream>
7 #include <memory>
8 #include <chrono>
9 #include <iostream>
10 #include <calculator/losses/SolidLoadChargeMaterial.h>
11 #include <calculator/losses/LiquidLoadChargeMaterial.h>
12 #include <calculator/losses/GasLoadChargeMaterial.h>
13 #include <calculator/losses/GasFlueGasMaterial.h>
14 #include <calculator/losses/SolidLiquidFlueGasMaterial.h>
15 #include <calculator/losses/Atmosphere.h>
16 #include <calculator/losses/WallLosses.h>
17 #include <calculator/motor/MotorData.h>
18 #include <calculator/pump/PumpData.h>
19 
20 using namespace Nan;
21 using namespace v8;
22 
23 Local<Object> inp;
24 std::unique_ptr<SQLite> sql;
25 
26 double Get(std::string const &nm)
27 {
28  v8::Isolate *isolate = v8::Isolate::GetCurrent();
29  v8::Local<v8::Context> context = isolate->GetCurrentContext();
30  Local<String> getName = Nan::New<String>(nm).ToLocalChecked();
31  Local<Value> rObj = Nan::To<Object>(inp).ToLocalChecked()->Get(context, getName).ToLocalChecked();
32  if (rObj->IsUndefined())
33  {
34  ThrowTypeError(std::string("Get method in db.h: " + nm + " not present in object").c_str());
35  }
36  return Nan::To<double>(rObj).FromJust();
37 }
38 
39 std::string GetStr(std::string const &nm)
40 {
41  v8::Isolate *isolate = v8::Isolate::GetCurrent();
42  v8::Local<v8::Context> context = isolate->GetCurrentContext();
43  Local<String> getName = Nan::New<String>(nm).ToLocalChecked();
44  Local<Value> obj = Nan::To<Object>(inp).ToLocalChecked()->Get(context, getName).ToLocalChecked();
45  if (obj->IsUndefined())
46  {
47  ThrowTypeError(std::string("GetStr method in db.h: " + nm + " not present in object").c_str());
48  }
49  v8::String::Utf8Value s(isolate, obj);
50  return std::string(*s);
51 }
52 
53 inline void SetObj(Local<Object> &obj, const std::string &key, double val)
54 {
55  Nan::Set(obj, Nan::New<String>(key).ToLocalChecked(), Nan::New<Number>(val));
56 }
57 
58 inline void SetObj(Local<Object> &obj, const std::string &key, const std::string &val)
59 {
60  Nan::Set(obj, Nan::New<String>(key).ToLocalChecked(), Nan::New<String>(val).ToLocalChecked());
61 }
62 
63 inline void SetObj(Local<Object> &obj, const std::string &key, const Motor::LineFrequency &val)
64 {
65  int lineFreqNum = 1234;
66  if (val == Motor::LineFrequency::FREQ60)
67  {
68  lineFreqNum = 60;
69  }
70  else if (val == Motor::LineFrequency::FREQ50)
71  {
72  lineFreqNum = 50;
73  }
74 
75  Nan::Set(obj, Nan::New<String>(key).ToLocalChecked(), Nan::New<Number>(lineFreqNum));
76 }
77 
78 inline void SetObj(Local<Object> &obj, const std::string &key, const Motor::EfficiencyClass &val)
79 {
80  int efficiencyClassNum;
81  if (val == Motor::EfficiencyClass::STANDARD)
82  {
83  efficiencyClassNum = 0;
84  }
85  else if (val == Motor::EfficiencyClass::ENERGY_EFFICIENT)
86  {
87  efficiencyClassNum = 1;
88  }
89  else if (val == Motor::EfficiencyClass::PREMIUM)
90  {
91  efficiencyClassNum = 2;
92  }
93  else if (val == Motor::EfficiencyClass::SPECIFIED)
94  {
95  efficiencyClassNum = 3;
96  }
97  Nan::Set(obj, Nan::New<String>(key).ToLocalChecked(), Nan::New<Number>(efficiencyClassNum));
98 }
99 
100 void SetMotorData(Local<Object> &obj, const MotorData &motor)
101 {
102  SetObj(obj, "id", motor.getId());
103  SetObj(obj, "hp", motor.getHp());
104  SetObj(obj, "synchronousSpeed", motor.getSynchronousSpeed());
105  SetObj(obj, "poles", motor.getPoles());
106  SetObj(obj, "nominalEfficiency", motor.getNominalEfficiency());
107  SetObj(obj, "efficiencyClass", motor.getEfficiencyClass());
108  SetObj(obj, "nemaTable", motor.getNemaTable());
109  SetObj(obj, "enclosureType", motor.getEnclosureType());
110  SetObj(obj, "lineFrequency", motor.getLineFrequency());
111  SetObj(obj, "voltageLimit", motor.getVoltageLimit());
112  SetObj(obj, "catalog", motor.getCatalog());
113 }
114 
115 void SetPumpData(Local<Object> &obj, const PumpData &pump)
116 {
117  SetObj(obj, "id", pump.getId());
118  SetObj(obj, "manufacturer", pump.getManufacturer());
119  SetObj(obj, "model", pump.getModel());
120  SetObj(obj, "type", pump.getType());
121  SetObj(obj, "serialNumber", pump.getSerialNumber());
122  SetObj(obj, "status", pump.getStatus());
123  SetObj(obj, "pumpType", pump.getPumpType());
124  SetObj(obj, "radialBearingType", pump.getRadialBearingType());
125  SetObj(obj, "thrustBearingType", pump.getThrustBearingType());
126  SetObj(obj, "shaftOrientation", pump.getShaftOrientation());
127  SetObj(obj, "shaftSealType", pump.getShaftSealType());
128  SetObj(obj, "fluidType", pump.getFluidType());
129  SetObj(obj, "priority", pump.getPriority());
130  SetObj(obj, "driveType", pump.getDriveType());
131  SetObj(obj, "flangeConnectionClass", pump.getFlangeConnectionClass());
132  SetObj(obj, "flangeConnectionSize", pump.getFlangeConnectionSize());
133  SetObj(obj, "numShafts", pump.getNumShafts());
134  SetObj(obj, "speed", pump.getSpeed());
135  SetObj(obj, "numStages", pump.getNumStages());
136  SetObj(obj, "yearlyOperatingHours", pump.getYearlyOperatingHours());
137  SetObj(obj, "yearInstalled", pump.getYearInstalled());
138  SetObj(obj, "finalMotorRpm", pump.getFinalMotorRpm());
139  SetObj(obj, "inletDiameter", pump.getInletDiameter());
140  SetObj(obj, "weight", pump.getWeight());
141  SetObj(obj, "outletDiameter", pump.getOutletDiameter());
142  SetObj(obj, "percentageOfSchedule", pump.getPercentageOfSchedule());
143  SetObj(obj, "dailyPumpCapacity", pump.getDailyPumpCapacity());
144  SetObj(obj, "measuredPumpCapacity", pump.getMeasuredPumpCapacity());
145  SetObj(obj, "pumpPerformance", pump.getPumpPerformance());
146  SetObj(obj, "staticSuctionHead", pump.getStaticSuctionHead());
147  SetObj(obj, "staticDischargeHead", pump.getStaticDischargeHead());
148  SetObj(obj, "fluidDensity", pump.getFluidDensity());
149  SetObj(obj, "lengthOfDischargePipe", pump.getLengthOfDischargePipe());
150  SetObj(obj, "pipeDesignFrictionLosses", pump.getPipeDesignFrictionLosses());
151  SetObj(obj, "maxWorkingPressure", pump.getMaxWorkingPressure());
152  SetObj(obj, "maxAmbientTemperature", pump.getMaxAmbientTemperature());
153  SetObj(obj, "maxSuctionLift", pump.getMaxSuctionLift());
154  SetObj(obj, "displacement", pump.getDisplacement());
155  SetObj(obj, "startingTorque", pump.getStartingTorque());
156  SetObj(obj, "ratedSpeed", pump.getRatedSpeed());
157  SetObj(obj, "shaftDiameter", pump.getShaftDiameter());
158  SetObj(obj, "impellerDiameter", pump.getImpellerDiameter());
159  SetObj(obj, "efficiency", pump.getEfficiency());
160  SetObj(obj, "output60Hz", pump.getOutput60Hz());
161  SetObj(obj, "minFlowSize", pump.getMinFlowSize());
162  SetObj(obj, "pumpSize", pump.getPumpSize());
163  SetObj(obj, "outOfService", pump.getOutOfService());
164 }
165 
166 // when creating sqlite, add table that has history, put in tools-suite number and the date so that we know where db's came from
167 // so data is version, timestamp, comment - "initial file based release"
168 // to save the backup,
169 
170 NAN_METHOD(startup)
171 {
172  // std::string dbName = "db/amo_tools_suite.db";
173  // std::ifstream ifs(dbName);
174  // const bool fileExists = ifs.is_open();
175  // ifs.close();
176  // sql.reset();
177  // sql = std::unique_ptr<SQLite>(new SQLite(dbName, ! fileExists));
178 
179  std::string const dbName = ":memory:";
180  //std::string const dbName = "test.db";
181  sql.reset();
182  sql = std::unique_ptr<SQLite>(new SQLite(dbName, true));
183 }
184 
185 NAN_METHOD(selectSolidLoadChargeMaterials)
186 {
187  Local<String> id = Nan::New<String>("id").ToLocalChecked();
188  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
189  Local<String> specificHeatSolid = Nan::New<String>("specificHeatSolid").ToLocalChecked();
190  Local<String> latentHeat = Nan::New<String>("latentHeat").ToLocalChecked();
191  Local<String> specificHeatLiquid = Nan::New<String>("specificHeatLiquid").ToLocalChecked();
192  Local<String> meltingPoint = Nan::New<String>("meltingPoint").ToLocalChecked();
193 
194  auto const slcms = sql->getSolidLoadChargeMaterials();
195 
196  auto objs = Nan::New<v8::Array>();
197  for (std::size_t i = 0; i < slcms.size(); i++)
198  {
199  auto const &slcm = slcms[i];
200  Local<Object> obj = Nan::New<Object>();
201  Nan::Set(obj, id, Nan::New<Number>(slcm.getID()));
202  Nan::Set(obj, substance, Nan::New<String>(slcm.getSubstance()).ToLocalChecked());
203  Nan::Set(obj, specificHeatSolid, Nan::New<Number>(slcm.getSpecificHeatSolid()));
204  Nan::Set(obj, latentHeat, Nan::New<Number>(slcm.getLatentHeat()));
205  Nan::Set(obj, specificHeatLiquid, Nan::New<Number>(slcm.getSpecificHeatLiquid()));
206  Nan::Set(obj, meltingPoint, Nan::New<Number>(slcm.getMeltingPoint()));
207  Nan::Set(objs, i, obj);
208  }
209 
210  info.GetReturnValue().Set(objs);
211 }
212 
213 NAN_METHOD(selectSolidLoadChargeMaterialById)
214 {
215  Local<String> id = Nan::New<String>("id").ToLocalChecked();
216  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
217  Local<String> specificHeatSolid = Nan::New<String>("specificHeatSolid").ToLocalChecked();
218  Local<String> latentHeat = Nan::New<String>("latentHeat").ToLocalChecked();
219  Local<String> specificHeatLiquid = Nan::New<String>("specificHeatLiquid").ToLocalChecked();
220  Local<String> meltingPoint = Nan::New<String>("meltingPoint").ToLocalChecked();
221 
222  Local<Object> obj = Nan::New<Object>();
223  try
224  {
225  auto const slcm = sql->getSolidLoadChargeMaterialById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
226  Nan::Set(obj, id, Nan::New<Number>(slcm.getID()));
227  Nan::Set(obj, substance, Nan::New<String>(slcm.getSubstance()).ToLocalChecked());
228  Nan::Set(obj, specificHeatSolid, Nan::New<Number>(slcm.getSpecificHeatSolid()));
229  Nan::Set(obj, latentHeat, Nan::New<Number>(slcm.getLatentHeat()));
230  Nan::Set(obj, specificHeatLiquid, Nan::New<Number>(slcm.getSpecificHeatLiquid()));
231  Nan::Set(obj, meltingPoint, Nan::New<Number>(slcm.getMeltingPoint()));
232  }
233  catch (std::runtime_error const &e)
234  {
235  std::string const what = e.what();
236  ThrowError(std::string("std::runtime_error thrown in selectSolidLoadChargeMaterialById - db.h: " + what).c_str());
237  }
238 
239  info.GetReturnValue().Set(obj);
240 }
241 
242 NAN_METHOD(insertSolidLoadChargeMaterial)
243 {
244  inp = Nan::To<Object>(info[0]).ToLocalChecked();
245  std::string substance = GetStr("substance");
246  double specificHeatSolid = Get("specificHeatSolid");
247  double specificHeatLiquid = Get("specificHeatLiquid");
248  double latentHeat = Get("latentHeat");
249  double meltingPoint = Get("meltingPoint");
250 
252  slcm.setSubstance(substance);
253  slcm.setSpecificHeatSolid(specificHeatSolid);
254  slcm.setSpecificHeatLiquid(specificHeatLiquid);
255  slcm.setLatentHeat(latentHeat);
256  slcm.setMeltingPoint(meltingPoint);
257  bool success = sql->insertSolidLoadChargeMaterials(slcm);
258 
259  info.GetReturnValue().Set(success);
260 }
261 
262 NAN_METHOD(deleteSolidLoadChargeMaterial)
263 {
264  bool success = sql->deleteSolidLoadChargeMaterial(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
265  info.GetReturnValue().Set(success);
266 }
267 
268 NAN_METHOD(updateSolidLoadChargeMaterial)
269 {
270  inp = Nan::To<Object>(info[0]).ToLocalChecked();
271  std::string substance = GetStr("substance");
272  double specificHeatSolid = Get("specificHeatSolid");
273  double specificHeatLiquid = Get("specificHeatLiquid");
274  double latentHeat = Get("latentHeat");
275  double meltingPoint = Get("meltingPoint");
276  int id = (int)Get("id");
277 
279  slcm.setSubstance(substance);
280  slcm.setSpecificHeatSolid(specificHeatSolid);
281  slcm.setSpecificHeatLiquid(specificHeatLiquid);
282  slcm.setLatentHeat(latentHeat);
283  slcm.setMeltingPoint(meltingPoint);
284  slcm.setID(id);
285  bool success = sql->updateSolidLoadChargeMaterial(slcm);
286 
287  info.GetReturnValue().Set(success);
288 }
289 
290 NAN_METHOD(selectLiquidLoadChargeMaterials)
291 {
292  Local<String> id = Nan::New<String>("id").ToLocalChecked();
293  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
294  Local<String> specificHeatLiquid = Nan::New<String>("specificHeatLiquid").ToLocalChecked();
295  Local<String> specificHeatVapor = Nan::New<String>("specificHeatVapor").ToLocalChecked();
296  Local<String> vaporizationTemperature = Nan::New<String>("vaporizationTemperature").ToLocalChecked();
297  Local<String> latentHeat = Nan::New<String>("latentHeat").ToLocalChecked();
298 
299  auto const llcms = sql->getLiquidLoadChargeMaterials();
300 
301  auto objs = Nan::New<v8::Array>();
302  for (std::size_t i = 0; i < llcms.size(); i++)
303  {
304  auto const &llcm = llcms[i];
305  Local<Object> obj = Nan::New<Object>();
306  Nan::Set(obj, id, Nan::New<Number>(llcm.getID()));
307  Nan::Set(obj, substance, Nan::New<String>(llcm.getSubstance()).ToLocalChecked());
308  Nan::Set(obj, specificHeatLiquid, Nan::New<Number>(llcm.getSpecificHeatLiquid()));
309  Nan::Set(obj, specificHeatVapor, Nan::New<Number>(llcm.getSpecificHeatVapor()));
310  Nan::Set(obj, vaporizationTemperature, Nan::New<Number>(llcm.getVaporizingTemperature()));
311  Nan::Set(obj, latentHeat, Nan::New<Number>(llcm.getLatentHeat()));
312  Nan::Set(objs, i, obj);
313  }
314 
315  info.GetReturnValue().Set(objs);
316 }
317 
318 NAN_METHOD(insertLiquidLoadChargeMaterial)
319 {
320  inp = Nan::To<Object>(info[0]).ToLocalChecked();
321 
322  std::string substance = GetStr("substance");
323  double specificHeatLiquid = Get("specificHeatLiquid");
324  double specificHeatVapor = Get("specificHeatVapor");
325  double vaporizationTemperature = Get("vaporizationTemperature");
326  double latentHeat = Get("latentHeat");
327 
329  llcm.setSubstance(substance);
330  llcm.setSpecificHeatLiquid(specificHeatLiquid);
331  llcm.setSpecificHeatVapor(specificHeatVapor);
332  llcm.setVaporizingTemperature(vaporizationTemperature);
333  llcm.setLatentHeat(latentHeat);
334  bool success = sql->insertLiquidLoadChargeMaterials(llcm);
335  info.GetReturnValue().Set(success);
336 }
337 
338 NAN_METHOD(deleteLiquidLoadChargeMaterial)
339 {
340  bool success = sql->deleteLiquidLoadChargeMaterial(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
341  info.GetReturnValue().Set(success);
342 }
343 
344 NAN_METHOD(updateLiquidLoadChargeMaterial)
345 {
346  inp = Nan::To<Object>(info[0]).ToLocalChecked();
347  std::string substance = GetStr("substance");
348  double specificHeatLiquid = Get("specificHeatLiquid");
349  double specificHeatVapor = Get("specificHeatVapor");
350  double vaporizationTemperature = Get("vaporizationTemperature");
351  double latentHeat = Get("latentHeat");
352  int id = (int)Get("id");
353 
355  llcm.setSubstance(substance);
356  llcm.setSpecificHeatLiquid(specificHeatLiquid);
357  llcm.setSpecificHeatVapor(specificHeatVapor);
358  llcm.setVaporizingTemperature(vaporizationTemperature);
359  llcm.setLatentHeat(latentHeat);
360  llcm.setID(id);
361  bool success = sql->updateLiquidLoadChargeMaterial(llcm);
362 
363  info.GetReturnValue().Set(success);
364 }
365 
366 NAN_METHOD(selectLiquidLoadChargeMaterialById)
367 {
368  Local<String> id = Nan::New<String>("id").ToLocalChecked();
369  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
370  Local<String> specificHeatLiquid = Nan::New<String>("specificHeatLiquid").ToLocalChecked();
371  Local<String> specificHeatVapor = Nan::New<String>("specificHeatVapor").ToLocalChecked();
372  Local<String> vaporizationTemperature = Nan::New<String>("vaporizationTemperature").ToLocalChecked();
373  Local<String> latentHeat = Nan::New<String>("latentHeat").ToLocalChecked();
374 
375  Local<Object> obj = Nan::New<Object>();
376  try
377  {
378  auto const llcm = sql->getLiquidLoadChargeMaterialById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
379  Nan::Set(obj, id, Nan::New<Number>(llcm.getID()));
380  Nan::Set(obj, substance, Nan::New<String>(llcm.getSubstance()).ToLocalChecked());
381  Nan::Set(obj, specificHeatLiquid, Nan::New<Number>(llcm.getSpecificHeatLiquid()));
382  Nan::Set(obj, specificHeatVapor, Nan::New<Number>(llcm.getSpecificHeatVapor()));
383  Nan::Set(obj, vaporizationTemperature, Nan::New<Number>(llcm.getVaporizingTemperature()));
384  Nan::Set(obj, latentHeat, Nan::New<Number>(llcm.getLatentHeat()));
385  }
386  catch (std::runtime_error const &e)
387  {
388  std::string const what = e.what();
389  ThrowError(std::string("std::runtime_error thrown in selectLiquidLoadChargeMaterialById - db.h: " + what).c_str());
390  }
391 
392  info.GetReturnValue().Set(obj);
393 }
394 
395 NAN_METHOD(selectGasLoadChargeMaterials)
396 {
397  Local<String> id = Nan::New<String>("id").ToLocalChecked();
398  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
399  Local<String> specificHeatVapor = Nan::New<String>("specificHeatVapor").ToLocalChecked();
400 
401  auto const glcms = sql->getGasLoadChargeMaterials();
402 
403  auto objs = Nan::New<v8::Array>();
404  for (std::size_t i = 0; i < glcms.size(); i++)
405  {
406  auto const &glcm = glcms[i];
407  Local<Object> obj = Nan::New<Object>();
408  Nan::Set(obj, id, Nan::New<Number>(glcm.getID()));
409  Nan::Set(obj, substance, Nan::New<String>(glcm.getSubstance()).ToLocalChecked());
410  Nan::Set(obj, specificHeatVapor, Nan::New<Number>(glcm.getSpecificHeatVapor()));
411  Nan::Set(objs, i, obj);
412  }
413 
414  info.GetReturnValue().Set(objs);
415 }
416 
417 NAN_METHOD(insertGasLoadChargeMaterial)
418 {
419  inp = Nan::To<Object>(info[0]).ToLocalChecked();
421  glcm.setSubstance(GetStr("substance"));
422  glcm.setSpecificHeatVapor(Get("specificHeatVapor"));
423  bool success = sql->insertGasLoadChargeMaterials(glcm);
424  info.GetReturnValue().Set(success);
425 }
426 
427 NAN_METHOD(deleteGasLoadChargeMaterial)
428 {
429  bool success = sql->deleteGasLoadChargeMaterial(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
430  info.GetReturnValue().Set(success);
431 }
432 
433 NAN_METHOD(updateGasLoadChargeMaterial)
434 {
435  inp = Nan::To<Object>(info[0]).ToLocalChecked();
436  std::string substance = GetStr("substance");
437  double specificHeatVapor = Get("specificHeatVapor");
438  int id = (int)Get("id");
439 
441  glcm.setSubstance(substance);
442  glcm.setSpecificHeatVapor(specificHeatVapor);
443  glcm.setID(id);
444  bool success = sql->updateGasLoadChargeMaterial(glcm);
445 
446  info.GetReturnValue().Set(success);
447 }
448 
449 NAN_METHOD(selectGasLoadChargeMaterialById)
450 {
451  Local<String> id = Nan::New<String>("id").ToLocalChecked();
452  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
453  Local<String> specificHeatVapor = Nan::New<String>("specificHeatVapor").ToLocalChecked();
454 
455  Local<Object> obj = Nan::New<Object>();
456  try
457  {
458  auto const glcm = sql->getGasLoadChargeMaterialById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
459  Nan::Set(obj, id, Nan::New<Number>(glcm.getID()));
460  Nan::Set(obj, substance, Nan::New<String>(glcm.getSubstance()).ToLocalChecked());
461  Nan::Set(obj, specificHeatVapor, Nan::New<Number>(glcm.getSpecificHeatVapor()));
462  }
463  catch (std::runtime_error const &e)
464  {
465  std::string const what = e.what();
466  ThrowError(std::string("std::runtime_error thrown in selectGasLoadChargeMaterialById - db.h: " + what).c_str());
467  }
468 
469  info.GetReturnValue().Set(obj);
470 }
471 
472 NAN_METHOD(selectSolidLiquidFlueGasMaterials)
473 {
474  Local<String> id = Nan::New<String>("id").ToLocalChecked();
475  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
476  Local<String> carbon = Nan::New<String>("carbon").ToLocalChecked();
477  Local<String> hydrogen = Nan::New<String>("hydrogen").ToLocalChecked();
478  Local<String> sulphur = Nan::New<String>("sulphur").ToLocalChecked();
479  Local<String> inertAsh = Nan::New<String>("inertAsh").ToLocalChecked();
480  Local<String> o2 = Nan::New<String>("o2").ToLocalChecked();
481  Local<String> moisture = Nan::New<String>("moisture").ToLocalChecked();
482  Local<String> nitrogen = Nan::New<String>("nitrogen").ToLocalChecked();
483 
484  auto const fgMaterials = sql->getSolidLiquidFlueGasMaterials();
485 
486  auto objs = Nan::New<v8::Array>();
487  for (std::size_t i = 0; i < fgMaterials.size(); i++)
488  {
489  auto const &fgm = fgMaterials[i];
490  Local<Object> obj = Nan::New<Object>();
491  Nan::Set(obj, id, Nan::New<Number>(fgm.getID()));
492  Nan::Set(obj, substance, Nan::New<String>(fgm.getSubstance()).ToLocalChecked());
493  Nan::Set(obj, carbon, Nan::New<Number>(fgm.getCarbon()));
494  Nan::Set(obj, hydrogen, Nan::New<Number>(fgm.getHydrogen()));
495  Nan::Set(obj, sulphur, Nan::New<Number>(fgm.getSulphur()));
496  Nan::Set(obj, inertAsh, Nan::New<Number>(fgm.getInertAsh()));
497  Nan::Set(obj, o2, Nan::New<Number>(fgm.getO2()));
498  Nan::Set(obj, moisture, Nan::New<Number>(fgm.getMoisture()));
499  Nan::Set(obj, nitrogen, Nan::New<Number>(fgm.getNitrogen()));
500  Nan::Set(objs, i, obj);
501  }
502 
503  info.GetReturnValue().Set(objs);
504 };
505 
506 NAN_METHOD(insertSolidLiquidFlueGasMaterial)
507 {
508  inp = Nan::To<Object>(info[0]).ToLocalChecked();
509 
510  double carbon = Get("carbon") * 100.0;
511  double hydrogen = Get("hydrogen") * 100.0;
512  double sulphur = Get("sulphur") * 100.0;
513  double inertAsh = Get("inertAsh") * 100.0;
514  double o2 = Get("o2") * 100.0;
515  double moisture = Get("moisture") * 100.0;
516  double nitrogen = Get("nitrogen") * 100.0;
517  std::string substance = GetStr("substance");
518 
519  SolidLiquidFlueGasMaterial slfgm(0, 0, 0, 0, 0, 0, 0, carbon, hydrogen,
520  sulphur, inertAsh, o2,
521  moisture, nitrogen);
522  slfgm.setSubstance(substance);
523  bool success = sql->insertSolidLiquidFlueGasMaterial(slfgm);
524 
525  info.GetReturnValue().Set(success);
526 };
527 
528 NAN_METHOD(deleteSolidLiquidFlueGasMaterial)
529 {
530  bool success = sql->deleteSolidLiquidFlueGasMaterial(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
531  info.GetReturnValue().Set(success);
532 };
533 
534 NAN_METHOD(updateSolidLiquidFlueGasMaterial)
535 {
536  inp = Nan::To<Object>(info[0]).ToLocalChecked();
537 
538  double carbon = Get("carbon") * 100.0;
539  double hydrogen = Get("hydrogen") * 100.0;
540  double sulphur = Get("sulphur") * 100.0;
541  double inertAsh = Get("inertAsh") * 100.0;
542  double o2 = Get("o2") * 100.0;
543  double moisture = Get("moisture") * 100.0;
544  double nitrogen = Get("nitrogen") * 100.0;
545  std::string substance = GetStr("substance");
546  int id = (int)Get("id");
547 
548  SolidLiquidFlueGasMaterial slfgm(0, 0, 0, 0, 0, 0, 0, carbon, hydrogen,
549  sulphur, inertAsh, o2,
550  moisture, nitrogen);
551  slfgm.setSubstance(substance);
552  slfgm.setID(id);
553  bool success = sql->updateSolidLiquidFlueGasMaterial(slfgm);
554 
555  info.GetReturnValue().Set(success);
556 };
557 
558 NAN_METHOD(selectSolidLiquidFlueGasMaterialById)
559 {
560  Local<String> id = Nan::New<String>("id").ToLocalChecked();
561  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
562  Local<String> carbon = Nan::New<String>("carbon").ToLocalChecked();
563  Local<String> hydrogen = Nan::New<String>("hydrogen").ToLocalChecked();
564  Local<String> sulphur = Nan::New<String>("sulphur").ToLocalChecked();
565  Local<String> inertAsh = Nan::New<String>("inertAsh").ToLocalChecked();
566  Local<String> o2 = Nan::New<String>("o2").ToLocalChecked();
567  Local<String> moisture = Nan::New<String>("moisture").ToLocalChecked();
568  Local<String> nitrogen = Nan::New<String>("nitrogen").ToLocalChecked();
569 
570  Local<Object> obj = Nan::New<Object>();
571  try
572  {
573  auto const fgm = sql->getSolidLiquidFlueGasMaterialById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
574  Nan::Set(obj, id, Nan::New<Number>(fgm.getID()));
575  Nan::Set(obj, substance, Nan::New<String>(fgm.getSubstance()).ToLocalChecked());
576  Nan::Set(obj, carbon, Nan::New<Number>(fgm.getCarbon()));
577  Nan::Set(obj, hydrogen, Nan::New<Number>(fgm.getHydrogen()));
578  Nan::Set(obj, sulphur, Nan::New<Number>(fgm.getSulphur()));
579  Nan::Set(obj, inertAsh, Nan::New<Number>(fgm.getInertAsh()));
580  Nan::Set(obj, o2, Nan::New<Number>(fgm.getO2()));
581  Nan::Set(obj, moisture, Nan::New<Number>(fgm.getMoisture()));
582  Nan::Set(obj, nitrogen, Nan::New<Number>(fgm.getNitrogen()));
583  }
584  catch (std::runtime_error const &e)
585  {
586  std::string const what = e.what();
587  ThrowError(std::string("std::runtime_error thrown in selectSolidLiquidFlueGasMaterialById - db.h: " + what).c_str());
588  }
589 
590  info.GetReturnValue().Set(obj);
591 };
592 
593 NAN_METHOD(selectGasFlueGasMaterials)
594 {
595  Local<String> id = Nan::New<String>("id").ToLocalChecked();
596  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
597  Local<String> CH4 = Nan::New<String>("CH4").ToLocalChecked();
598  Local<String> C2H6 = Nan::New<String>("C2H6").ToLocalChecked();
599  Local<String> N2 = Nan::New<String>("N2").ToLocalChecked();
600  Local<String> H2 = Nan::New<String>("H2").ToLocalChecked();
601  Local<String> C3H8 = Nan::New<String>("C3H8").ToLocalChecked();
602  Local<String> C4H10_CnH2n = Nan::New<String>("C4H10_CnH2n").ToLocalChecked();
603  Local<String> H2O = Nan::New<String>("H2O").ToLocalChecked();
604  Local<String> CO = Nan::New<String>("CO").ToLocalChecked();
605  Local<String> CO2 = Nan::New<String>("CO2").ToLocalChecked();
606  Local<String> SO2 = Nan::New<String>("SO2").ToLocalChecked();
607  Local<String> O2 = Nan::New<String>("O2").ToLocalChecked();
608  Local<String> heatingValue = Nan::New<String>("heatingValue").ToLocalChecked();
609  Local<String> heatingValueVolume = Nan::New<String>("heatingValueVolume").ToLocalChecked();
610  Local<String> specificGravity = Nan::New<String>("specificGravity").ToLocalChecked();
611 
612  auto const fgMaterials = sql->getGasFlueGasMaterials();
613 
614  auto objs = Nan::New<v8::Array>();
615  for (std::size_t i = 0; i < fgMaterials.size(); i++)
616  {
617  auto const &fgm = fgMaterials[i];
618  Local<Object> obj = Nan::New<Object>();
619  Nan::Set(obj, id, Nan::New<Number>(fgm.getID()));
620  Nan::Set(obj, substance, Nan::New<String>(fgm.getSubstance()).ToLocalChecked());
621  Nan::Set(obj, CH4, Nan::New<Number>(fgm.getGasByVol("CH4")));
622  Nan::Set(obj, C2H6, Nan::New<Number>(fgm.getGasByVol("C2H6")));
623  Nan::Set(obj, N2, Nan::New<Number>(fgm.getGasByVol("N2")));
624  Nan::Set(obj, H2, Nan::New<Number>(fgm.getGasByVol("H2")));
625  Nan::Set(obj, C3H8, Nan::New<Number>(fgm.getGasByVol("C3H8")));
626  Nan::Set(obj, C4H10_CnH2n, Nan::New<Number>(fgm.getGasByVol("C4H10_CnH2n")));
627  Nan::Set(obj, H2O, Nan::New<Number>(fgm.getGasByVol("H2O")));
628  Nan::Set(obj, CO, Nan::New<Number>(fgm.getGasByVol("CO")));
629  Nan::Set(obj, CO2, Nan::New<Number>(fgm.getGasByVol("CO2")));
630  Nan::Set(obj, SO2, Nan::New<Number>(fgm.getGasByVol("SO2")));
631  Nan::Set(obj, O2, Nan::New<Number>(fgm.getGasByVol("O2")));
632  Nan::Set(obj, heatingValue, Nan::New<Number>(fgm.getHeatingValue()));
633  Nan::Set(obj, heatingValueVolume, Nan::New<Number>(fgm.getHeatingValueVolume()));
634  Nan::Set(obj, specificGravity, Nan::New<Number>(fgm.getSpecificGravity()));
635  Nan::Set(objs, i, obj);
636  }
637 
638  info.GetReturnValue().Set(objs);
639 };
640 
641 NAN_METHOD(insertGasFlueGasMaterial)
642 {
643  inp = Nan::To<Object>(info[0]).ToLocalChecked();
644  std::string substance = GetStr("substance");
645  double CH4 = Get("CH4");
646  double C2H6 = Get("C2H6");
647  double N2 = Get("N2");
648  double H2 = Get("H2");
649  double C3H8 = Get("C3H8");
650  double C4H10_CnH2n = Get("C4H10_CnH2n");
651  double H2O = Get("H2O");
652  double CO = Get("CO");
653  double CO2 = Get("CO2");
654  double SO2 = Get("SO2");
655  double O2 = Get("O2");
656 
657  GasCompositions comp(substance, CH4, C2H6, N2, H2, C3H8,
658  C4H10_CnH2n, H2O, CO, CO2, SO2, O2);
659 
660  try
661  {
662  bool success = sql->insertGasFlueGasMaterial(comp);
663 
664  info.GetReturnValue().Set(success);
665  }
666  catch (std::runtime_error const &e)
667  {
668  std::string const what = e.what();
669  ThrowError(std::string("std::runtime_error thrown in insertGasFlueGasMaterial - db.h: " + what).c_str());
670  info.GetReturnValue().Set(false);
671  }
672 }
673 
674 NAN_METHOD(deleteGasFlueGasMaterial)
675 {
676  bool success = sql->deleteGasFlueGasMaterial(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
677  info.GetReturnValue().Set(success);
678 }
679 
680 NAN_METHOD(updateGasFlueGasMaterial)
681 {
682  inp = Nan::To<Object>(info[0]).ToLocalChecked();
683  std::string substance = GetStr("substance");
684  double CH4 = Get("CH4");
685  double C2H6 = Get("C2H6");
686  double N2 = Get("N2");
687  double H2 = Get("H2");
688  double C3H8 = Get("C3H8");
689  double C4H10_CnH2n = Get("C4H10_CnH2n");
690  double H2O = Get("H2O");
691  double CO = Get("CO");
692  double CO2 = Get("CO2");
693  double SO2 = Get("SO2");
694  double O2 = Get("O2");
695  int id = (int)Get("id");
696 
697  GasCompositions comp(substance, CH4, C2H6, N2, H2, C3H8,
698  C4H10_CnH2n, H2O, CO, CO2, SO2, O2);
699  comp.setID(id);
700 
701  try
702  {
703  bool success = sql->updateGasFlueGasMaterial(comp);
704  info.GetReturnValue().Set(success);
705  }
706  catch (std::runtime_error const &e)
707  {
708  std::string const what = e.what();
709  ThrowError(std::string("std::runtime_error thrown in updateGasFlueGasMaterial - db.h: " + what).c_str());
710  info.GetReturnValue().Set(false);
711  }
712 }
713 
714 NAN_METHOD(selectGasFlueGasMaterialById)
715 {
716  Local<String> id = Nan::New<String>("id").ToLocalChecked();
717  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
718  Local<String> CH4 = Nan::New<String>("CH4").ToLocalChecked();
719  Local<String> C2H6 = Nan::New<String>("C2H6").ToLocalChecked();
720  Local<String> N2 = Nan::New<String>("N2").ToLocalChecked();
721  Local<String> H2 = Nan::New<String>("H2").ToLocalChecked();
722  Local<String> C3H8 = Nan::New<String>("C3H8").ToLocalChecked();
723  Local<String> C4H10_CnH2n = Nan::New<String>("C4H10_CnH2n").ToLocalChecked();
724  Local<String> H2O = Nan::New<String>("H2O").ToLocalChecked();
725  Local<String> CO = Nan::New<String>("CO").ToLocalChecked();
726  Local<String> CO2 = Nan::New<String>("CO2").ToLocalChecked();
727  Local<String> SO2 = Nan::New<String>("SO2").ToLocalChecked();
728  Local<String> O2 = Nan::New<String>("O2").ToLocalChecked();
729  Local<String> heatingValue = Nan::New<String>("heatingValue").ToLocalChecked();
730  Local<String> heatingValueVolume = Nan::New<String>("heatingValueVolume").ToLocalChecked();
731  Local<String> specificGravity = Nan::New<String>("specificGravity").ToLocalChecked();
732 
733  Local<Object> obj = Nan::New<Object>();
734  try
735  {
736  auto const fgm = sql->getGasFlueGasMaterialById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
737  Nan::Set(obj, id, Nan::New<Number>(fgm.getID()));
738  Nan::Set(obj, substance, Nan::New<String>(fgm.getSubstance()).ToLocalChecked());
739  Nan::Set(obj, CH4, Nan::New<Number>(fgm.getGasByVol("CH4")));
740  Nan::Set(obj, C2H6, Nan::New<Number>(fgm.getGasByVol("C2H6")));
741  Nan::Set(obj, N2, Nan::New<Number>(fgm.getGasByVol("N2")));
742  Nan::Set(obj, H2, Nan::New<Number>(fgm.getGasByVol("H2")));
743  Nan::Set(obj, C3H8, Nan::New<Number>(fgm.getGasByVol("C3H8")));
744  Nan::Set(obj, C4H10_CnH2n, Nan::New<Number>(fgm.getGasByVol("C4H10_CnH2n")));
745  Nan::Set(obj, H2O, Nan::New<Number>(fgm.getGasByVol("H2O")));
746  Nan::Set(obj, CO, Nan::New<Number>(fgm.getGasByVol("CO")));
747  Nan::Set(obj, CO2, Nan::New<Number>(fgm.getGasByVol("CO2")));
748  Nan::Set(obj, SO2, Nan::New<Number>(fgm.getGasByVol("SO2")));
749  Nan::Set(obj, O2, Nan::New<Number>(fgm.getGasByVol("O2")));
750  Nan::Set(obj, heatingValue, Nan::New<Number>(fgm.getHeatingValue()));
751  Nan::Set(obj, heatingValueVolume, Nan::New<Number>(fgm.getHeatingValueVolume()));
752  Nan::Set(obj, specificGravity, Nan::New<Number>(fgm.getSpecificGravity()));
753  }
754  catch (std::runtime_error const &e)
755  {
756  std::string const what = e.what();
757  ThrowError(std::string("std::runtime_error thrown in selectGasFlueGasMaterialById - db.h: " + what).c_str());
758  }
759 
760  info.GetReturnValue().Set(obj);
761 };
762 
763 NAN_METHOD(selectAtmosphereSpecificHeat)
764 {
765  Local<String> id = Nan::New<String>("id").ToLocalChecked();
766  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
767  Local<String> specificHeat = Nan::New<String>("specificHeat").ToLocalChecked();
768  auto const aMaterials = sql->getAtmosphereSpecificHeat();
769 
770  auto objs = Nan::New<v8::Array>();
771  for (std::size_t i = 0; i < aMaterials.size(); i++)
772  {
773  auto const ash = aMaterials[i];
774  Local<Object> obj = Nan::New<Object>();
775  Nan::Set(obj, id, Nan::New<Number>(ash.getID()));
776  Nan::Set(obj, substance, Nan::New<String>(ash.getSubstance()).ToLocalChecked());
777  Nan::Set(obj, specificHeat, Nan::New<Number>(ash.getSpecificHeat()));
778  Nan::Set(objs, i, obj);
779  }
780 
781  info.GetReturnValue().Set(objs);
782 };
783 
784 NAN_METHOD(insertAtmosphereSpecificHeat)
785 {
786  inp = Nan::To<Object>(info[0]).ToLocalChecked();
787  std::string substance = GetStr("substance");
788  double specificHeat = Get("specificHeat");
789 
790  Atmosphere atmos;
791  atmos.setSubstance(substance);
792  atmos.setSpecificHeat(specificHeat);
793  bool success = sql->insertAtmosphereSpecificHeat(atmos);
794 
795  info.GetReturnValue().Set(success);
796 };
797 
798 NAN_METHOD(deleteAtmosphereSpecificHeat)
799 {
800  bool success = sql->deleteAtmosphereSpecificHeat(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
801  info.GetReturnValue().Set(success);
802 };
803 
804 NAN_METHOD(updateAtmosphereSpecificHeat)
805 {
806  inp = Nan::To<Object>(info[0]).ToLocalChecked();
807  std::string substance = GetStr("substance");
808  double specificHeat = Get("specificHeat");
809  int id = (int)Get("id");
810 
811  Atmosphere atmos;
812  atmos.setSubstance(substance);
813  atmos.setSpecificHeat(specificHeat);
814  atmos.setID(id);
815  bool success = sql->updateAtmosphereSpecificHeat(atmos);
816 
817  info.GetReturnValue().Set(success);
818 };
819 
820 NAN_METHOD(selectAtmosphereSpecificHeatById)
821 {
822  Local<String> id = Nan::New<String>("id").ToLocalChecked();
823  Local<String> substance = Nan::New<String>("substance").ToLocalChecked();
824  Local<String> specificHeat = Nan::New<String>("specificHeat").ToLocalChecked();
825 
826  Local<Object> obj = Nan::New<Object>();
827  try
828  {
829  auto const ash = sql->getAtmosphereSpecificHeatById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
830  Nan::Set(obj, id, Nan::New<Number>(ash.getID()));
831  Nan::Set(obj, substance, Nan::New<String>(ash.getSubstance()).ToLocalChecked());
832  Nan::Set(obj, specificHeat, Nan::New<Number>(ash.getSpecificHeat()));
833  }
834  catch (std::runtime_error const &e)
835  {
836  std::string const what = e.what();
837  ThrowError(std::string("std::runtime_error thrown in selectAtmosphereSpecificHeatById - db.h: " + what).c_str());
838  }
839 
840  info.GetReturnValue().Set(obj);
841 };
842 
843 NAN_METHOD(selectWallLossesSurface)
844 {
845  Local<String> id = Nan::New<String>("id").ToLocalChecked();
846  Local<String> surface = Nan::New<String>("surface").ToLocalChecked();
847  Local<String> conditionFactor = Nan::New<String>("conditionFactor").ToLocalChecked();
848  auto const wlSurfaces = sql->getWallLossesSurface();
849 
850  auto objs = Nan::New<v8::Array>();
851  for (std::size_t i = 0; i < wlSurfaces.size(); i++)
852  {
853  auto const &wls = wlSurfaces[i];
854  Local<Object> obj = Nan::New<Object>();
855  Nan::Set(obj, id, Nan::New<Number>(wls.getID()));
856  Nan::Set(obj, surface, Nan::New<String>(wls.getSurface()).ToLocalChecked());
857  Nan::Set(obj, conditionFactor, Nan::New<Number>(wls.getConditionFactor()));
858  Nan::Set(objs, i, obj);
859  }
860 
861  info.GetReturnValue().Set(objs);
862 };
863 
864 NAN_METHOD(insertWallLossesSurface)
865 {
866  inp = Nan::To<Object>(info[0]).ToLocalChecked();
867  std::string surface = GetStr("surface");
868  double conditionFactor = Get("conditionFactor");
869 
870  WallLosses wl;
871  wl.setSurface(surface);
872  wl.setConditionFactor(conditionFactor);
873  bool success = sql->insertWallLossesSurface(wl);
874 
875  info.GetReturnValue().Set(success);
876 };
877 
878 NAN_METHOD(deleteWallLossesSurface)
879 {
880  bool success = sql->deleteWallLossesSurface(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
881  info.GetReturnValue().Set(success);
882 };
883 
884 NAN_METHOD(updateWallLossesSurface)
885 {
886  inp = Nan::To<Object>(info[0]).ToLocalChecked();
887  std::string surface = GetStr("surface");
888  double conditionFactor = Get("conditionFactor");
889  int id = (int)Get("id");
890 
891  WallLosses wl;
892  wl.setSurface(surface);
893  wl.setConditionFactor(conditionFactor);
894  wl.setID(id);
895  bool success = sql->updateWallLossesSurface(wl);
896 
897  info.GetReturnValue().Set(success);
898 };
899 
900 NAN_METHOD(selectWallLossesSurfaceById)
901 {
902  Local<String> id = Nan::New<String>("id").ToLocalChecked();
903  Local<String> surface = Nan::New<String>("surface").ToLocalChecked();
904  Local<String> conditionFactor = Nan::New<String>("conditionFactor").ToLocalChecked();
905 
906  Local<Object> obj = Nan::New<Object>();
907  try
908  {
909  auto const wls = sql->getWallLossesSurfaceById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
910  Nan::Set(obj, id, Nan::New<Number>(wls.getID()));
911  Nan::Set(obj, surface, Nan::New<String>(wls.getSurface()).ToLocalChecked());
912  Nan::Set(obj, conditionFactor, Nan::New<Number>(wls.getConditionFactor()));
913  }
914  catch (std::runtime_error const &e)
915  {
916  std::string const what = e.what();
917  ThrowError(std::string("std::runtime_error thrown in selectWallLossesSurfaceById - db.h: " + what).c_str());
918  }
919 
920  info.GetReturnValue().Set(obj);
921 };
922 
923 NAN_METHOD(selectMotors)
924 {
925  auto const motors = sql->getMotorData();
926 
927  auto motorsNan = Nan::New<v8::Array>();
928  for (std::size_t i = 0; i < motors.size(); i++)
929  {
930  Local<Object> motor = Nan::New<Object>();
931  SetMotorData(motor, motors[i]);
932  Nan::Set(motorsNan, i, motor);
933  }
934 
935  info.GetReturnValue().Set(motorsNan);
936 };
937 
938 NAN_METHOD(selectMotorById)
939 {
940  Local<Object> motor = Nan::New<Object>();
941  try
942  {
943  SetMotorData(motor, sql->getMotorDataById(static_cast<int>(Nan::To<double>(info[0]).FromJust())));
944  }
945  catch (std::runtime_error const &e)
946  {
947  std::string const what = e.what();
948  ThrowError(std::string("std::runtime_error thrown in selectMotorById - db.h: " + what).c_str());
949  }
950  info.GetReturnValue().Set(motor);
951 };
952 
953 NAN_METHOD(insertMotor)
954 {
955  inp = Nan::To<Object>(info[0]).ToLocalChecked();
956  int lineFreq = Get("lineFrequency");
957  Motor::LineFrequency lineFreqEnum;
958  if (lineFreq == 60)
959  {
960  lineFreqEnum = Motor::LineFrequency::FREQ60;
961  }
962  else if (lineFreq == 50)
963  {
964  lineFreqEnum = Motor::LineFrequency::FREQ50;
965  }
966  int efficiencyClass = Get("efficiencyClass");
967  Motor::EfficiencyClass efficiencyClassEnum;
968  if (efficiencyClass == 0)
969  {
970  efficiencyClassEnum = Motor::EfficiencyClass::STANDARD;
971  }
972  else if (efficiencyClass == 1)
973  {
974  efficiencyClassEnum = Motor::EfficiencyClass::ENERGY_EFFICIENT;
975  }
976  else if (efficiencyClass == 2)
977  {
978  efficiencyClassEnum = Motor::EfficiencyClass::PREMIUM;
979  }
980  else if (efficiencyClass == 3)
981  {
982  efficiencyClassEnum = Motor::EfficiencyClass::SPECIFIED;
983  }
984 
985  MotorData motor(Get("hp"), Get("synchronousSpeed"), Get("poles"), Get("nominalEfficiency"), efficiencyClassEnum,
986  GetStr("nemaTable"), GetStr("enclosureType"), lineFreqEnum, Get("voltageLimit"), GetStr("catalog"));
987  bool success = sql->insertMotorData(motor);
988  info.GetReturnValue().Set(success);
989 };
990 
991 NAN_METHOD(deleteMotor)
992 {
993  bool success = sql->deleteMotorData(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
994  info.GetReturnValue().Set(success);
995 };
996 
997 NAN_METHOD(updateMotor)
998 {
999  inp = Nan::To<Object>(info[0]).ToLocalChecked();
1000  int lineFreq = Get("lineFrequency");
1001  Motor::LineFrequency lineFreqEnum;
1002  if (lineFreq == 60)
1003  {
1004  lineFreqEnum = Motor::LineFrequency::FREQ60;
1005  }
1006  else if (lineFreq == 50)
1007  {
1008  lineFreqEnum = Motor::LineFrequency::FREQ50;
1009  }
1010  int efficiencyClass = Get("efficiencyClass");
1011  Motor::EfficiencyClass efficiencyClassEnum;
1012  if (efficiencyClass == 0)
1013  {
1014  efficiencyClassEnum = Motor::EfficiencyClass::STANDARD;
1015  }
1016  else if (efficiencyClass == 1)
1017  {
1018  efficiencyClassEnum = Motor::EfficiencyClass::ENERGY_EFFICIENT;
1019  }
1020  else if (efficiencyClass == 2)
1021  {
1022  efficiencyClassEnum = Motor::EfficiencyClass::PREMIUM;
1023  }
1024  else if (efficiencyClass == 3)
1025  {
1026  efficiencyClassEnum = Motor::EfficiencyClass::SPECIFIED;
1027  }
1028 
1029  MotorData motor(Get("hp"), Get("synchronousSpeed"), Get("poles"), Get("nominalEfficiency"), efficiencyClassEnum,
1030  GetStr("nemaTable"), GetStr("enclosureType"), lineFreqEnum, Get("voltageLimit"), GetStr("catalog"));
1031  motor.setId(Get("id"));
1032  bool success = sql->insertMotorData(motor);
1033  info.GetReturnValue().Set(success);
1034 };
1035 
1036 NAN_METHOD(selectPumps)
1037 {
1038  auto const pumps = sql->getPumpData(); // TODO this returns 0 pumps confirmed, but doesn't in C++. I don't think I can do anything else here anymore.
1039 
1040  auto pumpsNan = Nan::New<v8::Array>();
1041  for (std::size_t i = 0; i < pumps.size(); i++)
1042  {
1043  Local<Object> pump = Nan::New<Object>();
1044  SetPumpData(pump, pumps[i]);
1045  Nan::Set(pumpsNan, i, pump);
1046  }
1047 
1048  info.GetReturnValue().Set(pumpsNan);
1049 };
1050 
1051 NAN_METHOD(selectPumpById)
1052 {
1053  Local<Object> pump = Nan::New<Object>();
1054  try
1055  {
1056  //SetPumpData(pump, sql->getPumpDataById(static_cast<int>(info[0].FromJust())));
1057  SetPumpData(pump, sql->getPumpDataById(static_cast<int>(Nan::To<double>(info[0]).FromJust())));
1058  //sql->getPumpDataById(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
1059  }
1060  catch (std::runtime_error const &e)
1061  {
1062  std::string const what = e.what();
1063  ThrowError(std::string("std::runtime_error thrown in selectPumpById - db.h: " + what).c_str());
1064  }
1065  info.GetReturnValue().Set(pump);
1066 };
1067 
1068 NAN_METHOD(insertPump)
1069 {
1070  //inp = info[0]->ToObject();
1071  inp = Nan::To<Object>(info[0]).ToLocalChecked();
1072 
1073  PumpData pump(
1074  GetStr("manufacturer"), GetStr("model"), GetStr("type"), GetStr("serialNumber"), GetStr("status"),
1075  GetStr("pumpType"), GetStr("radialBearingType"), GetStr("thrustBearingType"), GetStr("shaftOrientation"),
1076  GetStr("shaftSealType"), GetStr("fluidType"), GetStr("priority"), GetStr("driveType"),
1077  GetStr("flangeConnectionClass"), GetStr("flangeConnectionSize"), Get("numShafts"), Get("speed"),
1078  Get("numStages"), Get("yearlyOperatingHours"), Get("yearInstalled"), Get("finalMotorRpm"),
1079  Get("inletDiameter"), Get("weight"), Get("outletDiameter"), Get("percentageOfSchedule"),
1080  Get("dailyPumpCapacity"), Get("measuredPumpCapacity"), Get("pumpPerformance"), Get("staticSuctionHead"),
1081  Get("staticDischargeHead"), Get("fluidDensity"), Get("lengthOfDischargePipe"), Get("pipeDesignFrictionLosses"),
1082  Get("maxWorkingPressure"), Get("maxAmbientTemperature"), Get("maxSuctionLift"), Get("displacement"),
1083  Get("startingTorque"), Get("ratedSpeed"), Get("shaftDiameter"), Get("impellerDiameter"),
1084  Get("efficiency"), Get("output60Hz"), Get("minFlowSize"), Get("pumpSize"), Get("outOfService"));
1085  bool success = sql->insertPumpData(pump);
1086  info.GetReturnValue().Set(success);
1087 };
1088 
1089 NAN_METHOD(deletePump)
1090 {
1091  //bool success = sql->deletePumpData(static_cast<int>(info[0].FromJust()));
1092  bool success = sql->deletePumpData(static_cast<int>(Nan::To<double>(info[0]).FromJust()));
1093  info.GetReturnValue().Set(success);
1094 };
1095 
1096 NAN_METHOD(updatePump)
1097 {
1098  //inp = info[0]->ToObject();
1099  inp = Nan::To<Object>(info[0]).ToLocalChecked();
1100 
1101  PumpData pump(
1102  GetStr("manufacturer"), GetStr("model"), GetStr("type"), GetStr("serialNumber"), GetStr("status"),
1103  GetStr("pumpType"), GetStr("radialBearingType"), GetStr("thrustBearingType"),
1104  GetStr("shaftOrientation"), GetStr("shaftSealType"), GetStr("fluidType"), GetStr("priority"),
1105  GetStr("driveType"), GetStr("flangeConnectionClass"), GetStr("flangeConnectionSize"), Get("numShafts"),
1106  Get("speed"), Get("numStages"), Get("yearlyOperatingHours"), Get("yearInstalled"), Get("finalMotorRpm"),
1107  Get("inletDiameter"), Get("weight"), Get("outletDiameter"), Get("percentageOfSchedule"), Get("dailyPumpCapacity"),
1108  Get("measuredPumpCapacity"), Get("pumpPerformance"), Get("staticSuctionHead"), Get("staticDischargeHead"),
1109  Get("fluidDensity"), Get("lengthOfDischargePipe"), Get("pipeDesignFrictionLosses"), Get("maxWorkingPressure"),
1110  Get("maxAmbientTemperature"), Get("maxSuctionLift"), Get("displacement"), Get("startingTorque"),
1111  Get("ratedSpeed"), Get("shaftDiameter"), Get("impellerDiameter"), Get("efficiency"),
1112  Get("output60Hz"), Get("minFlowSize"), Get("pumpSize"), Get("outOfService"));
1113 
1114  pump.setId(Get("id"));
1115  bool success = sql->updatePumpData(pump);
1116  info.GetReturnValue().Set(success);
1117 };
1118 
1119 #endif //AMO_TOOLS_SUITE_DB_H
void setSubstance(std::string substance)
void setLatentHeat(const double latentHeat)
std::string getSubstance() const
void setSpecificHeatLiquid(const double specificHeatLiquid)
void setSpecificHeat(const double specificHeat)
Definition: Atmosphere.h:134
void setSpecificHeatSolid(const double specificHeatSolid)
void setSurface(std::string surface)
Definition: WallLosses.h:187
double getSpecificHeatVapor() const
void setSpecificHeatVapor(double specificHeatVapor)
Definition: SQLite.h:104
void setID(const int id)
Definition: WallLosses.h:203
void setSubstance(std::string substance)
Definition: Atmosphere.h:156
void setSubstance(std::string const &substance)
void setMeltingPoint(const double meltingPoint)
void setVaporizingTemperature(const double vaporizingTemperature)
void setLatentHeat(const double latentHeat)
void setConditionFactor(const double conditionFactor)
Definition: WallLosses.h:149
void setSubstance(std::string const &substance)
void setSpecificHeatVapor(const double specificHeatVapor)
void setSpecificHeatLiquid(const double specificHeatLiquid)
void setID(const int id)
Definition: Atmosphere.h:172