control-freak-ide/Code/client/build/dgrid/dstore/QueryMethod.js.uncompressed.js
plastic-hub-dev-node-saturn 538369cff7 latest
2021-05-12 18:35:18 +02:00

69 lines
2.6 KiB
JavaScript

define("dstore/QueryMethod", [], function () {
/*=====
var __QueryMethodArgs = {
// type: String
// The type of the query. This identifies the query's type in the query log
// and the name of the corresponding query engine method.
// normalizeArguments: Function?
// A function that normalizes arguments for consumption by a query engine
// applyQuery: Function?
// A function that takes the query's new subcollection and the query's log entry
// and applies it to the new subcollection. This is useful for collections that need
// to both declare and implement new query methods.
// querierFactory: Function?
// A factory function that provides a default querier implementation to use when
// a collection does not define its own querier factory method for this query type.
};
=====*/
return function QueryMethod(/*__QueryMethodArgs*/ kwArgs) {
// summary:
// The constructor for a dstore collection query method
// description:
// This is the constructor for a collection query method. It encapsulates the following:
// * Creating a new subcollection for the query results
// * Logging the query in the collection's `queryLog`
// * Normalizing query arguments
// * Applying the query engine
// kwArgs:
// The properties that define the query method
// returns: Function
// Returns a function that takes query arguments and returns a new collection with
// the query associated with it.
var type = kwArgs.type,
normalizeArguments = kwArgs.normalizeArguments,
applyQuery = kwArgs.applyQuery,
defaultQuerierFactory = kwArgs.querierFactory;
return function () {
// summary:
// A query method whose arguments are determined by the query type
// returns: dstore/Collection
// A collection representing the query results
var originalArguments = Array.prototype.slice.call(arguments),
normalizedArguments = normalizeArguments
? normalizeArguments.apply(this, originalArguments)
: originalArguments,
logEntry = {
type: type,
arguments: originalArguments,
normalizedArguments: normalizedArguments
},
querierFactory = this._getQuerierFactory(type) || defaultQuerierFactory;
if (querierFactory) {
// Call the query factory in store context to support things like
// mapping a filter query's string argument to a custom filter method on the collection
logEntry.querier = querierFactory.apply(this, normalizedArguments);
}
var newCollection = this._createSubCollection({
queryLog: this.queryLog.concat(logEntry)
});
return applyQuery ? applyQuery.call(this, newCollection, logEntry) : newCollection;
};
};
});