private void ValidateIndexNamedParameter(ExprValidationContext validationContext) { if (_indexNamedParameter.Count != 1 || !(_indexNamedParameter[0] is ExprDeclaredNode)) { throw GetIndexNameMessage("requires an expression name"); } ExprDeclaredNode node = (ExprDeclaredNode)_indexNamedParameter[0]; if (!(node.Body is ExprDotNode)) { throw GetIndexNameMessage("requires an index expression"); } ExprDotNode dotNode = (ExprDotNode)node.Body; if (dotNode.ChainSpec.Count > 1) { throw GetIndexNameMessage("invalid chained index expression"); } IList <ExprNode> @params = dotNode.ChainSpec[0].Parameters; string indexTypeName = dotNode.ChainSpec[0].Name; _optionalIndexName = node.Prototype.Name; AdvancedIndexFactoryProvider provider; try { provider = validationContext.EngineImportService.ResolveAdvancedIndexProvider(indexTypeName); } catch (EngineImportException e) { throw new ExprValidationException(e.Message, e); } if (indexTypeName.ToLowerInvariant() != IndexTypeName) { throw new ExprValidationException("Invalid index type '" + indexTypeName + "', expected '" + IndexTypeName + "'"); } _optionalIndexConfig = provider.ValidateConfigureFilterIndex(_optionalIndexName, indexTypeName, ExprNodeUtility.ToArray(@params), validationContext); }
/// <summary>Ctor. </summary> /// <param name="declaration"></param> public ExprNodeSubselectDeclaredNoTraverseVisitor(ExprDeclaredNode declaration) { _declaration = declaration; _subselects = new List <ExprSubselectNode>(1); }