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; } }