meadow-endpoints 4.0.21 → 4.0.22
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/indoctrinate_content_staging/Indoctrinate-Catalog-AppData.json +1187 -1148
- package/dist/meadow-endpoints.js +79 -10
- package/dist/meadow-endpoints.js.map +1 -1
- package/dist/meadow-endpoints.min.js +9 -4
- package/dist/meadow-endpoints.min.js.map +1 -1
- package/docs/_brand.json +18 -0
- package/docs/_version.json +3 -3
- package/docs/index.html +6 -7
- package/docs/retold-catalog.json +1 -13
- package/docs/retold-keyword-index.json +1 -1
- package/package.json +4 -4
- package/docs/css/docuserve.css +0 -327
package/dist/meadow-endpoints.js
CHANGED
|
@@ -4546,7 +4546,7 @@ libAsyncWaterfall([// Step 1: Get the record countfrom the data source
|
|
|
4546
4546
|
function(fStageComplete){if(pMeadow.rawQueries.checkQuery('Count')){pQuery.parameters.queryOverride=pMeadow.rawQueries.getQuery('Count');}pMeadow.provider.Count(pQuery,function(){fStageComplete(pQuery.result.error,pQuery);});},// Step 2: Validate the resulting value
|
|
4547
4547
|
function(pQuery,fStageComplete){// Check if query time exceeded threshold in settings. Log if slow.
|
|
4548
4548
|
var tmpProfileTime=new Date().getTime()-tmpProfileStart.getTime();if(tmpProfileTime>(pMeadow.fable.settings['QueryThresholdWarnTime']||200)){pMeadow.logSlowQuery(tmpProfileTime,pQuery);}if(typeof pQuery.parameters.result.value!=='number'){// The return value is a number.. something is wrong.
|
|
4549
|
-
return fStageComplete('Count did not return valid results.',pQuery,false);}fStageComplete(pQuery.result.error,pQuery,pQuery.result.value);}],function(pError,pQuery,pCount){if(pError){pMeadow.fable.log.warn('Error during the count waterfall',{Error:pError,Message:pError.message,Query:pQuery.query});}fCallBack(pError,pQuery,pCount);});return pMeadow;};module.exports=meadowBehaviorCount;},{"async/waterfall":33}],219:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
4549
|
+
return fStageComplete('Count did not return valid results.',pQuery,false);}fStageComplete(pQuery.result.error,pQuery,pQuery.result.value);}],function(pError,pQuery,pCount){if(pError){pMeadow.fable.log.warn('Error during the count waterfall',{Error:pError,Message:pError.message,Query:pQuery.query});}fCallBack(pError,pQuery,pCount);});return pMeadow;};module.exports=meadowBehaviorCount;},{"async/waterfall":33}],219:[function(require,module,exports){(function(setImmediate){(function(){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
4550
4550
|
/**
|
|
4551
4551
|
* @license MIT
|
|
4552
4552
|
* @author <steven@velozo.com>
|
|
@@ -4570,7 +4570,11 @@ function(fStageComplete){// Reject missing records here — the old Step 0 owned
|
|
|
4570
4570
|
// error and downstream steps assume pQuery.query.records[0]
|
|
4571
4571
|
// exists. Same string and trailing-args shape as before so
|
|
4572
4572
|
// existing callers' expectations are preserved.
|
|
4573
|
-
if(!pQuery.query.records||!pQuery.query.records[0]){return fStageComplete('No record submitted',pQuery,false);}libRenameSoftDeletedConflicts(pMeadow,pQuery.query.records[0],function(pPreflightError){if(pPreflightError){pMeadow.fable.log.warn('Error during the unique-constraint pre-flight',{Error:pPreflightError,Message:pPreflightError&&pPreflightError.message});return fStageComplete
|
|
4573
|
+
if(!pQuery.query.records||!pQuery.query.records[0]){return fStageComplete('No record submitted',pQuery,false);}libRenameSoftDeletedConflicts(pMeadow,pQuery.query.records[0],function(pPreflightError){if(pPreflightError){pMeadow.fable.log.warn('Error during the unique-constraint pre-flight',{Error:pPreflightError,Message:pPreflightError&&pPreflightError.message});return setImmediate(fStageComplete,pPreflightError,pQuery,false);}// Defer via setImmediate so synchronous providers (node:sqlite,
|
|
4574
|
+
// previously better-sqlite3) cannot stack-accumulate frames
|
|
4575
|
+
// across a long synchronous chain of Creates — every record's
|
|
4576
|
+
// pre-flight returns to the event loop before the INSERT runs.
|
|
4577
|
+
return setImmediate(fStageComplete);});},// Step 1: Create the record in the data source
|
|
4574
4578
|
function(fStageComplete){if(!pQuery.query.IDUser){// The user ID is not already set, set it magically.
|
|
4575
4579
|
if(typeof pQuery.userID==='number'&&pQuery.userID%1===0&&pQuery.userID>=0){pQuery.query.IDUser=pQuery.userID;}else{pQuery.query.IDUser=pMeadow.userIdentifier;}}// Merge in the default record with the passed-in record for completeness
|
|
4576
4580
|
pQuery.query.records[0]=pMeadow.fable.Utility.extend({},pMeadow.schemaFull.defaultObject,pQuery.query.records[0]);// Create override is too complex ... punting for now
|
|
@@ -4582,7 +4586,7 @@ if(pQuery.parameters.result.value===false){return fStageComplete('Creation faile
|
|
|
4582
4586
|
function(pQuery,pIDRecord,fStageComplete){var tmpQueryRead=pQuery.clone().addFilter(pMeadow.defaultIdentifier,pIDRecord).setDisableDeleteTracking(pQuery.parameters.query.disableDeleteTracking);//if delete tracking is disabled, we need to disable it on this Read operation
|
|
4583
4587
|
if(pMeadow.rawQueries.checkQuery('Read')){tmpQueryRead.parameters.queryOverride=pMeadow.rawQueries.getQuery('Read');}pMeadow.provider.Read(tmpQueryRead,function(){fStageComplete(tmpQueryRead.result.error,pQuery,tmpQueryRead);});},// Step 4: Marshal the record into a POJO
|
|
4584
4588
|
function(pQuery,pQueryRead,fStageComplete){// Ensure there is not at least one record returned
|
|
4585
|
-
if(pQueryRead.parameters.result.value.length<1){return fStageComplete('No record found after create.',pQuery,pQueryRead,false);}var tmpRecord=pMeadow.marshalRecordFromSourceToObject(pQueryRead.result.value[0]);fStageComplete(pQuery.result.error,pQuery,pQueryRead,tmpRecord);}],function(pError,pQuery,pQueryRead,pRecord){if(pError){pMeadow.fable.log.warn('Error during the create waterfall',{Error:pError,Message:pError.message,Query:pQuery.query,Stack:pError.stack});}fCallBack(pError,pQuery,pQueryRead,pRecord);});return pMeadow;};module.exports=meadowBehaviorCreate;},{"./Meadow-CollisionRename.js":217,"async/waterfall":33}],220:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
4589
|
+
if(pQueryRead.parameters.result.value.length<1){return fStageComplete('No record found after create.',pQuery,pQueryRead,false);}var tmpRecord=pMeadow.marshalRecordFromSourceToObject(pQueryRead.result.value[0]);fStageComplete(pQuery.result.error,pQuery,pQueryRead,tmpRecord);}],function(pError,pQuery,pQueryRead,pRecord){if(pError){pMeadow.fable.log.warn('Error during the create waterfall',{Error:pError,Message:pError.message,Query:pQuery.query,Stack:pError.stack});}fCallBack(pError,pQuery,pQueryRead,pRecord);});return pMeadow;};module.exports=meadowBehaviorCreate;}).call(this);}).call(this,require("timers").setImmediate);},{"./Meadow-CollisionRename.js":217,"async/waterfall":33,"timers":344}],220:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
4586
4590
|
/**
|
|
4587
4591
|
* @license MIT
|
|
4588
4592
|
* @author <steven@velozo.com>
|
|
@@ -4663,7 +4667,7 @@ return fStageComplete('No record found to update!',pQueryRead.result,false);}var
|
|
|
4663
4667
|
/**
|
|
4664
4668
|
* @license MIT
|
|
4665
4669
|
* @author <steven@velozo.com>
|
|
4666
|
-
*/var MeadowProvider=function(){function createNew(pFable){// If a valid Fable object isn't passed in, return a constructor
|
|
4670
|
+
*/var libAsyncEachSeries=require('async/eachSeries');var MeadowProvider=function(){function createNew(pFable){// If a valid Fable object isn't passed in, return a constructor
|
|
4667
4671
|
if(typeof pFable!=='object'){return{new:createNew};}var _Fable=pFable;var _GlobalLogLevel=0;if(_Fable.settings.ArrayStorage){_GlobalLogLevel=_Fable.settings.ArrayStorage.GlobalLogLevel||0;}if(!_Fable.hasOwnProperty('ALASQL')){// This is going to be problematic.
|
|
4668
4672
|
_Fable.log.fatal('Meadow is trying to perform queries without a valid [Fable.ALASQL] object. See the documentation for how to initialize one.');return false;}var libALASQL=_Fable.ALASQL;var _Scope='Unknown_Meadow_ALASQL_Scope';var _Schema={};var _DefaultIdentifier='ID';var _DefaultGUIDentifier='GUID';var setSchema=(pScope,pSchema,pDefaultIdentifier,pDefaultGUIdentifier)=>{_Scope=pScope;_Schema=pSchema;_DefaultIdentifier=pDefaultIdentifier;_DefaultGUIDentifier=pDefaultGUIdentifier;return this;};// Create a table for this schema on the fly
|
|
4669
4673
|
// This is ripped off from https://github.com/stevenvelozo/stricture/blob/master/source/Stricture-Generate-MySQL.js
|
|
@@ -4701,7 +4705,24 @@ var Read=function(pQuery,fCallback){var tmpResult=pQuery.parameters.result;check
|
|
|
4701
4705
|
* Import: true (boolean -- whether or not to import them using the DAL)
|
|
4702
4706
|
* Data: [] (optional array of records, one object each)
|
|
4703
4707
|
* }
|
|
4704
|
-
|
|
4708
|
+
*//**
|
|
4709
|
+
* Construct an ALASQL-backed meadow from a JS object array.
|
|
4710
|
+
*
|
|
4711
|
+
* Signatures:
|
|
4712
|
+
* constructFromObject(pParameters) — bindObject path only;
|
|
4713
|
+
* returns meadow synchronously
|
|
4714
|
+
* constructFromObject(pParameters, fCallback) — Import path (doCreate
|
|
4715
|
+
* per record); meadow + records
|
|
4716
|
+
* delivered via fCallback
|
|
4717
|
+
*
|
|
4718
|
+
* The Import path drives `doCreate` per record, which is no longer
|
|
4719
|
+
* guaranteed to complete in the same tick (Meadow-Create's pre-flight
|
|
4720
|
+
* yields via setImmediate to keep bulk-create chains stack-safe on
|
|
4721
|
+
* synchronous providers). Callers that need the imported records
|
|
4722
|
+
* queryable on return must pass a callback. Without a callback the
|
|
4723
|
+
* Import path is rejected — synchronous fire-and-forget imports were
|
|
4724
|
+
* a latent footgun and are no longer supported.
|
|
4725
|
+
*/var constructFromObject=(pParameters,fCallback)=>{if(typeof pParameters!=='object'||typeof pParameters.Meadow!=='object')return false;// I know there are better ways to do this, but for now I want to keep it very manual
|
|
4705
4726
|
if(!(typeof pParameters.Scope==='string'))pParameters.Scope='DATA';if(!(typeof pParameters.ObjectPrototype==='object'))pParameters.ObjectPrototype={};if(!(typeof pParameters.AuditData==='boolean'))pParameters.AuditData=true;if(!(typeof pParameters.Import==='boolean'))pParameters.Import=true;if(!Array.isArray(pParameters.Data))pParameters.Data=[];// Construct a meadow
|
|
4706
4727
|
var tmpMeadow=pParameters.Meadow.new(_Fable,pParameters.Scope).setProvider('ALASQL');var tmpSchema=[];var tmpDefaultIdentifier;if(pParameters.AuditData){// Add the audit fields to the schema
|
|
4707
4728
|
tmpDefaultIdentifier='ID'+pParameters.Scope;tmpSchema.push({Column:tmpDefaultIdentifier,Type:"AutoIdentity"});tmpSchema.push({Column:"GU"+tmpDefaultIdentifier,Type:"AutoGUID"});tmpSchema.push({Column:"CreateDate",Type:"CreateDate"});tmpSchema.push({Column:"CreatingIDUser",Type:"CreateIDUser"});tmpSchema.push({Column:"UpdateDate",Type:"UpdateDate"});tmpSchema.push({Column:"UpdatingIDUser",Type:"UpdateIDUser"});tmpSchema.push({Column:"DeleteDate",Type:"DeleteDate"});tmpSchema.push({Column:"DeletingIDUser",Type:"DeleteIDUser"});tmpSchema.push({Column:"Deleted",Type:"Deleted"});}// Now add the fields from the object in
|
|
@@ -4710,9 +4731,11 @@ switch(typeof pParameters.ObjectPrototype[tmpProperty]){case"undefined":case"obj
|
|
|
4710
4731
|
break;case"boolean":tmpSchema.push({Column:tmpProperty,Type:"Boolean"});break;// Because we can't tell the difference between floating point and not
|
|
4711
4732
|
case"number":case"string":tmpSchema.push({Column:tmpProperty,Type:"Text"});break;default:break;}if(tmpAdded&&typeof tmpDefaultIdentifier==='undefined')// Just use the first property of the prototype object as the default identifier
|
|
4712
4733
|
tmpDefaultIdentifier=tmpProperty;}tmpMeadow.setSchema(tmpSchema);if(typeof tmpDefaultIdentifier==='undefined')tmpMeadow.setDefaultIdentifier(tmpDefaultIdentifier);// Now import the data
|
|
4713
|
-
if(pParameters.Import){
|
|
4714
|
-
|
|
4715
|
-
|
|
4734
|
+
if(pParameters.Import){if(typeof fCallback!=='function'){_Fable.log.error('Meadow-Provider-ALASQL: constructFromObject called with Import=true but no callback — doCreate is no longer synchronous, callers must await record import.');return false;}libAsyncEachSeries(pParameters.Data,function(pRecord,fNext){tmpMeadow.doCreate(tmpMeadow.query.clone().addRecord(pRecord),function(pError,pQuery,pQueryRead,pCreated){if(pError){_Fable.log.warn('Meadow-Provider-ALASQL: auto-import doCreate failed',{Error:pError,Record:pRecord});}else{_Fable.log.trace('Auto imported record',pCreated);}// Errors are logged but not propagated — the historical
|
|
4735
|
+
// fire-and-forget loop swallowed them, preserve that
|
|
4736
|
+
// shape so partial imports still return a usable meadow.
|
|
4737
|
+
return fNext();});},function(){return fCallback(null,tmpMeadow);});return tmpMeadow;}// Just assign the object
|
|
4738
|
+
tmpMeadow.provider.bindObject(pParameters.Data);if(typeof fCallback==='function'){fCallback(null,tmpMeadow);}return tmpMeadow;};var tmpNewProvider={setSchema:setSchema,marshalRecordFromSourceToObject:marshalRecordFromSourceToObject,constructFromObject:constructFromObject,bindObject:bindObject,Create:Create,Read:Read,Update:Update,Delete:Delete,Undelete:Undelete,Count:Count,getProvider:{},providerCreatesSupported:false,new:createNew};return tmpNewProvider;}return createNew();};module.exports=new MeadowProvider();},{"async/eachSeries":19}],226:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
4716
4739
|
/**
|
|
4717
4740
|
* @license MIT
|
|
4718
4741
|
* @author <steven@velozo.com>
|
|
@@ -5095,12 +5118,58 @@ return pQueryBody.replace(/NOW\(\d*\)/g,"datetime('now')");};/**
|
|
|
5095
5118
|
*/var coerceParameters=function(pParams){if(typeof pParams!=='object'||pParams===null){return pParams;}var tmpKeys=Object.keys(pParams);for(var i=0;i<tmpKeys.length;i++){var tmpValue=pParams[tmpKeys[i]];if(Array.isArray(tmpValue)){// SQLite (better-sqlite3) cannot bind arrays.
|
|
5096
5119
|
// For single-element arrays (e.g. from FBL~Field~LT~10),
|
|
5097
5120
|
// unwrap to the scalar value.
|
|
5098
|
-
if(tmpValue.length===1){pParams[tmpKeys[i]]=tmpValue[0];}}else if(typeof tmpValue==='boolean'){pParams[tmpKeys[i]]=tmpValue?1:0;}else if(typeof tmpValue==='undefined'){pParams[tmpKeys[i]]=null;}}return pParams;}
|
|
5121
|
+
if(tmpValue.length===1){pParams[tmpKeys[i]]=tmpValue[0];}}else if(typeof tmpValue==='boolean'){pParams[tmpKeys[i]]=tmpValue?1:0;}else if(typeof tmpValue==='undefined'){pParams[tmpKeys[i]]=null;}}return pParams;};/**
|
|
5122
|
+
* Filter a named-parameters object down to only those keys whose
|
|
5123
|
+
* `:name` form appears in the SQL body.
|
|
5124
|
+
*
|
|
5125
|
+
* node:sqlite is strict about unknown named parameters — passing
|
|
5126
|
+
* a key the prepared statement doesn't reference throws
|
|
5127
|
+
* `Unknown named parameter '<name>'`. better-sqlite3 was lenient
|
|
5128
|
+
* about extras, so this regressed silently when
|
|
5129
|
+
* meadow-connection-sqlite switched to node:sqlite. It matters
|
|
5130
|
+
* whenever Meadow.rawQueries.loadQuery installs an override SQL
|
|
5131
|
+
* whose placeholders are a strict subset of meadow's auto-
|
|
5132
|
+
* generated params (filter columns, soft-delete tracking,
|
|
5133
|
+
* AutoGUID conflict-check), but the filter is cheap and applied
|
|
5134
|
+
* uniformly — also protects any future case where the auto-built
|
|
5135
|
+
* SQL and the params dict drift apart.
|
|
5136
|
+
*
|
|
5137
|
+
* Approach mirrors `convertNamedToPositional` in the PostgreSQL
|
|
5138
|
+
* provider: walk the SQL with /:([A-Za-z_][A-Za-z0-9_]*)/g, keep
|
|
5139
|
+
* names that exist in the params dict, leave the literal alone
|
|
5140
|
+
* otherwise (handles `::typecast`-style sequences without
|
|
5141
|
+
* tripping). Over-matches inside string literals are harmless
|
|
5142
|
+
* because we only ever *keep* params — never invent them.
|
|
5143
|
+
*/var filterUsedNamedParams=function(pQueryBody,pNamedParams){if(typeof pNamedParams!=='object'||pNamedParams===null){return pNamedParams;}if(typeof pQueryBody!=='string'){return pNamedParams;}var tmpUsed={};var tmpPattern=/:([A-Za-z_][A-Za-z0-9_]*)/g;var tmpMatch;while((tmpMatch=tmpPattern.exec(pQueryBody))!==null){var tmpName=tmpMatch[1];if(Object.prototype.hasOwnProperty.call(pNamedParams,tmpName)){tmpUsed[tmpName]=pNamedParams[tmpName];}}return tmpUsed;};// The Meadow marshaller passes in the Schema as the third parameter for JSON/JSONProxy deserialization.
|
|
5099
5144
|
var marshalRecordFromSourceToObject=function(pObject,pRecord,pSchema){// Build lookups for JSON columns (only if schema is provided)
|
|
5100
5145
|
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
|
|
5101
5146
|
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
|
|
5102
5147
|
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
|
|
5103
|
-
}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)
|
|
5148
|
+
}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);// Filter to keys actually referenced as :name in the SQL —
|
|
5149
|
+
// node:sqlite is strict about unknown named parameters, and
|
|
5150
|
+
// meadow auto-generates filter/Deleted/AutoGUID params that
|
|
5151
|
+
// a rawQueries override may not reference.
|
|
5152
|
+
var tmpBindParams=filterUsedNamedParams(tmpQueryBody,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(tmpBindParams);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);// Filter to keys actually referenced as :name in the SQL —
|
|
5153
|
+
// node:sqlite is strict about unknown named parameters, and
|
|
5154
|
+
// meadow auto-generates filter/Deleted/AutoGUID params that
|
|
5155
|
+
// a rawQueries override may not reference.
|
|
5156
|
+
var tmpBindParams=filterUsedNamedParams(tmpQueryBody,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(tmpBindParams);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);// Filter to keys actually referenced as :name in the SQL —
|
|
5157
|
+
// node:sqlite is strict about unknown named parameters, and
|
|
5158
|
+
// meadow auto-generates filter/Deleted/AutoGUID params that
|
|
5159
|
+
// a rawQueries override may not reference.
|
|
5160
|
+
var tmpBindParams=filterUsedNamedParams(tmpQueryBody,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(tmpBindParams);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);// Filter to keys actually referenced as :name in the SQL —
|
|
5161
|
+
// node:sqlite is strict about unknown named parameters, and
|
|
5162
|
+
// meadow auto-generates filter/Deleted/AutoGUID params that
|
|
5163
|
+
// a rawQueries override may not reference.
|
|
5164
|
+
var tmpBindParams=filterUsedNamedParams(tmpQueryBody,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(tmpBindParams);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);// Filter to keys actually referenced as :name in the SQL —
|
|
5165
|
+
// node:sqlite is strict about unknown named parameters, and
|
|
5166
|
+
// meadow auto-generates filter/Deleted/AutoGUID params that
|
|
5167
|
+
// a rawQueries override may not reference.
|
|
5168
|
+
var tmpBindParams=filterUsedNamedParams(tmpQueryBody,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(tmpBindParams);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);// Filter to keys actually referenced as :name in the SQL —
|
|
5169
|
+
// node:sqlite is strict about unknown named parameters, and
|
|
5170
|
+
// meadow auto-generates filter/Deleted/AutoGUID params that
|
|
5171
|
+
// a rawQueries override may not reference.
|
|
5172
|
+
var tmpBindParams=filterUsedNamedParams(tmpQueryBody,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(tmpBindParams);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();},{}],236:[function(require,module,exports){// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system
|
|
5104
5173
|
/**
|
|
5105
5174
|
* @license MIT
|
|
5106
5175
|
* @author <steven@velozo.com>
|