jaydata
Version:
Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)
107 lines (96 loc) • 5.27 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _index = require('../../../TypeSystem/index.js');
var _index2 = _interopRequireDefault(_index);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(0, _index.$C)('$data.Expressions.EntitySetExpression', _index2.default.Expressions.ExpressionNode, null, {
constructor: function constructor(source, selector, params, instance) {
///<signature>
///<param name="source" type="$data.Expressions.EntityExpression" />
///<param name="selector" type="$data.Expressions.MemberInfoExpression" />
///</signature>
///<signature>
///<param name="source" type="$data.Expressions.EntityContextExpression" />
///<param name="selector" type="$data.Expressions.MemberInfoExpression" />
///</signature>
///<signature>
///<param name="source" type="$data.Expressions.EntitySetExpression" />
///<param name="selector" type="$data.Expressions.ParametricQueryExpression" />
///</signature>
///<signature>
///<param name="source" type="$data.Expressions.EntitySetExpression" />
///<param name="selector" type="$data.Expressions.CodeExpression" />
///</signature>
_index.Guard.requireType("source", source, [_index2.default.Expressions.EntityContextExpression, _index2.default.Expressions.EntitySetExpression]);
_index.Guard.requireType("selector", source, [_index2.default.Expressions.MemberInfoExpression, _index2.default.Expressions.CodeExpression, _index2.default.Expressions.ParametricQueryExpression]);
this.source = source;
this.selector = selector;
this.params = params;
//Object.defineProperty(this, "instance", { value: instance, enumerable: false, writable: true });
this.instance = instance;
function findContext() {
//TODO: use source from function parameter and return a value at the end of the function
var r = source;
while (r) {
if (r instanceof _index2.default.Expressions.EntityContextExpression) {
return r;
}
r = r.source;
}
}
///TODO!!!
this.storage_type = {};
var c = findContext();
switch (true) {
case this.source instanceof _index2.default.Expressions.EntityContextExpression:
_index.Guard.requireType("selector", selector, _index2.default.Expressions.MemberInfoExpression);
this.elementType = selector.memberDefinition.elementType;
this.storageModel = c.instance._storageModel.getStorageModel(this.elementType);
break;
case this.source instanceof _index2.default.Expressions.EntityExpression:
_index.Guard.requireType("selector", selector, _index2.default.Expressions.AssociationInfoExpression);
this.elementType = selector.associationInfo.ToType;
this.storageModel = c.instance._storageModel.getStorageModel(this.elementType);
break;
case this.source instanceof _index2.default.Expressions.EntitySetExpression:
if (selector instanceof _index2.default.Expressions.AssociationInfoExpression) {
this.elementType = selector.associationInfo.ToType, this.storageModel = c.instance._storageModel.getStorageModel(selector.associationInfo.ToType);
} else {
this.elementType = this.source.elementType;
this.storageModel = this.source.storageModel;
}
break;
case this.source instanceof _index2.default.Expressions.ServiceOperationExpression:
this.elementType = this.source.elementType; //?????????
this.storageModel = this.source.storageModel;
break;
case this.source instanceof _index2.default.Expressions.FindExpression:
this.elementType = this.source.resultType;
this.storageModel = c.instance._storageModel.getStorageModel(this.elementType);
break;
default:
_index.Guard.raise("take and skip must be the last expressions in the chain!");
//Guard.raise("Unknown source type for EntitySetExpression: " + this.getType().name);
break;
}
// suspicious code
/*if (this.source instanceof $data.Expressions.EntitySetExpression) {
//TODO: missing operation
}*/
//EntityTypeInfo
},
getMemberDefinition: function getMemberDefinition(name) {
var memdef = this.elementType.getMemberDefinition(name);
if (!memdef) {
_index.Guard.raise(new _index.Exception("Unknown member " + name + " on type " + this.entityType.name, "MemberNotFound"));
};
memdef.storageModel = this.storageModel;
return memdef;
},
instance: { enumerable: false },
nodeType: { value: _index2.default.Expressions.ExpressionType.EntitySet, enumerable: true }
});
exports.default = _index2.default;
module.exports = exports['default'];