public void SetFlag(string flag, bool value)
        {
            if (value)
            {
                if (_flags == null)
                {
                    _flags = new CaseInsensitiveStringKeyDictionary <string>();
                }

                if (!_flags.ContainsKey(flag))
                {
                    _flags[flag] = flag;
                    Table.HandleColumnFlagged(this, flag, true);
                }
            }
            else if (_flags != null)
            {
                if (_flags.ContainsKey(flag))
                {
                    _flags.Remove(flag);
                    Table.HandleColumnFlagged(this, flag, false);
                }

                if (_flags.Count == 0)
                {
                    _flags = null;
                }
            }
        }
Example #2
0
        public void UnknownKeyReturnsDefaultInt()
        {
            var dict = new CaseInsensitiveStringKeyDictionary <int>
            {
                ["x"] = 17
            };

            Assert.AreEqual(17, dict["x"]);
            Assert.AreEqual(default, dict["y"]);
        public void SetAdditionalData(string key, object value)
        {
            if (_additionalData == null)
            {
                _additionalData = new CaseInsensitiveStringKeyDictionary <AdditionalData>();
            }

            _additionalData[key] = new AdditionalData(key, value);
        }
Example #4
0
        public void KeyIsCaseInsensitive()
        {
            var dict = new CaseInsensitiveStringKeyDictionary <int>
            {
                ["x"] = 17
            };

            Assert.AreEqual(17, dict["x"]);
            Assert.AreEqual(17, dict["X"]);
        }
Example #5
0
        public void ValueCanBeOverwritten()
        {
            var dict = new CaseInsensitiveStringKeyDictionary <int>
            {
                ["x"] = 17,
                ["X"] = 21
            };

            Assert.AreEqual(21, dict["x"]);
            Assert.AreEqual(21, dict["X"]);
        }
Example #6
0
        public static RelationalModel Convert(DatabaseDefinition sourceDefinition, string defaultSourceSchemaName, CaseInsensitiveStringKeyDictionary <string> schemaNameMap = null, Func <SqlTable, bool> filterDelegate = null)
        {
            var newDefaultSchemaName = schemaNameMap?[defaultSourceSchemaName] ?? defaultSourceSchemaName;
            var newModel             = new RelationalModel(newDefaultSchemaName);
            var sourceTablesOrdered  = sourceDefinition.GetTables()
                                       .Where(x => filterDelegate?.Invoke(x) != false)
                                       .OrderBy(x => x.SchemaAndTableName.SchemaAndName)
                                       .ToList();

            foreach (var sourceTable in sourceTablesOrdered)
            {
                var newSchemaName = schemaNameMap?[sourceTable.SchemaAndTableName.Schema] ?? sourceTable.SchemaAndTableName.Schema ?? newDefaultSchemaName;

                var newSchema = newModel[newSchemaName]
                                ?? newModel.AddSchema(newSchemaName);

                var primaryKey = sourceTable.Properties.OfType <PrimaryKey>().FirstOrDefault();
                var newTable   = newSchema.AddTable(sourceTable.SchemaAndTableName.TableName);

                foreach (var property in sourceTable.Properties.OfType <DwhTableFlagProperty>())
                {
                    newTable.SetFlag(property.Name, true);
                }

                foreach (var property in sourceTable.Properties.OfType <DwhTableDataProperty>())
                {
                    newTable.SetAdditionalData(property.Name, property.Value);
                }

                if (sourceTable.HasProperty <EtlRunInfoDisabledProperty>())
                {
                    newTable.SetEtlRunInfoDisabled();
                }

                if (sourceTable.HasProperty <HasHistoryTableProperty>())
                {
                    newTable.SetHasHistoryTable();
                }

                var sourceTableNameOverrideProperty = sourceTable.Properties.OfType <SourceTableNameOverrideProperty>().FirstOrDefault();
                if (sourceTableNameOverrideProperty != null)
                {
                    newTable.SetSourceTableNameOverride(sourceTableNameOverrideProperty.SourceTableName);
                }

                foreach (var sourceColumn in sourceTable.Columns)
                {
                    var partOfPrimaryKey = primaryKey?.SqlColumns.Any(x => x.SqlColumn == sourceColumn) == true;
                    var newColumn        = newTable.AddColumn(sourceColumn.Name, partOfPrimaryKey);

                    foreach (var property in sourceColumn.Properties.OfType <DwhColumnFlagProperty>())
                    {
                        newColumn.SetFlag(property.Name, true);
                    }

                    foreach (var property in sourceColumn.Properties.OfType <DwhColumnDataProperty>())
                    {
                        newColumn.SetAdditionalData(property.Name, property.Value);
                    }

                    if (sourceColumn.HasProperty <Identity>())
                    {
                        newColumn.SetIdentity();
                    }

                    if (sourceColumn.HasProperty <HistoryDisabledProperty>())
                    {
                        newColumn.SetHistoryDisabled();
                    }

                    if (sourceColumn.HasProperty <RecordTimestampIndicatorProperty>())
                    {
                        newColumn.SetRecordTimestampIndicator();
                    }
                }
            }

            foreach (var table in sourceTablesOrdered)
            {
                var newSourceSchemaName = schemaNameMap?[table.SchemaAndTableName.Schema] ?? table.SchemaAndTableName.Schema ?? newDefaultSchemaName;

                var newSourceSchema = newModel[newSourceSchemaName];
                var newSourceTable  = newSourceSchema[table.SchemaAndTableName.TableName];

                foreach (var fk in table.Properties.OfType <ForeignKey>())
                {
                    var newTargetSchemaName = schemaNameMap?[fk.ReferredTable.SchemaAndTableName.Schema] ?? fk.ReferredTable.SchemaAndTableName.Schema ?? newDefaultSchemaName;

                    var newTargetSchema = newModel[newTargetSchemaName];
                    var newTargetTable  = newTargetSchema[fk.ReferredTable.SchemaAndTableName.TableName];

                    if (newTargetTable == null) // target table is filtered out
                    {
                        continue;
                    }

                    var newFk = newSourceTable.AddForeignKeyTo(newTargetTable);
                    foreach (var map in fk.ForeignKeyColumns)
                    {
                        var sourceColumn = newSourceTable[map.ForeignKeyColumn.Name];
                        var targetColumn = newTargetTable[map.ReferredColumn.Name];
                        newFk.AddColumnPair(sourceColumn, targetColumn);
                    }
                }
            }

            return(newModel);
        }