Skip to content
This repository was archived by the owner on Apr 11, 2023. It is now read-only.

Commit 8d78362

Browse files
committed
UPDATE acorn; ADD: ArrowFunction support in queryable methods; ADD: ArrowFunction support in includes;
1 parent 1f175a4 commit 8d78362

File tree

7 files changed

+67
-23
lines changed

7 files changed

+67
-23
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@
2323
"url": "http://jaydata.org"
2424
},
2525
"dependencies": {
26-
"acorn": "^2.6.4",
26+
"acorn": "^3.0.2",
2727
"atob": "^2.0.0",
2828
"btoa": "^1.1.2",
2929
"dot": "^1.0.3",
30-
"jaydata-odatajs": "^4.0.0",
30+
"jaydata-dynamic-metadata": "^0.0.4",
3131
"jaydata-error-handler": "^0.0.1",
32+
"jaydata-odatajs": "^4.0.0",
3233
"jaydata-promise-handler": "^0.0.1",
33-
"jaydata-dynamic-metadata": "^0.0.4",
3434
"odata-metadata": "^0.1.0",
3535
"xmldom": "^0.1.19"
3636
},

src/Types/Expressions/CodeParser.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ $C('$data.Expressions.CodeParser', null, null, {
131131
return new $data.Expressions.ObjectFieldExpression(node.key.name, this.ParserBuild(node.value));
132132
},
133133

134+
ParserArrowFunctionExpression: function(node){
135+
return this.ParserFunctionExpression(node);
136+
},
137+
134138
ParserFunctionExpression: function(node){
135139
var params = new Array(node.params.length);
136140
for (var i = 0; i < node.params.length; i++){

src/Types/Expressions/EntityExpressions/CodeExpression.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import $data, { $C, Guard, Container, Exception } from '../../../TypeSystem/inde
22

33
$C('$data.Expressions.CodeExpression', $data.Expressions.ExpressionNode, null, {
44
constructor: function (source, parameters) {
5-
if (Container.resolveType(Container.getTypeName(source)) == $data.String && source.replace(/^[\s\xA0]+/, "").match("^function") != "function") {
5+
if (Container.resolveType(Container.getTypeName(source)) == $data.String &&
6+
source.replace(/^[\s\xA0]+/, "").match("^function") != "function" &&
7+
source.replace(/^[\s\xA0]+/, "").match("=>") != "=>")
8+
{
69
source = "function (it) { return " + source + "; }";
710
}
811

src/Types/Expressions/EntityExpressions/CodeToEntityConverter.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,38 @@ $C('$data.Expressions.CodeToEntityConverter', $data.Expressions.ExpressionVisito
107107
var exp = this.Visit(expression.expression, context);
108108
var member = this.Visit(expression.member, context);
109109
var args = expression.args.map(function (arg) {
110-
return self.Visit(arg, context);
110+
if (arg instanceof $data.Expressions.FunctionExpression &&
111+
(exp instanceof $data.Expressions.EntitySetExpression || exp instanceof $data.Expressions.FrameOperationExpression))
112+
{
113+
var operation = self.scopeContext.resolveSetOperations(member.value, exp, context.frameType);
114+
if(!operation){
115+
Guard.raise("Unknown entity field operation: " + member.getJSON());
116+
}
117+
118+
var entitySet = self.scopeContext.getEntitySetFromElementType(exp.elementType)
119+
var setExpr = null;
120+
if(!entitySet){
121+
//TODO
122+
Guard.raise("Nested operations without entity set is not supported");
123+
} else {
124+
setExpr = entitySet.expression;
125+
}
126+
127+
var frameType = context.frameType;
128+
context.frameType = operation.frameType;
129+
context.lambdaParameters.push(setExpr);
130+
var res = self.Visit(arg, context);
131+
context.lambdaParameters.pop();
132+
context.frameType = frameType;
133+
134+
if (operation.frameTypeFactory) {
135+
return operation.frameTypeFactory(setExpr, res)
136+
} else {
137+
return new operation.frameType(setExpr, res);
138+
}
139+
} else {
140+
return self.Visit(arg, context);
141+
}
111142
});
112143
var result;
113144

src/Types/Expressions/EntityExpressions/QueryExpressionCreator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ $C('$data.Expressions.QueryExpressionCreator', $data.Expressions.EntityExpressio
101101
context.frameType = expression.getType();
102102
var selector = this.Visit(expression.selector, context);
103103
if (source !== expression.source || selector !== expression.selector) {
104-
return Container.createIncludeExpression(source, selector, expression.nodeType);
104+
return Container.createIncludeExpression(source, selector);
105105
}
106106
return expression;
107107
}

src/Types/StorageProviders/oData/oDataIncludeCompiler.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -151,21 +151,24 @@ $C('$data.storageProviders.oData.oDataIncludeCompiler', $data.Expressions.Entity
151151
if(opDef.includeCompiler){
152152
for (var i = 0; i < args.length; i++) {
153153
var arg = args[i];
154+
var compilerType = Container.resolveType(opDef.includeCompiler);
155+
var compiler = new compilerType(this.provider);
156+
var frameContext = { data: "", $expand: context.current };
157+
154158
if (arg && arg.value instanceof $data.Queryable) {
155159
var preparator = Container.createQueryExpressionCreator(arg.value.entityContext);
156160
var prep_expression = preparator.Visit(arg.value.expression);
157-
158-
var compilerType = Container.resolveType(opDef.includeCompiler);
159-
var compiler = new compilerType(this.provider);
160-
var frameContext = { data: "", $expand: context.current };
161-
var compiled = compiler.compile(prep_expression, frameContext);
161+
arg = prep_expression;
162+
}
163+
164+
var compiled = compiler.compile(arg, frameContext);
165+
166+
if(context.current['$operators'].indexOf(opName) < 0){
167+
context.current[opName] = [];
168+
context.current['$operators'].push(opName);
169+
}
170+
context.current[opName].push(frameContext[opName] || frameContext.data);
162171

163-
if(context.current['$operators'].indexOf(opName) < 0){
164-
context.current[opName] = [];
165-
context.current['$operators'].push(opName);
166-
}
167-
context.current[opName].push(frameContext[opName] || frameContext.data);
168-
};
169172
}
170173
} else if(opDef.implementation) {
171174
if(context.current['$operators'].indexOf(opName) < 0){

src/Types/StorageProviders/oData/oDataProvider.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,42 +1105,45 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
11051105
some: {
11061106
invokable: false,
11071107
allowedIn: [$data.Expressions.FilterExpression],
1108-
parameters: [{ name: "filter", dataType: "$data.Queryable" }],
1108+
parameters: [{ name: "some", dataType: "$data.Queryable" }],
11091109
mapTo: 'any',
11101110
frameType: $data.Expressions.SomeExpression
11111111
},
11121112
every: {
11131113
invokable: false,
11141114
allowedIn: [$data.Expressions.FilterExpression],
1115-
parameters: [{ name: "filter", dataType: "$data.Queryable" }],
1115+
parameters: [{ name: "every", dataType: "$data.Queryable" }],
11161116
mapTo: 'all',
11171117
frameType: $data.Expressions.EveryExpression
11181118
},
11191119
take: {
11201120
allowedIn: [$data.Expressions.IncludeExpression],
1121-
parameters: [{ name: "map", dataType: "$data.Queryable" }],
1121+
parameters: [{ name: "take", dataType: "$data.Integer" }],
11221122
frameType: $data.Expressions.PagingExpression,
11231123
includeFrameName: '$top',
11241124
includeCompiler: '$data.storageProviders.oData.oDataPagingCompiler'
11251125
},
11261126
skip: {
11271127
allowedIn: [$data.Expressions.IncludeExpression],
1128-
parameters: [{ name: "map", dataType: "$data.Queryable" }],
1128+
parameters: [{ name: "skip", dataType: "$data.Integer" }],
11291129
frameType: $data.Expressions.PagingExpression,
11301130
includeFrameName: '$skip',
11311131
includeCompiler: '$data.storageProviders.oData.oDataPagingCompiler'
11321132
},
11331133
orderBy: {
11341134
allowedIn: [$data.Expressions.IncludeExpression],
1135-
parameters: [{ name: "map", dataType: "$data.Queryable" }],
1135+
parameters: [{ name: "orderBy", dataType: "$data.Queryable" }],
11361136
frameType: $data.Expressions.OrderExpression,
11371137
includeFrameName: '$orderby',
11381138
includeCompiler: '$data.storageProviders.oData.oDataOrderCompiler'
11391139
},
11401140
orderByDescending: {
11411141
allowedIn: [$data.Expressions.IncludeExpression],
1142-
parameters: [{ name: "map", dataType: "$data.Queryable" }],
1142+
parameters: [{ name: "orderByDescending", dataType: "$data.Queryable" }],
11431143
frameType: $data.Expressions.OrderExpression,
1144+
frameTypeFactory: function(source, selector){
1145+
return new $data.Expressions.OrderExpression(source, selector, $data.Expressions.ExpressionType.OrderByDescending)
1146+
},
11441147
includeFrameName: '$orderby',
11451148
includeCompiler: '$data.storageProviders.oData.oDataOrderCompiler'
11461149
},

0 commit comments

Comments
 (0)