Skip to content

Commit d6b0fbd

Browse files
authored
Merge pull request #20 from KavinduZoysa/is-query
Add isQueryExpression flag
2 parents a93f253 + 802b9c9 commit d6b0fbd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+438
-104
lines changed

flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,8 @@ private void genMapping(Node expr, String name, List<Mapping> elements, Semantic
500500
List<String> inputs = new ArrayList<>();
501501
genInputs(expr, inputs);
502502
Mapping mapping = new Mapping(name, inputs, expr.toSourceCode(),
503-
getDiagnostics(expr.lineRange(), semanticModel), new ArrayList<>());
503+
getDiagnostics(expr.lineRange(), semanticModel), new ArrayList<>(),
504+
expr.kind() == SyntaxKind.QUERY_EXPRESSION);
504505
elements.add(mapping);
505506
}
506507

@@ -552,6 +553,9 @@ private void genInputs(Node expr, List<String> inputs) {
552553
} else if (kind == SyntaxKind.INDEXED_EXPRESSION) {
553554
String source = expr.toSourceCode().trim();
554555
inputs.add(source.replace("[", ".").substring(0, source.length() - 1));
556+
} else if (kind == SyntaxKind.QUERY_EXPRESSION) {
557+
QueryExpressionNode queryExpr = (QueryExpressionNode) expr;
558+
inputs.add(queryExpr.queryPipeline().fromClause().expression().toSourceCode().trim());
555559
}
556560
}
557561

@@ -1187,8 +1191,12 @@ private Model(List<MappingPort> inputs, MappingPort output, Query query) {
11871191
}
11881192

11891193
private record Mapping(String output, List<String> inputs, String expression, List<String> diagnostics,
1190-
List<MappingElements> elements) {
1194+
List<MappingElements> elements, Boolean isQueryExpression) {
11911195

1196+
private Mapping(String output, List<String> inputs, String expression, List<String> diagnostics,
1197+
List<MappingElements> elements) {
1198+
this(output, inputs, expression, diagnostics, elements, null);
1199+
}
11921200
}
11931201

11941202
private record Query(String output, List<String> inputs, FromClause fromClause,

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingModelTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ protected Object[] getConfigsList() {
4949
{Path.of("query2.json")},
5050
{Path.of("query3.json")},
5151
{Path.of("query4.json")},
52+
{Path.of("query5.json")},
5253
{Path.of("variable1.json")},
5354
{Path.of("variable2.json")},
5455
{Path.of("variable3.json")},

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/function_call2.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@
156156
"diagnostics": [
157157
"undefined symbol 'student1'"
158158
],
159-
"elements": []
159+
"elements": [],
160+
"isQueryExpression": false
160161
},
161162
{
162163
"output": "userInfo.password",
@@ -167,7 +168,8 @@
167168
"diagnostics": [
168169
"undefined symbol 'student1'"
169170
],
170-
"elements": []
171+
"elements": [],
172+
"isQueryExpression": false
171173
}
172174
]
173175
}

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/new_connection1.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,8 @@
561561
"inputs": [],
562562
"expression": "\"\"",
563563
"diagnostics": [],
564-
"elements": []
564+
"elements": [],
565+
"isQueryExpression": false
565566
}
566567
]
567568
}

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/query1.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@
159159
],
160160
"expression": "secondaryPhonesItem\n",
161161
"diagnostics": [],
162-
"elements": []
162+
"elements": [],
163+
"isQueryExpression": false
163164
}
164165
],
165166
"query": {

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/query2.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@
203203
],
204204
"expression": "secondaryPhonesItem.code",
205205
"diagnostics": [],
206-
"elements": []
206+
"elements": [],
207+
"isQueryExpression": false
207208
},
208209
{
209210
"output": "phoneNumbers.number",
@@ -212,7 +213,8 @@
212213
],
213214
"expression": "secondaryPhonesItem.number",
214215
"diagnostics": [],
215-
"elements": []
216+
"elements": [],
217+
"isQueryExpression": false
216218
}
217219
],
218220
"query": {

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/query3.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@
203203
],
204204
"expression": "secondaryPhonesItem.code",
205205
"diagnostics": [],
206-
"elements": []
206+
"elements": [],
207+
"isQueryExpression": false
207208
},
208209
{
209210
"output": "phoneNumbers.number",
@@ -212,7 +213,8 @@
212213
],
213214
"expression": "secondaryPhonesItem.number",
214215
"diagnostics": [],
215-
"elements": []
216+
"elements": [],
217+
"isQueryExpression": false
216218
}
217219
],
218220
"query": {

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/query4.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@
119119
],
120120
"expression": "secondaryPhonesItem.code",
121121
"diagnostics": [],
122-
"elements": []
122+
"elements": [],
123+
"isQueryExpression": false
123124
},
124125
{
125126
"output": "phoneNumbers.number",
@@ -128,7 +129,8 @@
128129
],
129130
"expression": "secondaryPhonesItem.number",
130131
"diagnostics": [],
131-
"elements": []
132+
"elements": [],
133+
"isQueryExpression": false
132134
},
133135
{
134136
"output": "phoneNumbers.email",
@@ -137,7 +139,8 @@
137139
],
138140
"expression": "email",
139141
"diagnostics": [],
140-
"elements": []
142+
"elements": [],
143+
"isQueryExpression": false
141144
}
142145
],
143146
"query": {
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
{
2+
"source": "query2.bal",
3+
"description": "Sample diagram node",
4+
"diagram": {
5+
"id": "69725",
6+
"metadata": {
7+
"label": "Declare Variable",
8+
"description": "Assign a value to a variable"
9+
},
10+
"codedata": {
11+
"node": "VARIABLE",
12+
"lineRange": {
13+
"fileName": "main.bal",
14+
"startLine": {
15+
"line": 26,
16+
"offset": 4
17+
},
18+
"endLine": {
19+
"line": 31,
20+
"offset": 6
21+
}
22+
},
23+
"sourceCode": "Person p = {\n contactDetails: {\n phoneNumbers: from var secondaryPhonesItem in u.info.secondaryPhones\n select secondaryPhonesItem\n }\n };"
24+
},
25+
"returning": false,
26+
"properties": {
27+
"expression": {
28+
"metadata": {
29+
"label": "Expression",
30+
"description": "Initialize with value"
31+
},
32+
"valueType": "EXPRESSION",
33+
"value": "{\n contactDetails: {\n phoneNumbers: from var secondaryPhonesItem in u.info.secondaryPhones\n select {code: secondaryPhonesItem.code, number: secondaryPhonesItem.number}\n }\n }",
34+
"optional": true,
35+
"editable": true,
36+
"advanced": false,
37+
"hidden": false
38+
},
39+
"variable": {
40+
"metadata": {
41+
"label": "Name",
42+
"description": "Name of the variable"
43+
},
44+
"valueType": "IDENTIFIER",
45+
"value": "p",
46+
"optional": false,
47+
"editable": false,
48+
"advanced": false,
49+
"hidden": false,
50+
"codedata": {
51+
"lineRange": {
52+
"fileName": "main.bal",
53+
"startLine": {
54+
"line": 38,
55+
"offset": 11
56+
},
57+
"endLine": {
58+
"line": 38,
59+
"offset": 12
60+
}
61+
}
62+
}
63+
},
64+
"type": {
65+
"metadata": {
66+
"label": "Type",
67+
"description": "Type of the variable"
68+
},
69+
"valueType": "TYPE",
70+
"value": "Person",
71+
"placeholder": "var",
72+
"optional": false,
73+
"editable": true,
74+
"advanced": false,
75+
"hidden": false,
76+
"codedata": {}
77+
}
78+
},
79+
"flags": 0
80+
},
81+
"propertyKey": "expression",
82+
"position": {
83+
"line": 31,
84+
"offset": 4
85+
},
86+
"model": {
87+
"inputs": [
88+
{
89+
"fields": [
90+
{
91+
"fields": [
92+
{
93+
"member": {
94+
"fields": [
95+
{
96+
"id": "u.info.secondaryPhones.code",
97+
"variableName": "code",
98+
"typeName": "string",
99+
"kind": "string"
100+
},
101+
{
102+
"id": "u.info.secondaryPhones.number",
103+
"variableName": "number",
104+
"typeName": "string",
105+
"kind": "string"
106+
}
107+
],
108+
"id": "u.info.secondaryPhones",
109+
"typeName": "SecondaryPhones",
110+
"kind": "record"
111+
},
112+
"id": "u.info.secondaryPhones",
113+
"variableName": "secondaryPhones",
114+
"typeName": "SecondaryPhones[]",
115+
"kind": "array"
116+
},
117+
{
118+
"member": {
119+
"id": "u.info.emails",
120+
"typeName": "string",
121+
"kind": "string"
122+
},
123+
"id": "u.info.emails",
124+
"variableName": "emails",
125+
"typeName": "string[]",
126+
"kind": "array"
127+
},
128+
{
129+
"member": {
130+
"member": {
131+
"id": "u.info.addresses",
132+
"typeName": "string",
133+
"kind": "string"
134+
},
135+
"id": "u.info.addresses",
136+
"typeName": "string[]",
137+
"kind": "array"
138+
},
139+
"id": "u.info.addresses",
140+
"variableName": "addresses",
141+
"typeName": "string[][]",
142+
"kind": "array"
143+
}
144+
],
145+
"id": "u.info",
146+
"variableName": "info",
147+
"typeName": "Info",
148+
"kind": "record"
149+
}
150+
],
151+
"id": "u",
152+
"variableName": "u",
153+
"typeName": "User",
154+
"kind": "record",
155+
"category": "variable"
156+
}
157+
],
158+
"output": {
159+
"fields": [
160+
{
161+
"fields": [
162+
{
163+
"member": {
164+
"fields": [
165+
{
166+
"id": "p.contactDetails.phoneNumbers.code",
167+
"variableName": "code",
168+
"typeName": "string",
169+
"kind": "string"
170+
},
171+
{
172+
"id": "p.contactDetails.phoneNumbers.number",
173+
"variableName": "number",
174+
"typeName": "string",
175+
"kind": "string"
176+
}
177+
],
178+
"id": "p.contactDetails.phoneNumbers",
179+
"typeName": "SecondaryPhonesX",
180+
"kind": "record"
181+
},
182+
"id": "p.contactDetails.phoneNumbers",
183+
"variableName": "phoneNumbers",
184+
"typeName": "SecondaryPhonesX[]",
185+
"kind": "array"
186+
},
187+
{
188+
"member": {
189+
"id": "p.contactDetails.addresses",
190+
"typeName": "string",
191+
"kind": "string"
192+
},
193+
"id": "p.contactDetails.addresses",
194+
"variableName": "addresses",
195+
"typeName": "string[]",
196+
"kind": "array"
197+
}
198+
],
199+
"id": "p.contactDetails",
200+
"variableName": "contactDetails",
201+
"typeName": "ContactDetails",
202+
"kind": "record"
203+
}
204+
],
205+
"id": "p",
206+
"variableName": "p",
207+
"typeName": "Person",
208+
"kind": "record"
209+
},
210+
"mappings": [
211+
{
212+
"output": "p.contactDetails.phoneNumbers",
213+
"inputs": [
214+
"u.info.secondaryPhones"
215+
],
216+
"expression": "from var secondaryPhonesItem in u.info.secondaryPhones\n select {code: secondaryPhonesItem.code, number: secondaryPhonesItem.number}\n",
217+
"diagnostics": [],
218+
"elements": [],
219+
"isQueryExpression": true
220+
}
221+
]
222+
}
223+
}

0 commit comments

Comments
 (0)