Пример #1
0
        public virtual IOutputDescription TestService(DbService dbService)
        {
            VerifyArgument.IsNotNull("dbService", dbService);
            VerifyArgument.IsNotNull("dbService.Source", dbService.Source);

            IOutputDescription result;

            using (var server = CreateDbServer(dbService.Source as DbSource))
            {
                server.Connect(((DbSource)dbService.Source).ConnectionString);
                server.BeginTransaction();
                try
                {
                    var command   = CommandFromServiceMethod(server, dbService.Method);
                    var dataTable = server.FetchDataTable(command);

                    result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                    var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
                    result.DataSourceShapes.Add(dataSourceShape);

                    var dataBrowser = DataBrowserFactory.CreateDataBrowser();
                    dataSourceShape.Paths.AddRange(dataBrowser.Map(dataTable));
                }
                catch (Exception ex)
                {
                    throw new WarewolfDbException(ex.Message);
                }
                finally
                {
                    server.RollbackTransaction();
                }
            }

            return(result);
        }
Пример #2
0
        public IOutputDescription Test(PluginInvokeArgs setupInfo)
        {
            Assembly loadedAssembly;

            if (!TryLoadAssembly(setupInfo.AssemblyLocation, setupInfo.AssemblyName, out loadedAssembly))
            {
                return(null);
            }

            var parameters = BuildParameterList(setupInfo.Parameters);
            var typeList   = BuildTypeList(setupInfo.Parameters);

            var type         = loadedAssembly.GetType(setupInfo.Fullname);
            var methodToRun  = type.GetMethod(setupInfo.Method, typeList);
            var instance     = Activator.CreateInstance(type);
            var pluginResult = methodToRun.Invoke(instance, parameters);

            // do formating here to avoid object serialization issues ;)
            var dataBrowser     = DataBrowserFactory.CreateDataBrowser();
            var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();

            if (pluginResult != null)
            {
                pluginResult = AdjustPluginResult(pluginResult, methodToRun);

                var tmpData = dataBrowser.Map(pluginResult);
                dataSourceShape.Paths.AddRange(tmpData);
            }

            var result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);

            result.DataSourceShapes.Add(dataSourceShape);

            return(result);
        }
        public void SelectEnumerableValuesAsRelatedUsingPocoEnumerablePathsFromReferenceType_Where_PathsContainNestedEnumerablePaths_Expected_FlattenedDataWithValuesFromOuterEnumerablePathRepeatingForEveryValueFromNestedEnumerablePath()
        {
            PocoTestData testData = GivenPocoWithParallelAndNestedEnumerables();

            PocoPath     enumerableNamePath       = new PocoPath("EnumerableData().Name", "EnumerableData.Name");
            PocoPath     nestedEnumerableNamePath = new PocoPath("EnumerableData().EnumerableData().Name", "EnumerableData.EnumerableData.Name");
            List <IPath> paths = new List <IPath> {
                enumerableNamePath, nestedEnumerableNamePath
            };

            IDataBrowser dataBrowser = DataBrowserFactory.CreateDataBrowser();
            Dictionary <IPath, IList <object> > data = dataBrowser.SelectEnumerablesAsRelated(paths, testData);

            #region Complex Setup for Expected

            //
            // The code in this region is used to setup the exprected value.
            // It can't be reused for other tests and can't be made generic
            // without replicating the funcationality being tested.
            //
            string tmpExpected  = "";
            string tmpExpected1 = "";
            string separator    = "|";

            for (int outerCount = 0; outerCount < testData.EnumerableData.Count; outerCount++)
            {
                for (int innerCount = 0; innerCount < testData.EnumerableData[outerCount].EnumerableData.Count; innerCount++)
                {
                    if ((outerCount == testData.EnumerableData.Count - 1) && (innerCount == testData.EnumerableData[outerCount].EnumerableData.Count - 1))
                    {
                        separator = "";
                    }
                    if (outerCount < testData.EnumerableData.Count)
                    {
                        tmpExpected += testData.EnumerableData[outerCount].Name + separator;
                    }
                    else
                    {
                        tmpExpected += separator;
                    }

                    if (innerCount < testData.EnumerableData[outerCount].EnumerableData.Count)
                    {
                        tmpExpected1 += testData.EnumerableData[outerCount].EnumerableData[innerCount].Name + separator;
                    }
                    else
                    {
                        tmpExpected1 += separator;
                    }
                }
            }

            #endregion Complex Setup for Expected

            string expected = tmpExpected + "^" + tmpExpected1;
            string actual   = string.Join("|", data[enumerableNamePath]);
            actual += "^" + string.Join("|", data[nestedEnumerableNamePath]);

            Assert.AreEqual(expected, actual);
        }
Пример #4
0
        public void DataBrowserFactory_Map_GivenJson_PathsOfReferenceType_Expected_JsonPaths()
        {
            var dataBrowser = DataBrowserFactory.CreateDataBrowser();
            var paths       = dataBrowser.Map(GivenJson());

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(JsonPath)));
        }
Пример #5
0
        public IOutputDescription GetOutputDescription()
        {
            IOutputDescription result = null;
            var dataSourceShape       = DataSourceShapeFactory.CreateDataSourceShape();

            var requestResponse = Scrubber.Scrub(RequestResponse);

            try
            {
                result          = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
                result.DataSourceShapes.Add(dataSourceShape);
                var dataBrowser = DataBrowserFactory.CreateDataBrowser();
                dataSourceShape.Paths.AddRange(dataBrowser.Map(requestResponse));
            }

            catch (Exception ex)
            {
                var dataBrowser = DataBrowserFactory.CreateDataBrowser();
                var errorResult = new XElement("Error");
                errorResult.Add(ex);
                var data = errorResult.ToString();
                dataSourceShape.Paths.AddRange(dataBrowser.Map(data));
            }
            return(result);
        }
Пример #6
0
        public void MapPathsOfJson_Expected_JsonPaths()
        {
            var testData = GivenJson();

            var dataBrowser = DataBrowserFactory.CreateDataBrowser();
            var paths       = dataBrowser.Map(testData);

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(JsonPath)));
        }
Пример #7
0
        public void DataBrowserFactory_Map_PathsOfXml_Expected_XmlPaths()
        {
            var testData = GivenXml();

            var dataBrowser = DataBrowserFactory.CreateDataBrowser();
            var paths       = dataBrowser.Map(testData);

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(XmlPath)));
        }
Пример #8
0
        public void DataBrowserFactory_Map_GivenPoco_MapPathsOfReferenceType_Expected_PocoPaths()
        {
            var testData = GivenPoco();

            var dataBrowser = DataBrowserFactory.CreateDataBrowser();
            var paths       = dataBrowser.Map(testData);

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(PocoPath)));
        }
        public void MapPathsOfReferenceType_Expected_PocoPaths()
        {
            PocoTestData testData = GivenPoco();

            IDataBrowser        dataBrowser = DataBrowserFactory.CreateDataBrowser();
            IEnumerable <IPath> paths       = dataBrowser.Map(testData);

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(PocoPath)));
        }
        public void MapPathsOfJson_Expected_JsonPaths()
        {
            string testData = GivenJson();

            IDataBrowser        dataBrowser = DataBrowserFactory.CreateDataBrowser();
            IEnumerable <IPath> paths       = dataBrowser.Map(testData);

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(JsonPath)));
        }
Пример #11
0
        public void DataBrowserFactory_Map_PathsOfUnexpectedType_Expected_PocoPaths()
        {
            var uri = new Uri("/cake", UriKind.Relative);

            var dataBrowser = DataBrowserFactory.CreateDataBrowser();
            var paths       = dataBrowser.Map(uri);

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(PocoPath)));
        }
        public void MapPathsOfUnexpectedType_Expected_PocoPaths()
        {
            Uri uri = new Uri("/cake", UriKind.Relative);

            IDataBrowser        dataBrowser = DataBrowserFactory.CreateDataBrowser();
            IEnumerable <IPath> paths       = dataBrowser.Map(uri);

            Assert.IsTrue(paths.All(p => p.GetType() == typeof(PocoPath)));
        }
        public void SelectScalarValueUsingJsonScalarPathFromJson_Expected_ScalarValue()
        {
            string testData = GivenJson();

            IPath        namePath    = new JsonPath("Name", "Name");
            IDataBrowser dataBrowser = DataBrowserFactory.CreateDataBrowser();

            object data = dataBrowser.SelectScalar(namePath, testData);

            Assert.AreEqual(data, "Dev2");
        }
        public void SelectScalarValueUsingPocoScalarPathFromXml_Expected_ScalarValue()
        {
            string testData = GivenXml();

            IPath        namePath    = new XmlPath("Company:Name", "Company:Name");
            IDataBrowser dataBrowser = DataBrowserFactory.CreateDataBrowser();

            object data = dataBrowser.SelectScalar(namePath, testData);

            Assert.AreEqual(data, "Dev2");
        }
        public void SelectScalarValueUsingPocoScalarPathFromReferenceType_Expected_ScalarValue()
        {
            PocoTestData testData = GivenPoco();

            IPath        namePath    = new PocoPath("Name", "Name");
            IDataBrowser dataBrowser = DataBrowserFactory.CreateDataBrowser();

            object data = dataBrowser.SelectScalar(namePath, testData);

            Assert.AreEqual(data, testData.Name);
        }
Пример #16
0
        /// <summary>
        /// Map the data given in the StringData field of the payload using the DataBrowser
        /// </summary>
        public string MapStringData(string data)
        {
            string stringData = ValueExtractor.GetValueFromDataList("StringData", data);

            IDataBrowser        dataBrowser = DataBrowserFactory.CreateDataBrowser();
            IEnumerable <IPath> mappedPaths = dataBrowser.Map(stringData);

            string pathsString = string.Join(Environment.NewLine, mappedPaths.Select(p => p.DisplayPath));

            return("<ADL><PathData>" + pathsString + "</PathData></ADL>");
        }
        public void SelectEnumerableValueUsingPocoEnumerablePathFromReferenceType_Expected_ValuesFromEachItemInEnumeration()
        {
            PocoTestData testData = GivenPoco();

            IPath        namePath    = new PocoPath("EnumerableData().Name", "EnumerableData.Name");
            IDataBrowser dataBrowser = DataBrowserFactory.CreateDataBrowser();

            IEnumerable <object> data = dataBrowser.SelectEnumerable(namePath, testData);

            string expected = string.Join("|", testData.EnumerableData.Select(e => e.Name));
            string actual   = string.Join("|", data.Select(o => o.ToString()));

            Assert.AreEqual(expected, actual);
        }
Пример #18
0
        public IOutputDescription Test(ComPluginInvokeArgs setupInfo, out string serializedResult)
        {
            try
            {
                serializedResult = null;

                var methodToRun = ExecuteComPlugin(setupInfo, out object pluginResult);

                // do formating here to avoid object serialization issues ;)
                var dataBrowser     = DataBrowserFactory.CreateDataBrowser();
                var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();

                if (pluginResult != null)
                {
                    if (pluginResult is KeyValuePair <bool, string> )
                    {
                        var pluginKeyValuePair = (KeyValuePair <bool, string>)pluginResult;
                        serializedResult = "Exception: " + pluginKeyValuePair.Value;
                    }
                    else
                    {
                        serializedResult = pluginResult.ToString();
                    }
                    pluginResult = AdjustPluginResult(pluginResult);
                    var tmpData = dataBrowser.Map(pluginResult);
                    dataSourceShape.Paths.AddRange(tmpData);
                }

                var result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                result.DataSourceShapes.Add(dataSourceShape);
                return(result);
            }
            catch (COMException e)
            {
                Dev2Logger.Error("IOutputDescription Test(PluginInvokeArgs setupInfo)", e, GlobalConstants.WarewolfError);
                throw;
            }
            catch (Exception e)
            {
                if (e.InnerException is COMException)
                {
                    throw e.InnerException;
                }

                Dev2Logger.Error("IOutputDescription Test(PluginInvokeArgs setupInfo)", e, GlobalConstants.WarewolfError);
                serializedResult = null;
                return(null);
            }
        }
Пример #19
0
        public override IOutputDescription TestService(DbService dbService)
        {
            VerifyArgument.IsNotNull("dbService", dbService);
            VerifyArgument.IsNotNull("dbService.Source", dbService.Source);

            IOutputDescription result;

            using (var server = CreateDbServer(dbService.Source as DbSource))
            {
                server.Connect(((DbSource)dbService.Source).ConnectionString);
                server.BeginTransaction();
                try
                {
                    var command = CommandFromServiceMethod(server, dbService.Method);

                    var outParams = server.GetProcedureOutParams(command.CommandText);

                    foreach (var dbDataParameter in outParams)
                    {
                        if (command.Parameters.Contains(dbDataParameter))
                        {
                            continue;
                        }

                        command.Parameters.Add(dbDataParameter);
                    }
                    var dataTable = server.FetchDataTable(command);

                    result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                    var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
                    result.DataSourceShapes.Add(dataSourceShape);

                    var dataBrowser = DataBrowserFactory.CreateDataBrowser();
                    dataSourceShape.Paths.AddRange(dataBrowser.Map(dataTable));
                }
                catch (Exception ex)
                {
                    Dev2Logger.Error(ex.Message, GlobalConstants.WarewolfError);
                    throw;
                }
                finally
                {
                    server.RollbackTransaction();
                }
            }

            return(result);
        }
        public override IOutputDescription TestService(DbService dbService)
        {
            VerifyArgument.IsNotNull("dbService", dbService);
            VerifyArgument.IsNotNull("dbService.Source", dbService.Source);

            IOutputDescription result;

            using (var server = CreateDbServer(dbService.Source as DbSource))
            {
                server.Connect(((DbSource)dbService.Source).ConnectionString);
                server.BeginTransaction();
                try
                {
                    //
                    // Execute command and normalize XML
                    //
                    var command = CommandFromServiceMethod(server, dbService.Method);
                    // ReSharper disable PossibleNullReferenceException
                    var outParams = server.GetProcedureOutParams(dbService.Method.Name, (dbService.Source as DbSource).DatabaseName);
                    // ReSharper restore PossibleNullReferenceException
                    foreach (var dbDataParameter in outParams)
                    {
                        command.Parameters.Add(dbDataParameter);
                    }
                    var dataTable = server.FetchDataTable(command);

                    //
                    // Map shape of XML
                    //
                    result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                    var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
                    result.DataSourceShapes.Add(dataSourceShape);

                    var dataBrowser = DataBrowserFactory.CreateDataBrowser();
                    dataSourceShape.Paths.AddRange(dataBrowser.Map(dataTable));
                }
                finally
                {
                    server.RollbackTransaction();
                }
            }

            return(result);
        }
Пример #21
0
        public void SelectEnumerableValuesAsRelatedUsingPocoEnumerablePathsFromXml_Where_PathsContainNestedEnumerablePaths_Expected_FlattenedDataWithValuesFromOuterEnumerablePathRepeatingForEveryValueFromNestedEnumerablePath()
        {
            var testData = GivenXml();

            var enumerableNamePath       = new XmlPath("Company.Departments().Department:Name", "Company.Departments.Department:Name");
            var nestedEnumerableNamePath = new XmlPath("Company.Departments().Department.Employees().Person:Name", "Company.Departments.Department.Employees.Person:Name");
            var paths = new List <IPath> {
                enumerableNamePath, nestedEnumerableNamePath
            };

            var dataBrowser = DataBrowserFactory.CreateDataBrowser();
            var data        = dataBrowser.SelectEnumerablesAsRelated(paths, testData);

            const string expected = "Dev|Dev|Accounts|Accounts^Brendon|Jayd|Bob|Joe";
            var          actual   = string.Join("|", data[enumerableNamePath]);

            actual += "^" + string.Join("|", data[nestedEnumerableNamePath]);

            Assert.AreEqual(expected, actual);
        }
        public void SelectEnumerableValuesAsRelatedUsingJsonEnumerablePathsFromJson_Where_PathsContainNestedEnumerablePaths_Expected_FlattenedDataWithValuesFromOuterEnumerablePathRepeatingForEveryValueFromNestedEnumerablePath()
        {
            string testData = GivenJson();

            IPath        enumerableNamePath       = new JsonPath("Departments().Name", "Departments.Name");
            IPath        nestedEnumerableNamePath = new JsonPath("Departments().Employees().Name", "Departments.Employees.Name");
            List <IPath> paths = new List <IPath> {
                enumerableNamePath, nestedEnumerableNamePath
            };

            IDataBrowser dataBrowser = DataBrowserFactory.CreateDataBrowser();
            Dictionary <IPath, IList <object> > data = dataBrowser.SelectEnumerablesAsRelated(paths, testData);

            string expected = "Dev|Dev|Accounts|Accounts^Brendon|Jayd|Bob|Joe";
            string actual   = string.Join("|", data[enumerableNamePath]);

            actual += "^" + string.Join("|", data[nestedEnumerableNamePath]);

            Assert.AreEqual(expected, actual);
        }
Пример #23
0
        public IOutputDescription ExecuteWebService(WcfService src)
        {
            var source  = (WcfSource)src.Source;
            var factory = new DynamicProxyFactory(source.EndpointUrl);

            var contract = factory.Contracts.FirstOrDefault();

            if (contract == null)
            {
                throw new DynamicProxyException(ErrorResource.NoContractFound);
            }

            var proxy = factory.CreateProxy(contract.Name);

            var parameters = src.Method.Parameters?.Select(a => new MethodParameter {
                Name = a.Name, Value = a.Value, TypeName = a.TypeName
            })
                             .ToList() ?? new List <MethodParameter>();
            var paramObjects =
                parameters.Select(methodParameter => Convert.ChangeType(methodParameter.Value, Type.GetType(methodParameter.TypeName))).ToArray();

            var result          = proxy.CallMethod(src.Method.Name, paramObjects);
            var dataBrowser     = DataBrowserFactory.CreateDataBrowser();
            var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
            var method          = GetMethod(src.Method.Name, proxy);

            if (result != null)
            {
                result = AdjustPluginResult(result, method);

                var tmpData = dataBrowser.Map(result);
                dataSourceShape.Paths.AddRange(tmpData);
            }

            var output = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);

            output.DataSourceShapes.Add(dataSourceShape);
            return(output);
        }
Пример #24
0
        public override IOutputDescription TestSqliteService(SqliteDBService dbService)
        {
            VerifyArgument.IsNotNull("SqliteDBService", dbService);
            VerifyArgument.IsNotNull("SqliteDBService.Source", dbService.Source);

            IOutputDescription result;

            using (var server = CreateSqliteDbServer(dbService.Source as SqliteDBSource))
            {
                server.Connect(((SqliteDBSource)dbService.Source).ConnectionString);
                server.BeginTransaction();
                try
                {
                    //
                    // Execute command and normalize XML
                    //
                    var command = server.CreateCommand();
                    command.CommandText = dbService.Method.QueryString;
                    var dataTable = server.FetchDataTable(command);

                    //
                    // Map shape of XML
                    //

                    result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                    var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
                    result.DataSourceShapes.Add(dataSourceShape);

                    var dataBrowser = DataBrowserFactory.CreateDataBrowser();
                    dataSourceShape.Paths.AddRange(dataBrowser.Map(dataTable));
                }
                finally
                {
                    server.RollbackTransaction();
                }
            }

            return(result);
        }
        public IOutputDescription Test(PluginInvokeArgs setupInfo, out string jsonResult)
        {
            try
            {
                Assembly loadedAssembly;
                jsonResult        = null;
                _assemblyLocation = setupInfo.AssemblyLocation;
                AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
                if (!_assemblyLoader.TryLoadAssembly(setupInfo.AssemblyLocation, setupInfo.AssemblyName, out loadedAssembly))
                {
                    return(null);
                }
                object pluginResult;
                var    methodToRun = ExecutePlugin(setupInfo, loadedAssembly, out pluginResult);

                AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
                // do formating here to avoid object serialization issues ;)
                var dataBrowser     = DataBrowserFactory.CreateDataBrowser();
                var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();

                if (pluginResult != null)
                {
                    jsonResult   = JsonConvert.SerializeObject(pluginResult);
                    pluginResult = AdjustPluginResult(pluginResult, methodToRun);
                    var tmpData = dataBrowser.Map(pluginResult);
                    dataSourceShape.Paths.AddRange(tmpData);
                }

                var result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                result.DataSourceShapes.Add(dataSourceShape);
                return(result);
            }
            catch (Exception e)
            {
                Dev2Logger.Error("IOutputDescription Test(PluginInvokeArgs setupInfo)", e);
                jsonResult = null;
                return(null);
            }
        }
Пример #26
0
 public ShapedXmlOutputFormatter(IOutputDescription outputDescription, string rootNodeName)
 {
     RootNodeName      = rootNodeName;
     OutputDescription = outputDescription;
     DataBrowser       = DataBrowserFactory.CreateDataBrowser();
 }
Пример #27
0
 public ShapedXmlOutputFormatter(IOutputDescription outputDescription)
 {
     RootNodeName      = "ADL";
     OutputDescription = outputDescription;
     DataBrowser       = DataBrowserFactory.CreateDataBrowser();
 }
Пример #28
0
        public override IOutputDescription TestService(DbService dbService)
        {
            VerifyArgument.IsNotNull("dbService", dbService);
            VerifyArgument.IsNotNull("dbService.Source", dbService.Source);

            IOutputDescription result;

            using (var server = CreateDbServer(dbService.Source as DbSource))
            {
                server.Connect(((DbSource)dbService.Source).ConnectionString);
                server.BeginTransaction();
                try
                {
                    //
                    // Execute command and normalize XML
                    //
                    var command = CommandFromServiceMethod(server, dbService.Method);



                    var databaseName      = (dbService.Source as DbSource).DatabaseName;
                    var fullProcedureName = dbService.Method.ExecuteAction.Substring(dbService.Method.ExecuteAction.IndexOf(".", StringComparison.Ordinal) + 1);


                    var outParams         = server.GetProcedureOutParams(fullProcedureName, databaseName);
                    var countRefCursors   = outParams.Count(parameter => parameter.OracleDbType == OracleDbType.RefCursor);
                    var countSingleParams = outParams.Count(parameter => parameter.OracleDbType != OracleDbType.RefCursor);
                    if (countRefCursors > 1)
                    {
                        throw new Exception("Multiple Ref Cursor are not currently supported.");
                    }
                    if (countRefCursors >= 1 && countSingleParams >= 1)
                    {
                        throw new Exception("Mixing single return values and Ref Cursors are not currently supported.");
                    }
                    var dbDataParameters = server.GetProcedureInputParameters(command, databaseName, fullProcedureName);
                    var cmd = command.Connection.CreateCommand();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = databaseName + "." + fullProcedureName;
                    var parameters = dbService.Method.Parameters;
                    foreach (var dbDataParameter in dbDataParameters)
                    {
                        var foundParameter = parameters.FirstOrDefault(parameter => parameter.Name == dbDataParameter.ParameterName);
                        if (foundParameter != null)
                        {
                            dbDataParameter.Value = foundParameter.Value;
                        }
                        cmd.Parameters.Add(dbDataParameter);
                    }



                    foreach (var dbDataParameter in outParams)
                    {
                        cmd.Parameters.Add(dbDataParameter);
                    }
                    var dataTable = server.FetchDataTable(cmd);

                    //
                    // Map shape of XML
                    //
                    result = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);
                    var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
                    result.DataSourceShapes.Add(dataSourceShape);

                    var dataBrowser = DataBrowserFactory.CreateDataBrowser();
                    dataSourceShape.Paths.AddRange(dataBrowser.Map(dataTable));
                    cmd.Dispose();
                }
                finally
                {
                    server.RollbackTransaction();
                }
            }

            return(result);
        }