Пример #1
0
        private static EtlVariableAssignment[] ParseParameters(string str)
        {
            if (str == null)
            {
                return(new EtlVariableAssignment[0]);
            }

            str = str.Trim();
            if (str == "")
            {
                return(new EtlVariableAssignment[0]);
            }

            if (!str.EndsWith(";"))
            {
                str = str + ";";
            }

            var parameters     = new List <EtlVariableAssignment>();
            var buf            = new StringBuilder();
            var isVariableName = true;
            var wasQuote       = false;
            var wasEscape      = false;
            var parameter      = new EtlVariableAssignment();

            for (var i = 0; i < str.Length; i++)
            {
                var ch = str[i];

                if (ch == '=')
                {
                    wasEscape = false;

                    if (wasQuote)
                    {
                        buf.Append(ch);
                    }
                    else if (isVariableName)
                    {
                        parameter.Name = buf.ToString();
                        buf.Length     = 0;
                        isVariableName = false;
                    }
                    else
                    {
                        throw new FormatException();
                    }
                }
                else if (ch == '\\')
                {
                    if (wasQuote && str[i + 1] == '\'')
                    {
                        wasEscape = true;
                    }
                    else
                    {
                        wasEscape = false;
                        buf.Append(ch);
                    }
                }
                else if (ch == '\'')
                {
                    if (isVariableName)
                    {
                        throw new FormatException();
                    }

                    if (wasEscape)
                    {
                        buf.Append(ch);
                    }
                    else
                    {
                        wasQuote = !wasQuote;
                    }
                }
                else if (ch == ';')
                {
                    wasEscape = false;

                    if (wasQuote)
                    {
                        buf.Append(ch);
                    }
                    else
                    {
                        if (isVariableName)
                        {
                            parameter.Name = buf.ToString();
                        }
                        else
                        {
                            parameter.Value = buf.ToString();
                        }

                        parameters.Add(parameter);
                        parameter = new EtlVariableAssignment();

                        buf.Length     = 0;
                        isVariableName = true;
                    }
                }
                else
                {
                    wasEscape = false;
                    buf.Append(ch);
                }
            }

            return(parameters.ToArray());
        }
        public EtlSession InvokeEtlPackage(string etlPackageId, EtlVariableAssignment[] parameters, string parentSessionId)
        {
            PrepareDirectory();

            var package = SelectEtlPackage(etlPackageId);
            if (package == null)
            {
                throw new ArgumentNullException("package");
            }

            using (var defaultLogger = CreateDefaultLogger())
            {
                var loggers = new IEtlLogger[_attachedLoggers.Count + 1];
                loggers[0] = defaultLogger;
                for (var i = 0; i < _attachedLoggers.Count; i++)
                {
                    loggers[i + 1] = _attachedLoggers[i];
                }

                var session = package.Invoke(loggers, parameters, parentSessionId);
                return session;
            }
        }