meadow-endpoints 4.0.14 → 4.0.15
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/dist/meadow-endpoints.js +16 -21
- package/dist/meadow-endpoints.js.map +1 -1
- package/dist/meadow-endpoints.min.js +6 -6
- package/dist/meadow-endpoints.min.js.map +1 -1
- package/package.json +7 -7
- package/source/endpoints/upsert/Meadow-Operation-Upsert.js +5 -3
- package/test/MeadowEndpoints_basic_tests.js +39 -0
package/dist/meadow-endpoints.js
CHANGED
|
@@ -3162,25 +3162,19 @@ let tmpParameterTypeKeys=Object.keys(pQuery.query.parameterTypes);const tmpColum
|
|
|
3162
3162
|
// BEFORE WE ADD THIS BEHAVIOR, DECIDE CONCISTENCY WITH OTHER PROVIDERS WHO ALLOW OVERFLOWING STRINGS
|
|
3163
3163
|
let tmpParameterEntry=false;if(tmpParameterType==='Char'||tmpParameterType==='VarChar'){tmpParameterEntry=_Fable.MeadowMSSQLProvider.MSSQL[tmpParameterType](_Fable.MeadowMSSQLProvider.MSSQL.Max);}// TODO: There is a bug with Text and schemata in ArtifactTypes at least.
|
|
3164
3164
|
else if(tmpParameterType==='Text'){tmpParameterEntry=_Fable.MeadowMSSQLProvider.MSSQL.VarChar(_Fable.MeadowMSSQLProvider.MSSQL.Max);}else if(tmpParameterType==='Decimal'){const tmpSize=tmpSchemaByColumn[tmpParameterTypeKeys[i]]?.Size;if(tmpSize&&typeof tmpSize==='string'){let[tmpDigitsStr,tmpDecimalDigitsStr]=tmpSize.split(',');const tmpDigits=parseInt(tmpDigitsStr.trim());const tmpDecimalDigits=tmpDecimalDigitsStr?parseInt(tmpDecimalDigitsStr.trim()):0;tmpParameterEntry=_Fable.MeadowMSSQLProvider.MSSQL.Decimal(tmpDigits,tmpDecimalDigits);}else{tmpParameterEntry=_Fable.MeadowMSSQLProvider.MSSQL.Decimal(18,8);}}else{tmpParameterEntry=_Fable.MeadowMSSQLProvider.MSSQL[tmpParameterType];}tmpPreparedStatement.input(tmpParameterTypeKeys[i],tmpParameterEntry);}return tmpPreparedStatement;};var Create=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildCreateQuery();// TODO: Test the query before executing
|
|
3165
|
-
if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);let tmpQueryBody=`${pQuery.query.body} \nSELECT SCOPE_IDENTITY() AS value;`;if(pQuery.AllowIdentityInsert){tmpQueryBody=`SET IDENTITY_INSERT [${pQuery.parameters.scope}] ON; \n${tmpQueryBody} \nSET IDENTITY_INSERT [${pQuery.parameters.scope}] OFF;`;}tmpPreparedStatement.prepare(tmpQueryBody,pPrepareError=>{
|
|
3166
|
-
if(pPrepareError){_Fable.log.error(`CREATE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3165
|
+
if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);let tmpQueryBody=`${pQuery.query.body} \nSELECT SCOPE_IDENTITY() AS value;`;if(pQuery.AllowIdentityInsert){tmpQueryBody=`SET IDENTITY_INSERT [${pQuery.parameters.scope}] ON; \n${tmpQueryBody} \nSET IDENTITY_INSERT [${pQuery.parameters.scope}] OFF;`;}tmpPreparedStatement.prepare(tmpQueryBody,pPrepareError=>{if(pPrepareError){_Fable.log.error(`CREATE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);tmpResult.error=pPrepareError;tmpResult.executed=true;return fCallback();}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3167
3166
|
tmpPreparedStatement.unprepare(pPreparedStatementUnprepareError=>{if(pPreparedStatementUnprepareError){_Fable.log.error(`CREATE Error unpreparing prepared statement: ${pPreparedStatementUnprepareError}`,pPreparedStatementUnprepareError);}tmpResult.error=pPreparedExecutionError;if(pPreparedResult&&Array.isArray(pPreparedResult.recordset)&&pPreparedResult.recordset.length>0&&pPreparedResult.recordset[0].value){tmpResult.value=pPreparedResult.recordset[0].value;}tmpResult.executed=true;// TODO: Fix very old pattern by es6-izing this whole bash
|
|
3168
3167
|
return fCallback();});});});};// This is a synchronous read, good for a few records.
|
|
3169
3168
|
// TODO: Add a pipe-able read for huge sets
|
|
3170
|
-
var Read=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildReadQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{
|
|
3171
|
-
if(pPrepareError){_Fable.log.error(`READ Error preparing prepared statement: ${pPrepareError}`,pPrepareError);}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3169
|
+
var Read=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildReadQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{if(pPrepareError){_Fable.log.error(`READ Error preparing prepared statement: ${pPrepareError}`,pPrepareError);tmpResult.error=pPrepareError;tmpResult.executed=true;return fCallback();}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3172
3170
|
tmpPreparedStatement.unprepare(pPreparedStatementUnprepareError=>{if(pPreparedStatementUnprepareError){_Fable.log.error(`READ Error unpreparing prepared statement: ${pPreparedStatementUnprepareError}`,pPreparedStatementUnprepareError);}//_Fable.log.info(`Prepared statement returned...`, pPreparedResult);
|
|
3173
|
-
tmpResult.error=pPreparedExecutionError;try{tmpResult.value=pPreparedResult.recordset;}catch(pMarshalError){_Fable.log.error(`READ Error marshaling prepared statement result: ${pMarshalError}`,pMarshalError);}tmpResult.executed=true;return fCallback();});});});};var Update=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildUpdateQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{
|
|
3174
|
-
if(pPrepareError){_Fable.log.error(`UPDATE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3171
|
+
tmpResult.error=pPreparedExecutionError;try{tmpResult.value=pPreparedResult.recordset;}catch(pMarshalError){_Fable.log.error(`READ Error marshaling prepared statement result: ${pMarshalError}`,pMarshalError);}tmpResult.executed=true;return fCallback();});});});};var Update=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildUpdateQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{if(pPrepareError){_Fable.log.error(`UPDATE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);tmpResult.error=pPrepareError;tmpResult.executed=true;return fCallback();}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3175
3172
|
tmpPreparedStatement.unprepare(pPreparedStatementUnprepareError=>{if(pPreparedStatementUnprepareError){_Fable.log.error(`UPDATE Error unpreparing prepared statement: ${pPreparedStatementUnprepareError}`,pPreparedStatementUnprepareError);}//_Fable.log.info(`Prepared statement returned...`, pPreparedResult);
|
|
3176
|
-
tmpResult.error=pPreparedExecutionError;tmpResult.value=pPreparedResult;tmpResult.executed=true;return fCallback();});});});};var Delete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildDeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{
|
|
3177
|
-
if(pPrepareError){_Fable.log.error(`DELETE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3173
|
+
tmpResult.error=pPreparedExecutionError;tmpResult.value=pPreparedResult;tmpResult.executed=true;return fCallback();});});});};var Delete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildDeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{if(pPrepareError){_Fable.log.error(`DELETE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);tmpResult.error=pPrepareError;tmpResult.executed=true;return fCallback();}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3178
3174
|
tmpPreparedStatement.unprepare(pPreparedStatementUnprepareError=>{if(pPreparedStatementUnprepareError){_Fable.log.error(`DELETE Error unpreparing prepared statement: ${pPreparedStatementUnprepareError}`,pPreparedStatementUnprepareError);}//_Fable.log.info(`Prepared statement returned...`, pPreparedResult);
|
|
3179
|
-
tmpResult.error=pPreparedExecutionError;tmpResult.value=false;try{tmpResult.value=pPreparedResult.rowsAffected[0];}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during delete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});});};var Undelete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildUndeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{
|
|
3180
|
-
if(pPrepareError){_Fable.log.error(`UNDELETE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3175
|
+
tmpResult.error=pPreparedExecutionError;tmpResult.value=false;try{tmpResult.value=pPreparedResult.rowsAffected[0];}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during delete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});});};var Undelete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildUndeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{if(pPrepareError){_Fable.log.error(`UNDELETE Error preparing prepared statement: ${pPrepareError}`,pPrepareError);tmpResult.error=pPrepareError;tmpResult.executed=true;return fCallback();}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3181
3176
|
tmpPreparedStatement.unprepare(pPreparedStatementUnprepareError=>{if(pPreparedStatementUnprepareError){_Fable.log.error(`UNDELETE Error unpreparing prepared statement: ${pPreparedStatementUnprepareError}`,pPreparedStatementUnprepareError);}//_Fable.log.info(`Prepared statement returned...`, pPreparedResult);
|
|
3182
|
-
tmpResult.error=pPreparedExecutionError;tmpResult.value=false;try{tmpResult.value=pPreparedResult.rowsAffected[0];}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during undelete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});});};var Count=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildCountQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{
|
|
3183
|
-
if(pPrepareError){_Fable.log.error(`COUNT Error preparing prepared statement: ${pPrepareError}`,pPrepareError);}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3177
|
+
tmpResult.error=pPreparedExecutionError;tmpResult.value=false;try{tmpResult.value=pPreparedResult.rowsAffected[0];}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during undelete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});});};var Count=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MSSQL').buildCountQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}let tmpPreparedStatement=getPreparedStatementFromQuery(pQuery);tmpPreparedStatement.prepare(pQuery.query.body,pPrepareError=>{if(pPrepareError){_Fable.log.error(`COUNT Error preparing prepared statement: ${pPrepareError}`,pPrepareError);tmpResult.error=pPrepareError;tmpResult.executed=true;return fCallback();}tmpPreparedStatement.execute(pQuery.query.parameters,(pPreparedExecutionError,pPreparedResult)=>{// release the connection after queries are executed
|
|
3184
3178
|
tmpPreparedStatement.unprepare(pPreparedStatementUnprepareError=>{if(pPreparedStatementUnprepareError){_Fable.log.error(`COUNT Error unpreparing prepared statement: ${pPreparedStatementUnprepareError}`,pPreparedStatementUnprepareError);}//_Fable.log.info(`Prepared statement returned...`, pPreparedResult);
|
|
3185
3179
|
tmpResult.error=pPreparedExecutionError;tmpResult.value=false;try{tmpResult.value=pPreparedResult.recordset[0].Row_Count;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during count query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});});};var tmpNewProvider={marshalRecordFromSourceToObject:marshalRecordFromSourceToObject,Create:Create,Read:Read,Update:Update,Delete:Delete,Undelete:Undelete,Count:Count,getProvider:getProvider,providerCreatesSupported:true,new:createNew};return tmpNewProvider;}return createNew();};module.exports=new MeadowProvider();},{}],114:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
3186
3180
|
/**
|
|
@@ -3244,14 +3238,14 @@ var tmpJsonColumns={};var tmpProxyColumns={};if(Array.isArray(pSchema)){for(var
|
|
|
3244
3238
|
try{pObject[tmpColumn]=typeof pRecord[tmpColumn]==='string'?JSON.parse(pRecord[tmpColumn]):pRecord[tmpColumn]||{};}catch(pParseError){pObject[tmpColumn]={};}}else if(tmpProxyColumns.hasOwnProperty(tmpColumn)){// JSONProxy: storage column -> parse and assign to virtual column name
|
|
3245
3239
|
var tmpVirtualColumn=tmpProxyColumns[tmpColumn];try{pObject[tmpVirtualColumn]=typeof pRecord[tmpColumn]==='string'?JSON.parse(pRecord[tmpColumn]):pRecord[tmpColumn]||{};}catch(pParseError){pObject[tmpVirtualColumn]={};}// Do NOT copy the storage column to the output object
|
|
3246
3240
|
}else{pObject[tmpColumn]=pRecord[tmpColumn];}}};var Create=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildCreateQuery();// TODO: Test the query before executing
|
|
3247
|
-
if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}getSQLPool().getConnection(function(pError,pDBConnection){pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3241
|
+
if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}var tmpPool=getSQLPool();if(!tmpPool){tmpResult.error=new Error('No MySQL connection pool available.');tmpResult.executed=true;return fCallback();}tmpPool.getConnection(function(pError,pDBConnection){if(pError||!pDBConnection){_Fable.log.error('Error getting connection from MySQL pool during create query: '+(pError?pError.message:'no connection returned'),{Body:pQuery.query.body});tmpResult.error=pError||new Error('No connection returned from pool.');tmpResult.executed=true;return fCallback();}pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3248
3242
|
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=false;try{tmpResult.value=pRows.insertId;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting insert ID during create query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});};// This is a synchronous read, good for a few records.
|
|
3249
3243
|
// TODO: Add a pipe-able read for huge sets
|
|
3250
|
-
var Read=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildReadQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}getSQLPool().getConnection(function(pError,pDBConnection){pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3251
|
-
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=pRows;tmpResult.executed=true;return fCallback();});});};var Update=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildUpdateQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}getSQLPool().getConnection(function(pError,pDBConnection){pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3252
|
-
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=pRows;tmpResult.executed=true;return fCallback();});});};var Delete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildDeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}getSQLPool().getConnection(function(pError,pDBConnection){pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3253
|
-
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=false;try{tmpResult.value=pRows.affectedRows;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during delete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});};var Undelete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildUndeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}getSQLPool().getConnection(function(pError,pDBConnection){pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3254
|
-
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=false;try{tmpResult.value=pRows.affectedRows;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during delete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});};var Count=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildCountQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}getSQLPool().getConnection(function(pError,pDBConnection){pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3244
|
+
var Read=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildReadQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}var tmpPool=getSQLPool();if(!tmpPool){tmpResult.error=new Error('No MySQL connection pool available.');tmpResult.executed=true;return fCallback();}tmpPool.getConnection(function(pError,pDBConnection){if(pError||!pDBConnection){_Fable.log.error('Error getting connection from MySQL pool during read query: '+(pError?pError.message:'no connection returned'),{Body:pQuery.query.body});tmpResult.error=pError||new Error('No connection returned from pool.');tmpResult.executed=true;return fCallback();}pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3245
|
+
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=pRows;tmpResult.executed=true;return fCallback();});});};var Update=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildUpdateQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}var tmpPool=getSQLPool();if(!tmpPool){tmpResult.error=new Error('No MySQL connection pool available.');tmpResult.executed=true;return fCallback();}tmpPool.getConnection(function(pError,pDBConnection){if(pError||!pDBConnection){_Fable.log.error('Error getting connection from MySQL pool during update query: '+(pError?pError.message:'no connection returned'),{Body:pQuery.query.body});tmpResult.error=pError||new Error('No connection returned from pool.');tmpResult.executed=true;return fCallback();}pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3246
|
+
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=pRows;tmpResult.executed=true;return fCallback();});});};var Delete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildDeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}var tmpPool=getSQLPool();if(!tmpPool){tmpResult.error=new Error('No MySQL connection pool available.');tmpResult.executed=true;return fCallback();}tmpPool.getConnection(function(pError,pDBConnection){if(pError||!pDBConnection){_Fable.log.error('Error getting connection from MySQL pool during delete query: '+(pError?pError.message:'no connection returned'),{Body:pQuery.query.body});tmpResult.error=pError||new Error('No connection returned from pool.');tmpResult.executed=true;return fCallback();}pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3247
|
+
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=false;try{tmpResult.value=pRows.affectedRows;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during delete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});};var Undelete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildUndeleteQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}var tmpPool=getSQLPool();if(!tmpPool){tmpResult.error=new Error('No MySQL connection pool available.');tmpResult.executed=true;return fCallback();}tmpPool.getConnection(function(pError,pDBConnection){if(pError||!pDBConnection){_Fable.log.error('Error getting connection from MySQL pool during undelete query: '+(pError?pError.message:'no connection returned'),{Body:pQuery.query.body});tmpResult.error=pError||new Error('No connection returned from pool.');tmpResult.executed=true;return fCallback();}pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3248
|
+
function(pError,pRows){pDBConnection.release();tmpResult.error=pError;tmpResult.value=false;try{tmpResult.value=pRows.affectedRows;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during delete query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}tmpResult.executed=true;return fCallback();});});};var Count=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('MySQL').buildCountQuery();if(pQuery.logLevel>0||_GlobalLogLevel>0){_Fable.log.trace(pQuery.query.body,pQuery.query.parameters);}var tmpPool=getSQLPool();if(!tmpPool){tmpResult.error=new Error('No MySQL connection pool available.');tmpResult.executed=true;return fCallback();}tmpPool.getConnection(function(pError,pDBConnection){if(pError||!pDBConnection){_Fable.log.error('Error getting connection from MySQL pool during count query: '+(pError?pError.message:'no connection returned'),{Body:pQuery.query.body});tmpResult.error=pError||new Error('No connection returned from pool.');tmpResult.executed=true;return fCallback();}pDBConnection.query(pQuery.query.body,pQuery.query.parameters,// The MySQL library also returns the Fields as the third parameter
|
|
3255
3249
|
function(pError,pRows){pDBConnection.release();tmpResult.executed=true;tmpResult.error=pError;tmpResult.value=false;try{tmpResult.value=pRows[0].RowCount;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting rowcount during count query',{Body:pQuery.query.body,Parameters:pQuery.query.parameters});}return fCallback();});});};var tmpNewProvider={marshalRecordFromSourceToObject:marshalRecordFromSourceToObject,Create:Create,Read:Read,Update:Update,Delete:Delete,Undelete:Undelete,Count:Count,getProvider:getProvider,providerCreatesSupported:false,new:createNew};return tmpNewProvider;}return createNew();};module.exports=new MeadowProvider();},{}],117:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
3256
3250
|
/**
|
|
3257
3251
|
* @license MIT
|
|
@@ -3466,7 +3460,7 @@ var marshalRecordFromSourceToObject=function(pObject,pRecord,pSchema){// Build l
|
|
|
3466
3460
|
var tmpJsonColumns={};var tmpProxyColumns={};if(Array.isArray(pSchema)){for(var s=0;s<pSchema.length;s++){if(pSchema[s].Type==='JSON'){tmpJsonColumns[pSchema[s].Column]=true;}else if(pSchema[s].Type==='JSONProxy'&&pSchema[s].StorageColumn){tmpProxyColumns[pSchema[s].StorageColumn]=pSchema[s].Column;}}}for(var tmpColumn in pRecord){if(tmpJsonColumns[tmpColumn]){// JSON type: parse string from DB into object on the same column name
|
|
3467
3461
|
try{pObject[tmpColumn]=typeof pRecord[tmpColumn]==='string'?JSON.parse(pRecord[tmpColumn]):pRecord[tmpColumn]||{};}catch(pParseError){pObject[tmpColumn]={};}}else if(tmpProxyColumns.hasOwnProperty(tmpColumn)){// JSONProxy: storage column -> parse and assign to virtual column name
|
|
3468
3462
|
var tmpVirtualColumn=tmpProxyColumns[tmpColumn];try{pObject[tmpVirtualColumn]=typeof pRecord[tmpColumn]==='string'?JSON.parse(pRecord[tmpColumn]):pRecord[tmpColumn]||{};}catch(pParseError){pObject[tmpVirtualColumn]={};}// Do NOT copy the storage column to the output object
|
|
3469
|
-
}else{pObject[tmpColumn]=pRecord[tmpColumn];}}};var Create=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('SQLite').buildCreateQuery();var tmpQueryBody=fixDateFunctions(pQuery.query.body);coerceParameters(pQuery.query.parameters);if(pQuery.logLevel>0){_Fable.log.trace(tmpQueryBody,pQuery.query.parameters);}try{var tmpDB=getDB();if(!tmpDB){tmpResult.error=new Error('No SQLite database connection available.');tmpResult.executed=true;return fCallback();}var tmpStatement=tmpDB.prepare(tmpQueryBody);var tmpInfo=tmpStatement.run(pQuery.query.parameters);tmpResult.error=null;tmpResult.value=false;try{tmpResult.value=Number(tmpInfo.lastInsertRowid);}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting insert ID during create query',{Body:tmpQueryBody,Parameters:pQuery.query.parameters});}tmpResult.executed=true;
|
|
3463
|
+
}else{pObject[tmpColumn]=pRecord[tmpColumn];}}};var Create=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('SQLite').buildCreateQuery();var tmpQueryBody=fixDateFunctions(pQuery.query.body);coerceParameters(pQuery.query.parameters);if(pQuery.logLevel>0){_Fable.log.trace(tmpQueryBody,pQuery.query.parameters);}try{var tmpDB=getDB();if(!tmpDB){tmpResult.error=new Error('No SQLite database connection available.');tmpResult.executed=true;return fCallback();}var tmpStatement=tmpDB.prepare(tmpQueryBody);var tmpInfo=tmpStatement.run(pQuery.query.parameters);tmpResult.error=null;tmpResult.value=false;try{tmpResult.value=Number(tmpInfo.lastInsertRowid);}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting insert ID during create query',{Body:tmpQueryBody,Parameters:pQuery.query.parameters});}tmpResult.executed=true;}catch(pError){tmpResult.error=pError;tmpResult.value=false;tmpResult.executed=true;}return fCallback();};var Read=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('SQLite').buildReadQuery();var tmpQueryBody=fixDateFunctions(pQuery.query.body);coerceParameters(pQuery.query.parameters);if(pQuery.logLevel>0){_Fable.log.trace(tmpQueryBody,pQuery.query.parameters);}try{var tmpDB=getDB();if(!tmpDB){tmpResult.error=new Error('No SQLite database connection available.');tmpResult.executed=true;return fCallback();}var tmpStatement=tmpDB.prepare(tmpQueryBody);var tmpRows=tmpStatement.all(pQuery.query.parameters);tmpResult.error=null;tmpResult.value=tmpRows;tmpResult.executed=true;}catch(pError){tmpResult.error=pError;tmpResult.value=false;tmpResult.executed=true;}return fCallback();};var Update=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('SQLite').buildUpdateQuery();var tmpQueryBody=fixDateFunctions(pQuery.query.body);coerceParameters(pQuery.query.parameters);if(pQuery.logLevel>0){_Fable.log.trace(tmpQueryBody,pQuery.query.parameters);}try{var tmpDB=getDB();if(!tmpDB){tmpResult.error=new Error('No SQLite database connection available.');tmpResult.executed=true;return fCallback();}var tmpStatement=tmpDB.prepare(tmpQueryBody);var tmpInfo=tmpStatement.run(pQuery.query.parameters);tmpResult.error=null;tmpResult.value=tmpInfo;tmpResult.executed=true;}catch(pError){tmpResult.error=pError;tmpResult.value=false;tmpResult.executed=true;}return fCallback();};var Delete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('SQLite').buildDeleteQuery();var tmpQueryBody=fixDateFunctions(pQuery.query.body);coerceParameters(pQuery.query.parameters);if(pQuery.logLevel>0){_Fable.log.trace(tmpQueryBody,pQuery.query.parameters);}try{var tmpDB=getDB();if(!tmpDB){tmpResult.error=new Error('No SQLite database connection available.');tmpResult.executed=true;return fCallback();}var tmpStatement=tmpDB.prepare(tmpQueryBody);var tmpInfo=tmpStatement.run(pQuery.query.parameters);tmpResult.error=null;tmpResult.value=false;try{tmpResult.value=tmpInfo.changes;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during delete query',{Body:tmpQueryBody,Parameters:pQuery.query.parameters});}tmpResult.executed=true;}catch(pError){tmpResult.error=pError;tmpResult.value=false;tmpResult.executed=true;}return fCallback();};var Undelete=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('SQLite').buildUndeleteQuery();var tmpQueryBody=fixDateFunctions(pQuery.query.body);coerceParameters(pQuery.query.parameters);if(pQuery.logLevel>0){_Fable.log.trace(tmpQueryBody,pQuery.query.parameters);}try{var tmpDB=getDB();if(!tmpDB){tmpResult.error=new Error('No SQLite database connection available.');tmpResult.executed=true;return fCallback();}var tmpStatement=tmpDB.prepare(tmpQueryBody);var tmpInfo=tmpStatement.run(pQuery.query.parameters);tmpResult.error=null;tmpResult.value=false;try{tmpResult.value=tmpInfo.changes;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting affected rowcount during undelete query',{Body:tmpQueryBody,Parameters:pQuery.query.parameters});}tmpResult.executed=true;}catch(pError){tmpResult.error=pError;tmpResult.value=false;tmpResult.executed=true;}return fCallback();};var Count=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;pQuery.setDialect('SQLite').buildCountQuery();var tmpQueryBody=fixDateFunctions(pQuery.query.body);coerceParameters(pQuery.query.parameters);if(pQuery.logLevel>0){_Fable.log.trace(tmpQueryBody,pQuery.query.parameters);}try{var tmpDB=getDB();if(!tmpDB){tmpResult.error=new Error('No SQLite database connection available.');tmpResult.executed=true;return fCallback();}var tmpStatement=tmpDB.prepare(tmpQueryBody);var tmpRows=tmpStatement.all(pQuery.query.parameters);tmpResult.executed=true;tmpResult.error=null;tmpResult.value=false;try{tmpResult.value=tmpRows[0].RowCount;}catch(pErrorGettingRowcount){_Fable.log.warn('Error getting rowcount during count query',{Body:tmpQueryBody,Parameters:pQuery.query.parameters});}}catch(pError){tmpResult.error=pError;tmpResult.value=false;tmpResult.executed=true;}return fCallback();};var tmpNewProvider={marshalRecordFromSourceToObject:marshalRecordFromSourceToObject,Create:Create,Read:Read,Update:Update,Delete:Delete,Undelete:Undelete,Count:Count,getProvider:getProvider,providerCreatesSupported:true,new:createNew};return tmpNewProvider;}return createNew();};module.exports=new MeadowProvider();},{}],121:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
3470
3464
|
/**
|
|
3471
3465
|
* @license MIT
|
|
3472
3466
|
* @author <steven@velozo.com>
|
|
@@ -5927,8 +5921,9 @@ if(typeof pRequest.body!=='object'){return fStageComplete(this.ErrorHandler.getE
|
|
|
5927
5921
|
tmpRequestState.Record=pRecordToUpsert;// This operation will be create only if there is no GUID or ID in the record bundle
|
|
5928
5922
|
tmpRequestState.UpsertCreateOnly=true;// See if there is a default identifier or default GUIdentifier
|
|
5929
5923
|
if(typeof tmpRequestState.Record[this.DAL.defaultGUIdentifier]!=='undefined'&&tmpRequestState.Record[this.DAL.defaultGUIdentifier].length>0){tmpRequestState.Query.addFilter(this.DAL.defaultGUIdentifier,tmpRequestState.Record[this.DAL.defaultGUIdentifier]);tmpRequestState.UpsertCreateOnly=false;}if(typeof tmpRequestState.Record[this.DAL.defaultIdentifier]!=='undefined'&&tmpRequestState.Record[this.DAL.defaultIdentifier]>0){tmpRequestState.Query.addFilter(this.DAL.defaultIdentifier,tmpRequestState.Record[this.DAL.defaultIdentifier]);tmpRequestState.UpsertCreateOnly=false;}return fStageComplete();},fStageComplete=>{if(tmpRequestState.UpsertCreateOnly){tmpRequestState.Operation='Create';doCreate.call(this,tmpRequestState.Record,pRequest,tmpRequestState,pResponse,fStageComplete);}else{this.DAL.doRead(tmpRequestState.Query,(pError,pQuery,pRecord)=>{if(pError){if(typeof pError=='string'){return fStageComplete(this.ErrorHandler.getError(pError,500));}else{return fStageComplete(pError);}}else if(!pRecord){// Record not found -- do a create.
|
|
5930
|
-
tmpRequestState.Operation='Create';doCreate.call(this,tmpRequestState.Record,pRequest,tmpRequestState,pResponse,fStageComplete);}else{// Set the default ID in the passed-in record if it doesn't exist
|
|
5931
|
-
|
|
5924
|
+
tmpRequestState.Operation='Create';doCreate.call(this,tmpRequestState.Record,pRequest,tmpRequestState,pResponse,fStageComplete);}else{// Set the default ID in the passed-in record if it doesn't exist
|
|
5925
|
+
// or is zero (which is never a valid ID).
|
|
5926
|
+
if(!tmpRequestState.Record.hasOwnProperty(this.DAL.defaultIdentifier)||!tmpRequestState.Record[this.DAL.defaultIdentifier]){tmpRequestState.Record[this.DAL.defaultIdentifier]=pRecord[this.DAL.defaultIdentifier];}// If the found record does not match the passed ID --- what the heck?!
|
|
5932
5927
|
if(tmpRequestState.Record[this.DAL.defaultIdentifier]!=pRecord[this.DAL.defaultIdentifier]){return fStageComplete(this.ErrorHandler.getError('Record IDs do not match',500));}// Record found -- do an update. Use the cached record, though.
|
|
5933
5928
|
tmpRequestState.Operation='Update';doUpdate.call(this,tmpRequestState.Record,pRequest,tmpRequestState,pResponse,fStageComplete,pRecord);}});}},fStageComplete=>{// Now stuff the record into the upserted array
|
|
5934
5929
|
if(tmpRequestState.Operation=='Update'){if(tmpRequestState.RecordUpdateError){return fStageComplete(tmpRequestState.RecordUpdateErrorObject);}if(tmpRequestState.UpdatedRecords.length<1){return fStageComplete(this.ErrorHandler.getError('Unknown record update failure - no updated records returned.',500));}tmpRequestState.Record=tmpRequestState.UpdatedRecords[0];}else if(tmpRequestState.Operation=='Create'){if(tmpRequestState.RecordCreateError){return fStageComplete(tmpRequestState.RecordCreateErrorObject);}if(tmpRequestState.CreatedRecords.length<1){return fStageComplete(this.ErrorHandler.getError('Unknown record create failure - no created records returned.',500));}tmpRequestState.Record=tmpRequestState.CreatedRecords[0];}else{return fStageComplete(this.ErrorHandler.getError('Unkknown record upsert failure = no records returned from doUpsert.',500));}tmpRequestState.ParentRequestState.UpsertedRecords.push(tmpRequestState.Record);return fStageComplete();}],pError=>{if(pError){tmpRequestState.Record.Error=pError;}return fCallback();});};module.exports=doUpsert;},{"../create/Meadow-Operation-Create.js":202,"../update/Meadow-Operation-Update.js":219}]},{},[190])(190);});
|