public void StatementColumnMappingPartTest()
        {
            DBColumn col = new DBColumn(null, "TestCol", true, DBDatatype.integer);

            SourceDataEntry entry = SourceDataEntry.CreateDataEntry("Test", DataType.String, "Test");
            SourceDataRow row = new SourceDataRow(new SourceDataEntry[] {entry}, "");

            DBTable table = new DBTable("dbo", "TestTable");
            DBColumn col1 = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            table.Columns = new List<DBColumn>() { col1 };
            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Insert, null);

            NullColumnMapping nullColumnMapping = new NullColumnMapping(col, ColumnUse.Insert);
            LiteralColumnMapping literalColumnMapping1 = new LiteralColumnMapping("Test", LiteralType.String, col, ColumnUse.Insert);
            LiteralColumnMapping literalColumnMapping2 = new LiteralColumnMapping("Test's", LiteralType.String, col, ColumnUse.Insert);
            ExcelColumnMapping excelColumnMapping = new ExcelColumnMapping("Test", col, ColumnUse.Insert);
            TableColumnMapping tableColMapping = new TableColumnMapping(tableMapping, col1, col, ColumnUse.Insert);

            StatementColumnMappingPart nullColumnPart = new StatementColumnMappingPart(nullColumnMapping, row);
            StatementColumnMappingPart literalColumnPart1 = new StatementColumnMappingPart(literalColumnMapping1, row);
            StatementColumnMappingPart literalColumnPart2 = new StatementColumnMappingPart(literalColumnMapping2, row);
            StatementColumnMappingPart excelColumnPart = new StatementColumnMappingPart(excelColumnMapping, row);
            StatementColumnMappingPart tableColumnPart = new StatementColumnMappingPart(tableColMapping, row);

            Assert.AreEqual("NULL", nullColumnPart.GetColumnMappingValue());
            Assert.AreEqual("'Test'", literalColumnPart1.GetColumnMappingValue());
            Assert.AreEqual("'Test''s'", literalColumnPart2.GetColumnMappingValue());
            Assert.AreEqual("'Test'", excelColumnPart.GetColumnMappingValue());

            StatementTableVariablePart tableVariablePart = new StatementTableVariablePart(tableMapping);
            Assert.AreEqual(String.Format("(SELECT TOP 1 t.TestCol1 FROM {0} t)", tableVariablePart.GetTableVariable()),
                tableColumnPart.GetColumnMappingValue());
        }
 public ImportConfiguration(TableMapping[] tableMappings, ConnectionSetup connectionSetup, string databaseName, ErrorHandling errorHandling)
 {
     this.tableMappings = tableMappings;
     this.connectionSetup = connectionSetup;
     this.databaseName = databaseName;
     this.errorHandling = errorHandling;
 }
        public void TableBodyPartInsertTest()
        {
            DBTable table = new DBTable("dbo", "TestTable");
            DBColumn col1 = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            DBColumn col2 = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);
            table.Columns = new List<DBColumn>() { col1, col2 };

            ColumnMapping colMap1 = new NullColumnMapping(col1, ColumnUse.Exclude);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Insert);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Insert, new ColumnMapping[] { colMap1, colMap2 });

            ImportConfiguration config = getTestImportConfig();

            SourceDataEntry[] entries = new SourceDataEntry[] { SourceDataEntry.CreateDataEntry("", DataType.String, "") };
            SourceDataRow[] rows = new SourceDataRow[] { new SourceDataRow(entries, "0") };
            SourceDataTable dt = new SourceDataTable(rows, new string[] { "" });

            StatementTableMappingPart part = new StatementTableMappingPart(tableMapping, dt.GetDataRow(0));

            string[] bodyParts = part.GetStatementBodyPart().Split(new string[] { "\n"}, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(3, bodyParts.Length);
            Assert.AreEqual("INSERT INTO dbo.TestTable (TestCol2)", bodyParts[0]);
            Assert.AreEqual("OUTPUT inserted.TestCol1, inserted.TestCol2 INTO @sqlimport_table_" + tableMapping.TableMappingReference.Replace(".", "_") +
                "(TestCol1, TestCol2)" , bodyParts[1]);
            Assert.AreEqual("VALUES ('2')", bodyParts[2]);
        }
        public StatementTableMappingPart(TableMapping tableMapping, SourceDataRow sourceDataRow)
        {
            this.tableMapping = tableMapping;
            this.sourceDataRow = sourceDataRow;
            this.primaryKeyColumn = tableMapping.DestinationTable.Columns.Where(c => c.IsPrimaryKey).FirstOrDefault();

            if (primaryKeyColumn == null) throw new Exception(String.Format("Table \"{0}\" has no primary key column",
                tableMapping.DestinationTable.Reference));
        }
Пример #5
0
        public static TableMapping[] TableMappingTestData()
        {
            DBTable addressTable = new DBTable("dbo", "Address");
            DBColumn a_idCol = new DBColumn(addressTable, "a_id", true, DBDatatype.integer);
            DBColumn streetNameCol = new DBColumn(addressTable, "StreetName", false, DBDatatype.nvarchar);
            DBColumn streetNumberCol = new DBColumn(addressTable, "StreetNumber", false, DBDatatype.integer);
            DBColumn zipCodeCol = new DBColumn(addressTable, "ZipCode", false, DBDatatype.integer);
            addressTable.Columns = new List<DBColumn>() { a_idCol, streetNameCol, streetNumberCol, zipCodeCol };

            NullColumnMapping a_idMapping = new NullColumnMapping(a_idCol, ColumnUse.Insert);
            ExcelColumnMapping streetNameMapping = new ExcelColumnMapping("Street name", streetNameCol, ColumnUse.Insert);
            ExcelColumnMapping streetNumberMapping = new ExcelColumnMapping("Street number", streetNumberCol, ColumnUse.Insert);
            ExcelColumnMapping zipCodeMapping = new ExcelColumnMapping("Zip code", zipCodeCol, ColumnUse.Insert);
            TableMapping addressTableMapping = new TableMapping(addressTable, TableMappingImportType.Insert, new ColumnMapping[] { a_idMapping, streetNameMapping, streetNumberMapping, zipCodeMapping });

            DBTable personTable = new DBTable("dbo", "Person");
            DBColumn p_idCol = new DBColumn(personTable, "p_id", true, DBDatatype.integer);
            DBColumn firstNameCol = new DBColumn(personTable, "FirstName", false, DBDatatype.nvarchar);
            DBColumn lastNameCol = new DBColumn(personTable, "LastName", false, DBDatatype.nvarchar);
            DBColumn a_idPersonCol = new DBColumn(personTable, "a_id", false, DBDatatype.integer);
            personTable.Columns = new List<DBColumn>() { p_idCol, firstNameCol, lastNameCol, a_idPersonCol };

            TableMapping personTableMapping = new TableMapping(personTable, TableMappingImportType.Insert, new ColumnMapping[0]);
            NullColumnMapping p_idMapping = new NullColumnMapping(p_idCol, ColumnUse.Insert);
            ExcelColumnMapping firstNameMapping = new ExcelColumnMapping("FirstName", firstNameCol, ColumnUse.Insert);
            ExcelColumnMapping lastNameMapping = new ExcelColumnMapping("Surname", lastNameCol, ColumnUse.Insert);
            TableColumnMapping aIdMapping = new TableColumnMapping(addressTableMapping, a_idMapping.DestinationColumn, a_idPersonCol, ColumnUse.Insert);
            personTableMapping.ColumnMappings = new ColumnMapping[] { p_idMapping, firstNameMapping, lastNameMapping, aIdMapping };

            DBTable contactInfoTable = new DBTable("dbo", "ContactInfo");
            DBColumn pn_idCol = new DBColumn(contactInfoTable, "pn_id", true, DBDatatype.integer);
            DBColumn textCol = new DBColumn(contactInfoTable, "text", false, DBDatatype.nvarchar);
            DBColumn p_idCICol = new DBColumn(contactInfoTable, "p_id", false, DBDatatype.integer);
            DBColumn ci_idCICol = new DBColumn(contactInfoTable, "ci_id", false, DBDatatype.integer);
            contactInfoTable.Columns = new List<DBColumn>() { pn_idCol, textCol, p_idCICol, ci_idCICol };

            ExcelColumnMapping phoneNumberMapping = new ExcelColumnMapping("Phone", textCol, ColumnUse.Insert);
            TableColumnMapping pIDMapping = new TableColumnMapping(personTableMapping, p_idMapping.DestinationColumn, p_idCICol, ColumnUse.Insert);
            LiteralColumnMapping citIdMapping = new LiteralColumnMapping("1", LiteralType.Integer, ci_idCICol, ColumnUse.Insert);
            TableMapping phoneTableMapping = new TableMapping(contactInfoTable, TableMappingImportType.Insert, new ColumnMapping[] { phoneNumberMapping, pIDMapping, citIdMapping });

            ExcelColumnMapping mobileNumberMapping = new ExcelColumnMapping("Mobile", textCol, ColumnUse.Insert);
            TableColumnMapping pIDMobileMapping = new TableColumnMapping(personTableMapping, p_idMapping.DestinationColumn, p_idCICol, ColumnUse.Insert);
            LiteralColumnMapping citIdMobileMapping = new LiteralColumnMapping("2", LiteralType.Integer, ci_idCICol, ColumnUse.Insert);
            TableMapping mobileTableMapping = new TableMapping(contactInfoTable, TableMappingImportType.Insert, new ColumnMapping[] { mobileNumberMapping, pIDMobileMapping, citIdMobileMapping });

            return new TableMapping[] { personTableMapping, phoneTableMapping, addressTableMapping, mobileTableMapping };
        }
        public TableMappingViewModel(DBTable table, MappingPageViewModel mappingPageViewModel)
        {
            this.viewModel = mappingPageViewModel;

            ColumnMapping[] mappings = new ColumnMapping[table.Columns.Count];
            ObservableCollection<ColumnMappingViewModel> viewModels = new ObservableCollection<ColumnMappingViewModel>();

            for (int i = 0; i < table.Columns.Count; i++)
            {
                mappings[i] = new NullColumnMapping(table.Columns[i], ColumnUse.Insert);
                viewModels.Add(new NullColumnMappingViewModel((NullColumnMapping)mappings[i], this));
            }

            this.tableMapping = new TableMapping(table, TableMappingImportType.Insert, mappings);
            this.columnsMappingViewModels = viewModels.ToList();
        }
        public TableMappingViewModel(TableMapping tableMapping, MappingPageViewModel mappingPageViewModel)
        {
            this.viewModel = mappingPageViewModel;

            ObservableCollection<ColumnMappingViewModel> viewModels = new ObservableCollection<ColumnMappingViewModel>();

            foreach (DBColumn column in tableMapping.DestinationTable.Columns)
            {
                ColumnMapping columnMapping = tableMapping.ColumnMappings.Where(c => c.DestinationColumn == column).FirstOrDefault();
                if (columnMapping == null) columnMapping = new NullColumnMapping(column, tableMapping.AllowedColumnUses()[0]);
                viewModels.Add(ColumnMappingViewModelCreator.CreateFromColumnMapping(columnMapping, this));
            }

            ColumnMapping[] columnMappings = viewModels.Select(v => v.ColumnMapping).ToArray();
            tableMapping.ColumnMappings = columnMappings;

            this.tableMapping = tableMapping;
            this.columnsMappingViewModels = viewModels.ToList();
        }
        public void CycleTestTwoTable()
        {
            DBTable table1 = new DBTable("dbo", "1");
            DBColumn table1ID = new DBColumn(table1, "1_id", true, DBDatatype.integer);
            table1.Columns = new List<DBColumn>() { table1ID };

            DBTable table2 = new DBTable("dbo", "2");
            DBColumn table2ID = new DBColumn(table2, "2_id", true, DBDatatype.integer);
            table2.Columns = new List<DBColumn>() { table2ID };

            TableMapping t1Mapping = new TableMapping(table1, TableMappingImportType.Insert, new ColumnMapping[0]);
            TableMapping t2Mapping = new TableMapping(table2, TableMappingImportType.Insert, new ColumnMapping[0]);

            TableColumnMapping t1ColMaping = new TableColumnMapping(t2Mapping, table2ID, table1ID, ColumnUse.Insert);
            TableColumnMapping t2ColMaping = new TableColumnMapping(t1Mapping, table1ID, table2ID, ColumnUse.Insert);

            t1Mapping.ColumnMappings = new ColumnMapping[] { t1ColMaping };
            t2Mapping.ColumnMappings = new ColumnMapping[] { t2ColMaping };

            TableMapping[] mappingArray = new TableMapping[] { t1Mapping, t2Mapping };
            TableMappingOrderer tableMappingOrderer = new TableMappingOrderer(mappingArray);
            TableMapping[] order = tableMappingOrderer.OrderTableMappings();
        }
        public void CycleTestFourTable()
        {
            DBTable table1 = new DBTable("dbo", "1");
            DBColumn table1ID = new DBColumn(table1, "1_id", true, DBDatatype.integer);
            table1.Columns = new List<DBColumn>() { table1ID };

            DBTable table2 = new DBTable("dbo", "2");
            DBColumn table2ID = new DBColumn(table2, "2_id", true, DBDatatype.integer);
            table2.Columns = new List<DBColumn>() { table2ID };

            DBTable table3 = new DBTable("dbo", "3");
            DBColumn table3ID = new DBColumn(table3, "3_id", true, DBDatatype.integer);
            table3.Columns = new List<DBColumn>() { table3ID };

            DBTable table4 = new DBTable("dbo", "4");
            DBColumn table4ID = new DBColumn(table4, "4_id", true, DBDatatype.integer);
            table4.Columns = new List<DBColumn>() { table4ID };

            TableMapping t1Mapping = new TableMapping(table1, TableMappingImportType.Insert, new ColumnMapping[0]);
            TableMapping t2Mapping = new TableMapping(table2, TableMappingImportType.Insert, new ColumnMapping[0]);
            TableMapping t3Mapping = new TableMapping(table3, TableMappingImportType.Insert, new ColumnMapping[0]);
            TableMapping t4Mapping = new TableMapping(table4, TableMappingImportType.Insert, new ColumnMapping[0]);

            TableColumnMapping t21ColMaping = new TableColumnMapping(t1Mapping, table1ID, table2ID, ColumnUse.Insert);
            TableColumnMapping t24ColMaping = new TableColumnMapping(t4Mapping, table1ID, table2ID, ColumnUse.Insert);
            TableColumnMapping t3ColMaping = new TableColumnMapping(t2Mapping, table1ID, table2ID, ColumnUse.Insert);
            TableColumnMapping t4ColMaping = new TableColumnMapping(t3Mapping, table1ID, table2ID, ColumnUse.Insert);

            t2Mapping.ColumnMappings = new ColumnMapping[] { t21ColMaping, t24ColMaping };
            t3Mapping.ColumnMappings = new ColumnMapping[] { t3ColMaping };
            t4Mapping.ColumnMappings = new ColumnMapping[] { t4ColMaping };

            TableMapping[] mappingArray = new TableMapping[] { t1Mapping, t2Mapping, t3Mapping, t4Mapping };
            TableMappingOrderer tableMappingOrderer = new TableMappingOrderer(mappingArray);
            TableMapping[] order = tableMappingOrderer.OrderTableMappings();
        }
        internal void tableMappingSwitchDatabase(TableMapping[] tableMappings, Database db)
        {
            Dictionary<int, TableMapping> newTableMappings = new Dictionary<int, TableMapping>();

            foreach (TableMapping tableMapping in tableMappings)
            {
                DBTable table = db.Tables.Where(t => t.Reference == tableMapping.DestinationTable.Reference).FirstOrDefault();
                if (table != null)
                {
                    TableMapping newTableMapping = new TableMapping(table, tableMapping.ImportType, new ColumnMapping[0]);
                    newTableMappings.Add(tableMapping.Index, newTableMapping);
                }
            }

            foreach (int index in newTableMappings.Keys)
            {
                TableMapping newTableMapping = newTableMappings[index];

                List<ColumnMapping> newColumnMappings = new List<ColumnMapping>();

                TableMapping oldTableMapping = tableMappings
                    .Where(t => t.Index == index).First();

                ColumnMapping[] oldColumnMappings = oldTableMapping.ColumnMappings;

                foreach (ColumnMapping oldColumnMapping in oldColumnMappings)
                {
                    DBColumn column = newTableMapping.DestinationTable.Columns
                        .Where(c => c.Name == oldColumnMapping.DestinationColumn.Name)
                        .FirstOrDefault();

                    if (column != null)
                    {
                        string type = oldColumnMapping.GetType().ToString();
                        ColumnMapping newColumnMapping = null;

                        if (type == typeof(ExcelColumnMapping).ToString())
                        {
                            var excelColumnMapping = (ExcelColumnMapping)oldColumnMapping;
                            newColumnMapping = new ExcelColumnMapping(excelColumnMapping.SourceHeader, column, oldColumnMapping.ColumnUse);
                        }
                        else if (type == typeof(TableColumnMapping).ToString())
                        {
                            var tableColumnMapping = (TableColumnMapping)oldColumnMapping;

                            if (newTableMappings.ContainsKey(tableColumnMapping.SourceTableMapping.Index))
                            {
                                TableMapping newSourceTableMapping = newTableMappings[tableColumnMapping.SourceTableMapping.Index];
                                DBColumn newSourceColumn = newSourceTableMapping.DestinationTable.Columns
                                    .Where(c => c.Name == tableColumnMapping.SourceColumn.Name)
                                    .FirstOrDefault();

                                if (newSourceColumn != null)
                                {
                                    newColumnMapping = new TableColumnMapping(newSourceTableMapping, newSourceColumn, column, oldColumnMapping.ColumnUse);
                                }
                            }
                        }
                        else if (type == typeof(LiteralColumnMapping).ToString())
                        {
                            var literalColumnMapping = (LiteralColumnMapping)oldColumnMapping;
                            newColumnMapping = new LiteralColumnMapping(literalColumnMapping.Literal, literalColumnMapping.LiteralType, column, literalColumnMapping.ColumnUse);
                        }

                        if (newColumnMapping == null)
                        {
                            newColumnMapping = new NullColumnMapping(column, oldColumnMapping.ColumnUse);
                        }

                        newColumnMappings.Add(newColumnMapping);
                    }
                }

                newTableMapping.ColumnMappings = newColumnMappings.ToArray();
            }

            this.TableMappings = newTableMappings.Values.ToList();
        }
 public StatementTableVariablePart(TableMapping tableMapping)
 {
     this.tableMapping = tableMapping;
 }
        private TableMapping[] readTableMappings(XmlReader reader, Database database)
        {
            Dictionary<int, TableMapping> tableMappings = new Dictionary<int, TableMapping>();
            Dictionary<TableMapping, XElement> columnMappingReaders = new Dictionary<TableMapping, XElement>();

            if (reader.ReadToFollowing("TableMappings"))
            {

                using (XmlReader tmlReader = reader.ReadSubtree())
                {

                    while (tmlReader.ReadToFollowing("TableMapping"))
                    {
                        {
                            int index = int.Parse(tmlReader.GetAttribute("index"));
                            string destinationTableReference = tmlReader.GetAttribute("destinationTableReference");
                            string importType = tmlReader.GetAttribute("importType");

                            DBTable table = database.Tables.Where(t => t.Reference == destinationTableReference).First();

                            TableMapping tableMapping = new TableMapping(table,
                                (TableMappingImportType)Enum.Parse(typeof(TableMappingImportType), importType), null);

                            tableMappings.Add(index, tableMapping);

                            if (tmlReader.ReadToFollowing("ColumnMappings"))
                            {
                                XmlReader cmlReader = tmlReader.ReadSubtree();
                                XElement cml = XElement.Load(cmlReader);

                                columnMappingReaders.Add(tableMapping, cml);
                            }
                        }
                    }

                    foreach (TableMapping tableMapping in columnMappingReaders.Keys)
                    {
                        List<ColumnMapping> columnMappings = new List<ColumnMapping>();

                        XElement columnMappingsElement = columnMappingReaders[tableMapping];
                        IEnumerable<XElement> columnMappingElements = columnMappingsElement.Elements();

                        foreach (XElement columnMappingElement in columnMappingElements)
                        {

                            if (columnMappingElement.Name == "ColumnMapping")
                            {

                                string type = columnMappingElement.Attribute("type").Value;
                                ColumnUse columnUse = (ColumnUse)Enum.Parse(typeof(ColumnUse), columnMappingElement.Attribute("columnUse").Value);

                                string destinationColumnReference = columnMappingElement.Attribute("destinationColumnReference").Value;

                                DBColumn destinationColumn = tableMapping.DestinationTable.Columns
                                    .Where(c => c.Name.ToLower() == destinationColumnReference.ToLower()).First();

                                ColumnMapping columnMapping = null;

                                if (type == typeof(ExcelColumnMapping).Name)
                                {
                                    string sourceHeader = columnMappingElement.Attribute("sourceHeader").Value;
                                    columnMapping = new ExcelColumnMapping(sourceHeader, destinationColumn, columnUse);
                                }
                                else if (type == typeof(TableColumnMapping).Name)
                                {

                                    int sourceTableMappingIndex = int.Parse(columnMappingElement.Attribute("sourceTableMappingIndex").Value);
                                    string sourceColumnReference = columnMappingElement.Attribute("sourceColumnReference").Value;

                                    TableMapping sourceTableMapping = tableMappings[sourceTableMappingIndex];
                                    DBColumn sourceColumn = sourceTableMapping.DestinationTable.Columns
                                        .Where(c => c.Name.ToLower() == sourceColumnReference.ToLower()).First();

                                    columnMapping = new TableColumnMapping(sourceTableMapping, sourceColumn, destinationColumn, columnUse);

                                }
                                else if (type == typeof(LiteralColumnMapping).Name)
                                {
                                    string litearal = columnMappingElement.Attribute("literal").Value;
                                    string literalType = columnMappingElement.Attribute("literalType").Value;

                                    columnMapping = new LiteralColumnMapping(litearal,
                                        (LiteralType)Enum.Parse(typeof(LiteralType), literalType), destinationColumn, columnUse);
                                }
                                else
                                {
                                    columnMapping = new NullColumnMapping(destinationColumn, columnUse);
                                }

                                columnMappings.Add(columnMapping);
                            }

                        }

                        tableMapping.ColumnMappings = columnMappings.ToArray();
                    }

                }

            }

            return tableMappings.Values.ToArray();
        }
        public void ThreeTablesDifferentOrderTest()
        {
            TableMapping[] testMappings = TestData.TableMappingTestData();

            TableMapping[] mappingArray = new TableMapping[3] { testMappings[0], testMappings[1], testMappings[2] };
            TableMappingOrderer tableMappingOrderer = new TableMappingOrderer(mappingArray);
            TableMapping[] order = tableMappingOrderer.OrderTableMappings();

            Assert.AreEqual(3, order.Length);
            Assert.AreEqual(testMappings[2].TableMappingReference, order[0].TableMappingReference);
            Assert.AreEqual(testMappings[0].TableMappingReference, order[1].TableMappingReference);
            Assert.AreEqual(testMappings[1].TableMappingReference, order[2].TableMappingReference);
        }
        public void NoTableTest()
        {
            TableMapping[] mappingArray = new TableMapping[0];
            TableMappingOrderer tableMappingOrderer = new TableMappingOrderer(mappingArray);
            TableMapping[] order = tableMappingOrderer.OrderTableMappings();

            Assert.AreEqual(0, order.Length);
        }
        public void OneTableTest()
        {
            TableMapping[] mappingArray = new TableMapping[1] { new TableMapping(new DBTable("", ""), TableMappingImportType.Insert, new ColumnMapping[0]) };
            TableMappingOrderer tableMappingOrderer = new TableMappingOrderer(mappingArray);
            TableMapping[] order = tableMappingOrderer.OrderTableMappings();

            Assert.AreEqual(1, order.Length);
        }
        private TableMapping[] readTableMappings(XmlReader reader, Database database)
        {
            Dictionary <int, TableMapping>      tableMappings        = new Dictionary <int, TableMapping>();
            Dictionary <TableMapping, XElement> columnMappingReaders = new Dictionary <TableMapping, XElement>();

            if (reader.ReadToFollowing("TableMappings"))
            {
                using (XmlReader tmlReader = reader.ReadSubtree())
                {
                    while (tmlReader.ReadToFollowing("TableMapping"))
                    {
                        {
                            int    index = int.Parse(tmlReader.GetAttribute("index"));
                            string destinationTableReference = tmlReader.GetAttribute("destinationTableReference");
                            string importType = tmlReader.GetAttribute("importType");

                            DBTable table = database.Tables.Where(t => t.Reference == destinationTableReference).First();

                            TableMapping tableMapping = new TableMapping(table,
                                                                         (TableMappingImportType)Enum.Parse(typeof(TableMappingImportType), importType), null);

                            tableMappings.Add(index, tableMapping);

                            if (tmlReader.ReadToFollowing("ColumnMappings"))
                            {
                                XmlReader cmlReader = tmlReader.ReadSubtree();
                                XElement  cml       = XElement.Load(cmlReader);

                                columnMappingReaders.Add(tableMapping, cml);
                            }
                        }
                    }

                    foreach (TableMapping tableMapping in columnMappingReaders.Keys)
                    {
                        List <ColumnMapping> columnMappings = new List <ColumnMapping>();

                        XElement columnMappingsElement = columnMappingReaders[tableMapping];
                        IEnumerable <XElement> columnMappingElements = columnMappingsElement.Elements();

                        foreach (XElement columnMappingElement in columnMappingElements)
                        {
                            if (columnMappingElement.Name == "ColumnMapping")
                            {
                                string    type      = columnMappingElement.Attribute("type").Value;
                                ColumnUse columnUse = (ColumnUse)Enum.Parse(typeof(ColumnUse), columnMappingElement.Attribute("columnUse").Value);

                                string destinationColumnReference = columnMappingElement.Attribute("destinationColumnReference").Value;

                                DBColumn destinationColumn = tableMapping.DestinationTable.Columns
                                                             .Where(c => c.Name.ToLower() == destinationColumnReference.ToLower()).First();

                                ColumnMapping columnMapping = null;

                                if (type == typeof(ExcelColumnMapping).Name)
                                {
                                    string sourceHeader = columnMappingElement.Attribute("sourceHeader").Value;
                                    columnMapping = new ExcelColumnMapping(sourceHeader, destinationColumn, columnUse);
                                }
                                else if (type == typeof(TableColumnMapping).Name)
                                {
                                    int    sourceTableMappingIndex = int.Parse(columnMappingElement.Attribute("sourceTableMappingIndex").Value);
                                    string sourceColumnReference   = columnMappingElement.Attribute("sourceColumnReference").Value;

                                    TableMapping sourceTableMapping = tableMappings[sourceTableMappingIndex];
                                    DBColumn     sourceColumn       = sourceTableMapping.DestinationTable.Columns
                                                                      .Where(c => c.Name.ToLower() == sourceColumnReference.ToLower()).First();

                                    columnMapping = new TableColumnMapping(sourceTableMapping, sourceColumn, destinationColumn, columnUse);
                                }
                                else if (type == typeof(LiteralColumnMapping).Name)
                                {
                                    string litearal    = columnMappingElement.Attribute("literal").Value;
                                    string literalType = columnMappingElement.Attribute("literalType").Value;

                                    columnMapping = new LiteralColumnMapping(litearal,
                                                                             (LiteralType)Enum.Parse(typeof(LiteralType), literalType), destinationColumn, columnUse);
                                }
                                else
                                {
                                    columnMapping = new NullColumnMapping(destinationColumn, columnUse);
                                }

                                columnMappings.Add(columnMapping);
                            }
                        }

                        tableMapping.ColumnMappings = columnMappings.ToArray();
                    }
                }
            }


            return(tableMappings.Values.ToArray());
        }
        public void TableVariablePartTest()
        {
            DBTable table = new DBTable("dbo", "TestTable");
            DBColumn col1 = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            DBColumn col2 = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);
            table.Columns = new List<DBColumn>() { col1, col2 };

            ColumnMapping colMap1 = new LiteralColumnMapping("1", LiteralType.Integer, col1, ColumnUse.Exclude);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Insert);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Insert, new ColumnMapping[] { colMap1, colMap2 });

            ImportConfiguration config = getTestImportConfig();

            StatementTableMappingPart part = new StatementTableMappingPart(tableMapping, null);
            string partStatement = part.GetTableVariablePart().Replace("\n", "");

            Assert.AreEqual("DECLARE @sqlimport_table_" + tableMapping.TableMappingReference.Replace(".", "_") + " TABLE (TestCol1 integer, TestCol2 nvarchar(max))",
                partStatement);
        }
        public void TableMappingPartConstructorTest()
        {
            DBTable table = new DBTable("dbo", "TestTable");
            DBColumn col1 = new DBColumn(table, "TestCol1", false, DBDatatype.integer);
            DBColumn col2 = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);
            table.Columns = new List<DBColumn>() { col1, col2 };

            ColumnMapping colMap1 = new LiteralColumnMapping("1", LiteralType.Integer, col1, ColumnUse.Exclude);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Insert);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Insert, new ColumnMapping[] { colMap1, colMap2 });

            ImportConfiguration config = getTestImportConfig();

            StatementTableMappingPart part = new StatementTableMappingPart(tableMapping, null);
        }
        public void TableBodyPartUpdateTest()
        {
            DBTable table = new DBTable("dbo", "TestTable");
            DBColumn col1 = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            DBColumn col2 = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);
            DBColumn col3 = new DBColumn(table, "TestCol3", false, DBDatatype.integer);
            table.Columns = new List<DBColumn>() { col1, col2, col3 };

            TableMapping sourceTablemapping = new TableMapping(new DBTable("dbo", "TestTable2"), TableMappingImportType.Insert, null);

            ColumnMapping colMap1 = new TableColumnMapping(sourceTablemapping, col1, col1, ColumnUse.Where);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Where);
            ColumnMapping colMap3 = new LiteralColumnMapping("3", LiteralType.String, col3, ColumnUse.Set);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Update, new ColumnMapping[] { colMap1, colMap2, colMap3 });

            ImportConfiguration config = getTestImportConfig();

            SourceDataEntry[] entries = new SourceDataEntry[] { SourceDataEntry.CreateDataEntry("", DataType.String, "") };
            SourceDataRow[] rows = new SourceDataRow[] { new SourceDataRow(entries, "0") };
            SourceDataTable dt = new SourceDataTable(rows, new string[] { "" });

            StatementTableMappingPart part = new StatementTableMappingPart(tableMapping, dt.GetDataRow(0));

            string[] bodyParts = part.GetStatementBodyPart().Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(4, bodyParts.Length);
            Assert.AreEqual("UPDATE dbo.TestTable", bodyParts[0]);
            Assert.AreEqual("SET TestCol3='3'", bodyParts[1]);
            Assert.AreEqual("OUTPUT inserted.TestCol1, inserted.TestCol2, inserted.TestCol3 INTO @sqlimport_table_" +
                tableMapping.TableMappingReference.Replace(".", "_") + "(TestCol1, TestCol2, TestCol3)", bodyParts[2]);
            Assert.AreEqual("WHERE TestCol1 = (SELECT TOP 1 t.TestCol1 FROM @sqlimport_table_" +
                sourceTablemapping.TableMappingReference.Replace(".", "_") + " t) and TestCol2 = '2'", bodyParts[3]);
        }
 public TableMappingOrderer(TableMapping[] tableMappings)
 {
     this.tableMappings = tableMappings;
 }
 private string getTableVariable(TableMapping tableMapping)
 {
     StatementTableVariablePart tableVariablePart = new StatementTableVariablePart(tableMapping);
     return tableVariablePart.GetTableVariable();
 }
        public void TwoTablesSameOrderTest()
        {
            TableMapping[] testMappings = TestData.TableMappingTestData();

            TableMapping[] mappingArray = new TableMapping[2] { testMappings[1], testMappings[3] };
            TableMappingOrderer tableMappingOrderer = new TableMappingOrderer(mappingArray);
            TableMapping[] order = tableMappingOrderer.OrderTableMappings();

            Assert.AreEqual(2, order.Length);
            Assert.AreEqual(testMappings[1].TableMappingReference, order[0].TableMappingReference);
            Assert.AreEqual(testMappings[3].TableMappingReference, order[1].TableMappingReference);
        }
Пример #23
0
 public TableColumnMapping(TableMapping sourceTableMapping, DBColumn sourceColumn,
     DBColumn destinationColumn, ColumnUse columnUse)
     : base(destinationColumn, columnUse)
 {
     this.sourceTableMapping = sourceTableMapping;
     this.sourceColumn = sourceColumn;
 }
        public void StatementCreatorOrderTest()
        {
            DBTable table = new DBTable("dbo", "TestTable");
            DBColumn col1 = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            DBColumn col2 = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);
            DBColumn col3 = new DBColumn(table, "TestCol3", false, DBDatatype.integer);
            table.Columns = new List<DBColumn>() { col1, col2, col3 };

            Database db = new Database("TestDB", new List<DBTable>() { table });

            TableMapping sourceTablemapping = new TableMapping(new DBTable("dbo", "TestTable2"), TableMappingImportType.Insert, null);

            ColumnMapping colMap1 = new TableColumnMapping(sourceTablemapping, col1, col1, ColumnUse.Where);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Where);
            ColumnMapping colMap3 = new LiteralColumnMapping("3", LiteralType.String, col2, ColumnUse.Set);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Update, new ColumnMapping[] { colMap1, colMap2, colMap3 });

            ErrorHandling errorHandling = new ErrorHandling();
            ImportConfiguration config = new ImportConfiguration(new TableMapping[] { tableMapping }, null, "TestDB", errorHandling);

            SourceDataEntry[] entries = new SourceDataEntry[] {SourceDataEntry.CreateDataEntry("", DataType.String, "") };
            SourceDataRow[] rows = new SourceDataRow[] { new SourceDataRow(entries, "0") };
            SourceDataTable dt = new SourceDataTable(rows, new string[] { "" });

            SQLServerStatementCreator statementCreator = new SQLServerStatementCreator(config, dt);

            ImportStatement statement = statementCreator.CreateStatement(0);
            ImportStatement[] statements = statementCreator.CreateStatements();

            Assert.AreEqual(1, statements.Length);
            Assert.AreEqual(statement.RowReference, statements[0].RowReference);
            Assert.AreEqual(statement.SqlStatement, statements[0].SqlStatement);

            string[] lines = statement.SqlStatement
                .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            StatementSetupPart setupPart = new StatementSetupPart(config);

            Assert.AreEqual(setupPart.GetDatabasePart(), lines[0]);
            Assert.AreEqual(setupPart.GetWarningsPart(), lines[1]);

            StatementTransactionPart transPart = new StatementTransactionPart(config);
            string[] transStartPart = transPart.GetTransactionStartPart()
                .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray(); ;

            Assert.AreEqual(2, transStartPart.Length);
            Assert.AreEqual(transStartPart[0], lines[2]);
            Assert.AreEqual(transStartPart[1], lines[3]);

            StatementTableMappingPart tmParts = new StatementTableMappingPart(tableMapping, dt.GetDataRow(0));
            string variablePart = tmParts.GetTableVariablePart().Replace("\n", "");
            Assert.AreEqual(variablePart, lines[4]);

            string[] bodyParts = tmParts.GetStatementBodyPart()
                .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(4, bodyParts.Length);
            Assert.AreEqual(bodyParts[0], lines[5]);
            Assert.AreEqual(bodyParts[1], lines[6]);
            Assert.AreEqual(bodyParts[2], lines[7]);
            Assert.AreEqual(bodyParts[3], lines[8]);

            string[] transEndPart = transPart.GetTransactionEndPart()
                .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(12, transEndPart.Length);
            Assert.AreEqual(transEndPart[0], lines[9]);
            Assert.AreEqual(transEndPart[1], lines[10]);
            Assert.AreEqual(transEndPart[2], lines[11]);
            Assert.AreEqual(transEndPart[3], lines[12]);
            Assert.AreEqual(transEndPart[4], lines[13]);
            Assert.AreEqual(transEndPart[5], lines[14]);
            Assert.AreEqual(transEndPart[6], lines[15]);
            Assert.AreEqual(transEndPart[7], lines[16]);
            Assert.AreEqual(transEndPart[8], lines[17]);
            Assert.AreEqual(transEndPart[9], lines[18]);
            Assert.AreEqual(transEndPart[10], lines[19]);
            Assert.AreEqual(transEndPart[11], lines[20]);
        }