示例#1
0
        private static AstOleDBCommandNode CreateInsertNode(AstLateArrivingLookupNode lookup, AstLookupNode codegenLookup)
        {
            var insertPlaceholder = new AstOleDBCommandNode(lookup.ParentItem)
                                        {
                                            Name = String.Format(CultureInfo.InvariantCulture, "__LALookupPlaceholderInsert_{0}", lookup.Name),
                                            Connection = lookup.Table.Connection,
                                        };

            insertPlaceholder.Query = new AstTransformationMappedQueryNode(insertPlaceholder) { Body = TableLowerer.EmitInsertDefaultRowStatement(lookup.Table) };
            insertPlaceholder.InputPath = new AstDataflowMappedInputPathNode(insertPlaceholder) { OutputPath = codegenLookup.NoMatchPath };
            return insertPlaceholder;
        }
示例#2
0
        private static AstUnionAllNode CreateUnionAllNode(AstLateArrivingLookupNode lookup, AstLookupNode codegenLookup, AstOleDBCommandNode insertPlaceholder)
        {
            var unionAll = new AstUnionAllNode(lookup.ParentItem) { Name = String.Format(CultureInfo.InvariantCulture, "__LALookupUnionAll_{0}", lookup.Name) };
            unionAll.InputPaths.Add(new AstDataflowMappedInputPathNode(unionAll) { OutputPath = codegenLookup.MatchPath });
            unionAll.InputPaths.Add(new AstDataflowMappedInputPathNode(unionAll) { OutputPath = insertPlaceholder.OutputPath });

            foreach (var outgoingPath in lookup.OutputPath.References)
            {
                if (outgoingPath.ReferencingItem != null && outgoingPath.PropertyName != null)
                {
                    PropertyInfo propertyInfo = outgoingPath.GetType().GetProperty(outgoingPath.PropertyName);
                    if (propertyInfo != null)
                    {
                        propertyInfo.SetValue(outgoingPath.ReferencingItem, unionAll.OutputPath, null);
                    }
                }
            }

            return unionAll;
        }
示例#3
0
        private static AstLookupNode CreateLookupNode(AstLateArrivingLookupNode lookup)
        {
            var codegenLookup = new AstLookupNode(lookup.ParentItem)
                                    {
                                        Name = String.Format(CultureInfo.InvariantCulture, "__LALookupEntryPoint_{0}", lookup.Name),
                                        Connection = lookup.Table.Connection
                                    };
            var requiredColumns = new List<string>();
            foreach (var input in lookup.Inputs)
            {
                if (!requiredColumns.Contains(input.RemoteColumnName))
                {
                    requiredColumns.Add(input.RemoteColumnName);
                }

                codegenLookup.Inputs.Add(input);
            }

            foreach (var output in lookup.Outputs)
            {
                if (!requiredColumns.Contains(output.RemoteColumnName))
                {
                    requiredColumns.Add(output.RemoteColumnName);
                }

                codegenLookup.Outputs.Add(output);
            }

            codegenLookup.Query = new AstQueryNode(codegenLookup) { Body = TableLowerer.EmitSelectAllStatement(lookup.Table, requiredColumns) };

            if (lookup.InputPath != null)
            {
                codegenLookup.InputPath = new AstDataflowMappedInputPathNode(codegenLookup) { OutputPath = lookup.InputPath.OutputPath };
            }

            return codegenLookup;
        }
示例#4
0
文件: Lookup.cs 项目: japj/vulcan
 public Lookup(LoweringContext context, AstNode astNode)
     : base(context, astNode as AstTransformationNode)
 {
     _astLookupNode = astNode as AstLookupNode;
     RegisterInputBinding(_astLookupNode);
 }