Пример #1
0
        public override void Emit(SsisEmitterContext context)
        {
            // select * from (select FactIncidentID, CaseNumber  from FactIncident) [refTable]
            // where [refTable].[FactIncidentID] = ?
            // Enable Cache and No-Cache Modes

            ////switch (_astLookupNode.CacheMode)
            ////{
            ////    case AstLookupCacheMode.Full: // Keep default
            ////        Instance.SetComponentProperty("CacheType", 0);
            ////        break;
            ////    case AstLookupCacheMode.Partial:
            ////        Instance.SetComponentProperty("CacheType", 1);
            ////        break;
            ////    case AstLookupCacheMode.None:
            ////        Instance.SetComponentProperty("CacheType", 2);
            ////        break;
            ////    default: // do nothing and keep default
            ////        break;
            ////}

            ////if (_astLookupNode.CacheMode != AstLookupCacheMode.Full)
            ////{
            ////    var sqlCommandParamPropertyName = string.Format("[{0}].[SqlCommandParam]", Component.Name);
            ////    var sqlCommandParamBody = "";
            ////    this.Dataflow.SetExpression(sqlCommandParamPropertyName, sqlCommandParamBody);

            ////    Instance.SetComponentProperty("SqlCommandParam",
            ////        SSISUtilities.EvaluateSSISExpression(sqlCommandParamBody, context.ParentContainer.DtsContainer)
            ////        );
            ////}

            if (_astLookupNode.Query.QueryType == QueryType.Expression)
            {
                var sqlCommandPropertyName = string.Format(CultureInfo.InvariantCulture, "[{0}].[SqlCommand]", Component.Name);
                Dataflow.SetExpression(sqlCommandPropertyName, _astLookupNode.Query.Body);
                Instance.SetComponentProperty(
                    "SqlCommand",
                    SSISUtilities.EvaluateSSISExpression(_astLookupNode.Query.Body, context.ParentContainer.DtsContainer));
            }
            else
            {
                Instance.SetComponentProperty("SqlCommand", _astLookupNode.Query.Body);
            }

            if (_astLookupNode.EnableNoMatchOutputPath)
            {
                Instance.SetComponentProperty("NoMatchBehavior", 1);
            }
            else
            {
                foreach (IDTSOutput100 output in Component.OutputCollection)
                {
                    output.ErrorRowDisposition = ConvertErrorRowDisposition(_astLookupNode.DefaultErrorRowDisposition);
                }
            }

            Flush();
            ProcessBindings(context);
            foreach (var input in _astLookupNode.Inputs)
            {
                MapInput(input.LocalColumnName, input.RemoteColumnName);
            }

            Instance.SetComponentProperty("ParameterMap", _parameterMap);
            _parameterMap = string.Empty;

            foreach (var output in _astLookupNode.Outputs)
            {
                MapOutput(output.LocalColumnName, output.RemoteColumnName);
            }

            Flush();
        }