author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Mon, 02 Jul 2018 08:46:01 +0200 | |
changeset 305 | bad21c4f64bf |
parent 296 | ea3dbc023c80 |
permissions | -rw-r--r-- |
235 | 1 |
"{ Package: 'stx:goodies/xmlsuite/xquery' }" |
2 |
||
3 |
"{ NameSpace: XQuery }" |
|
4 |
||
5 |
Perseus::AstInterpreter subclass:#XQueryInterpreter |
|
251 | 6 |
instanceVariableNames:'documentProvider documentAdaptorsPool funcTable |
235 | 7 |
defaultElementNamespaceURI defaultFunctionNamespaceURI |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
8 |
prefixToNamespaceURIMapping currentFocus pendingUpdateList |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
9 |
externalContext baseUri typeFactory' |
235 | 10 |
classVariableNames:'Verbose' |
11 |
poolDictionaries:'' |
|
12 |
category:'XQuery-Core' |
|
13 |
! |
|
14 |
||
15 |
||
16 |
!XQueryInterpreter class methodsFor:'instance creation'! |
|
17 |
||
18 |
new |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
19 |
Verbose := false. |
235 | 20 |
^ self basicNew initialize. |
21 |
||
22 |
"Created: / 24-12-2006 / 15:42:05 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
23 |
"Modified: / 21-11-2009 / 20:16:11 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 24 |
! ! |
25 |
||
26 |
!XQueryInterpreter class methodsFor:'accessing'! |
|
27 |
||
251 | 28 |
examples |
29 |
||
30 |
^#( |
|
31 |
('1+1' |
|
32 |
'1+1') |
|
33 |
) |
|
34 |
||
35 |
"Created: / 04-05-2010 / 12:41:31 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
36 |
! |
|
37 |
||
235 | 38 |
isVerbose |
39 |
||
40 |
^Verbose == true |
|
41 |
||
42 |
"Created: / 12-04-2007 / 11:14:25 / janfrog" |
|
43 |
! |
|
44 |
||
45 |
verbose: aBoolean |
|
46 |
||
47 |
Verbose := aBoolean |
|
48 |
||
49 |
"Created: / 12-04-2007 / 11:14:09 / janfrog" |
|
50 |
! ! |
|
51 |
||
52 |
!XQueryInterpreter class methodsFor:'defaults'! |
|
53 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
54 |
defaultBaseUri |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
55 |
^ ''. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
56 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
57 |
"Created: / 25-07-2009 / 15:08:55 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
58 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
59 |
|
235 | 60 |
defaultDocumentProvider |
61 |
"default value for the 'documentProvider' instance variable (automatically generated)" |
|
62 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
63 |
^XQuery::XDMAdaptorProvider default. |
235 | 64 |
|
65 |
"Modified: / 02-12-2006 / 12:00:09 / ked" |
|
66 |
"Modified: / 05-12-2006 / 14:59:22 / janfrog" |
|
67 |
"Created: / 18-09-2008 / 16:38:05 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
68 |
"Modified: / 28-01-2010 / 11:19:30 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
235 | 69 |
! |
70 |
||
71 |
defaultFuncTable |
|
72 |
"default value for the 'funcTable' instance variable (automatically generated)" |
|
73 |
||
74 |
^XQueryFuncTable new. |
|
75 |
||
76 |
"Created: / 09-09-2006 / 09:53:19 / ked" |
|
77 |
! ! |
|
78 |
||
79 |
!XQueryInterpreter methodsFor:'accessing'! |
|
80 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
81 |
baseUri |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
82 |
baseUri isNil ifTrue: [ self baseUri: self class defaultBaseUri]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
83 |
^ baseUri. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
84 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
85 |
"Modified: / 15-09-2009 / 21:42:04 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
86 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
87 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
88 |
baseUri: value |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
89 |
baseUri := value. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
90 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
91 |
"Created: / 25-07-2009 / 15:07:10 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
92 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
93 |
|
235 | 94 |
currentNodeSet |
95 |
||
96 |
^context nodeSet |
|
97 |
||
98 |
"Created: / 05-12-2007 / 10:37:08 / janfrog" |
|
99 |
"Modified: / 18-09-2008 / 16:13:10 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
100 |
! |
|
101 |
||
102 |
currentNodeSet:anObject |
|
103 |
self assert:(anObject isNil or:[ anObject class == XQuerySequence ]). |
|
104 |
^context nodeSet: anObject |
|
105 |
||
106 |
"Created: / 18-11-2007 / 08:11:01 / janfrog" |
|
107 |
"Modified: / 05-12-2007 / 10:39:38 / janfrog" |
|
108 |
"Modified: / 18-09-2008 / 16:41:34 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
109 |
! |
|
110 |
||
111 |
defaultFunctionNamespaceURI |
|
112 |
^ defaultFunctionNamespaceURI |
|
113 |
||
114 |
"Created: / 28-12-2006 / 12:38:13 / janfrog" |
|
115 |
! |
|
116 |
||
117 |
documentProvider |
|
118 |
documentProvider isNil ifTrue:[documentProvider := self class defaultDocumentProvider]. |
|
119 |
^ documentProvider |
|
120 |
||
121 |
"Modified: / 10-12-2006 / 13:30:28 / janfrog" |
|
122 |
"Created: / 18-09-2008 / 16:36:47 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
123 |
! |
|
124 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
125 |
externalContext |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
126 |
"return context which could be changed from external environment" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
127 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
128 |
externalContext isNil ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
129 |
externalContext := self newContext: 0. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
130 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
131 |
^ externalContext |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
132 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
133 |
"Modified: / 18-04-2009 / 12:43:15 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
134 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
135 |
|
251 | 136 |
externalContext: aContext |
137 |
||
138 |
externalContext := aContext |
|
139 |
||
140 |
"Modified: / 18-04-2009 / 12:43:15 / Jan Kurs <kursj1@fel.cvut.cz>" |
|
141 |
"Created: / 04-05-2010 / 18:56:54 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
142 |
! |
|
143 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
144 |
focus |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
145 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
146 |
^currentFocus |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
147 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
148 |
"Created: / 01-07-2009 / 15:01:51 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
149 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
150 |
|
235 | 151 |
funcTable |
152 |
funcTable isNil ifTrue:[ |
|
153 |
funcTable := self class defaultFuncTable. |
|
154 |
]. |
|
155 |
^ funcTable |
|
156 |
||
157 |
"Created: / 09-09-2006 / 09:53:19 / ked" |
|
158 |
! |
|
159 |
||
160 |
funcTable:something |
|
161 |
funcTable := something. |
|
162 |
||
163 |
"Created: / 09-09-2006 / 09:53:19 / ked" |
|
164 |
! |
|
165 |
||
248 | 166 |
languageName |
167 |
||
168 |
^'XQuery' |
|
169 |
||
170 |
"Created: / 18-04-2010 / 22:23:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
171 |
! |
|
172 |
||
235 | 173 |
prefixToNamespaceURIMapping |
174 |
^ prefixToNamespaceURIMapping |
|
175 |
||
176 |
"Created: / 28-12-2006 / 12:34:19 / janfrog" |
|
177 |
! |
|
178 |
||
251 | 179 |
subInterpreter |
180 |
||
181 |
^self class new |
|
182 |
externalContext: self context flatten |
|
183 |
||
184 |
"Created: / 04-05-2010 / 18:51:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
185 |
! |
|
186 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
187 |
typeFactory |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
188 |
typeFactory ifNil: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
189 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
190 |
typeFactory := TypeFactory new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
191 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
192 |
^ typeFactory |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
193 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
194 |
"Modified: / 01-11-2009 / 19:11:12 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 195 |
! ! |
196 |
||
197 |
!XQueryInterpreter methodsFor:'accessing - classes'! |
|
198 |
||
199 |
compilerClass |
|
200 |
"Superclass Perseus::Interpreter says that I am responsible to implement this method" |
|
201 |
||
202 |
^XQueryCompiler |
|
203 |
||
204 |
"Created: / 18-09-2008 / 17:04:25 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
205 |
! |
|
206 |
||
207 |
contextClass |
|
249 | 208 |
^ XQueryContext |
235 | 209 |
|
210 |
"Created: / 18-09-2008 / 17:11:21 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
249 | 211 |
"Modified: / 20-04-2010 / 19:43:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
235 | 212 |
! |
213 |
||
214 |
contextProxyClass |
|
215 |
||
216 |
^ContextProxy |
|
217 |
||
218 |
"Created: / 18-09-2008 / 18:25:29 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
219 |
! |
|
220 |
||
249 | 221 |
debuggerClass |
222 |
||
223 |
^XQuery::Debugger |
|
224 |
||
225 |
"Created: / 20-04-2010 / 20:38:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
226 |
! |
|
227 |
||
228 |
debuggerServiceClass |
|
229 |
||
230 |
^XQuery::DebuggerService |
|
231 |
||
232 |
"Created: / 20-04-2010 / 19:44:44 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
233 |
! |
|
234 |
||
235 | 235 |
parserClass |
236 |
"Superclass Perseus::Interpreter says that I am responsible to implement this method" |
|
237 |
||
238 |
^XQueryParser |
|
239 |
||
240 |
"Created: / 18-09-2008 / 16:58:05 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241 |
! ! |
|
242 |
||
243 |
!XQueryInterpreter methodsFor:'accessing - document'! |
|
244 |
||
245 |
documentAdaptorsFor: aURI |
|
246 |
||
247 |
documentAdaptorsPool ifNil:[ |
|
248 |
documentAdaptorsPool := Dictionary new. |
|
249 |
]. |
|
250 |
||
251 |
^documentAdaptorsPool at: aURI ifAbsentPut:[ |
|
252 |
||
253 |
(self documentProvider documentAdaptorsFor: aURI) |
|
254 |
]. |
|
255 |
||
256 |
"Modified: / 02-12-2006 / 11:59:45 / ked" |
|
257 |
"Created: / 20-09-2007 / 10:34:10 / janfrog" |
|
258 |
"Modified: / 18-09-2008 / 16:36:34 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
259 |
! |
|
260 |
||
261 |
releaseDocumentAdaptors |
|
262 |
documentAdaptorsPool ifNotNil: |
|
263 |
[documentAdaptorsPool do: |
|
264 |
[:documentAdaptors | |
|
265 |
documentAdaptors do: |
|
266 |
[:documentAdaptor| |
|
267 |
documentAdaptor releaseResources]]. |
|
268 |
documentAdaptorsPool := nil]. |
|
269 |
||
270 |
"Modified: / 02-11-2006 / 10:28:44 / ked" |
|
271 |
"Created: / 18-09-2008 / 16:36:34 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
272 |
! ! |
|
273 |
||
274 |
!XQueryInterpreter methodsFor:'accessing - vars'! |
|
275 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
276 |
bindExternalVar:aName to:aValue |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
277 |
"bind variable to external context - this could be done before XQuery execution" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
278 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
279 |
^self bindVar:aName to:aValue inContext: self externalContext |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
280 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
281 |
"Created: / 18-04-2009 / 12:40:37 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
282 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
283 |
|
235 | 284 |
bindVar:aName to:aValue |
285 |
||
286 |
^self bindVar:aName to:aValue inContext: context |
|
287 |
||
288 |
"Modified: / 02-11-2006 / 10:29:47 / ked" |
|
289 |
"Created: / 28-03-2007 / 17:28:05 / janfrog" |
|
290 |
"Modified: / 18-09-2008 / 15:40:07 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
291 |
! |
|
292 |
||
293 |
bindVar:aName to:aValue inContext:aContext |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
294 |
self assert: (aName class = XQuerySequence). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
295 |
self assert: (aName containsSingleAtomicValue). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
296 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
297 |
TypeFactory current: self typeFactory do: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
298 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
299 |
aContext variableAt: aName first stringValue put: aValue |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
300 |
]. |
235 | 301 |
|
302 |
"Modified: / 02-11-2006 / 10:29:47 / ked" |
|
303 |
"Created: / 20-03-2007 / 23:01:25 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
304 |
"Modified: / 05-11-2009 / 23:02:30 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 305 |
! |
306 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
307 |
bindVar:aName toInteger:anInteger |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
308 |
^self bindVar:aName |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
309 |
to:(AtomicItem withNumber:anInteger) |
235 | 310 |
|
311 |
"Modified: / 02-11-2006 / 10:29:47 / ked" |
|
312 |
"Created: / 28-03-2007 / 20:19:43 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
313 |
"Modified: / 07-10-2009 / 11:54:24 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 314 |
! |
315 |
||
316 |
bindVarIfNotNil:aName to:aValue |
|
317 |
||
318 |
^self bindVarIfNotNil:aName to:aValue inContext: context |
|
319 |
||
320 |
"Modified: / 02-11-2006 / 10:29:47 / ked" |
|
321 |
"Created: / 28-03-2007 / 21:24:49 / janfrog" |
|
322 |
"Modified: / 18-09-2008 / 15:40:07 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
323 |
! |
|
324 |
||
325 |
bindVarIfNotNil:aName to:aValue inContext:aContext |
|
326 |
||
327 |
aName ifNotNil:[self bindVar: aName to: aValue inContext: aContext] |
|
328 |
||
329 |
"Modified: / 02-11-2006 / 10:29:47 / ked" |
|
330 |
"Created: / 28-03-2007 / 21:24:40 / janfrog" |
|
331 |
! |
|
332 |
||
333 |
unbindVar:aName |
|
334 |
||
335 |
^self unbindVar:aName inContext: context |
|
336 |
||
337 |
"Modified: / 02-11-2006 / 10:30:18 / ked" |
|
338 |
"Created: / 28-03-2007 / 17:29:05 / janfrog" |
|
339 |
"Modified: / 18-09-2008 / 15:40:07 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
340 |
! |
|
341 |
||
342 |
unbindVar:aName inContext:aContext |
|
343 |
aContext variables removeKey:aName ifAbsent:[] |
|
344 |
||
345 |
"Modified: / 02-11-2006 / 10:30:18 / ked" |
|
346 |
"Created: / 28-03-2007 / 17:28:42 / janfrog" |
|
347 |
"Modified: / 28-03-2007 / 21:24:04 / janfrog" |
|
348 |
! |
|
349 |
||
350 |
valueOfVar:aName inContext:aContext |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
351 |
self assert: (aName isAtomicValue). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
352 |
^(aContext variableAt: aName stringValue) clone. |
235 | 353 |
|
354 |
"Created: / 03-09-2006 / 13:41:51 / ked" |
|
355 |
"Modified: / 14-12-2006 / 23:29:54 / ked" |
|
356 |
"Modified: / 20-03-2007 / 23:05:35 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
357 |
"Modified: / 05-10-2009 / 16:01:22 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
358 |
"Modified: / 16-12-2009 / 09:59:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
359 |
! ! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
360 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
361 |
!XQueryInterpreter methodsFor:'comparison expr'! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
362 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
363 |
generalComparison:generalComp leftSeq:leftSeq rightSeq:rightSeq |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
364 |
|comparisonOperations lSeq rSeq | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
365 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
366 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
367 |
3.5.2 General Comparisons |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
368 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
369 |
The general comparison operators are =, !!=, <, <=, >, and >=. General comparisons are existentially |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
370 |
quantified comparisons that may be applied to operand sequences of any length. The result of a |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
371 |
general comparison that does not raise an error is always true or false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
372 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
373 |
A general comparison is evaluated by applying the following rules, in order: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
374 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
375 |
1.Atomization is applied to each operand. After atomization, each operand is a sequence of atomic values. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
376 |
2.The result of the comparison is true if and only if there is a pair of atomic values, one in the first |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
377 |
operand sequence and the other in the second operand sequence, that have the required magnitude |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
378 |
relationship. Otherwise the result of the comparison is false. The magnitude relationship between two |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
379 |
atomic values is determined by applying the following rules. If a cast operation called for by these |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
380 |
rules is not successful, a dynamic error is raised. [err:FORG0001] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
381 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
382 |
lSeq := leftSeq asAtomizedSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
383 |
rSeq := rightSeq asAtomizedSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
384 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
385 |
comparisonOperations := self generalComparisonOperations. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
386 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
387 |
^ XQuerySequence withBoolean: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
388 |
(lSeq anySatisfy: [:itemLeft | rSeq anySatisfy:[:itemRight | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
389 |
| left right | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
390 |
left := nil. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
391 |
right := nil. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
392 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
393 |
a.If one of the atomic values is an instance of xs:untypedAtomic and the other is an instance of a |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
394 |
numeric type, then the xs:untypedAtomic value is cast to the type xs:double. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
395 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
396 |
(((itemLeft isType: 'xs:untypedAtomic') and: [itemRight isSubtypeOf: 'xs:decimal']) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
397 |
or: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
398 |
((itemRight isType: 'xs:untypedAtomic') and: [itemLeft isSubtypeOf: 'xs:decimal'])]) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
399 |
left := itemLeft castAs: 'xs:decimal'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
400 |
right := itemRight castAs: 'xs:decimal'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
401 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
402 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
403 |
b.If one of the atomic values is an instance of xs:untypedAtomic and the other is an instance of |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
404 |
xs:untypedAtomic or xs:string, then the xs:untypedAtomic value (or values) is (are) cast to the |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
405 |
type xs:string. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
406 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
407 |
(((itemRight isType: 'xs:untypedAtomic') and: [itemLeft isSubtypeOf: 'xs:untypedAtomic']) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
408 |
or: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
409 |
((itemRight isType: 'xs:untypedAtomic') and: [itemLeft isSubtypeOf: 'xs:string']) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
410 |
or: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
411 |
((itemRight isType: 'xs:string') and: [itemLeft isSubtypeOf: 'xs:untypedAtomic']) ] ]) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
412 |
ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
413 |
left := itemLeft castAs: 'xs:string'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
414 |
right := itemRight castAs: 'xs:string'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
415 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
416 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
417 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
418 |
c.If one of the atomic values is an instance of xs:untypedAtomic and the other is not an instance |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
419 |
of xs:string, xs:untypedAtomic, or any numeric type, then the xs:untypedAtomic value is cast to |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
420 |
the dynamic type of the other value. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
421 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
422 |
((itemRight isType: 'xs:untypedAtomic') and: [left isNil]) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
423 |
ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
424 |
left := itemLeft. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
425 |
right := itemRight castAs: left type. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
426 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
427 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
428 |
((itemLeft isType: 'xs:untypedAtomic') and: [right isNil]) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
429 |
ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
430 |
right := itemRight. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
431 |
left := itemLeft castAs: right type. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
432 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
433 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
434 |
(left isNil and: [right isNil]) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
435 |
right := itemRight. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
436 |
left := itemLeft. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
437 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
438 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
439 |
self assert: (left isSubtypeOf: 'xs:untypedAtomic') not. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
440 |
self assert: (right isSubtypeOf: 'xs:untypedAtomic') not. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
441 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
442 |
(comparisonOperations at:generalComp) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
443 |
value:(left) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
444 |
value:(right) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
445 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
446 |
]]). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
447 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
448 |
"Created: / 04-10-2009 / 18:39:54 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
449 |
"Modified: / 05-10-2009 / 19:10:01 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
450 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
451 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
452 |
generalComparisonOperations |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
453 |
|comparisonOperations| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
454 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
455 |
comparisonOperations := Dictionary new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
456 |
comparisonOperations |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
457 |
at:#eqGeneral |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
458 |
put:[:left :right | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
459 |
left = right. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
460 |
]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
461 |
at:#neGeneral |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
462 |
put:[:left :right | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
463 |
left ~= right. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
464 |
]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
465 |
at:#ltGeneral |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
466 |
put:[:left :right | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
467 |
left < right. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
468 |
]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
469 |
at:#leGeneral |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
470 |
put:[:left :right | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
471 |
left <= right. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
472 |
]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
473 |
at:#gtGeneral |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
474 |
put:[:left :right | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
475 |
left > right. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
476 |
]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
477 |
at:#geGeneral |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
478 |
put:[:left :right | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
479 |
left >= right. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
480 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
481 |
^ comparisonOperations. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
482 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
483 |
"Created: / 04-10-2009 / 18:42:16 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
484 |
"Modified: / 05-10-2009 / 18:12:56 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
485 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
486 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
487 |
nodeComparison:nodeComp leftSeq:leftSeq rightSeq:rightSeq |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
488 |
"If either operand is an empty sequence, the result of the comparison is an empty sequence" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
489 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
490 |
|comparisonOperations| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
491 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
492 |
(leftSeq size = 0) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
493 |
^ XQuerySequence new:0 |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
494 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
495 |
(rightSeq size = 0) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
496 |
^ XQuerySequence new:0 |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
497 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
498 |
"Each operand must be either a single node or an empty sequence; otherwise a type error is raised" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
499 |
self assert:(leftSeq size = 1). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
500 |
self assert:(rightSeq size = 1). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
501 |
self assert:(leftSeq first isSubtypeOf:'node'). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
502 |
self assert:(rightSeq first isSubtypeOf:'node'). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
503 |
comparisonOperations := self nodeComparisonOperations. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
504 |
^ XQuerySequence |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
505 |
withBoolean:((comparisonOperations at:nodeComp) value:(leftSeq first) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
506 |
value:(rightSeq first)) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
507 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
508 |
"Modified: / 06-10-2009 / 16:17:06 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
509 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
510 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
511 |
nodeComparisonOperations |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
512 |
^ (Dictionary new) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
513 |
at:#is put:[:left :right | left = right ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
514 |
at:#isLess put:[:left :right | self error:'not yet implemented' ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
515 |
at:#isMore put:[:left :right | self error:'not yet implemented' ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
516 |
yourself. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
517 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
518 |
"Created: / 06-10-2009 / 16:16:15 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
519 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
520 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
521 |
valueComparison:valueComp leftSeq:leftSeq rightSeq:rightSeq |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
522 |
|comparisonOperations left right| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
523 |
left := leftSeq asAtomizedSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
524 |
right := rightSeq asAtomizedSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
525 |
"If the atomized operand is an empty sequence, the result of the value comparison is an empty sequence" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
526 |
(left size = 0) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
527 |
^ XQuerySequence new:0 |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
528 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
529 |
(right size = 0) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
530 |
^ XQuerySequence new:0 |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
531 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
532 |
"If the atomized operand is a sequence of length greater than one, a type error is raised" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
533 |
(left size = 1) ifFalse: [ self raiseError: '[err:XPTY0004]'.]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
534 |
(right size = 1) ifFalse: [ self raiseError: '[err:XPTY0004]'.]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
535 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
536 |
comparisonOperations := self valueComparisonOperations. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
537 |
^ XQuerySequence |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
538 |
withBoolean:((comparisonOperations at:valueComp) value:(left first) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
539 |
value:(right first)) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
540 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
541 |
"Created: / 05-10-2009 / 15:42:09 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
542 |
"Modified: / 30-12-2009 / 14:18:53 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
543 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
544 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
545 |
valueComparisonOperations |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
546 |
^ (Dictionary new) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
547 |
at:#eqValue put:[:left :right | left value = right value]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
548 |
at:#neValue put:[:left :right | left value ~= right value ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
549 |
at:#ltValue put:[:left :right | left value < right value ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
550 |
at:#leValue put:[:left :right | left <= right ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
551 |
at:#gtValue put:[:left :right | left value > right value ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
552 |
at:#geValue put:[:left :right | left >= right ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
553 |
yourself. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
554 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
555 |
"Created: / 05-10-2009 / 15:43:27 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
556 |
"Modified: / 30-12-2009 / 14:47:09 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
557 |
! ! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
558 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
559 |
!XQueryInterpreter methodsFor:'context operations'! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
560 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
561 |
newInitialContext: size |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
562 |
"create context from external context" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
563 |
^self externalContext copyContext grow: (externalContext size + size) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
564 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
565 |
"Modified: / 18-04-2009 / 20:32:35 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
566 |
! ! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
567 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
568 |
!XQueryInterpreter methodsFor:'error reporting'! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
569 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
570 |
raiseError: errorType |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
571 |
XQueryInterpreterError raiseErrorString: 'Error no.: ', errorType. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
572 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
573 |
"Created: / 05-10-2009 / 17:20:46 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
574 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
575 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
576 |
raiseError: errorType withMessage: message |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
577 |
XQueryInterpreterError raiseErrorString: message, ' Error no.: ', errorType. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
578 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
579 |
"Created: / 05-10-2009 / 17:21:52 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
580 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
581 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
582 |
raiseErrorWithMessage: message |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
583 |
XQueryInterpreterError raiseErrorString: message. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
584 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
585 |
"Created: / 06-10-2009 / 11:53:05 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 586 |
! ! |
587 |
||
588 |
!XQueryInterpreter methodsFor:'evaluation'! |
|
589 |
||
590 |
evaluate:aStringOrCompiledCode on:anExceptionClassOrExceptionSet do:aBlock |
|
591 |
||
592 |
|millisecondsToRun resultSequence| |
|
593 |
||
594 |
millisecondsToRun := Time millisecondsToRun: |
|
595 |
[resultSequence := self basicEvaluate:aStringOrCompiledCode on:anExceptionClassOrExceptionSet do:aBlock]. |
|
596 |
||
597 |
^(XQueryResult withAll:resultSequence ? #()) |
|
598 |
setQueryString: aStringOrCompiledCode; |
|
599 |
setQueryTime: |
|
600 |
(millisecondsToRun > 0 |
|
601 |
ifTrue:[TimeDuration new setMilliseconds: millisecondsToRun] |
|
602 |
ifFalse:[nil]); |
|
603 |
yourself. |
|
604 |
||
605 |
"Created: / 18-09-2008 / 16:55:29 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
606 |
"Modified: / 23-11-2008 / 19:48:09 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
607 |
! ! |
|
608 |
||
609 |
!XQueryInterpreter methodsFor:'evaluation - private'! |
|
610 |
||
611 |
basicEvaluate:aStringOrCompiledCode |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
612 |
"TODO: this is ugly hot fix - should be repaired as quick as possible" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
613 |
HybridNodeKind instance clearHybrids. |
235 | 614 |
^self |
615 |
basicEvaluate: aStringOrCompiledCode |
|
616 |
on: Error |
|
617 |
do: [:ex|self handleRuntimeError: ex]. |
|
618 |
||
619 |
"Created: / 18-09-2008 / 16:53:32 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
620 |
"Modified: / 02-12-2008 / 12:51:13 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
621 |
"Modified: / 05-11-2009 / 23:04:11 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 622 |
! |
623 |
||
624 |
basicEvaluate:aStringOrCompiledCode on:anExceptionClassOrExceptionSet do:aBlock |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
625 |
| retval | |
277 | 626 |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
627 |
TypeFactory current: self typeFactory do: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
628 |
[ |
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
629 |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
630 |
retval := super evaluate:aStringOrCompiledCode on:anExceptionClassOrExceptionSet do:aBlock. |
277 | 631 |
|
632 |
pendingUpdateList isEmptyCommand ifFalse:[ |
|
633 |
(self isCellstore) ifTrue:[ |
|
634 |
pendingUpdateList setXQIinAdaptor:self. |
|
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
635 |
]. |
277 | 636 |
pendingUpdateList execute]. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
637 |
"Only for testing purpose - delete it easily" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
638 |
"/NodeKind printCnt. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
639 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
640 |
^retval. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
641 |
]. |
235 | 642 |
|
643 |
"Created: / 18-09-2008 / 16:52:22 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
644 |
"Modified: / 05-11-2009 / 23:07:55 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
645 |
"Modified: / 06-04-2010 / 12:01:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
646 |
"Modified: / 05-04-2012 / 17:10:30 / Adam Senk <senkadam@gmail.com>" |
235 | 647 |
! ! |
648 |
||
649 |
!XQueryInterpreter methodsFor:'informing'! |
|
650 |
||
651 |
informAboutNodeEvaluation: aString |
|
652 |
||
653 |
(Smalltalk isStandAloneApp or:[self class isVerbose]) ifTrue: |
|
654 |
[Transcript show: '[XQuery::Interpreter] evaluating node '; showCR: aString] |
|
655 |
||
656 |
"Created: / 10-02-2007 / 13:03:53 / janfrog" |
|
657 |
"Modified: / 12-04-2007 / 11:16:18 / janfrog" |
|
658 |
! ! |
|
659 |
||
660 |
!XQueryInterpreter methodsFor:'initialization'! |
|
661 |
||
662 |
initialize |
|
663 |
super initialize. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
664 |
TypeFactory |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
665 |
current: self typeFactory |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
666 |
do:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
667 |
self initializeDefaultNamespaces. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
668 |
self initializeNamespaces. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
669 |
self initializeFunctionTable. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
670 |
self initializePendingUpdateList. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
671 |
]. |
235 | 672 |
|
673 |
"Created: / 24-12-2006 / 15:42:00 / janfrog" |
|
674 |
"Modified: / 28-12-2006 / 12:39:29 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
675 |
"Modified: / 01-11-2009 / 19:10:49 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 676 |
! |
677 |
||
678 |
initializeDefaultNamespaces |
|
679 |
||
680 |
defaultElementNamespaceURI := ''. |
|
681 |
defaultFunctionNamespaceURI := 'http://www.w3.org/2005/xpath-functions'. |
|
682 |
||
683 |
"Created: / 24-12-2006 / 17:21:00 / janfrog" |
|
684 |
! |
|
685 |
||
686 |
initializeFunctionTable |
|
687 |
||
688 |
funcTable := XQueryFuncTable new. |
|
689 |
"NativeFunctionFn allSubclasses do:[:cls|funcTable defineFunction: cls new]." |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
690 |
self loadFunctionLibrary: XQuery::DmLibrary new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
691 |
self loadFunctionLibrary: XQuery::FnLibrary new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
692 |
self loadFunctionLibrary: XQuery::XSLibrary new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
693 |
self loadFunctionLibrary: XQuery::OpLibrary new. |
235 | 694 |
|
695 |
"Created: / 28-12-2006 / 12:40:25 / janfrog" |
|
696 |
"Modified: / 28-08-2007 / 23:04:47 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
697 |
"Modified: / 15-10-2009 / 23:26:12 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 698 |
! |
699 |
||
700 |
initializeNamespaces |
|
701 |
||
702 |
prefixToNamespaceURIMapping := Dictionary new |
|
703 |
"Taken from XQuery specification section 4.12" |
|
704 |
at:'xml' put:'http://www.w3.org/XML/1998/namespace'; |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
705 |
at:'xmlns' put:'http://www.w3.org/2000/xmlns/'; |
235 | 706 |
at:'xs' put:'http://www.w3.org/2001/XMLSchema'; |
707 |
at:'xsi' put:'http://www.w3.org/2001/XMLSchema-instance'; |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
708 |
"/ at:'fn' put:'http://www.w3.org/2005/xpath-functions'; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
709 |
"/ at:'dm' put:'http://www.w3.org/TR/xpath-datamodel'; |
235 | 710 |
at:'local' put:'http://www.w3.org/2005/xquery-local-functions'; |
711 |
yourself |
|
712 |
||
713 |
"Created: / 24-12-2006 / 15:41:17 / janfrog" |
|
714 |
"Modified: / 24-12-2006 / 17:16:56 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
715 |
"Modified: / 15-10-2009 / 23:27:07 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 716 |
! |
717 |
||
718 |
initializePendingUpdateList |
|
719 |
||
720 |
pendingUpdateList := EmptyCommand new. |
|
721 |
! |
|
722 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
723 |
initializeTypeSystem |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
724 |
typeFactory := TypeFactory new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
725 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
726 |
"Created: / 01-11-2009 / 18:08:36 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
727 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
728 |
|
235 | 729 |
setDocumentProvider: aDocumentProvider |
730 |
||
731 |
documentProvider := aDocumentProvider |
|
732 |
||
733 |
"Created: / 18-09-2008 / 16:36:47 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
734 |
! ! |
|
735 |
||
736 |
!XQueryInterpreter methodsFor:'libraries'! |
|
737 |
||
738 |
loadFunctionLibrary: aFunctionLibrary |
|
739 |
||
740 |
aFunctionLibrary functions do: |
|
741 |
[:f|funcTable defineFunction:f]. |
|
742 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
743 |
prefixToNamespaceURIMapping |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
744 |
at: aFunctionLibrary defaultPrefix |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
745 |
put: aFunctionLibrary namespaceURI. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
746 |
|
235 | 747 |
"Created: / 28-08-2007 / 23:05:52 / janfrog" |
748 |
"Modified: / 29-08-2007 / 09:42:19 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
749 |
"Modified: / 15-10-2009 / 23:28:50 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 750 |
! |
751 |
||
752 |
loadFunctionLibraryWithURI: uriString |
|
753 |
||
754 |
^self loadFunctionLibrary: (FunctionLibrary forURI: uriString). |
|
755 |
||
756 |
"Created: / 01-12-2008 / 10:06:15 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
757 |
! ! |
|
758 |
||
759 |
!XQueryInterpreter methodsFor:'private'! |
|
760 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
761 |
addUri: nsUri toNamespacePrefix: prefix |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
762 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
763 |
prefix = 'xml' ifTrue:[self error:'Cannot redefine ''xml'' namespace prefix.']. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
764 |
prefix = 'xmlns' ifTrue:[self error:'Cannot bind ''xmlns'' prefix to namespace uri']. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
765 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
766 |
prefixToNamespaceURIMapping |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
767 |
at: prefix |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
768 |
put: nsUri |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
769 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
770 |
"Created: / 18-09-2009 / 15:19:48 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
771 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
772 |
|
235 | 773 |
appendSequence:sequence toConstructedElement:parent whichIsDocument:isDocument |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
774 |
| wasNonAttributeNode | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
775 |
" Processing of the computed element constructor proceeds as follows: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
776 |
3. If the content sequence contains an attribute node following a node that is not an attribute node, a type error |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
777 |
is raised [err:XQTY0024]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
778 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
779 |
wasNonAttributeNode := false. |
235 | 780 |
|
781 |
sequence do: |
|
782 |
[:item| |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
783 |
(item isSubtypeOf: 'attribute') ifTrue: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
784 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
785 |
wasNonAttributeNode ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
786 |
"TODO: add error number and error message" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
787 |
XQueryInterpreterError raiseErrorString: 'Attribute node cannot follow non-attribute node'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
788 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
789 |
] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
790 |
ifFalse: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
791 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
792 |
wasNonAttributeNode := true. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
793 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
794 |
item appendInto: parent. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
795 |
] |
235 | 796 |
|
797 |
"Modified: / 02-12-2006 / 12:20:21 / ked" |
|
798 |
"Created: / 21-03-2007 / 15:54:45 / janfrog" |
|
799 |
"Modified: / 29-03-2007 / 13:34:55 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
800 |
"Modified: / 05-10-2009 / 16:07:59 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 801 |
! |
802 |
||
803 |
appendSequence:sequence toConstructedTextOrAttribute:textOrAttr |
|
804 |
|textNodeContentAccum| |
|
805 |
||
806 |
"spojeni atomizovanych hodnot" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
807 |
textNodeContentAccum := ''. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
808 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
809 |
(sequence size > 0) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
810 |
sequence first isAtomicValue ifTrue: [ textNodeContentAccum := sequence first stringValue]. |
235 | 811 |
]. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
812 |
sequence from: 2 to: (sequence size) do:[:sequenceItem | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
813 |
textNodeContentAccum := textNodeContentAccum, ' '. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
814 |
sequenceItem isAtomicValue ifTrue: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
815 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
816 |
textNodeContentAccum := textNodeContentAccum, sequenceItem dmStringValue. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
817 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
818 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
819 |
textOrAttr dmTypedValue: (AtomicItem withValue: textNodeContentAccum). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
820 |
textOrAttr dmStringValue:textNodeContentAccum. |
235 | 821 |
|
822 |
"Modified: / 09-11-2006 / 23:51:06 / ked" |
|
823 |
"Created: / 21-03-2007 / 16:05:22 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
824 |
"Modified: / 05-10-2009 / 17:09:08 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 825 |
! |
826 |
||
827 |
orderCriterionFor: left and: right |
|
828 |
||
829 |
| leftValue rightValue ascDesc emptyGreatestLeast ascTrue ascFalse | |
|
830 |
||
831 |
self assert: left orderSpecItems size = right orderSpecItems size. |
|
832 |
||
833 |
(1 to: left orderSpecItems size) do:[:pos | |
|
834 |
ascDesc := (left orderSpecItems at:pos) ascDesc. |
|
835 |
emptyGreatestLeast := (left orderSpecItems at:pos) emptyGreatestLeast. |
|
836 |
||
837 |
ascDesc ifNil:[ |
|
838 |
ascDesc := #asc. |
|
839 |
]. |
|
840 |
emptyGreatestLeast ifNil:[ |
|
841 |
emptyGreatestLeast := #greatest. |
|
842 |
]. |
|
843 |
||
844 |
ascDesc = #asc ifTrue:[ |
|
845 |
ascTrue := true. |
|
846 |
ascFalse := false. |
|
847 |
] ifFalse:[ |
|
848 |
ascTrue := false. |
|
849 |
ascFalse := true. |
|
850 |
]. |
|
851 |
||
852 |
(left orderSpecItems at:pos) orderValue size = 0 ifTrue:[ |
|
853 |
leftValue := nil. |
|
854 |
] ifFalse:[ |
|
855 |
self assert: (left orderSpecItems at:pos) orderValue size = 1. |
|
856 |
leftValue := (left orderSpecItems at:pos) orderValue first value. |
|
857 |
]. |
|
858 |
||
859 |
(right orderSpecItems at:pos) orderValue size = 0 ifTrue:[ |
|
860 |
rightValue := nil. |
|
861 |
] ifFalse:[ |
|
862 |
self assert: (right orderSpecItems at:pos) orderValue size = 1. |
|
863 |
rightValue := (right orderSpecItems at:pos) orderValue first value. |
|
864 |
]. |
|
865 |
||
866 |
(leftValue isNil not or:[rightValue isNil not]) ifTrue:[ |
|
867 |
||
868 |
leftValue isNil ifTrue:[ |
|
869 |
emptyGreatestLeast = #greatest ifTrue:[ |
|
870 |
^ascFalse. |
|
871 |
] ifFalse:[ |
|
872 |
^ascTrue. |
|
873 |
] |
|
874 |
]. |
|
875 |
||
876 |
rightValue isNil ifTrue:[ |
|
877 |
emptyGreatestLeast = #greatest ifTrue:[ |
|
878 |
^ascTrue. |
|
879 |
] ifFalse:[ |
|
880 |
^ascFalse. |
|
881 |
] |
|
882 |
]. |
|
883 |
||
884 |
leftValue > rightValue ifTrue:[ |
|
885 |
^ascFalse. |
|
886 |
]. |
|
887 |
||
888 |
leftValue < rightValue ifTrue:[ |
|
889 |
^ascTrue. |
|
890 |
]. |
|
891 |
||
892 |
]. |
|
893 |
]. |
|
894 |
||
895 |
^true. "stable ordering" |
|
896 |
||
897 |
"Created: / 30-11-2006 / 15:45:05 / ked" |
|
898 |
"Modified: / 30-11-2006 / 23:58:05 / ked" |
|
899 |
! |
|
900 |
||
901 |
reduceCurrentNodeSetUsing:aBlock |
|
902 |
^ self currentNodeSet:(self currentNodeSet |
|
903 |
inject:(XQuerySequence new:self currentNodeSet size * 2) |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
904 |
into:[:seq :node | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
905 |
| value | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
906 |
value := aBlock value:node. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
907 |
value ifNotNil: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
908 |
seq |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
909 |
addAll:value. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
910 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
911 |
seq. |
235 | 912 |
]) |
913 |
||
914 |
"Created: / 17-11-2007 / 15:51:19 / janfrog" |
|
915 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
916 |
"Modified: / 22-09-2009 / 20:00:24 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 917 |
! |
918 |
||
919 |
uniqueAddNodeSequence:anInsertedDataContext to:aTargetDataContext |
|
920 |
anInsertedDataContext do:[:insertedDataContextItem | |
|
921 |
self assert:(insertedDataContextItem type |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
922 |
isSubtypeOf:(TypeFactory getType: 'node')). |
235 | 923 |
(aTargetDataContext |
924 |
anySatisfy:[:targetDataContextItem | |
|
925 |
self assert:(targetDataContextItem type |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
926 |
isSubtypeOf: (TypeFactory getType: 'node')). |
235 | 927 |
insertedDataContextItem item = targetDataContextItem item |
928 |
]) |
|
929 |
ifFalse:[ aTargetDataContext add:insertedDataContextItem. ]. |
|
930 |
]. |
|
931 |
||
932 |
"Created: / 01-12-2006 / 15:40:36 / ked" |
|
933 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
934 |
"Modified: / 09-05-2009 / 12:16:06 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
935 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
936 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
937 |
visitCollection:aCollection |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
938 |
| resultSequence | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
939 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
940 |
self assert: (aCollection class isSubclassOf: Collection) message: 'collection expected'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
941 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
942 |
resultSequence := XQuerySequence new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
943 |
aCollection |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
944 |
do:[:item | resultSequence addAll: (self visit: item) ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
945 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
946 |
^ resultSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
947 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
948 |
"Created: / 15-07-2009 / 20:57:13 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
949 |
"Modified: / 25-07-2009 / 23:36:06 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 950 |
! |
951 |
||
952 |
withCurrentNodeSetDo:aBlock |
|
953 |
|oldNodeSet retval| |
|
954 |
||
955 |
oldNodeSet := self currentNodeSet. |
|
956 |
self currentNodeSet:self currentNodeSet copy. |
|
957 |
retval := aBlock value. |
|
958 |
self currentNodeSet:oldNodeSet. |
|
959 |
^ retval |
|
960 |
||
961 |
"Created: / 21-03-2007 / 23:17:34 / janfrog" |
|
962 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
963 |
! |
|
964 |
||
965 |
withFocusDo:aBlock |
|
966 |
|oldFocus retval| |
|
967 |
||
968 |
oldFocus := currentFocus. |
|
969 |
currentFocus := XQueryFocus new contextSize:self currentNodeSet size. |
|
970 |
retval := aBlock value. |
|
971 |
currentFocus := oldFocus. |
|
972 |
^ retval |
|
973 |
||
974 |
"Created: / 21-03-2007 / 20:31:59 / janfrog" |
|
975 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
976 |
! ! |
|
977 |
||
978 |
!XQueryInterpreter methodsFor:'private - FLWOR'! |
|
979 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
980 |
bloomForClauses:forClauses by:forClauseIndex using:bloomingBlock |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
981 |
|forClause valueVarName positionVarName valueSeq| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
982 |
forClause := forClauses at:forClauseIndex. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
983 |
valueVarName := self visit:forClause varName. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
984 |
positionVarName := self visit:forClause positionalVar. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
985 |
valueSeq := self visit:forClause exprSingle. |
235 | 986 |
valueSeq keysAndValuesDo: |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
987 |
[:position :value | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
988 |
"3.8.1 For and Let Clauses ... The positional variable always has an implied type of xs:integer." |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
989 |
self |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
990 |
bindVar:valueVarName to:value; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
991 |
bindVarIfNotNil:positionVarName to:(AtomicItem withValue:position asType: 'xs:integer'). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
992 |
forClauses size = forClauseIndex "is last for clause?" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
993 |
ifTrue:[bloomingBlock value] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
994 |
ifFalse: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
995 |
[self |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
996 |
bloomForClauses:forClauses |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
997 |
by:forClauseIndex + 1 |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
998 |
using:bloomingBlock]] |
235 | 999 |
|
1000 |
"Created: / 28-03-2007 / 21:26:54 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1001 |
"Modified: / 24-10-2009 / 14:51:22 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1002 |
! |
1003 |
||
1004 |
bloomForClauses: forClauses using: bloomingBlock |
|
1005 |
||
1006 |
forClauses isEmpty |
|
1007 |
ifTrue: |
|
1008 |
[bloomingBlock value] |
|
1009 |
ifFalse: |
|
1010 |
[self |
|
1011 |
bloomForClauses: forClauses |
|
1012 |
by: 1 |
|
1013 |
using: bloomingBlock] |
|
1014 |
||
1015 |
"Created: / 28-03-2007 / 21:02:21 / janfrog" |
|
1016 |
! |
|
1017 |
||
1018 |
bloomForLetClauses: forLetClauses by: forLetClauseIndex using: primaryBloomingBlock |
|
1019 |
||
1020 |
| forLetClause forClauses | |
|
1021 |
||
1022 |
forLetClause := forLetClauses at: forLetClauseIndex. |
|
1023 |
forClauses := forLetClause asCollectionOfForClauses. |
|
1024 |
||
1025 |
||
1026 |
self |
|
1027 |
bloomForClauses: forClauses |
|
1028 |
using: |
|
1029 |
[self visitAll: forLetClause asCollectionOfLetClauses. |
|
1030 |
forLetClauses size = forLetClauseIndex"is last for-let clause?" |
|
1031 |
ifTrue: |
|
1032 |
[primaryBloomingBlock value] |
|
1033 |
ifFalse: |
|
1034 |
[self |
|
1035 |
bloomForLetClauses: forLetClauses |
|
1036 |
by: forLetClauseIndex + 1 |
|
1037 |
using: primaryBloomingBlock]] |
|
1038 |
||
1039 |
"Created: / 28-03-2007 / 20:48:07 / janfrog" |
|
1040 |
! |
|
1041 |
||
1042 |
bloomForLetClauses: forLetClauses using: primaryBloomingBlock |
|
1043 |
||
1044 |
^self |
|
1045 |
bloomForLetClauses: forLetClauses |
|
1046 |
by: 1 |
|
1047 |
using: primaryBloomingBlock |
|
1048 |
||
1049 |
"Created: / 28-03-2007 / 20:42:51 / janfrog" |
|
1050 |
! |
|
1051 |
||
1052 |
bloomQuantifiedExprImpls: quantifiedExprImpls by: quantifiedExprImplIndex using: bloomingBlock |
|
1053 |
||
1054 |
| quantifiedExprImpl valueVarName valueSeq | |
|
1055 |
||
1056 |
quantifiedExprImpl := quantifiedExprImpls at: quantifiedExprImplIndex. |
|
1057 |
valueVarName := self visit: quantifiedExprImpl varName. |
|
1058 |
valueSeq := self visit: quantifiedExprImpl exprSingle. |
|
1059 |
||
1060 |
valueSeq do: |
|
1061 |
[:value| |
|
1062 |
self bindVar: valueVarName to: value. |
|
1063 |
quantifiedExprImpls size = quantifiedExprImplIndex"is last?" |
|
1064 |
ifTrue: |
|
1065 |
[bloomingBlock value] |
|
1066 |
ifFalse: |
|
1067 |
[self |
|
1068 |
bloomQuantifiedExprImpls: quantifiedExprImpls |
|
1069 |
by: quantifiedExprImplIndex + 1 |
|
1070 |
using: bloomingBlock]] |
|
1071 |
||
1072 |
"Created: / 28-03-2007 / 22:16:08 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1073 |
"Modified: / 19-09-2009 / 15:10:02 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1074 |
! |
1075 |
||
1076 |
bloomQuantifiedExprImpls: quantifiedExprImpls using: bloomingBlock |
|
1077 |
||
1078 |
self |
|
1079 |
bloomQuantifiedExprImpls: quantifiedExprImpls |
|
1080 |
by: 1 |
|
1081 |
using: bloomingBlock |
|
1082 |
||
1083 |
"Created: / 28-03-2007 / 22:06:54 / janfrog" |
|
1084 |
! ! |
|
1085 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1086 |
!XQueryInterpreter methodsFor:'private - QNames'! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1087 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1088 |
isNamespaceDeclaration:qname |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1089 |
self assert: (qname isSubtypeOf: 'xs:QName'). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1090 |
^ qname prefix = 'xmlns'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1091 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1092 |
"Created: / 18-09-2009 / 15:41:58 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1093 |
"Modified: / 05-10-2009 / 19:21:25 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1094 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1095 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1096 |
qNameFromAtomic:atomicValue |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1097 |
" returns the xs:QName atomic value" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1098 |
| validType qName | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1099 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1100 |
self assert: atomicValue isAtomicValue. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1101 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1102 |
validType := false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1103 |
(atomicValue isSubtypeOf: 'xs:string') ifTrue: [validType := true]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1104 |
(atomicValue isSubtypeOf: 'xs:untypedAtomic') ifTrue: [validType := true]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1105 |
(atomicValue isSubtypeOf: 'xs:QName') ifTrue: [validType := true]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1106 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1107 |
validType ifFalse: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1108 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1109 |
XQueryParserError raiseErrorString: 'Name of computed element must be either an xs:string, xs:untypedAtomic or xs:QName'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1110 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1111 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1112 |
Exception handle: [:ex | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1113 |
self raiseErrorWithMessage: ex asString. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1114 |
] do: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1115 |
qName := (QName withQNameString: atomicValue stringValue). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1116 |
qName hasPrefix ifTrue: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1117 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1118 |
qName namespaceURI: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1119 |
(self prefixToNamespaceURIMapping at: qName prefix ifAbsent: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1120 |
self raiseErrorWithMessage: 'unknown namespace'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1121 |
]) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1122 |
] ifFalse: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1123 |
qName namespaceURI: defaultElementNamespaceURI. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1124 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1125 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1126 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1127 |
^ AtomicItem withValue: qName asType: 'xs:QName'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1128 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1129 |
"Created: / 06-10-2009 / 14:29:08 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1130 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1131 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1132 |
qNameFromString: string |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1133 |
" returns the xs:QName atomic value" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1134 |
^ self qNameFromAtomic: (AtomicItem withString: string). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1135 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1136 |
"Created: / 06-10-2009 / 14:36:28 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1137 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1138 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1139 |
xmlNodeNameFromQName:qname |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1140 |
| validType | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1141 |
self halt: 'deprecated - shuold be replaced with qNameFromAtomic'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1142 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1143 |
self assert: qname isAtomicValue. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1144 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1145 |
validType := false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1146 |
(qname isSubtypeOf: 'xs:string') ifTrue: [validType := true]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1147 |
(qname isSubtypeOf: 'xs:untypedAtomic') ifTrue: [validType := true]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1148 |
(qname isSubtypeOf: 'xs:QName') ifTrue: [validType := true]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1149 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1150 |
validType ifFalse: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1151 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1152 |
XQueryParserError raiseErrorString: 'Name of computed element must be either an xs:string, xs:untypedAtomic or xs:QName'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1153 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1154 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1155 |
Exception handle: [:ex | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1156 |
XQueryInterpreterError raiseErrorString: ex asString. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1157 |
] do: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1158 |
^ XMLv2::NodeName |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1159 |
fromString:qname dmStringValue |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1160 |
andPrefixToNamespaceURIMapping:prefixToNamespaceURIMapping |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1161 |
defaultNS:defaultElementNamespaceURI |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1162 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1163 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1164 |
"Created: / 20-03-2007 / 23:19:29 / janfrog" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1165 |
"Modified: / 15-10-2009 / 23:24:35 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1166 |
! ! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1167 |
|
235 | 1168 |
!XQueryInterpreter methodsFor:'queries'! |
1169 |
||
1170 |
shouldTryToUseIndex |
|
1171 |
"If you want to try to experiment with indexes, change it to return true" |
|
1172 |
^false. |
|
1173 |
||
1174 |
"Created: / 05-11-2007 / 17:52:05 / beyboy" |
|
1175 |
"Modified: / 05-11-2007 / 22:36:21 / beyboy" |
|
1176 |
! ! |
|
1177 |
||
277 | 1178 |
!XQueryInterpreter methodsFor:'testing'! |
1179 |
||
1180 |
isCellstore |
|
1181 |
^false. |
|
1182 |
||
1183 |
"Created: / 06-03-2012 / 23:15:03 / Adam Senk <senkadam@gmail.com>" |
|
1184 |
! ! |
|
1185 |
||
235 | 1186 |
!XQueryInterpreter methodsFor:'visiting'! |
1187 |
||
1188 |
visit:anObject |
|
1189 |
||
1190 |
self informAboutNodeEvaluation: anObject class name. |
|
1191 |
^super visit:anObject |
|
1192 |
||
1193 |
"Modified: / 08-10-2006 / 14:17:01 / ked" |
|
1194 |
"Modified: / 10-02-2007 / 13:04:10 / janfrog" |
|
1195 |
"Modified: / 18-09-2008 / 15:50:08 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1196 |
"Modified: / 21-11-2009 / 19:27:23 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1197 |
! |
1198 |
||
1199 |
visitAstAbbrevForwardStep:anObject |
|
1200 |
"dispatched back from the visited astAbbrevForwardStep-object (visitor pattern)" |
|
1201 |
||
1202 |
|expandedStepNode| |
|
1203 |
||
1204 |
expandedStepNode := (AstForwardStep new) |
|
1205 |
forwardAxis:anObject stepType; |
|
1206 |
nodeTest:anObject nodeTest. |
|
1207 |
^ self currentNodeSet:(self visit:expandedStepNode). |
|
1208 |
||
1209 |
"Created: / 08-10-2006 / 17:03:54 / ked" |
|
1210 |
"Modified: / 12-10-2006 / 23:08:51 / ked" |
|
1211 |
"Modified: / 18-11-2007 / 08:11:01 / janfrog" |
|
1212 |
! |
|
1213 |
||
1214 |
visitAstAdditiveExpr:anObject |
|
1215 |
"dispatched back from the visited astAdditiveExpr-object (visitor pattern)" |
|
1216 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1217 |
|leftSequence rightSequence funcName| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1218 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1219 |
leftSequence := (self visit:anObject multiplicativeExpr) asAtomizedSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1220 |
rightSequence := (self visit:anObject additiveExpr) asAtomizedSequence. |
235 | 1221 |
self announceTracepointInterrupt. |
1222 |
"If the atomized operand is an empty sequence, the result of the value comparison is an empty sequence" |
|
1223 |
(leftSequence size = 0) ifTrue:[ |
|
1224 |
^ XQuerySequence new:0 |
|
1225 |
]. |
|
1226 |
(rightSequence size = 0) ifTrue:[ |
|
1227 |
^ XQuerySequence new:0 |
|
1228 |
]. |
|
1229 |
"If the atomized operand is a sequence of length greater than one, a type error is raised" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1230 |
(leftSequence size = 1) ifFalse: [ self raiseError: '[err:XPTY0004]'.]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1231 |
(rightSequence size = 1) ifFalse: [ self raiseError: '[err:XPTY0004]'.]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1232 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1233 |
"If the atomized operand is of type xs:untypedAtomic, it is cast to xs:double. If the cast |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1234 |
fails, a dynamic error is raised. [err:FORG0001]" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1235 |
(leftSequence first typeName = 'xs:untypedAtomic') ifTrue: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1236 |
[leftSequence := XQuerySequence with: ((leftSequence first) castAs: 'xs:double')]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1237 |
(rightSequence first typeName = 'xs:untypedAtomic') ifTrue: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1238 |
[rightSequence := XQuerySequence with: ((rightSequence first) castAs: 'xs:double')]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1239 |
|
235 | 1240 |
"evaluate operation" |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1241 |
(anObject operand == #plus) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1242 |
ifTrue:[ funcName := 'op:numeric-add' ] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1243 |
ifFalse:[ funcName := 'op:numeric-substract' ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1244 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1245 |
^ self funcTable |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1246 |
evaluate:funcName |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1247 |
inContext:context |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1248 |
withParameters: (XQuerySequence with: leftSequence first with: rightSequence first) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1249 |
forInterpreter:self. |
235 | 1250 |
|
1251 |
"Created: / 06-07-2006 / 19:12:08 / ked" |
|
1252 |
"Modified: / 08-10-2006 / 20:15:15 / ked" |
|
1253 |
"Modified: / 21-03-2007 / 14:08:39 / janfrog" |
|
1254 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1255 |
"Modified: / 30-12-2009 / 14:31:55 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1256 |
! |
1257 |
||
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1258 |
visitAstAfterTriggerExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1259 |
|createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1260 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1261 |
createCmd := self visit:anObject eventTriggerExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1262 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1263 |
createCmd time:'after'. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1264 |
^createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1265 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1266 |
"Created: / 10-04-2012 / 20:29:29 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1267 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1268 |
|
235 | 1269 |
visitAstAndExpr:anObject |
1270 |
"dispatched back from the visited astAdditiveExpr-object (visitor pattern)" |
|
1271 |
||
1272 |
|leftSequence rightSequence| |
|
1273 |
||
1274 |
leftSequence := self visit:anObject comparisonExpr. |
|
1275 |
rightSequence := self visit:anObject andExpr. |
|
1276 |
self announceTracepointInterrupt. |
|
1277 |
"evaluate operation" |
|
1278 |
^ XQuerySequence withBoolean:(leftSequence effectiveBooleanValue |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1279 |
and:[ rightSequence effectiveBooleanValue ]) |
235 | 1280 |
|
1281 |
"Created: / 06-07-2006 / 19:12:08 / ked" |
|
1282 |
"Modified: / 08-10-2006 / 20:15:15 / ked" |
|
1283 |
"Modified: / 21-03-2007 / 15:08:08 / janfrog" |
|
1284 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1285 |
"Modified: / 09-05-2009 / 15:21:30 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1286 |
! |
1287 |
||
1288 |
visitAstAnyKindTest:anObject |
|
1289 |
"dispatched back from the visited astAnyKindTest-object (visitor pattern)" |
|
1290 |
||
1291 |
^ self currentNodeSet:(self currentNodeSet |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1292 |
select:[:nodeSetItem | nodeSetItem type isSubtypeOf: (TypeFactory getType: 'node') ]). |
235 | 1293 |
|
1294 |
"Created: / 21-11-2006 / 21:54:14 / ked" |
|
1295 |
"Modified: / 23-11-2006 / 12:24:11 / ked" |
|
1296 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1297 |
"Modified: / 09-05-2009 / 12:16:24 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1298 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1299 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1300 |
visitAstAtomicType:atomicType |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1301 |
^ self visit: atomicType qName. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1302 |
"/ | qName | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1303 |
"/ qName := (self visit: atomicType qName) first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1304 |
"/ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1305 |
"/ ^self currentNodeSet |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1306 |
"/ select:[:item | item isSubtypeOf: (qName qName)] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1307 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1308 |
"Modified: / 14-10-2009 / 23:10:38 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1309 |
! |
1310 |
||
1311 |
visitAstAttribNameOrWildcard:anObject |
|
1312 |
"dispatched back from the visited astAttribNameOrWildcard-object (visitor pattern)" |
|
1313 |
||
1314 |
|givenContext resultDataContext| |
|
1315 |
||
1316 |
self |
|
1317 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
1318 |
resultDataContext := OrderedCollection new. |
|
1319 |
givenContext dataContext do:[:dataContextItem | |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1320 |
(dataContextItem type isSubtypeOf:NodeItem typeNode) ifTrue:[ |
235 | 1321 |
dataContextItem item xpathIsAttribute ifTrue:[ |
1322 |
anObject attributeName |
|
1323 |
ifNil:[ resultDataContext add:dataContextItem. ] |
|
1324 |
ifNotNil:[ |
|
1325 |
self visit:(anObject attributeName). |
|
1326 |
context dataContext first value = dataContextItem item xpathName ifTrue:[ |
|
1327 |
resultDataContext add:dataContextItem. |
|
1328 |
]. |
|
1329 |
context := givenContext. |
|
1330 |
]. |
|
1331 |
]. |
|
1332 |
]. |
|
1333 |
]. |
|
1334 |
context := givenContext copyContext dataContext:resultDataContext. |
|
1335 |
||
1336 |
"Created: / 21-11-2006 / 21:58:27 / ked" |
|
1337 |
"Modified: / 23-11-2006 / 13:27:56 / ked" |
|
1338 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
1339 |
"Modified: / 18-09-2008 / 17:47:00 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1340 |
"Modified: / 07-10-2009 / 12:13:49 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1341 |
! |
1342 |
||
1343 |
visitAstAttributeTest:anObject |
|
1344 |
"dispatched back from the visited astAttributeTest-object (visitor pattern)" |
|
1345 |
||
1346 |
|givenContext attribNameNode| |
|
1347 |
||
1348 |
self |
|
1349 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
1350 |
anObject attribName |
|
1351 |
ifNil:[ |
|
1352 |
attribNameNode := AstAttribNameOrWildcard new. |
|
1353 |
self visit:attribNameNode. |
|
1354 |
] |
|
1355 |
ifNotNil:[ self visit:(anObject attribName). ]. |
|
1356 |
||
1357 |
"Created: / 21-11-2006 / 21:57:25 / ked" |
|
1358 |
"Modified: / 23-11-2006 / 13:06:49 / ked" |
|
1359 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
1360 |
! |
|
1361 |
||
1362 |
visitAstAxisStep:anObject |
|
1363 |
"dispatched back from the visited astAxisStep-object (visitor pattern)" |
|
1364 |
||
1365 |
self currentNodeSet:(anObject forwardStep |
|
1366 |
ifNil:[ self visit:anObject reverseStep ] |
|
1367 |
ifNotNil:[ self visit:anObject forwardStep ]). |
|
1368 |
^ self currentNodeSet:(self visit:(anObject predicateList)). |
|
1369 |
||
1370 |
"Created: / 06-07-2006 / 19:12:08 / ked" |
|
1371 |
"Modified: / 02-11-2006 / 10:30:45 / ked" |
|
1372 |
"Modified: / 18-11-2007 / 08:11:01 / janfrog" |
|
1373 |
! |
|
1374 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1375 |
visitAstBaseUriDecl: baseUriDecl |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1376 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1377 |
self baseUri: (self visit: baseUriDecl value) first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1378 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1379 |
"Created: / 25-07-2009 / 15:04:05 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1380 |
"Modified: / 06-10-2009 / 14:13:23 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1381 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1382 |
|
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1383 |
visitAstBeforeTriggerExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1384 |
|createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1385 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1386 |
createCmd := self visit:anObject eventTriggerExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1387 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1388 |
createCmd time:'before'. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1389 |
^createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1390 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1391 |
"Created: / 10-04-2012 / 20:20:13 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1392 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1393 |
|
235 | 1394 |
visitAstBooleanLiteral:anObject |
1395 |
||
1396 |
^XQuerySequence withBoolean: anObject content |
|
1397 |
||
1398 |
"Created: / 28-03-2007 / 17:35:35 / janfrog" |
|
1399 |
! |
|
1400 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1401 |
visitAstCastExpr:castExpr |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1402 |
| unarySeq atomizedSeq atomicType | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1403 |
unarySeq:= (self visit: castExpr unaryExpr). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1404 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1405 |
castExpr singleType ifNil: [ ^ unarySeq ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1406 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1407 |
atomizedSeq := unarySeq asAtomizedSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1408 |
(atomizedSeq size > 1) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1409 |
self raiseError: '[err:XPTY0004]' withMessage: 'Only empty sequence or single atomic value expected'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1410 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1411 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1412 |
(atomizedSeq size = 0) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1413 |
castExpr singleType occurenceIndicator = '?' ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1414 |
^ XQuerySequence new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1415 |
] ifFalse: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1416 |
self raiseError: '[err:XPTY0004]' withMessage: 'Empty sequence could not be casted to required type'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1417 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1418 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1419 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1420 |
atomicType := (self visit: castExpr singleType atomicType) first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1421 |
^ XQuerySequence with: (atomizedSeq first castAs: atomicType qName). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1422 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1423 |
"Created: / 14-10-2009 / 22:05:40 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1424 |
"Modified: / 21-11-2009 / 19:55:58 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1425 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1426 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1427 |
visitAstCastableExpr:castableExpr |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1428 |
| castSeq atomicType | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1429 |
castSeq:= (self visit: castableExpr castExpr). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1430 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1431 |
castableExpr singleType ifNil: [ ^ castSeq ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1432 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1433 |
"empty sequence with ? occurence indicator" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1434 |
((castSeq size = 0) and:[ (castableExpr singleType isWithEmptySequence) ]) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1435 |
^ XQuerySequence withBoolean:true. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1436 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1437 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1438 |
"sequence with one item" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1439 |
(castSeq size = 1) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1440 |
atomicType := (self visit: castableExpr singleType atomicType) first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1441 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1442 |
castSeq first castAs: atomicType qName. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1443 |
^ XQuerySequence withBoolean: true. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1444 |
] on: AtomicItemError do: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1445 |
^ XQuerySequence withBoolean: false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1446 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1447 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1448 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1449 |
^ XQuerySequence withBoolean:false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1450 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1451 |
"Created: / 05-07-2009 / 16:19:08 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1452 |
"Modified: / 01-11-2009 / 13:21:50 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1453 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1454 |
|
235 | 1455 |
visitAstCompAttrConstructor:anObject |
1456 |
"dispatched back from the visited astCompAttrConstructor-object (visitor pattern)" |
|
1457 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1458 |
|qName contentSeq expr seqItem| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1459 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1460 |
seqItem := NodeItem withNode: 'attribute'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1461 |
|
235 | 1462 |
qName := anObject qname |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1463 |
ifNotNil:[ (self visit:anObject qname) first] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1464 |
ifNil:[ expr := self visit:anObject expr. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1465 |
(expr size = 1) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1466 |
expr first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1467 |
] ifFalse: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1468 |
XQueryInterpreterError raiseErrorString: 'Name of computed attribute must be exactly one element'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1469 |
] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1470 |
]. |
235 | 1471 |
self announceTracepointInterrupt. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1472 |
seqItem dmNodeName: qName. |
235 | 1473 |
contentSeq := anObject contentExpr |
1474 |
ifNil:[ XQuerySequence new:0 ] |
|
1475 |
ifNotNil:[ self visit:(anObject contentExpr) ]. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1476 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1477 |
self appendSequence:contentSeq toConstructedTextOrAttribute:seqItem. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1478 |
^ XQuerySequence with: seqItem. |
235 | 1479 |
|
1480 |
"Created: / 06-07-2006 / 19:12:08 / ked" |
|
1481 |
"Modified: / 09-11-2006 / 23:45:28 / ked" |
|
1482 |
"Modified: / 21-03-2007 / 16:05:22 / janfrog" |
|
1483 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1484 |
"Modified: / 05-10-2009 / 17:06:59 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1485 |
! |
1486 |
||
1487 |
visitAstCompDocConstructor:anObject |
|
1488 |
"dispatched back from the visited astCompElemConstructor-object (visitor pattern)" |
|
1489 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1490 |
|seqItem| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1491 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1492 |
seqItem := NodeItem withNode: 'document'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1493 |
|
235 | 1494 |
anObject expr |
1495 |
ifNil:[ |
|
1496 |
self |
|
1497 |
appendSequence:(OrderedCollection new) |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1498 |
toConstructedElement:seqItem |
235 | 1499 |
whichIsDocument:false. |
1500 |
] |
|
1501 |
ifNotNil:[ |
|
1502 |
|documentChildrenSeq| |
|
1503 |
||
1504 |
documentChildrenSeq := self visit:anObject expr. |
|
1505 |
self announceTracepointInterrupt. |
|
1506 |
self |
|
1507 |
appendSequence:documentChildrenSeq |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1508 |
toConstructedElement:seqItem |
235 | 1509 |
whichIsDocument:false. |
1510 |
]. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1511 |
^ XQuerySequence with: seqItem. |
235 | 1512 |
|
1513 |
"Created: / 06-07-2006 / 19:12:09 / ked" |
|
1514 |
"Modified: / 09-11-2006 / 23:53:01 / ked" |
|
1515 |
"Modified: / 29-03-2007 / 11:29:20 / janfrog" |
|
1516 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1517 |
"Modified: / 05-10-2009 / 16:06:27 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1518 |
! |
1519 |
||
1520 |
visitAstCompElemConstructor:anObject |
|
1521 |
"dispatched back from the visited astCompElemConstructor-object (visitor pattern)" |
|
1522 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1523 |
|qName seqItem expr| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1524 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1525 |
seqItem := NodeItem withNode: 'element'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1526 |
seqItem dmBaseUri: self baseUri. |
235 | 1527 |
qName := anObject qname |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1528 |
ifNotNil:[ (self visit:anObject qname) first ] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1529 |
ifNil:[ expr := self visit:anObject expr. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1530 |
(expr size = 1) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1531 |
self qNameFromAtomic: expr asAtomizedSequence first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1532 |
] ifFalse: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1533 |
self raiseError: '[err:XPTY0004]' withMessage: 'element name must be only one value'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1534 |
] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1535 |
]. |
235 | 1536 |
self announceTracepointInterrupt. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1537 |
seqItem dmNodeName: qName. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1538 |
|
235 | 1539 |
anObject contentExpr |
1540 |
ifNil:[ |
|
1541 |
self |
|
1542 |
appendSequence:(OrderedCollection new) |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1543 |
toConstructedElement:seqItem |
235 | 1544 |
whichIsDocument:false. |
1545 |
] |
|
1546 |
ifNotNil:[ |
|
1547 |
self |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1548 |
appendSequence: (self visit:anObject contentExpr) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1549 |
toConstructedElement:seqItem |
235 | 1550 |
whichIsDocument:false. |
1551 |
]. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1552 |
^ XQuerySequence with:(seqItem). |
235 | 1553 |
|
1554 |
"Created: / 06-07-2006 / 19:12:09 / ked" |
|
1555 |
"Modified: / 09-11-2006 / 23:53:01 / ked" |
|
1556 |
"Modified: / 29-03-2007 / 11:27:01 / janfrog" |
|
1557 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1558 |
"Modified: / 06-10-2009 / 14:44:55 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1559 |
! |
1560 |
||
1561 |
visitAstCompTextConstructor:anObject |
|
1562 |
"dispatched back from the visited astCompTextConstructor-object (visitor pattern)" |
|
1563 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1564 |
|textSeq seqItem| |
235 | 1565 |
|
1566 |
textSeq := self visit:(anObject expr). |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1567 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1568 |
"2. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1569 |
If the result of atomization is an empty sequence, no text node is constructed. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1570 |
Otherwise, each atomic value in the atomized sequence is cast into a string." |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1571 |
textSeq isEmpty ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1572 |
^ XQuerySequence new. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1573 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1574 |
|
235 | 1575 |
self announceTracepointInterrupt. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1576 |
seqItem := NodeItem withNode: 'text'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1577 |
self appendSequence:textSeq toConstructedTextOrAttribute:seqItem. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1578 |
^ XQuerySequence with: seqItem. |
235 | 1579 |
|
1580 |
"Created: / 06-07-2006 / 19:12:09 / ked" |
|
1581 |
"Modified: / 06-11-2006 / 22:53:07 / ked" |
|
1582 |
"Modified: / 29-03-2007 / 13:43:21 / janfrog" |
|
1583 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1584 |
"Modified: / 05-10-2009 / 17:09:23 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1585 |
! |
1586 |
||
1587 |
visitAstComparisonExpr:anObject |
|
1588 |
"dispatched back from the visited astComparisonExpr-object (visitor pattern)" |
|
1589 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1590 |
|leftSeq rightSeq| |
235 | 1591 |
|
1592 |
leftSeq := self visit:anObject rangeExprLeft. |
|
1593 |
rightSeq := self visit:anObject rangeExprRight. |
|
1594 |
self announceTracepointInterrupt. |
|
1595 |
anObject valueComp |
|
1596 |
ifNotNil:[ |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1597 |
^ self valueComparison:anObject valueComp leftSeq: leftSeq rightSeq: rightSeq. |
235 | 1598 |
]. |
1599 |
anObject generalComp |
|
1600 |
ifNotNil:[ |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1601 |
^ self generalComparison: anObject generalComp leftSeq: leftSeq rightSeq: rightSeq. |
235 | 1602 |
]. |
1603 |
anObject nodeComp |
|
1604 |
ifNotNil:[ |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1605 |
^ self nodeComparison: anObject nodeComp leftSeq: leftSeq rightSeq: rightSeq. |
235 | 1606 |
]. |
1607 |
||
1608 |
"Created: / 06-07-2006 / 19:12:09 / ked" |
|
1609 |
"Modified: / 02-12-2006 / 12:20:34 / ked" |
|
1610 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
1611 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1612 |
"Modified: / 07-10-2009 / 10:11:48 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1613 |
! |
1614 |
||
277 | 1615 |
visitAstConnectTriggerExpr:anObject |
1616 |
|targetSeq triggerDefSeq connectCmd| |
|
1617 |
||
1618 |
triggerDefSeq := self visit:anObject triggerDefExpr. |
|
1619 |
targetSeq := self visit:anObject targetExpr. |
|
1620 |
self announceTracepointInterrupt. |
|
1621 |
connectCmd := (ConnectCommand new) |
|
1622 |
targetSequence:targetSeq; |
|
1623 |
triggerDefSequence:triggerDefSeq. |
|
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1624 |
|
277 | 1625 |
pendingUpdateList := pendingUpdateList mergeWith:connectCmd. |
1626 |
^ (XQuerySequence new) |
|
1627 |
||
1628 |
"Created: / 25-03-2012 / 12:23:35 / Adam Senk <senkadam@gmail.com>" |
|
1629 |
! |
|
1630 |
||
235 | 1631 |
visitAstContextItemExpr:anObject |
1632 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1633 |
"TODO - toto rozhodne neni spravne. Je treba promyslet, |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1634 |
jak spravne nastavovat currentFocus" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1635 |
currentFocus isNil ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1636 |
^ self currentNodeSet. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1637 |
] ifFalse: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1638 |
^XQuerySequence with: currentFocus contextItem |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1639 |
]. |
235 | 1640 |
|
1641 |
"Created: / 07-11-2006 / 22:04:03 / ked" |
|
1642 |
"Modified: / 21-03-2007 / 23:01:12 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1643 |
"Modified: / 19-07-2009 / 17:56:43 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1644 |
! |
1645 |
||
1646 |
visitAstDecimalLiteral:anObject |
|
1647 |
"dispatched back from the visited astDecimalLiteral-object (visitor pattern)" |
|
1648 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1649 |
^XQuerySequence with: ((AtomicItem withValue: anObject content) castAs: 'xs:decimal'). |
235 | 1650 |
|
1651 |
"Created: / 06-07-2006 / 19:12:09 / ked" |
|
1652 |
"Modified: / 08-10-2006 / 13:35:40 / ked" |
|
1653 |
"Modified: / 21-03-2007 / 13:54:01 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1654 |
"Modified: / 15-10-2009 / 20:21:56 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1655 |
! |
1656 |
||
1657 |
visitAstDefaultNamespaceDecl: anObject |
|
1658 |
||
1659 |
| nsUri | |
|
1660 |
nsUri := anObject uri content. "because it is instance of AstStringLiteral" |
|
1661 |
nsUri := nsUri copyFrom:2 to: nsUri size - 1. |
|
1662 |
||
1663 |
anObject type == #element |
|
1664 |
ifTrue:[defaultElementNamespaceURI := nsUri] |
|
1665 |
ifFalse:[defaultFunctionNamespaceURI := nsUri] |
|
1666 |
||
1667 |
"Created: / 24-12-2006 / 15:12:53 / janfrog" |
|
1668 |
"Modified: / 24-12-2006 / 17:18:40 / janfrog" |
|
1669 |
! |
|
1670 |
||
1671 |
visitAstDeleteExpr:anObject |
|
1672 |
|targetSeq deleteCmd| |
|
1673 |
||
1674 |
targetSeq := self visit:anObject targetExpr. |
|
1675 |
self announceTracepointInterrupt. |
|
1676 |
deleteCmd := DeleteCommand new targetSequence:targetSeq. |
|
1677 |
pendingUpdateList := pendingUpdateList mergeWith:deleteCmd. |
|
1678 |
^ (XQuerySequence new) |
|
1679 |
||
1680 |
"Modified: / 08-11-2007 / 00:25:34 / beyboy" |
|
1681 |
"Modified: / 14-11-2007 / 11:31:24 / janfrog" |
|
1682 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
1683 |
! |
|
1684 |
||
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1685 |
visitAstDeleteTriggerExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1686 |
|createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1687 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1688 |
createCmd := self visit:anObject triggerBodyExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1689 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1690 |
createCmd event:'delete'. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1691 |
^createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1692 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1693 |
"Created: / 10-04-2012 / 20:30:10 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1694 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1695 |
|
235 | 1696 |
visitAstDirAttributeList:anObject |
1697 |
"dispatched back from the visited astDirAttributeList-object (visitor pattern)" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1698 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1699 |
^ self shouldNeverBeSent. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1700 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1701 |
"Modified: / 25-07-2009 / 23:32:50 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1702 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1703 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1704 |
visitAstDirAttributeListElem:anObject |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1705 |
"dispatched back from the visited astCompAttrConstructor-object (visitor pattern)" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1706 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1707 |
| seqItem valueSeq qName| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1708 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1709 |
seqItem := NodeItem withNode: 'attribute'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1710 |
valueSeq := (self visit: anObject dirAttributeValue). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1711 |
self assert: valueSeq size = 1. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1712 |
seqItem dmTypedValue: (valueSeq first). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1713 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1714 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1715 |
qName := (self visit: anObject qName) first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1716 |
(self isNamespaceDeclaration: qName) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1717 |
self addUri: (seqItem dmTypedValue stringValue) toNamespacePrefix: (qName localName). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1718 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1719 |
seqItem dmNodeName: qName. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1720 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1721 |
^ XQuerySequence with:seqItem. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1722 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1723 |
"Modified: / 09-11-2006 / 23:45:28 / ked" |
235 | 1724 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1725 |
"Modified: / 21-03-2007 / 23:01:12 / janfrog" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1726 |
"Created: / 25-07-2009 / 23:30:02 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1727 |
"Modified: / 06-10-2009 / 14:21:17 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1728 |
! |
1729 |
||
1730 |
visitAstDirElemConstructor:anObject |
|
1731 |
"dispatched back from the visited astCompElemConstructor-object (visitor pattern)" |
|
1732 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1733 |
|qName seqItem value| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1734 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1735 |
seqItem := NodeItem withNode: 'element'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1736 |
qName := (self visit: anObject qName) first. |
235 | 1737 |
self announceTracepointInterrupt. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1738 |
seqItem dmNodeName: qName. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1739 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1740 |
self |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1741 |
appendSequence:(self visitCollection:anObject dirAttributeList) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1742 |
toConstructedElement:seqItem |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1743 |
whichIsDocument:false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1744 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1745 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1746 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1747 |
" 3. Adjacent text nodes in the content sequence are merged into a single text |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1748 |
node by concatenating their contents, with no intervening blanks. After concatenation, |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1749 |
any text node whose content is a zero-length string is deleted from the content sequence." |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1750 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1751 |
value := ''. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1752 |
(self visitCollection:anObject dirElemContent) do: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1753 |
[ :item | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1754 |
item isAtomicValue ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1755 |
value := value, item stringValue. |
235 | 1756 |
] |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1757 |
ifFalse: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1758 |
[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1759 |
(value size ~= 0) ifTrue: [(NodeItem withText: value) appendInto: seqItem.]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1760 |
item appendInto: seqItem. |
235 | 1761 |
]. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1762 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1763 |
(value size ~= 0) ifTrue: [(NodeItem withText: value) appendInto: seqItem.]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1764 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1765 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1766 |
^ XQuerySequence with:(seqItem). |
235 | 1767 |
|
1768 |
"Created: / 06-07-2006 / 19:12:09 / ked" |
|
1769 |
"Modified: / 09-11-2006 / 23:53:01 / ked" |
|
1770 |
"Modified: / 28-03-2007 / 22:40:16 / janfrog" |
|
1771 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1772 |
"Modified: / 06-10-2009 / 17:46:24 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1773 |
! |
1774 |
||
1775 |
visitAstDirElemContent:anObject |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1776 |
| contentSeq item | |
235 | 1777 |
self announceTracepointInterrupt. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1778 |
^ contentSeq := self visit:anObject content. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1779 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1780 |
"/ item := NodeItem withNode: 'element'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1781 |
"/ item dmBaseUri: self baseUri. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1782 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1783 |
"/ contentSeq do: [ : cItem | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1784 |
"/ cItem appendInto: item. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1785 |
"/ ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1786 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1787 |
"/ ^ (XQuerySequence withAll: item xpathChild) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1788 |
"/ addAll: item xpathAttribute; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1789 |
"/ yourself |
235 | 1790 |
|
1791 |
"Modified: / 28-03-2007 / 23:11:41 / janfrog" |
|
1792 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1793 |
"Modified: / 06-10-2009 / 17:11:21 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1794 |
! |
1795 |
||
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1796 |
visitAstDisconnectTriggerExpr: anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1797 |
|targetSeq disconnectCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1798 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1799 |
targetSeq := self visit:anObject targetExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1800 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1801 |
disconnectCmd := (DisConnectCommand new) |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1802 |
targetSequence:targetSeq. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1803 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1804 |
self halt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1805 |
pendingUpdateList := pendingUpdateList mergeWith:disconnectCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1806 |
^ (XQuerySequence new) |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1807 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1808 |
"Created: / 10-04-2012 / 19:14:00 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1809 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1810 |
|
235 | 1811 |
visitAstDocumentTest:anObject |
1812 |
"dispatched back from the visited astDocumentTest-object (visitor pattern)" |
|
1813 |
||
1814 |
|givenContext resultDataContext childrenDataContext| |
|
1815 |
||
1816 |
self |
|
1817 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
1818 |
resultDataContext := OrderedCollection new. |
|
1819 |
givenContext dataContext do:[:dataContextItem | |
|
1820 |
(dataContextItem type isSubtypeOf:XQuerySequenceItem typeNode) ifTrue:[ |
|
1821 |
dataContextItem item xpathIsDocument ifTrue:[ |
|
1822 |
anObject elementTest |
|
1823 |
ifNil:[ resultDataContext add:dataContextItem. ] |
|
1824 |
ifNotNil:[ |
|
1825 |
childrenDataContext := dataContextItem item xpathChild. |
|
1826 |
childrenDataContext size = 1 ifTrue:[ |
|
1827 |
context := givenContext copyContext dataContext:childrenDataContext. |
|
1828 |
self visit:(anObject elementTest). |
|
1829 |
context dataContext size = 1 ifTrue:[ |
|
1830 |
resultDataContext add:dataContextItem. |
|
1831 |
]. |
|
1832 |
]. |
|
1833 |
]. |
|
1834 |
]. |
|
1835 |
]. |
|
1836 |
]. |
|
1837 |
context := givenContext copyContext dataContext:resultDataContext. |
|
1838 |
||
1839 |
"Created: / 21-11-2006 / 21:55:21 / ked" |
|
1840 |
"Modified: / 23-11-2006 / 12:23:53 / ked" |
|
1841 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
1842 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
1843 |
! |
|
1844 |
||
1845 |
visitAstDoubleLiteral:anObject |
|
1846 |
"dispatched back from the visited astDoubleLiteral-object (visitor pattern)" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1847 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1848 |
^XQuerySequence with: ((AtomicItem withValue: anObject content) castAs: 'xs:double'). |
235 | 1849 |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1850 |
"/ context := context copyContext |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1851 |
"/ dataContextSingle:(XQueryConstructedItem new |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1852 |
"/ item:(anObject content)) |
235 | 1853 |
|
1854 |
"Created: / 06-07-2006 / 19:12:10 / ked" |
|
1855 |
"Modified: / 08-10-2006 / 13:35:49 / ked" |
|
1856 |
"Modified: / 05-12-2007 / 15:21:44 / janfrog" |
|
1857 |
"Modified: / 18-09-2008 / 15:40:08 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1858 |
"Modified: / 19-10-2009 / 22:01:42 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1859 |
! |
1860 |
||
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1861 |
visitAstDropTriggerExpr: anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1862 |
|name dropCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1863 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1864 |
name := self visit:anObject name. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1865 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1866 |
dropCmd := (DropCommand new) |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1867 |
name: name. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1868 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1869 |
self halt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1870 |
pendingUpdateList := pendingUpdateList mergeWith:dropCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1871 |
^ (XQuerySequence new) |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1872 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1873 |
"Created: / 10-04-2012 / 19:48:19 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1874 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
1875 |
|
235 | 1876 |
visitAstDummyNode: anObject |
1877 |
||
1878 |
^self visit: anObject dummyNode |
|
1879 |
||
1880 |
"Created: / 28-03-2007 / 20:25:32 / janfrog" |
|
1881 |
! |
|
1882 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1883 |
visitAstElementContentChar: elementContentChar |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1884 |
^ XQuerySequence withString: elementContentChar content. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1885 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1886 |
"Created: / 19-07-2009 / 14:49:34 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1887 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1888 |
|
235 | 1889 |
visitAstElementNameOrWildcard:anObject |
1890 |
"dispatched back from the visited astElementNameOrWildcard-object (visitor pattern)" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1891 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1892 |
|name| |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1893 |
"TODO: this code needs revision - written without proper knowledge of the |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1894 |
whole xquery exectuion process" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1895 |
name := (self visit:(anObject elementName)) first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1896 |
^ self currentNodeSet:(self currentNodeSet |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1897 |
select:[:item | item dmNodeName = name ]). |
235 | 1898 |
|
1899 |
"Created: / 21-11-2006 / 22:00:20 / ked" |
|
1900 |
"Modified: / 23-11-2006 / 13:33:54 / ked" |
|
1901 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
1902 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
1903 |
"Modified: / 06-10-2009 / 12:35:44 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 1904 |
! |
1905 |
||
1906 |
visitAstElementTest:anObject |
|
1907 |
"dispatched back from the visited astElementTest-object (visitor pattern)" |
|
1908 |
||
1909 |
|givenContext elementNameNode| |
|
1910 |
||
1911 |
self |
|
1912 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
1913 |
anObject elementName |
|
1914 |
ifNil:[ |
|
1915 |
elementNameNode := AstElementNameOrWildcard new. |
|
1916 |
self visit:elementNameNode. |
|
1917 |
] |
|
1918 |
ifNotNil:[ self visit:(anObject elementName). ]. |
|
1919 |
self announceTracepointInterrupt. |
|
1920 |
||
1921 |
"Created: / 21-11-2006 / 21:59:28 / ked" |
|
1922 |
"Modified: / 23-11-2006 / 13:07:57 / ked" |
|
1923 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
1924 |
! |
|
1925 |
||
1926 |
visitAstEnclosedExpr:anObject |
|
1927 |
||
1928 |
^self visit:(anObject expr). |
|
1929 |
||
1930 |
"Created: / 06-11-2006 / 22:40:40 / ked" |
|
1931 |
"Modified: / 09-11-2006 / 18:45:20 / ked" |
|
1932 |
"Modified: / 28-03-2007 / 23:05:47 / janfrog" |
|
1933 |
! |
|
1934 |
||
1935 |
visitAstExpr:anObject |
|
1936 |
||
1937 |
^(self visit:anObject exprSingle) |
|
1938 |
addAll:(self visit:anObject expr); |
|
1939 |
yourself. |
|
1940 |
||
1941 |
"Created: / 06-07-2006 / 19:12:10 / ked" |
|
1942 |
"Modified: / 08-10-2006 / 13:36:20 / ked" |
|
1943 |
"Modified: / 21-03-2007 / 14:20:09 / janfrog" |
|
1944 |
! |
|
1945 |
||
1946 |
visitAstFLWORExpr:anObject |
|
1947 |
|forLetClauses result| |
|
1948 |
||
1949 |
"/self visit:anObject flworExpr_ForLet. |
|
1950 |
forLetClauses := anObject flworExpr_ForLet asCollectionOfForLetClauses. |
|
1951 |
result := XQuerySequence new:16. |
|
1952 |
||
1953 |
self |
|
1954 |
bloomForLetClauses: forLetClauses |
|
1955 |
using: |
|
1956 |
[(self visit: anObject whereClause) effectiveBooleanValue |
|
1957 |
ifTrue:[result addAll: (self visit: anObject exprSingle)]]. |
|
1958 |
||
1959 |
^result |
|
1960 |
||
1961 |
"Modified: / 30-11-2006 / 23:49:28 / ked" |
|
1962 |
"Created: / 26-03-2007 / 23:22:18 / janfrog" |
|
1963 |
"Modified: / 28-03-2007 / 21:28:14 / janfrog" |
|
1964 |
! |
|
1965 |
||
1966 |
visitAstFLWORExpr_ForLet:anObject |
|
1967 |
"dispatched back from the visited astFLWORExpr_ForLet-object (visitor pattern)" |
|
1968 |
||
1969 |
anObject letClause |
|
1970 |
ifNotNil:[ |
|
1971 |
self visit:(anObject letClause). |
|
1972 |
self announceTracepointInterrupt |
|
1973 |
]. |
|
1974 |
anObject forClause |
|
1975 |
ifNotNil:[ |
|
1976 |
self visit:(anObject forClause). |
|
1977 |
self announceTracepointInterrupt. |
|
1978 |
]. |
|
1979 |
anObject flworExpr_ForLet |
|
1980 |
ifNotNil:[ self visit:(anObject flworExpr_ForLet) ]. |
|
1981 |
||
1982 |
"Created: / 06-07-2006 / 19:12:10 / ked" |
|
1983 |
"Modified: / 02-11-2006 / 10:33:16 / ked" |
|
1984 |
"Modified: / 28-03-2007 / 16:52:22 / janfrog" |
|
1985 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
1986 |
! |
|
1987 |
||
1988 |
visitAstFilterExpr:anObject |
|
1989 |
"dispatched back from the visited astFilterExpr-object (visitor pattern)" |
|
1990 |
||
1991 |
self currentNodeSet:(self visit:(anObject primaryExpr)). |
|
1992 |
self announceTracepointInterrupt. |
|
1993 |
anObject predicateList do:[:xpathPredicate | |
|
1994 |
self currentNodeSet:(self visit:xpathPredicate). |
|
1995 |
self announceTracepointInterrupt. |
|
1996 |
]. |
|
1997 |
^ self currentNodeSet |
|
1998 |
||
1999 |
"Created: / 06-07-2006 / 19:12:10 / ked" |
|
2000 |
"Modified: / 13-10-2006 / 14:37:06 / ked" |
|
2001 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
2002 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2003 |
! |
|
2004 |
||
2005 |
visitAstForClause:anObject |
|
2006 |
||
2007 |
"there is no so much work to do - see visitFLWORExpr:" |
|
2008 |
anObject forClause ifNotNil: |
|
2009 |
[self visit:(anObject forClause)]. |
|
2010 |
||
2011 |
"Created: / 06-07-2006 / 19:12:10 / ked" |
|
2012 |
"Modified: / 02-11-2006 / 10:33:38 / ked" |
|
2013 |
"Modified: / 28-03-2007 / 16:54:14 / janfrog" |
|
2014 |
"Modified: / 24-09-2008 / 07:49:33 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2015 |
! |
|
2016 |
||
2017 |
visitAstForwardStep:anObject |
|
2018 |
"dispatched back from the visited astForwardStep-object (visitor pattern)" |
|
2019 |
||
2020 |
anObject abbrevForwardStep |
|
2021 |
ifNil:[ |
|
2022 |
"evaluate axis" |
|
2023 |
self currentNodeSet:(self currentNodeSet |
|
2024 |
inject:(XQuerySequence new:(self currentNodeSet size * 2)) |
|
2025 |
into:[:newNodeSet :nodeSetItem | |
|
2026 |
newNodeSet |
|
2027 |
addAll:(nodeSetItem item perform:anObject forwardAxis); |
|
2028 |
yourself |
|
2029 |
]). |
|
2030 |
self currentNodeSet:(self visit:anObject nodeTest). |
|
2031 |
] |
|
2032 |
ifNotNil:[ self currentNodeSet:(self visit:anObject abbrevForwardStep) ]. |
|
2033 |
^ self currentNodeSet |
|
2034 |
||
2035 |
"Created: / 06-07-2006 / 19:12:10 / ked" |
|
2036 |
"Modified: / 02-12-2006 / 11:05:30 / ked" |
|
2037 |
"Modified: / 08-11-2007 / 00:25:01 / beyboy" |
|
2038 |
"Modified: / 05-12-2007 / 10:37:09 / janfrog" |
|
2039 |
! |
|
2040 |
||
2041 |
visitAstFunctionCall:anObject |
|
2042 |
"dispatched back from the visited astFunctionCall-object (visitor pattern)" |
|
2043 |
||
2044 |
|functionQName retval | |
|
2045 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2046 |
functionQName := (self visit:anObject qname) first asString. |
235 | 2047 |
anObject functionParametersList |
2048 |
ifNil:[ |
|
2049 |
retval := self funcTable |
|
2050 |
evaluate:functionQName |
|
2051 |
inContext:context |
|
2052 |
withParameters:(OrderedCollection new) |
|
2053 |
forInterpreter:self. |
|
2054 |
] |
|
2055 |
ifNotNil:[ |
|
2056 |
|params| |
|
2057 |
||
2058 |
params := self visit:anObject functionParametersList. |
|
2059 |
retval := self funcTable |
|
2060 |
evaluate:functionQName |
|
2061 |
inContext:context |
|
2062 |
withParameters:params |
|
2063 |
forInterpreter:self. |
|
2064 |
]. |
|
2065 |
^ retval |
|
2066 |
||
2067 |
"Created: / 06-07-2006 / 19:12:11 / ked" |
|
2068 |
"Modified: / 23-11-2006 / 19:12:01 / ked" |
|
2069 |
"Modified: / 28-08-2007 / 22:48:21 / janfrog" |
|
2070 |
"Modified: / 18-09-2008 / 15:40:07 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2071 |
"Modified: / 05-10-2009 / 15:29:16 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2072 |
! |
2073 |
||
2074 |
visitAstFunctionDecl:anObject |
|
2075 |
||
2076 |
| function | |
|
2077 |
function := UserDefinedFunction new |
|
2078 |
name: (XMLv2::NodeName |
|
2079 |
fromString: anObject name content |
|
2080 |
andPrefixToNamespaceURIMapping: prefixToNamespaceURIMapping |
|
2081 |
defaultNS: defaultFunctionNamespaceURI ); |
|
2082 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2083 |
params: (anObject paramList collect:[:e|FunctionParam new name: (self visit: e name)]); |
235 | 2084 |
|
2085 |
body: anObject body. |
|
2086 |
||
2087 |
funcTable defineFunction: function |
|
2088 |
||
2089 |
"Modified: / 28-12-2006 / 16:34:12 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2090 |
"Modified: / 19-09-2009 / 15:25:27 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2091 |
! |
2092 |
||
2093 |
visitAstFunctionParametersList:anObject |
|
2094 |
||
2095 |
| params | |
|
2096 |
params := anObject functionParametersList |
|
2097 |
ifNil:[OrderedCollection new: 4] |
|
2098 |
ifNotNil:[self visit: anObject functionParametersList]. |
|
2099 |
||
2100 |
params addFirst: (self visit:anObject exprSingle). |
|
2101 |
||
2102 |
^params |
|
2103 |
||
2104 |
"Created: / 11-11-2006 / 18:51:30 / ked" |
|
2105 |
"Modified: / 23-11-2006 / 18:54:41 / ked" |
|
2106 |
"Modified: / 28-03-2007 / 23:00:55 / janfrog" |
|
2107 |
! |
|
2108 |
||
2109 |
visitAstIfExpr:anObject |
|
2110 |
|conditionValue| |
|
2111 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2112 |
XQuerySequenceError handle: [ :ex | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2113 |
XQueryInterpreterError raiseErrorString: ex asString. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2114 |
] do: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2115 |
conditionValue := (self visit:anObject expr) effectiveBooleanValue. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2116 |
]. |
235 | 2117 |
self announceTracepointInterrupt. |
2118 |
^ conditionValue |
|
2119 |
ifTrue:[ self visit:anObject trueExprSingle ] |
|
2120 |
ifFalse:[ self visit:anObject falseExprSingle ] |
|
2121 |
||
2122 |
"Modified: / 21-03-2007 / 14:57:38 / janfrog" |
|
2123 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2124 |
"Modified: / 22-09-2009 / 15:15:18 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2125 |
! |
2126 |
||
2127 |
visitAstInsertAfterExpr:anObject |
|
2128 |
|sourceSeq targetSeq insertCmd| |
|
2129 |
||
2130 |
targetSeq := self visit:anObject targetExpr. |
|
2131 |
sourceSeq := self visit:anObject sourceExpr. |
|
2132 |
self announceTracepointInterrupt. |
|
2133 |
insertCmd := (InsertAfterCommand new) |
|
2134 |
targetSequence:targetSeq; |
|
2135 |
sourceSequence:sourceSeq. |
|
2136 |
pendingUpdateList := pendingUpdateList mergeWith:insertCmd. |
|
2137 |
^ (XQuerySequence new) |
|
2138 |
||
2139 |
"Modified: / 21-11-2007 / 09:04:57 / janfrog" |
|
2140 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2141 |
! |
|
2142 |
||
2143 |
visitAstInsertAsFirstIntoExpr:anObject |
|
2144 |
|sourceSeq targetSeq insertCmd| |
|
2145 |
||
2146 |
targetSeq := self visit:anObject targetExpr. |
|
2147 |
sourceSeq := self visit:anObject sourceExpr. |
|
2148 |
self announceTracepointInterrupt. |
|
2149 |
insertCmd := (InsertAsFirstIntoCommand new) |
|
2150 |
targetSequence:targetSeq; |
|
2151 |
sourceSequence:sourceSeq. |
|
2152 |
pendingUpdateList := pendingUpdateList mergeWith:insertCmd. |
|
2153 |
^ (XQuerySequence new) |
|
2154 |
||
2155 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2156 |
! |
|
2157 |
||
2158 |
visitAstInsertAsLastIntoExpr:anObject |
|
2159 |
|sourceSeq targetSeq insertCmd| |
|
2160 |
||
2161 |
targetSeq := self visit:anObject targetExpr. |
|
2162 |
sourceSeq := self visit:anObject sourceExpr. |
|
2163 |
self announceTracepointInterrupt. |
|
2164 |
insertCmd := (InsertAsLastIntoCommand new) |
|
2165 |
targetSequence:targetSeq; |
|
2166 |
sourceSequence:sourceSeq. |
|
2167 |
pendingUpdateList := pendingUpdateList mergeWith:insertCmd. |
|
2168 |
^ (XQuerySequence new) |
|
2169 |
||
2170 |
"Modified: / 21-11-2007 / 12:46:18 / janfrog" |
|
2171 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2172 |
! |
|
2173 |
||
2174 |
visitAstInsertBeforeExpr:anObject |
|
2175 |
|sourceSeq targetSeq insertCmd| |
|
2176 |
||
2177 |
targetSeq := self visit:anObject targetExpr. |
|
2178 |
sourceSeq := self visit:anObject sourceExpr. |
|
2179 |
self announceTracepointInterrupt. |
|
2180 |
insertCmd := (InsertBeforeCommand new) |
|
2181 |
targetSequence:targetSeq; |
|
2182 |
sourceSequence:sourceSeq. |
|
2183 |
pendingUpdateList := pendingUpdateList mergeWith:insertCmd. |
|
2184 |
^ (XQuerySequence new) |
|
2185 |
||
2186 |
"Modified: / 21-11-2007 / 12:46:32 / janfrog" |
|
2187 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2188 |
! |
|
2189 |
||
2190 |
visitAstInsertIntoExpr:anObject |
|
2191 |
|sourceSeq targetSeq insertCmd| |
|
2192 |
||
2193 |
targetSeq := self visit:anObject targetExpr. |
|
2194 |
sourceSeq := self visit:anObject sourceExpr. |
|
2195 |
self announceTracepointInterrupt. |
|
2196 |
insertCmd := (InsertIntoCommand new) |
|
2197 |
targetSequence:targetSeq; |
|
2198 |
sourceSequence:sourceSeq. |
|
2199 |
pendingUpdateList := pendingUpdateList mergeWith:insertCmd. |
|
2200 |
^ (XQuerySequence new) |
|
2201 |
||
2202 |
"Modified: / 21-11-2007 / 12:46:40 / janfrog" |
|
2203 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2204 |
! |
|
2205 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2206 |
visitAstInstanceOfExpr:instanceOfExpr |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2207 |
| treatSeq | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2208 |
treatSeq := (self visit: instanceOfExpr treatExpr). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2209 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2210 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2211 |
instanceOfExpr sequenceType ifNil: [ ^ treatSeq ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2212 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2213 |
self currentNodeSet: treatSeq. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2214 |
^ self visit: instanceOfExpr sequenceType. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2215 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2216 |
"Modified: / 15-10-2009 / 00:00:41 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2217 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2218 |
|
235 | 2219 |
visitAstIntegerLiteral:anObject |
2220 |
"dispatched back from the visited astIntegerLiteral-object (visitor pattern)" |
|
2221 |
||
2222 |
self announceTracepointInterrupt. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2223 |
^ XQuerySequence with: ((AtomicItem withValue: anObject content) castAs: 'xs:integer'). |
235 | 2224 |
|
2225 |
"Created: / 06-07-2006 / 19:12:11 / ked" |
|
2226 |
"Modified: / 08-10-2006 / 13:40:04 / ked" |
|
2227 |
"Modified: / 21-03-2007 / 13:53:11 / janfrog" |
|
2228 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2229 |
"Modified: / 15-10-2009 / 20:19:55 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2230 |
! |
2231 |
||
2232 |
visitAstIntersectExceptExpr:anObject |
|
2233 |
"dispatched back from the visited astIntersectExceptExpr-object (visitor pattern)" |
|
2234 |
||
2235 |
|givenContext unaryContext intersectExceptContext nonuniqueDataContext resultDataContext| |
|
2236 |
||
2237 |
self |
|
2238 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
2239 |
self visit:(anObject unaryExpr). |
|
2240 |
unaryContext := context. |
|
2241 |
context := givenContext. |
|
2242 |
self visit:(anObject intersectExceptExpr). |
|
2243 |
intersectExceptContext := context. |
|
2244 |
context := givenContext copyContext. |
|
2245 |
nonuniqueDataContext := OrderedCollection new. |
|
2246 |
anObject operand = #intersect ifTrue:[ |
|
2247 |
"The intersect operator takes two node sequences as operands and returns a sequence |
|
2248 |
containing all the nodes that occur in both operands." |
|
2249 |
unaryContext dataContext do:[:unaryDataContextItem | |
|
2250 |
self |
|
2251 |
assert:(unaryDataContextItem type isSubtypeOf:XQuerySequenceItem typeNode). |
|
2252 |
(intersectExceptContext dataContext |
|
2253 |
anySatisfy:[:intersectExceptDataContextItem | |
|
2254 |
self assert:(intersectExceptDataContextItem type |
|
2255 |
isSubtypeOf:XQuerySequenceItem typeNode). |
|
2256 |
intersectExceptDataContextItem item = unaryDataContextItem item. |
|
2257 |
]) |
|
2258 |
ifTrue:[ nonuniqueDataContext add:unaryDataContextItem. ]. |
|
2259 |
]. |
|
2260 |
] ifFalse:[ |
|
2261 |
"The except operator takes two node sequences as operands and returns a sequence |
|
2262 |
containing all the nodes that occur in the first operand but not in the second operand." |
|
2263 |
unaryContext dataContext do:[:unaryDataContextItem | |
|
2264 |
self |
|
2265 |
assert:(unaryDataContextItem type isSubtypeOf:XQuerySequenceItem typeNode). |
|
2266 |
(intersectExceptContext dataContext |
|
2267 |
anySatisfy:[:intersectExceptDataContextItem | |
|
2268 |
self assert:(intersectExceptDataContextItem type |
|
2269 |
isSubtypeOf:XQuerySequenceItem typeNode). |
|
2270 |
intersectExceptDataContextItem item = unaryDataContextItem item. |
|
2271 |
]) |
|
2272 |
ifFalse:[ nonuniqueDataContext add:unaryDataContextItem. ]. |
|
2273 |
]. |
|
2274 |
]. |
|
2275 |
resultDataContext := OrderedCollection new. |
|
2276 |
self uniqueAddNodeSequence:nonuniqueDataContext to:resultDataContext. |
|
2277 |
context dataContext:resultDataContext. |
|
2278 |
||
2279 |
"Created: / 06-07-2006 / 19:12:11 / ked" |
|
2280 |
"Modified: / 01-12-2006 / 16:48:18 / ked" |
|
2281 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
2282 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2283 |
! |
|
2284 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2285 |
visitAstItemType: itemType |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2286 |
"dispatched back from the visited astItemType-object (visitor pattern)" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2287 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2288 |
itemType itemTest ifNotNil: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2289 |
^ self visit: itemType itemTest. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2290 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2291 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2292 |
itemType kindTest ifNotNil: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2293 |
^ self visit: itemType kindTest. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2294 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2295 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2296 |
itemType atomicType ifNotNil: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2297 |
| type | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2298 |
type := (self visit: itemType atomicType) first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2299 |
^ self currentNodeSet select: [: item | item isSubtypeOf: type qName ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2300 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2301 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2302 |
^ self shouldNeverBeReached. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2303 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2304 |
"Modified: / 15-10-2009 / 13:30:15 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2305 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2306 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2307 |
visitAstItemTypeItem:anObject |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2308 |
"every data type is item" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2309 |
^ self currentNodeSet. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2310 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2311 |
"Created: / 10-05-2009 / 14:33:34 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2312 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2313 |
|
235 | 2314 |
visitAstLetClause:anObject |
2315 |
|name value| |
|
2316 |
||
2317 |
name := self visit:anObject varName. |
|
2318 |
value := self visit:anObject exprSingle. |
|
2319 |
self announceTracepointInterrupt. |
|
2320 |
self bindVar:name to:value. |
|
2321 |
self visit:anObject letClause. |
|
2322 |
||
2323 |
"Created: / 06-07-2006 / 19:12:11 / ked" |
|
2324 |
"Modified: / 03-12-2006 / 17:06:43 / ked" |
|
2325 |
"Modified: / 28-03-2007 / 18:10:35 / janfrog" |
|
2326 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2327 |
"Modified: / 19-09-2009 / 15:10:34 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2328 |
! |
2329 |
||
2330 |
visitAstMainModule:anObject |
|
2331 |
||
2332 |
^self |
|
2333 |
visit: anObject prolog; |
|
2334 |
visit: anObject queryBody |
|
2335 |
||
2336 |
"Modified: / 12-10-2006 / 23:08:51 / ked" |
|
2337 |
"Created: / 24-12-2006 / 14:57:06 / janfrog" |
|
2338 |
"Modified: / 24-12-2006 / 16:19:06 / janfrog" |
|
2339 |
! |
|
2340 |
||
2341 |
visitAstModuleImport: anObject |
|
2342 |
||
2343 |
| prefix uri | |
|
2344 |
uri := anObject uri content. "because it is instance of AstStringLiteral" |
|
2345 |
uri := uri copyFrom:2 to: uri size - 1. |
|
2346 |
||
2347 |
anObject prefix ifNotNil: |
|
2348 |
[prefix := anObject prefix content. |
|
2349 |
prefix = 'xml' ifTrue:[self error:'Cannot redefine ''xml'' namespace prefix.']. |
|
2350 |
prefix = 'xmlns' ifTrue:[self error:'Cannot bind ''xmlns'' prefix to namespace uri']. |
|
2351 |
prefixToNamespaceURIMapping |
|
2352 |
at: prefix |
|
2353 |
put: uri]. |
|
2354 |
||
2355 |
self loadFunctionLibraryWithURI: uri |
|
2356 |
||
2357 |
"Modified: / 24-12-2006 / 17:16:56 / janfrog" |
|
2358 |
"Created: / 01-12-2008 / 09:54:03 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2359 |
! |
|
2360 |
||
2361 |
visitAstMultiplicativeExpr:anObject |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2362 |
|leftSequence rightSequence left right multiplicativeOperations | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2363 |
|
235 | 2364 |
self announceTracepointInterrupt. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2365 |
" Each operand is evaluated by applying the following steps, in order: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2366 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2367 |
1.Atomization is applied to the operand. The result of this operation is called the atomized operand. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2368 |
" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2369 |
leftSequence := (self visit:anObject unionExpr) asAtomizedSequence . |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2370 |
rightSequence := (self visit:anObject multiplicativeExpr) asAtomizedSequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2371 |
" 2.If the atomized operand is an empty sequence, the result of the arithmetic expression is an empty sequence, |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2372 |
and the implementation need not evaluate the other operand or apply the operator. However, an implementation |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2373 |
may choose to evaluate the other operand in order to determine whether it raises an error." |
235 | 2374 |
(leftSequence size = 0) ifTrue:[ |
2375 |
^ XQuerySequence new:0 |
|
2376 |
]. |
|
2377 |
(rightSequence size = 0) ifTrue:[ |
|
2378 |
^ XQuerySequence new:0 |
|
2379 |
]. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2380 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2381 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2382 |
" 3.If the atomized operand is a sequence of length greater than one, a type error is raised [err:XPTY0004]." |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2383 |
(leftSequence size > 1) ifTrue: [ self raiseError: 'err:XPTY0004']. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2384 |
(rightSequence size > 1) ifTrue: [ self raiseError: 'err:XPTY0004']. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2385 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2386 |
" 4.If the atomized operand is of type xs:untypedAtomic, it is cast to xs:double. If the cast fails, a dynamic |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2387 |
error is raised. [err:FORG0001]" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2388 |
left := leftSequence first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2389 |
right := rightSequence first. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2390 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2391 |
(left isType: 'xs:untypedAtomic') ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2392 |
left := left castAs: 'xs:double'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2393 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2394 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2395 |
(right isType: 'xs:untypedAtomic') ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2396 |
right := right castAs: 'xs:double'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2397 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2398 |
|
235 | 2399 |
"evaluate operation" |
2400 |
multiplicativeOperations := (Dictionary new) |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2401 |
at:#krat put:[ 'op:numeric-multiply' ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2402 |
at:#div put:[ 'op:numeric-divide' ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2403 |
at:#idiv put:[ 'op:numeric-integer-divide' ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2404 |
at:#mod put:[ 'op:numeric-mod' ]; |
235 | 2405 |
yourself. |
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2406 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2407 |
^ self funcTable |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2408 |
evaluate:((multiplicativeOperations at:anObject operand) value) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2409 |
inContext:context |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2410 |
withParameters: (OrderedCollection with: left with: right) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2411 |
forInterpreter:self. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2412 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2413 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2414 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2415 |
"/ result := ((multiplicativeOperations at:anObject operand) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2416 |
"/ value:left |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2417 |
"/ value:right). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2418 |
"/ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2419 |
"/ ^ XQuerySequence with: ((AtomicItem withValue: result) asGuessedType). |
235 | 2420 |
|
2421 |
"Created: / 06-07-2006 / 19:12:11 / ked" |
|
2422 |
"Modified: / 08-10-2006 / 20:15:22 / ked" |
|
2423 |
"Modified: / 21-03-2007 / 15:46:55 / janfrog" |
|
2424 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2425 |
"Modified: / 09-11-2009 / 16:38:25 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2426 |
! |
2427 |
||
2428 |
visitAstNCName:anObject |
|
2429 |
"dispatched back from the visited astNCName-object (visitor pattern)" |
|
2430 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2431 |
^ XQuerySequence with: (AtomicItem withValue: (anObject content) asType: 'xs:NCName'). |
235 | 2432 |
|
2433 |
"Created: / 06-07-2006 / 19:12:11 / ked" |
|
2434 |
"Modified: / 18-11-2006 / 16:26:33 / ked" |
|
2435 |
"Modified: / 28-03-2007 / 23:12:55 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2436 |
"Modified: / 07-10-2009 / 11:40:54 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2437 |
! |
2438 |
||
2439 |
visitAstNameTest:anObject |
|
2440 |
"dispatched back from the visited astNameTest-object (visitor pattern)" |
|
2441 |
||
2442 |
anObject qname |
|
2443 |
ifNotNil:[ |
|
2444 |
|nodename| |
|
2445 |
||
2446 |
nodename := self xmlNodeNameFromQName:(self visit:anObject qname). |
|
2447 |
^ self currentNodeSet:(self currentNodeSet |
|
2448 |
select:[:nodeSetItem | |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2449 |
(nodeSetItem type isSubtypeOf: (TypeFactory getType: 'node')) |
235 | 2450 |
and:[ |
2451 |
nodeSetItem item isElementOrAttributeNode |
|
2452 |
and:[ |
|
2453 |
nodeSetItem item xpathNamespace = nodename ns |
|
2454 |
and:[ nodeSetItem item xpathLocalName = nodename localName ] |
|
2455 |
] |
|
2456 |
] |
|
2457 |
]) |
|
2458 |
]. |
|
2459 |
anObject wildcard |
|
2460 |
ifNotNil:[ |
|
2461 |
|wildcard| |
|
2462 |
||
2463 |
wildcard := self visit:anObject wildcard. |
|
2464 |
^ self currentNodeSet:(self currentNodeSet select:[:nodeSetItem | true ]) |
|
2465 |
]. |
|
2466 |
self shouldNeverBeReached |
|
2467 |
||
2468 |
"Created: / 12-10-2006 / 21:58:21 / ked" |
|
2469 |
"Modified: / 02-12-2006 / 12:20:41 / ked" |
|
2470 |
"Modified: / 05-12-2007 / 21:21:33 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2471 |
"Modified: / 09-05-2009 / 12:19:50 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2472 |
! |
2473 |
||
2474 |
visitAstNamespaceDecl: anObject |
|
2475 |
||
2476 |
| prefix nsUri | |
|
2477 |
prefix := anObject prefix content. "because it is instance of AstNCName" |
|
2478 |
nsUri := anObject nsuri content. "because it is instance of AstStringLiteral" |
|
2479 |
nsUri := nsUri copyFrom:2 to: nsUri size - 1. |
|
2480 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2481 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2482 |
^ self addUri: nsUri toNamespacePrefix: prefix. |
235 | 2483 |
|
2484 |
"Created: / 24-12-2006 / 15:12:58 / janfrog" |
|
2485 |
"Modified: / 24-12-2006 / 17:16:56 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2486 |
"Modified: / 18-09-2009 / 15:19:11 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2487 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2488 |
|
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2489 |
visitAstNodeTriggerExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2490 |
|createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2491 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2492 |
createCmd := self visit:anObject triggerNameAndTargetExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2493 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2494 |
createCmd type:'node'. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2495 |
self halt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2496 |
pendingUpdateList := pendingUpdateList mergeWith:createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2497 |
^ (XQuerySequence new) |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2498 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2499 |
"Created: / 10-04-2012 / 20:26:10 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2500 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2501 |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2502 |
visitAstOneOccurrenceIndicator:anObject |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2503 |
^XQuerySequence withBoolean:(self currentNodeSet size = 1). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2504 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2505 |
"Created: / 10-05-2009 / 15:26:41 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2506 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2507 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2508 |
visitAstOneOrMultipleOccurrenceIndicator:anObject |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2509 |
^XQuerySequence withBoolean:(self currentNodeSet size >= 1). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2510 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2511 |
"Modified: / 10-05-2009 / 15:34:34 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2512 |
! |
2513 |
||
2514 |
visitAstOrExpr:anObject |
|
2515 |
"dispatched back from the visited astAdditiveExpr-object (visitor pattern)" |
|
2516 |
||
2517 |
|leftSequence rightSequence| |
|
2518 |
||
2519 |
leftSequence := self visit:anObject andExpr. |
|
2520 |
rightSequence := self visit:anObject orExpr. |
|
2521 |
self announceTracepointInterrupt. |
|
2522 |
"evaluate operation" |
|
2523 |
^ XQuerySequence withBoolean:(leftSequence effectiveBooleanValue |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2524 |
or:[ rightSequence effectiveBooleanValue ]) |
235 | 2525 |
|
2526 |
"Created: / 06-07-2006 / 19:12:08 / ked" |
|
2527 |
"Modified: / 08-10-2006 / 20:15:15 / ked" |
|
2528 |
"Modified: / 21-03-2007 / 15:09:13 / janfrog" |
|
2529 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2530 |
"Modified: / 07-10-2009 / 10:21:25 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2531 |
! |
2532 |
||
2533 |
visitAstOrderByClause:anObject |
|
2534 |
"dispatched back from the visited astOrderByClause-object (visitor pattern)" |
|
2535 |
||
2536 |
|givenContext| |
|
2537 |
||
2538 |
self |
|
2539 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
2540 |
context := givenContext copyContext optContextEmpty. |
|
2541 |
context optContext at:#orderSpecList put:(OrderedCollection new). |
|
2542 |
self visit:(anObject orderSpecList). |
|
2543 |
||
2544 |
"Created: / 06-07-2006 / 19:12:12 / ked" |
|
2545 |
"Modified: / 26-11-2006 / 20:06:09 / ked" |
|
2546 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2547 |
! |
|
2548 |
||
2549 |
visitAstOrderModifier:anObject |
|
2550 |
"dispatched back from the visited astOrderModifier-object (visitor pattern)" |
|
2551 |
||
2552 |
"fall back to general object-case - please change as required" |
|
2553 |
||
2554 |
^ self visitObject:anObject |
|
2555 |
||
2556 |
"Created: / 06-07-2006 / 19:12:12 / ked" |
|
2557 |
! |
|
2558 |
||
2559 |
visitAstOrderSpec:anObject |
|
2560 |
"dispatched back from the visited astOrderSpec-object (visitor pattern)" |
|
2561 |
||
2562 |
|givenContext orderSpecItem| |
|
2563 |
||
2564 |
self |
|
2565 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
2566 |
self visit:(anObject exprSingle). |
|
2567 |
orderSpecItem := XQueryOrderSpecItem new orderValue:context dataContext. |
|
2568 |
context := givenContext copyContext. |
|
2569 |
anObject orderModifier |
|
2570 |
ifNotNil:[ |
|
2571 |
anObject orderModifier ascDesc |
|
2572 |
ifNotNil:[ orderSpecItem ascDesc:anObject orderModifier ascDesc. ]. |
|
2573 |
anObject orderModifier greatestLeast |
|
2574 |
ifNotNil:[ |
|
2575 |
orderSpecItem emptyGreatestLeast:anObject orderModifier greatestLeast. |
|
2576 |
]. |
|
2577 |
]. |
|
2578 |
(context optContext at:#orderSpecList) addFirst:orderSpecItem. |
|
2579 |
||
2580 |
"Created: / 06-07-2006 / 19:12:12 / ked" |
|
2581 |
"Modified: / 30-11-2006 / 15:18:28 / ked" |
|
2582 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2583 |
! |
|
2584 |
||
2585 |
visitAstOrderSpecList:anObject |
|
2586 |
"dispatched back from the visited astOrderSpecList-object (visitor pattern)" |
|
2587 |
||
2588 |
|givenContext orderSpecContext orderSpecItem| |
|
2589 |
||
2590 |
self |
|
2591 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
2592 |
context := givenContext copyContext optContextEmpty. |
|
2593 |
context optContext at:#orderSpecList put:(OrderedCollection new). |
|
2594 |
self visit:(anObject orderSpec). |
|
2595 |
orderSpecContext := context. |
|
2596 |
context := givenContext. |
|
2597 |
orderSpecItem := (orderSpecContext optContext at:#orderSpecList) first. |
|
2598 |
anObject orderSpecList ifNotNil:[ self visit:(anObject orderSpecList). ]. |
|
2599 |
(context optContext at:#orderSpecList) addFirst:orderSpecItem. |
|
2600 |
||
2601 |
"Created: / 06-07-2006 / 19:12:12 / ked" |
|
2602 |
"Modified: / 30-11-2006 / 15:21:31 / ked" |
|
2603 |
"Modified: / 18-09-2008 / 17:47:02 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2604 |
! |
|
2605 |
||
2606 |
visitAstParenthesizedExpr:anObject |
|
2607 |
"dispatched back from the visited astParenthesizedExpr-object (visitor pattern)" |
|
2608 |
||
2609 |
^anObject expr |
|
2610 |
ifNotNil:[self visit:anObject expr] |
|
2611 |
ifNil:[XQuerySequence new] |
|
2612 |
||
2613 |
"Created: / 08-07-2006 / 18:40:13 / ked" |
|
2614 |
"Modified: / 02-11-2006 / 10:42:34 / ked" |
|
2615 |
"Modified: / 29-03-2007 / 10:06:39 / janfrog" |
|
2616 |
! |
|
2617 |
||
2618 |
visitAstPathExpr:anObject |
|
2619 |
"dispatched back from the visited astPathExpr-object (visitor pattern)" |
|
2620 |
||
2621 |
|givenContext expandedDataContext resultDataContext| |
|
2622 |
||
2623 |
self |
|
2624 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
2625 |
context := givenContext copyContext. |
|
2626 |
anObject startSign = #slash ifTrue:[ |
|
2627 |
resultDataContext := OrderedCollection new. |
|
2628 |
self |
|
2629 |
innerFocusIn:context |
|
2630 |
do:[:dataContextItem :innerFocusItem | |
|
2631 |
self |
|
2632 |
assert:(dataContextItem type isSubtypeOf:XQuerySequenceItem typeNode). |
|
2633 |
expandedDataContext := OrderedCollection new. |
|
2634 |
expandedDataContext addAll:(dataContextItem item xpathDocument). |
|
2635 |
] |
|
2636 |
withResultDo:[:dataContextItem :innerFocusItem :exprContext | |
|
2637 |
self uniqueAddNodeSequence:expandedDataContext to:resultDataContext. |
|
2638 |
]. |
|
2639 |
context := givenContext dataContext:resultDataContext. |
|
2640 |
]. |
|
2641 |
anObject startSign = #slashSlash ifTrue:[ |
|
2642 |
resultDataContext := OrderedCollection new. |
|
2643 |
self |
|
2644 |
innerFocusIn:context |
|
2645 |
do:[:dataContextItem :innerFocusItem | |
|
2646 |
self |
|
2647 |
assert:(dataContextItem type isSubtypeOf:XQuerySequenceItem typeNode). |
|
2648 |
expandedDataContext := OrderedCollection new. |
|
2649 |
expandedDataContext |
|
2650 |
addAll:(dataContextItem item xpathDocument first item |
|
2651 |
xpathDescendantOrSelf). |
|
2652 |
] |
|
2653 |
withResultDo:[:dataContextItem :innerFocusItem :exprContext | |
|
2654 |
self uniqueAddNodeSequence:expandedDataContext to:resultDataContext. |
|
2655 |
]. |
|
2656 |
context := givenContext dataContext:resultDataContext. |
|
2657 |
]. |
|
2658 |
resultDataContext := OrderedCollection new. |
|
2659 |
self |
|
2660 |
innerFocusIn:context |
|
2661 |
do:[:dataContextItem :innerFocusItem | self visit:(anObject relativePathExpr). ] |
|
2662 |
withResultDo:[:dataContextItem :innerFocusItem :exprContext | |
|
2663 |
self uniqueAddNodeSequence:exprContext dataContext to:resultDataContext. |
|
2664 |
]. |
|
2665 |
context dataContext:resultDataContext. |
|
2666 |
||
2667 |
"Created: / 06-07-2006 / 19:12:12 / ked" |
|
2668 |
"Modified: / 02-12-2006 / 11:25:43 / ked" |
|
2669 |
"Modified: / 05-12-2007 / 21:03:38 / janfrog" |
|
2670 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2671 |
! |
|
2672 |
||
2673 |
visitAstPredefinedEntityRef:anObject |
|
2674 |
"dispatched back from the visited astPredefinedEntityRef-object (visitor pattern)" |
|
2675 |
||
2676 |
| predefinedEntities | |
|
2677 |
||
2678 |
predefinedEntities := Dictionary new |
|
2679 |
at: '<' put: '<'; |
|
2680 |
at: '>' put: '>'; |
|
2681 |
at: '&' put: '&'; |
|
2682 |
at: ''' put: ''''; |
|
2683 |
yourself. |
|
2684 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2685 |
self error: 'TODO TODO TODO'. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2686 |
"/ context := context copyContext |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2687 |
"/ dataContextSingle:(XQueryConstructedItem new |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2688 |
"/ item:(predefinedEntities at:(anObject content)); |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2689 |
"/ type: (TypeFactory getType: 'xs:string')). |
235 | 2690 |
|
2691 |
"Created: / 06-07-2006 / 19:12:12 / ked" |
|
2692 |
"Modified: / 03-12-2006 / 16:53:19 / ked" |
|
2693 |
"Modified: / 21-03-2007 / 13:16:53 / janfrog" |
|
2694 |
"Modified: / 18-09-2008 / 15:40:07 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2695 |
"Modified: / 22-06-2009 / 19:55:50 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2696 |
"Modified: / 28-01-2010 / 10:52:30 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
235 | 2697 |
! |
2698 |
||
2699 |
visitAstPredicate:anObject |
|
2700 |
"dispatched back from the visited astPredicate-object (visitor pattern)" |
|
2701 |
||
2702 |
^ self |
|
2703 |
withFocusDo:[ |
|
2704 |
self currentNodeSet:(self currentNodeSet |
|
2705 |
select:[:nodeSetItem | |
|
2706 |
|exprSeq| |
|
2707 |
||
2708 |
currentFocus |
|
2709 |
contextItem:nodeSetItem; |
|
2710 |
contextPositionAdvance. |
|
2711 |
self currentNodeSet:(XQuerySequence with:currentFocus contextItem). |
|
2712 |
exprSeq := self visit:anObject expr. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2713 |
exprSeq containsSingleNumber ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2714 |
currentFocus contextPosition = exprSeq asNumber |
235 | 2715 |
] ifFalse:[ |
2716 |
exprSeq effectiveBooleanValue |
|
2717 |
] |
|
2718 |
]) |
|
2719 |
] |
|
2720 |
||
2721 |
"Created: / 06-07-2006 / 19:12:13 / ked" |
|
2722 |
"Modified: / 01-12-2006 / 23:38:55 / ked" |
|
2723 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2724 |
"Modified: / 04-10-2009 / 18:02:10 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2725 |
"Modified: / 16-12-2009 / 09:59:45 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
235 | 2726 |
! |
2727 |
||
2728 |
visitAstProlog: anObject |
|
2729 |
||
2730 |
anObject declarations do:[:e|self visit:e] |
|
2731 |
||
2732 |
"Created: / 24-12-2006 / 15:12:37 / janfrog" |
|
2733 |
! |
|
2734 |
||
2735 |
visitAstQName:anObject |
|
2736 |
"dispatched back from the visited astQName-object (visitor pattern)" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2737 |
| qName | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2738 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2739 |
qName := self qNameFromAtomic: (AtomicItem withValue: anObject content). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2740 |
^ XQuerySequence with: qName. |
235 | 2741 |
|
2742 |
"Created: / 06-07-2006 / 19:12:13 / ked" |
|
2743 |
"Modified: / 08-10-2006 / 13:22:15 / ked" |
|
2744 |
"Modified: / 20-03-2007 / 23:13:15 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2745 |
"Modified: / 06-10-2009 / 14:34:30 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2746 |
! |
2747 |
||
2748 |
visitAstQuantifiedExpr:anObject |
|
2749 |
|quantifiedExprImpls bloomingBlock| |
|
2750 |
||
2751 |
quantifiedExprImpls := anObject quantifiedExpr_Impl |
|
2752 |
asCollectionOfQuantifiedExprImpls. |
|
2753 |
bloomingBlock := anObject someEvery = #some ifTrue:[ |
|
2754 |
[ |
|
2755 |
|exprValue| |
|
2756 |
||
2757 |
exprValue := (self visit:anObject exprSingle) effectiveBooleanValue. |
|
2758 |
self announceTracepointInterrupt. |
|
2759 |
exprValue ifTrue:[ |
|
2760 |
^ XQuerySequence withBoolean:true |
|
2761 |
] |
|
2762 |
] |
|
2763 |
] ifFalse:[ |
|
2764 |
[ |
|
2765 |
|exprValue| |
|
2766 |
||
2767 |
exprValue := (self visit:anObject exprSingle) effectiveBooleanValue. |
|
2768 |
self announceTracepointInterrupt. |
|
2769 |
exprValue ifTrue:[ |
|
2770 |
^ XQuerySequence withBoolean:false |
|
2771 |
] |
|
2772 |
] |
|
2773 |
]. |
|
2774 |
self bloomQuantifiedExprImpls:quantifiedExprImpls using:bloomingBlock. |
|
2775 |
^ anObject someEvery = #some |
|
2776 |
ifTrue:[ XQuerySequence withBoolean:false ] |
|
2777 |
ifFalse:[ XQuerySequence withBoolean:true ] |
|
2778 |
||
2779 |
"Modified: / 28-03-2007 / 22:30:30 / janfrog" |
|
2780 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2781 |
! |
|
2782 |
||
2783 |
visitAstQuantifiedExpr_Impl:anObject |
|
2784 |
"dispatched back from the visited astQuantifiedExpr_Impl-object (visitor pattern)" |
|
2785 |
||
2786 |
|givenContext quantifiedTuple| |
|
2787 |
||
2788 |
self |
|
2789 |
halt:'Not yet ported. Ask Jan Vrany <vranyj1@fel.cvut.cz> for further explanation'. |
|
2790 |
quantifiedTuple := XQueryTupleItem new. |
|
2791 |
quantifiedTuple forLet:#for. |
|
2792 |
quantifiedTuple varExpr:(anObject exprSingle). |
|
2793 |
quantifiedTuple varName:(self visit:anObject varName). |
|
2794 |
context := givenContext copyContext. |
|
2795 |
(context optContext at:#quantifiedTuple) add:quantifiedTuple. |
|
2796 |
anObject quantifiedExpr_Impl |
|
2797 |
ifNotNil:[ self visit:(anObject quantifiedExpr_Impl). ]. |
|
2798 |
||
2799 |
"Created: / 06-07-2006 / 19:12:13 / ked" |
|
2800 |
"Modified: / 02-11-2006 / 11:21:32 / ked" |
|
2801 |
"Modified: / 20-03-2007 / 23:36:54 / janfrog" |
|
2802 |
"Modified: / 18-09-2008 / 17:47:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2803 |
! |
|
2804 |
||
2805 |
visitAstRangeExpr:anObject |
|
2806 |
"dispatched back from the visited astRangeExpr-object (visitor pattern)" |
|
2807 |
||
2808 |
|fromSequence toSequence| |
|
2809 |
||
2810 |
fromSequence := self visit:(anObject additiveExprFrom). |
|
2811 |
toSequence := self visit:(anObject additiveExprTo). |
|
2812 |
self announceTracepointInterrupt. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2813 |
self assert:(fromSequence containsSingleNumber). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2814 |
self assert:(toSequence containsSingleNumber). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2815 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2816 |
^ XQuerySequence withAll: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2817 |
((fromSequence first value to: toSequence first value) collect: [ : number | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2818 |
(AtomicItem withValue: number asType: 'xs:decimal') castAs: 'xs:integer' |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2819 |
]) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2820 |
"/ ^ XQuerySequence withNumbers:((fromSequence first asNumber) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2821 |
"/ to:(toSequence first asNumber)) |
235 | 2822 |
|
2823 |
"Created: / 06-07-2006 / 19:12:13 / ked" |
|
2824 |
"Modified: / 08-10-2006 / 13:25:33 / ked" |
|
2825 |
"Modified: / 21-03-2007 / 14:28:03 / janfrog" |
|
2826 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2827 |
"Modified: / 10-11-2009 / 12:19:21 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 2828 |
! |
2829 |
||
2830 |
visitAstRelativePathExpr:anObject |
|
2831 |
"dispatched back from the visited astRelativePathExpr-object (visitor pattern)" |
|
2832 |
||
2833 |
self currentNodeSet:(self visit:anObject relativePathExpr). |
|
2834 |
self announceTracepointInterrupt. |
|
2835 |
anObject divSign = #slashSlash ifTrue:[ |
|
2836 |
|"descendant-or-self" abbrevExpandedNode| |
|
2837 |
||
2838 |
abbrevExpandedNode := (AstForwardStep new) |
|
2839 |
forwardAxis:#xpathDescendantOrSelf; |
|
2840 |
nodeTest:(AstAnyKindTest new). |
|
2841 |
self currentNodeSet:(self visit:abbrevExpandedNode). |
|
2842 |
]. |
|
2843 |
anObject stepExpr |
|
2844 |
ifNotNil:[ self currentNodeSet:(self visit:anObject stepExpr) ]. |
|
2845 |
self currentNodeSet class == self class ifTrue:[ |
|
2846 |
self halt |
|
2847 |
]. |
|
2848 |
^ self currentNodeSet |
|
2849 |
||
2850 |
"Created: / 06-07-2006 / 19:12:13 / ked" |
|
2851 |
"Modified: / 01-12-2006 / 23:36:32 / ked" |
|
2852 |
"Modified: / 08-11-2007 / 00:25:54 / beyboy" |
|
2853 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
2854 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2855 |
! |
|
2856 |
||
275 | 2857 |
visitAstRenameExpr:anObject |
2858 |
|targetNode newName renameCmd| |
|
2859 |
||
2860 |
targetNode := self visit:anObject targetExpr. |
|
2861 |
newName := self visit:anObject newNameExpr. |
|
2862 |
self announceTracepointInterrupt. |
|
2863 |
renameCmd := (RenameCommand new) |
|
2864 |
targetSequence:targetNode; |
|
2865 |
sourceSequence:newName. |
|
2866 |
renameCmd execute. |
|
2867 |
" pendingUpdateList := pendingUpdateList mergeWith:renameCmd. " |
|
2868 |
^ (XQuerySequence new) |
|
2869 |
||
2870 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2871 |
"Modified: / 31-01-2012 / 22:36:07 / Adam Senk <senkadam@gmail.com>" |
|
2872 |
! |
|
2873 |
||
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2874 |
visitAstRenameTriggerExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2875 |
|createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2876 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2877 |
createCmd := self visit:anObject triggerBodyExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2878 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2879 |
createCmd event:'rename'. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2880 |
^createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2881 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2882 |
"Created: / 10-04-2012 / 20:14:37 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2883 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2884 |
|
235 | 2885 |
visitAstReplaceExpr:anObject |
2886 |
|targetNode sourceNodes replaceCmd| |
|
2887 |
||
2888 |
targetNode := self visit:anObject targetExpr. |
|
2889 |
sourceNodes := self visit:anObject sourceExpr. |
|
2890 |
self announceTracepointInterrupt. |
|
2891 |
replaceCmd := (ReplaceCommand new) |
|
2892 |
targetSequence:targetNode; |
|
2893 |
sourceSequence:sourceNodes. |
|
2894 |
pendingUpdateList := pendingUpdateList mergeWith:replaceCmd. |
|
2895 |
^ (XQuerySequence new) |
|
2896 |
||
2897 |
"Modified: / 21-11-2007 / 12:00:06 / janfrog" |
|
2898 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2899 |
! |
|
2900 |
||
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2901 |
visitAstReplaceTriggerExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2902 |
|createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2903 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2904 |
createCmd := self visit:anObject triggerBodyExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2905 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2906 |
createCmd event:'replace'. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2907 |
^createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2908 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2909 |
"Created: / 10-04-2012 / 20:29:55 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2910 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
2911 |
|
235 | 2912 |
visitAstReplaceValueOfExpr:anObject |
2913 |
|targetSequence newValue replaceValueOfCmd| |
|
2914 |
||
2915 |
targetSequence := self visit:anObject targetExpr. |
|
2916 |
newValue := self visit:anObject sourceExpr. |
|
2917 |
self announceTracepointInterrupt. |
|
2918 |
targetSequence containsSingleElement ifFalse:[ |
|
2919 |
replaceValueOfCmd := (ReplaceValueOfCommand new) |
|
2920 |
targetSequence:targetSequence; |
|
2921 |
sourceSequence:newValue. |
|
2922 |
] ifTrue:[ |
|
2923 |
replaceValueOfCmd := (ReplaceElementContentCommand new) |
|
2924 |
targetSequence:targetSequence; |
|
2925 |
sourceSequence:newValue. |
|
2926 |
]. |
|
2927 |
pendingUpdateList := pendingUpdateList mergeWith:replaceValueOfCmd. |
|
2928 |
^ (XQuerySequence new) |
|
2929 |
||
2930 |
"Modified: / 14-11-2007 / 14:51:16 / janfrog" |
|
2931 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
2932 |
! |
|
2933 |
||
2934 |
visitAstReverseStep:anObject |
|
2935 |
anObject abbrevReverseStep |
|
2936 |
ifNil:[ |
|
2937 |
"evaluate axis" |
|
2938 |
self currentNodeSet:(self currentNodeSet |
|
2939 |
inject:(XQuerySequence new:(self currentNodeSet size * 2)) |
|
2940 |
into:[:newNodeSet :nodeSetItem | |
|
2941 |
newNodeSet |
|
2942 |
addAll:(nodeSetItem item perform:anObject reverseAxis); |
|
2943 |
yourself |
|
2944 |
]). |
|
2945 |
self currentNodeSet:(self visit:anObject nodeTest) |
|
2946 |
] |
|
2947 |
ifNotNil:[ |
|
2948 |
|expandedNode| |
|
2949 |
||
2950 |
expandedNode := (AstReverseStep new) |
|
2951 |
reverseAxis:#xpathParent; |
|
2952 |
nodeTest:(AstAnyKindTest new). |
|
2953 |
self currentNodeSet:(self visit:expandedNode) |
|
2954 |
]. |
|
2955 |
^ self currentNodeSet |
|
2956 |
||
2957 |
"Created: / 06-07-2006 / 19:12:14 / ked" |
|
2958 |
"Modified: / 02-12-2006 / 11:07:04 / ked" |
|
2959 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
2960 |
! |
|
2961 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2962 |
visitAstSequenceType:sequenceType |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2963 |
"2.5.4.1 Matching a SequenceType and a Value |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2964 |
* The sequence type empty-sequence() matches a value that is the empty sequence. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2965 |
* An ItemType with no OccurrenceIndicator matches any value that contains exactly one item |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2966 |
if the ItemType matches that item (see 2.5.4.2 Matching an ItemType and an Item). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2967 |
* An ItemType with an OccurrenceIndicator matches a value if the number of items in the value |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2968 |
matches the OccurrenceIndicator and the ItemType matches each of the items in the value. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2969 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2970 |
An OccurrenceIndicator specifies the number of items in a sequence, as follows: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2971 |
* ? matches zero or one items |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2972 |
* * matches zero or more items |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2973 |
* + matches one or more items |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2974 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2975 |
As a consequence of these rules, any sequence type whose OccurrenceIndicator is * or ? matches |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2976 |
a value that is an empty sequence." |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2977 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2978 |
"test empty sequence" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2979 |
sequenceType isWithEmptySequence ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2980 |
^ XQuerySequence withBoolean:(self currentNodeSet size = 0). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2981 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2982 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2983 |
(self currentNodeSet size = (self visit:sequenceType itemType) size) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2984 |
"every item is of the required type - test the occurrence" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2985 |
^ self visit:sequenceType occurrenceIndicator. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2986 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2987 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2988 |
"every item is not of the required type" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2989 |
^XQuerySequence withBoolean: false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2990 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2991 |
"Modified: / 15-10-2009 / 14:04:53 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2992 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2993 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2994 |
visitAstSingleType:singleType |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2995 |
| atomicType | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2996 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2997 |
"empty sequence with ? occurence indicator" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2998 |
((self currentNodeSet size = 0) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
2999 |
and:[ (singleType occurenceIndicator notNil) ]) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3000 |
ifTrue:[ ^ XQuerySequence withBoolean:true. ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3001 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3002 |
"sequence with one item" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3003 |
(self currentNodeSet size = 1) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3004 |
atomicType := singleType atomicType qName content. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3005 |
(self currentNodeSet first isSubtypeOf: atomicType) ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3006 |
^ XQuerySequence withBoolean:true. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3007 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3008 |
]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3009 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3010 |
^ XQuerySequence withBoolean:false. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3011 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3012 |
"Created: / 05-07-2009 / 16:39:26 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3013 |
"Modified: / 15-10-2009 / 12:42:30 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3014 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3015 |
|
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3016 |
visitAstStatementTriggerExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3017 |
|createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3018 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3019 |
createCmd := self visit:anObject triggerNameAndTargetExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3020 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3021 |
createCmd type:'statement'. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3022 |
self halt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3023 |
pendingUpdateList := pendingUpdateList mergeWith:createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3024 |
^ (XQuerySequence new) |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3025 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3026 |
"Created: / 10-04-2012 / 20:28:33 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3027 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3028 |
|
235 | 3029 |
visitAstStringLiteral:anObject |
3030 |
"dispatched back from the visited astStringLiteral-object (visitor pattern)" |
|
3031 |
||
3032 |
self announceTracepointInterrupt. |
|
3033 |
^ XQuerySequence |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3034 |
withAtomicValue:((anObject content) copyFrom:2 to:(anObject content) size - 1) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3035 |
asType: 'xs:string'. |
235 | 3036 |
|
3037 |
"Created: / 06-07-2006 / 19:12:14 / ked" |
|
3038 |
"Modified: / 13-10-2006 / 16:34:02 / ked" |
|
3039 |
"Modified: / 21-03-2007 / 15:46:13 / janfrog" |
|
3040 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3041 |
"Modified: / 02-10-2009 / 21:06:40 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3042 |
! |
3043 |
||
3044 |
visitAstTextTest:anObject |
|
3045 |
"dispatched back from the visited astNameTest-object (visitor pattern)" |
|
3046 |
||
3047 |
^ self currentNodeSet:(self currentNodeSet |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3048 |
select:[:item | (item type isSubtypeOf: (TypeFactory getType: 'node')) and:[ item item isTextNode ] ]). |
235 | 3049 |
|
3050 |
"Created: / 12-10-2006 / 21:58:21 / ked" |
|
3051 |
"Modified: / 02-12-2006 / 12:20:41 / ked" |
|
3052 |
"Modified: / 05-12-2007 / 21:04:05 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3053 |
"Modified: / 09-05-2009 / 12:20:50 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3054 |
! |
3055 |
||
3056 |
visitAstTransformCopyClause:anObject |
|
3057 |
|name value valueCopy| |
|
3058 |
name := self visit:anObject varName. |
|
3059 |
value := self visit:anObject exprSingle. |
|
3060 |
self announceTracepointInterrupt. |
|
3061 |
self assert:value containsSingleNode |
|
3062 |
message:'Only singleton sequences with node can be copied (now)'. |
|
274 | 3063 |
valueCopy := XQuerySequence with:(value first deepCopy). |
235 | 3064 |
self bindVar:name to:valueCopy. |
3065 |
anObject transformCopyClause |
|
3066 |
ifNotNil:[ self visit:anObject transformCopyClause ]. |
|
3067 |
||
3068 |
"Modified: / 05-12-2007 / 14:28:25 / janfrog" |
|
3069 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
274 | 3070 |
"Modified: / 13-02-2012 / 19:19:33 / Adam Senk <senkadam@gmail.com>" |
235 | 3071 |
! |
3072 |
||
3073 |
visitAstTransformExpr:anObject |
|
3074 |
|pul| |
|
3075 |
||
3076 |
self visit:anObject transformCopyClause. |
|
3077 |
self announceTracepointInterrupt. |
|
3078 |
pul := pendingUpdateList. |
|
3079 |
pendingUpdateList := EmptyCommand new. |
|
3080 |
self visit:anObject modifyExpr. |
|
3081 |
pendingUpdateList execute. |
|
3082 |
pendingUpdateList := pul. |
|
3083 |
^ XQuerySequence withAll:(self visit:anObject returnExpr). |
|
3084 |
||
3085 |
"Modified: / 05-12-2007 / 14:05:02 / janfrog" |
|
3086 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
3087 |
! |
|
3088 |
||
282
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3089 |
visitAstTriggerBodyExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3090 |
|body createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3091 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3092 |
body := self visit:anObject triggerBodyString. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3093 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3094 |
^createCmd := (CreateCommand new) |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3095 |
body:body. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3096 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3097 |
"Created: / 10-04-2012 / 20:00:07 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3098 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3099 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3100 |
visitAstTriggerNameAndTargetExpr:anObject |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3101 |
|name targetExpr createCmd| |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3102 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3103 |
createCmd := self visit:anObject beforeAfterExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3104 |
name := self visit:anObject name. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3105 |
targetExpr := self visit:anObject targetExpr. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3106 |
self announceTracepointInterrupt. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3107 |
createCmd targetSequence:targetExpr; |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3108 |
name: name. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3109 |
^createCmd. |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3110 |
|
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3111 |
"Created: / 10-04-2012 / 20:21:11 / Adam Senk <senkadam@gmail.com>" |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3112 |
! |
9f87f0bf7c96
Changes in XQuery interpreter - interpreting of trigger creating language
senkadam
parents:
277
diff
changeset
|
3113 |
|
235 | 3114 |
visitAstUnaryExpr:anObject |
3115 |
"dispatched back from the visited astUnaryExpr-object (visitor pattern)" |
|
3116 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3117 |
|valueSeq funcName | |
235 | 3118 |
|
3119 |
valueSeq := self visit:(anObject unaryExpr). |
|
3120 |
self announceTracepointInterrupt. |
|
3121 |
(valueSeq size = 0) ifTrue:[ |
|
3122 |
^ XQuerySequence new:0 |
|
3123 |
]. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3124 |
(valueSeq size = 1) ifFalse: [ self raiseError: '[err:XPTY0004]'.]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3125 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3126 |
"evaluate operation" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3127 |
(anObject operand == #plus) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3128 |
ifTrue:[ funcName := 'op:numeric-add' ] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3129 |
ifFalse:[ funcName := 'op:numeric-substract' ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3130 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3131 |
^ self funcTable |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3132 |
evaluate:funcName |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3133 |
inContext:context |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3134 |
withParameters: (XQuerySequence with: (AtomicItem withValue: 0 asType: 'xs:integer') |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3135 |
with: valueSeq first) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3136 |
forInterpreter:self. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3137 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3138 |
"/ unaryOperations |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3139 |
"/ at:#plus put:[:val | val ]; |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3140 |
"/ at:#minus put:[:val | 0 - val ]. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3141 |
"/ ^ XQuerySequence withNumber:((unaryOperations at:anObject operand) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3142 |
"/ value:valueSeq first value) |
235 | 3143 |
|
3144 |
"Created: / 06-07-2006 / 19:12:14 / ked" |
|
3145 |
"Modified: / 08-10-2006 / 13:26:15 / ked" |
|
3146 |
"Modified: / 21-03-2007 / 15:40:22 / janfrog" |
|
3147 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3148 |
"Modified: / 30-12-2009 / 15:05:27 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3149 |
! |
3150 |
||
3151 |
visitAstUnionExpr:anObject |
|
3152 |
"dispatched back from the visited astUnionExpr-object (visitor pattern)" |
|
3153 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3154 |
| intersectSequence unionSequence | |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3155 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3156 |
intersectSequence := self visit:(anObject intersectExceptExpr). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3157 |
unionSequence := self visit:(anObject unionExpr). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3158 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3159 |
^ intersectSequence |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3160 |
addAll: (unionSequence); |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3161 |
yourself. |
235 | 3162 |
|
3163 |
"Created: / 06-07-2006 / 19:12:14 / ked" |
|
3164 |
"Modified: / 01-12-2006 / 16:15:05 / ked" |
|
3165 |
"Modified: / 18-09-2008 / 17:47:02 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3166 |
"Modified: / 29-06-2009 / 23:29:35 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3167 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3168 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3169 |
visitAstVarDecl:varDecl |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3170 |
(varDecl expression = varDecl class externalDeclarationExpression) ifTrue: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3171 |
"nothing to do... variable should be declared from external environment" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3172 |
] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3173 |
ifFalse: [ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3174 |
"TODO: set variable with expression" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3175 |
] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3176 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3177 |
"Created: / 18-04-2009 / 12:05:14 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3178 |
! |
3179 |
||
3180 |
visitAstVarRef:anObject |
|
3181 |
"dispatched back from the visited astVarRef-object (visitor pattern)" |
|
3182 |
||
3183 |
|qName value| |
|
3184 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3185 |
qName := (self visit:anObject varName) first. |
235 | 3186 |
value := self valueOfVar:qName inContext:context. |
3187 |
self announceTracepointInterrupt. |
|
3188 |
^ (value isKindOf:XQuerySequence) |
|
3189 |
ifTrue:[ value ] |
|
3190 |
ifFalse:[ XQuerySequence with:value ] |
|
3191 |
||
3192 |
"Created: / 06-07-2006 / 19:12:14 / ked" |
|
3193 |
"Modified: / 08-10-2006 / 13:26:44 / ked" |
|
3194 |
"Modified: / 28-03-2007 / 17:04:40 / janfrog" |
|
3195 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3196 |
"Modified: / 05-10-2009 / 15:59:00 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3197 |
! |
3198 |
||
3199 |
visitAstWhereClause:anObject |
|
3200 |
"dispatched back from the visited astWhereClause-object (visitor pattern)" |
|
3201 |
||
3202 |
^self visit:(anObject exprSingle). |
|
3203 |
||
3204 |
"Created: / 06-07-2006 / 19:12:14 / ked" |
|
3205 |
"Modified: / 08-10-2006 / 13:27:03 / ked" |
|
3206 |
"Modified: / 28-03-2007 / 21:29:32 / janfrog" |
|
3207 |
! |
|
3208 |
||
3209 |
visitAstWildcard:anObject |
|
3210 |
"dispatched back from the visited astWildcard-object (visitor pattern)" |
|
3211 |
||
3212 |
"fall back to general object-case - please change as required" |
|
3213 |
||
3214 |
^ anObject ncName ? '*' |
|
3215 |
||
3216 |
"Created: / 06-07-2006 / 19:12:14 / ked" |
|
3217 |
"Modified: / 21-03-2007 / 20:37:22 / janfrog" |
|
3218 |
! |
|
3219 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3220 |
visitAstZeroOrMultipleOccurrenceIndicator:anObject |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3221 |
^XQuerySequence withBoolean:(self currentNodeSet size >= 0). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3222 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3223 |
"Modified: / 10-05-2009 / 15:34:59 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3224 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3225 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3226 |
visitAstZeroOrOneOccurrenceIndicator:anObject |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3227 |
^XQuerySequence |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3228 |
withBoolean:(self currentNodeSet size = 0 or:[self currentNodeSet size = 1]). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3229 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3230 |
"Modified: / 10-05-2009 / 16:59:07 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3231 |
! |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3232 |
|
235 | 3233 |
visitNilWith: ignored |
3234 |
||
3235 |
^nil |
|
3236 |
||
3237 |
"Created: / 28-03-2007 / 17:41:58 / janfrog" |
|
3238 |
! |
|
3239 |
||
3240 |
visitObject:anObject |
|
3241 |
"dispatched back from the visited objects (visitor pattern)" |
|
3242 |
||
3243 |
"general fallBack - please change as required" |
|
3244 |
||
3245 |
self error:'not yet implemented' |
|
3246 |
||
3247 |
"Modified: / 06-07-2006 / 19:12:14 / ked" |
|
3248 |
"Modified: / 21-11-2007 / 12:19:57 / janfrog" |
|
3249 |
! |
|
3250 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3251 |
visitXPathAnyKindTest:anObject |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3252 |
"/ ^ self currentNodeSet. |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3253 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3254 |
^ self currentNodeSet:(self currentNodeSet |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3255 |
select:[:item | item isNode ]) |
235 | 3256 |
|
3257 |
"Created: / 17-11-2007 / 15:31:51 / janfrog" |
|
3258 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3259 |
"Modified: / 05-10-2009 / 19:32:31 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3260 |
! |
3261 |
||
3262 |
visitXPathAttributeTest:anObject |
|
3263 |
"dispatched back from the visited xPathAttributeTest-object (visitor pattern)" |
|
3264 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3265 |
"TODO: needs revision - written without proper knowledge of the xquery exectuion process" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3266 |
^ self currentNodeSet:(self currentNodeSet |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3267 |
select:[:item | item xpathIsAttribute ]). |
235 | 3268 |
|
3269 |
"Created: / 17-11-2007 / 15:31:51 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3270 |
"Modified: / 03-05-2009 / 15:12:28 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3271 |
! |
3272 |
||
3273 |
visitXPathAxisAncestor:anObject |
|
3274 |
||
3275 |
^self reduceCurrentNodeSetUsing: |
|
3276 |
[:node|node xpathAncestor] |
|
3277 |
||
3278 |
"Modified: / 17-11-2007 / 19:49:19 / janfrog" |
|
3279 |
! |
|
3280 |
||
3281 |
visitXPathAxisAncestorOrSelf:anObject |
|
3282 |
||
3283 |
^self reduceCurrentNodeSetUsing: |
|
3284 |
[:node|node xpathAncestorOrSelf] |
|
3285 |
||
3286 |
"Modified: / 17-11-2007 / 19:49:30 / janfrog" |
|
3287 |
! |
|
3288 |
||
3289 |
visitXPathAxisAttribute:anObject |
|
3290 |
||
3291 |
^self reduceCurrentNodeSetUsing: |
|
3292 |
[:node|node xpathAttribute] |
|
3293 |
||
3294 |
"Modified: / 17-11-2007 / 19:50:01 / janfrog" |
|
3295 |
! |
|
3296 |
||
3297 |
visitXPathAxisChild:anObject |
|
3298 |
||
3299 |
^self reduceCurrentNodeSetUsing: |
|
3300 |
[:node|node xpathChild] |
|
3301 |
||
3302 |
"Modified: / 17-11-2007 / 19:50:10 / janfrog" |
|
3303 |
! |
|
3304 |
||
3305 |
visitXPathAxisDescendant:anObject |
|
3306 |
||
3307 |
^self reduceCurrentNodeSetUsing: |
|
3308 |
[:node|node xpathDescendant] |
|
3309 |
||
3310 |
"Modified: / 17-11-2007 / 19:50:20 / janfrog" |
|
3311 |
! |
|
3312 |
||
3313 |
visitXPathAxisDescendantOrSelf:anObject |
|
3314 |
||
3315 |
^self reduceCurrentNodeSetUsing: |
|
3316 |
[:node|node xpathDescendantOrSelf] |
|
3317 |
||
3318 |
"Modified: / 17-11-2007 / 19:50:32 / janfrog" |
|
3319 |
! |
|
3320 |
||
3321 |
visitXPathAxisFollowing:anObject |
|
3322 |
||
3323 |
^self reduceCurrentNodeSetUsing: |
|
3324 |
[:node|node xpathFollowing] |
|
3325 |
||
3326 |
"Modified: / 17-11-2007 / 19:50:44 / janfrog" |
|
3327 |
! |
|
3328 |
||
3329 |
visitXPathAxisFollowingSibling:anObject |
|
3330 |
||
3331 |
^self reduceCurrentNodeSetUsing: |
|
3332 |
[:node|node xpathFollowingSibling] |
|
3333 |
||
3334 |
"Modified: / 17-11-2007 / 19:52:09 / janfrog" |
|
3335 |
! |
|
3336 |
||
3337 |
visitXPathAxisParent:anObject |
|
3338 |
||
3339 |
^self reduceCurrentNodeSetUsing: |
|
3340 |
[:node|node xpathParent] |
|
3341 |
||
3342 |
"Modified: / 17-11-2007 / 19:52:17 / janfrog" |
|
3343 |
! |
|
3344 |
||
3345 |
visitXPathAxisPreceding:anObject |
|
3346 |
||
3347 |
^self reduceCurrentNodeSetUsing: |
|
3348 |
[:node|node xpathPreceding] |
|
3349 |
||
3350 |
"Modified: / 17-11-2007 / 19:52:44 / janfrog" |
|
3351 |
! |
|
3352 |
||
3353 |
visitXPathAxisPrecedingSibling:anObject |
|
3354 |
||
3355 |
^self reduceCurrentNodeSetUsing: |
|
3356 |
[:node|node xpathPrecedingSibling] |
|
3357 |
||
3358 |
"Modified: / 17-11-2007 / 19:52:40 / janfrog" |
|
3359 |
! |
|
3360 |
||
3361 |
visitXPathAxisSelf:anObject |
|
3362 |
^ self currentNodeSet |
|
3363 |
||
3364 |
"Modified: / 05-12-2007 / 10:37:09 / janfrog" |
|
3365 |
! |
|
3366 |
||
3367 |
visitXPathCommentTest:anObject |
|
3368 |
"dispatched back from the visited xPathCommentTest-object (visitor pattern)" |
|
3369 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3370 |
"TODO: needs revision - written withou proper knowledge of the xquery exectuion process" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3371 |
^ self currentNodeSet:(self currentNodeSet |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3372 |
select:[:item | item containsNode and:[ item item xpathIsComment ] ]). |
235 | 3373 |
|
3374 |
"Created: / 17-11-2007 / 15:31:52 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3375 |
"Modified: / 13-04-2009 / 11:37:27 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3376 |
! |
3377 |
||
3378 |
visitXPathDocumentTest:anObject |
|
3379 |
"dispatched back from the visited xPathDocumentTest-object (visitor pattern)" |
|
3380 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3381 |
"TODO: needs revision - written withou proper knowledge of the xquery exectuion process" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3382 |
^ self currentNodeSet:(self currentNodeSet |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3383 |
select:[:item | item containsNode and:[ item item xpathIsDocument ] ]). |
235 | 3384 |
|
3385 |
"Created: / 17-11-2007 / 15:31:52 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3386 |
"Modified: / 13-04-2009 / 11:37:37 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3387 |
! |
3388 |
||
3389 |
visitXPathElementTest:anObject |
|
3390 |
"dispatched back from the visited xPathElementTest-object (visitor pattern)" |
|
3391 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3392 |
"TODO: needs revision - written withou proper knowledge of the xquery exectuion process" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3393 |
self currentNodeSet:(self currentNodeSet |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3394 |
select:[:item | item xpathIsElement ]). |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3395 |
|
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3396 |
anObject elementName |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3397 |
ifNil:[ ^ self currentNodeSet ] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3398 |
ifNotNil:[ ^ self visit:(anObject elementName). ]. |
235 | 3399 |
|
3400 |
"Created: / 17-11-2007 / 15:31:52 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3401 |
"Modified: / 03-05-2009 / 13:56:23 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3402 |
! |
3403 |
||
3404 |
visitXPathExpression:xpathExpression |
|
3405 |
^ self |
|
3406 |
withCurrentNodeSetDo:[ |
|
3407 |
xpathExpression do:[:xpathLocationStepOrFilter | |
|
3408 |
self currentNodeSet:(self visit:xpathLocationStepOrFilter). |
|
3409 |
self announceTracepointInterrupt. |
|
3410 |
]. |
|
3411 |
self currentNodeSet |
|
3412 |
] |
|
3413 |
||
3414 |
"Created: / 17-11-2007 / 15:12:54 / janfrog" |
|
3415 |
"Modified: / 05-12-2007 / 10:37:08 / janfrog" |
|
3416 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
3417 |
! |
|
3418 |
||
3419 |
visitXPathLocationStep:xpathLocationStep |
|
3420 |
self currentNodeSet:(self visit:xpathLocationStep axis). |
|
3421 |
self currentNodeSet:(self visit:xpathLocationStep nodeTest). |
|
3422 |
xpathLocationStep predicates do:[:xpathPredicate | |
|
3423 |
self currentNodeSet:(self visit:xpathPredicate). |
|
3424 |
||
3425 |
]. |
|
3426 |
^ self currentNodeSet |
|
3427 |
||
3428 |
"Created: / 17-11-2007 / 15:13:07 / janfrog" |
|
3429 |
"Modified: / 05-12-2007 / 10:37:47 / janfrog" |
|
3430 |
"Modified: / 24-09-2008 / 07:57:14 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
3431 |
! |
|
3432 |
||
3433 |
visitXPathNameTest:anObject |
|
3434 |
|ns localName| |
|
3435 |
||
3436 |
ns := anObject prefix = '*' ifTrue:[ |
|
3437 |
'*' |
|
3438 |
] ifFalse:[ |
|
3439 |
anObject prefix isNil ifTrue:[ |
|
3440 |
'' |
|
3441 |
] ifFalse:[ |
|
3442 |
prefixToNamespaceURIMapping at:anObject prefix |
|
3443 |
ifAbsent:[ self errorNamespacePrefixNotDeclared:anObject prefix ] |
|
3444 |
] |
|
3445 |
]. |
|
3446 |
localName := anObject localName. |
|
3447 |
^ self currentNodeSet:(self currentNodeSet |
|
3448 |
select:[:nodeSetItem | |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3449 |
nodeSetItem isElementOrAttributeNode |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3450 |
and:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3451 |
(ns = '*' or: [ nodeSetItem xpathNamespace = ns ]) |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3452 |
and: |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3453 |
[ localName = '*' or:[ nodeSetItem xpathLocalName = localName ] ] |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3454 |
] |
235 | 3455 |
]). |
3456 |
||
3457 |
"Created: / 17-11-2007 / 15:31:52 / janfrog" |
|
3458 |
"Modified: / 05-12-2007 / 15:55:13 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3459 |
"Modified: / 04-10-2009 / 16:56:19 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3460 |
! |
3461 |
||
3462 |
visitXPathPredicate:xpathPredicate |
|
3463 |
^ self |
|
3464 |
withFocusDo:[ |
|
3465 |
self currentNodeSet:(self currentNodeSet |
|
3466 |
select:[:nodeSetItem | |
|
3467 |
|exprSeq| |
|
3468 |
||
3469 |
currentFocus |
|
3470 |
contextItem:nodeSetItem; |
|
3471 |
contextPositionAdvance. |
|
3472 |
self currentNodeSet:(XQuerySequence with:currentFocus contextItem). |
|
3473 |
exprSeq := self visit:xpathPredicate expr. |
|
3474 |
self announceTracepointInterrupt. |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3475 |
exprSeq containsSingleNumber ifTrue:[ |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3476 |
currentFocus contextPosition = exprSeq asNumber |
235 | 3477 |
] ifFalse:[ |
3478 |
exprSeq effectiveBooleanValue |
|
3479 |
] |
|
3480 |
]) |
|
3481 |
] |
|
3482 |
||
3483 |
"Created: / 17-11-2007 / 15:23:51 / janfrog" |
|
3484 |
"Modified: / 05-12-2007 / 10:37:44 / janfrog" |
|
3485 |
"Modified: / 13-12-2008 / 10:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3486 |
"Modified: / 04-10-2009 / 18:01:27 / Jan Kurs <kursj1@fel.cvut.cz>" |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3487 |
"Modified: / 16-12-2009 / 09:59:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
235 | 3488 |
! |
3489 |
||
3490 |
visitXPathProcessingInstructionTest:anObject |
|
3491 |
"dispatched back from the visited xPathProcessingInstructionTest-object (visitor pattern)" |
|
3492 |
||
3493 |
"fall back to general object-case - please change as required" |
|
3494 |
||
3495 |
^ self visitObject:anObject |
|
3496 |
||
3497 |
"Created: / 17-11-2007 / 15:31:52 / janfrog" |
|
3498 |
! |
|
3499 |
||
3500 |
visitXPathTextTest:anObject |
|
3501 |
^ self currentNodeSet:(self currentNodeSet |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3502 |
select:[:item | item xpathIsText ]) |
235 | 3503 |
|
3504 |
"Created: / 17-11-2007 / 15:31:52 / janfrog" |
|
3505 |
"Modified: / 05-12-2007 / 10:37:39 / janfrog" |
|
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3506 |
"Modified: / 03-05-2009 / 11:04:05 / Jan Kurs <kursj1@fel.cvut.cz>" |
235 | 3507 |
! ! |
3508 |
||
251 | 3509 |
!XQueryInterpreter methodsFor:'workspace support'! |
3510 |
||
3511 |
inspectIt: anObject |
|
3512 |
||
3513 |
anObject asDocumentFragment inspect |
|
3514 |
||
3515 |
"Created: / 04-05-2010 / 18:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
3516 |
! |
|
3517 |
||
3518 |
printIt: anObject |
|
3519 |
||
3520 |
^anObject asDocumentFragment asColorXMLString |
|
3521 |
||
3522 |
"Created: / 04-05-2010 / 18:25:28 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
3523 |
! ! |
|
3524 |
||
235 | 3525 |
!XQueryInterpreter class methodsFor:'documentation'! |
3526 |
||
241
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3527 |
version_SVN |
e28ef0f20186
Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
235
diff
changeset
|
3528 |
^ '$Id$' |
235 | 3529 |
! ! |