UNPKG

jaydata

Version:

Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)

127 lines (115 loc) 5.43 kB
'use strict'; var _core = require('../../../../core.js'); var _core2 = _interopRequireDefault(_core); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _core.$C)('$data.storageProviders.oData.oDataOrderCompiler', _core2.default.storageProviders.oData.oDataWhereCompiler, null, { constructor: function constructor(provider) { this.provider = provider; this.entityContext = provider.context; }, compile: function compile(expression, context) { this.Visit(expression, context); }, VisitOrderExpression: function VisitOrderExpression(expression, context) { var orderContext = { data: "" }; this.Visit(expression.selector, orderContext); if (context['$orderby']) { context['$orderby'] += ','; } else { context['$orderby'] = ''; } context['$orderby'] += orderContext.data + (expression.nodeType == _core2.default.Expressions.ExpressionType.OrderByDescending ? " desc" : ""); }, VisitParametricQueryExpression: function VisitParametricQueryExpression(expression, context) { this.Visit(expression.expression, context); }, VisitEntityFieldExpression: function VisitEntityFieldExpression(expression, context) { this.Visit(expression.source, context); this.Visit(expression.selector, context); }, VisitComplexTypeExpression: function VisitComplexTypeExpression(expression, context) { this.Visit(expression.source, context); this.Visit(expression.selector, context); context.data += "/"; }, VisitEntitySetExpression: function VisitEntitySetExpression(expression, context) { if (expression.selector instanceof _core2.default.Expressions.AssociationInfoExpression) { this.Visit(expression.source, context); this.Visit(expression.selector, context); } }, VisitAssociationInfoExpression: function VisitAssociationInfoExpression(expression, context) { var propName = expression.associationInfo.FromPropertyName; if (this.entityContext._storageModel.getStorageModel(expression.associationInfo.FromType.inheritsFrom)) { propName = expression.associationInfo.FromType.fullName + "/" + propName; } context.data += propName + '/'; }, VisitEntityExpression: function VisitEntityExpression(expression, context) { this.Visit(expression.source, context); this.Visit(expression.selector, context); }, VisitMemberInfoExpression: function VisitMemberInfoExpression(expression, context) { var propName = expression.memberName; if (this.entityContext._storageModel.getStorageModel(expression.memberDefinition.definedBy.inheritsFrom)) { propName = expression.memberDefinition.definedBy.fullName + "/" + propName; } context.data += propName; }, VisitEntityFieldOperationExpression: function VisitEntityFieldOperationExpression(expression, context) { _core.Guard.requireType("expression.operation", expression.operation, _core2.default.Expressions.MemberInfoExpression); //TODO refactor! var opDef = expression.operation.memberDefinition; var opName = opDef.mapTo || opDef.name; context.data += opName; context.data += "("; var paramCounter = 0; var params = opDef.parameters || [{ name: "@expression" }]; var args = params.map(function (item, index) { if (item.name === "@expression") { return expression.source; } else { return expression.parameters[paramCounter++]; }; }); args.forEach(function (arg, index) { if (index > 0) { context.data += ","; }; this.Visit(arg, context); }, this); context.data += ")"; }, VisitEntityFunctionOperationExpression: function VisitEntityFunctionOperationExpression(expression, context) { _core.Guard.requireType("expression.operation", expression.operation, _core2.default.Expressions.MemberInfoExpression); this.Visit(expression.source, context); //TODO refactor! var opDef = expression.operation.memberDefinition; var opName = opDef.mapTo || opDef.name; context.data += opName; context.data += "("; var paramCounter = 0; var params = opDef.method.params || [{ name: "@expression" }]; var args = params.map(function (item, index) { if (item.name === "@expression") { return expression.source; } else { return expression.parameters[paramCounter++]; }; }); var i = 0; args.forEach(function (arg, index) { if (arg === undefined || arg instanceof _core2.default.Expressions.ConstantExpression && typeof arg.value === 'undefined') return; if (i > 0) { context.data += ","; }; i++; context.data += params[index].name + '='; this.Visit(arg, context); }, this); context.data += ")"; }, VisitContextFunctionOperationExpression: function VisitContextFunctionOperationExpression(expression, context) { return this.VisitEntityFunctionOperationExpression(expression, context); } });