295 {
298 switch (root.TypeOfFunction)
299 {
300 case Function.FunctionType.FuncLast:
301 query =
new NodeFunctions(root.TypeOfFunction,
null);
304 case Function.FunctionType.FuncPosition:
305 query =
new NodeFunctions(root.TypeOfFunction,
null);
308 case Function.FunctionType.FuncCount:
314 case Function.FunctionType.FuncLocalName:
315 case Function.FunctionType.FuncNameSpaceUri:
316 case Function.FunctionType.FuncName:
317 if (root.ArgumentList != null && root.ArgumentList.Count > 0)
318 {
319 return new NodeFunctions(root.TypeOfFunction,
ProcessNode(root.ArgumentList[0], Flags.None,
out props));
320 }
321 return new NodeFunctions(root.TypeOfFunction, null);
322 case Function.FunctionType.FuncString:
323 case Function.FunctionType.FuncConcat:
324 case Function.FunctionType.FuncStartsWith:
325 case Function.FunctionType.FuncContains:
326 case Function.FunctionType.FuncSubstringBefore:
327 case Function.FunctionType.FuncSubstringAfter:
328 case Function.FunctionType.FuncSubstring:
329 case Function.FunctionType.FuncStringLength:
330 case Function.FunctionType.FuncNormalize:
331 case Function.FunctionType.FuncTranslate:
333 case Function.FunctionType.FuncNumber:
335 case Function.FunctionType.FuncFloor:
336 case Function.FunctionType.FuncCeiling:
337 case Function.FunctionType.FuncRound:
338 if (root.ArgumentList != null && root.ArgumentList.Count > 0)
339 {
340 return new NumberFunctions(root.TypeOfFunction,
ProcessNode(root.ArgumentList[0], Flags.None,
out props));
341 }
342 return new NumberFunctions(
Function.FunctionType.FuncNumber,
null);
343 case Function.FunctionType.FuncTrue:
344 case Function.FunctionType.FuncFalse:
345 return new BooleanFunctions(root.TypeOfFunction, null);
346 case Function.FunctionType.FuncBoolean:
348 case Function.FunctionType.FuncLang:
349 return new BooleanFunctions(root.TypeOfFunction,
ProcessNode(root.ArgumentList[0], Flags.None,
out props));
350 case Function.FunctionType.FuncUserDefined:
352 if (!
_allowCurrent && root.Name ==
"current" && root.Prefix.Length == 0)
353 {
355 }
356 if (!
_allowKey && root.Name ==
"key" && root.Prefix.Length == 0)
357 {
359 }
363 default:
365 }
366 }
List< Query > ProcessArguments(List< AstNode > args, out Props props)
Query ProcessNode(AstNode root, Flags flags, out Props props)
static string Xp_CurrentNotAllowed
static string Xp_InvalidKeyPattern
static string Xp_NotSupported
static XPathException Create(string res)