public void SqliteMapDbOutputs(IOutputDescription outputDescription, ref SqliteDBService theService, bool addFields)
        {
            // only fetch paths with valid data to map ;)
            var outputsToMap = outputDescription.DataSourceShapes[0].Paths.Where(p => !string.IsNullOrEmpty(p.DisplayPath) && p.DisplayPath != "DocumentElement");

            var rsFields       = new List <RecordsetField>(theService.Recordset.Fields);
            var recordsetIndex = 0;

            foreach (var path in outputsToMap)
            {
                // Remove bogus names and dots
                var name  = path.DisplayPath.Replace("NewDataSet", "").Replace(".Table.", "").Replace("DocumentElement", "");
                var alias = path.DisplayPath.Replace("NewDataSet", "").Replace(".Table.", "").Replace(".", "").Replace("DocumentElement", "");

                var idx = name.IndexOf("()", StringComparison.InvariantCultureIgnoreCase);
                if (idx >= 0)
                {
                    name = name.Remove(0, idx + 3);
                }
                idx = alias.IndexOf("()", StringComparison.InvariantCultureIgnoreCase);
                if (idx >= 0)
                {
                    alias = alias.Remove(0, idx + 2);
                }
                var field = new RecordsetField {
                    Name = name, Alias = string.IsNullOrEmpty(path.OutputExpression) ? alias : path.OutputExpression, Path = path
                };

                RecordsetField rsField;
                if (!addFields && (rsField = rsFields.FirstOrDefault(f => f.Path != null ? f.Path.ActualPath == path.ActualPath : f.Name == field.Name)) != null)
                {
                    field.Alias = rsField.Alias;
                }

                theService.Recordset.Fields.Add(field);

                // 2013.12.11 - COMMUNITY BUG - 341463 - data with empty cells displays incorrectly
                var data        = path.SampleData.Split(new[] { GlobalConstants.AnytingToXmlCommaToken }, StringSplitOptions.None);
                var recordIndex = 0;

                foreach (var item in data)
                {
                    theService.Recordset.SetValue(recordIndex, recordsetIndex, item);
                    recordIndex++;
                }

                recordsetIndex++;
            }
        }
Esempio n. 2
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);
        }