コード例 #1
0
        public void DeepIgnoreTest()
        {
            var analyzed                   = new IgnoreMapAnalyzer();
            var analyzedHash               = Hashing.HashTypeMaps(analyzed.TypeMap);
            var analyzedCurrentHash        = Hashing.HashTypeMaps(TestTypeMaps.IgnoreTestMap);
            TypeMapDifferences differences = new TypeMapDifferences(analyzed.TypeMap, TestTypeMaps.IgnoreTestMap, new List <DifferenceType>
            {
                DifferenceType.ChangedColumnOrder
            });

            Assert.IsTrue(!differences.Any());
        }
コード例 #2
0
        public async Task <bool> HashesMatch(DbConnection con, string tableName, TypeMap typeMap)
        {
            const string HASH_COLUMN = "Hash";

            string getHashRecord = $"select {HASH_COLUMN} from AnalyzedModelHashes where TableName='{tableName}'";

            string existingHash = await con.RunCommandGetString(getHashRecord, HASH_COLUMN);

            string newHash = typeMap.EncodeToBase64();

            if (existingHash == newHash)
            {
                return(true);
            }

            if (existingHash == string.Empty)
            {
                await CreateTableFromTypeMap(con, tableName, typeMap);

                return(false);
            }

            TypeMap existing = TypeMap.DecodeFromBase64(existingHash);

            TypeMapDifferences differences = existing.GetDifferences(typeMap);

            foreach (TypeMapDifference difference in differences)
            {
                if (difference.DifferenceType == DifferenceType.DataTypeChange)
                {
                    throw new Exception($"Difference types {nameof(DifferenceType.DataTypeChange)}, " +
                                        $" not supported. \n" +
                                        $"Column:  {difference.ColumnKey}");
                }

                if (difference.DifferenceType == DifferenceType.ChangedColumnOrder)
                {
                    //TODO: Better handling.
                    //ignore for now
                }

                if (difference.DifferenceType == DifferenceType.AddedColumn)
                {
                    NodeProperties node = typeMap[difference.ColumnKey];

                    string alterState = $"ALTER TABLE {typeMap.Name} ADD COLUMN {difference.ColumnKey} {SqlTranslator.SqlTypeFromInternalType(node.InternalType, this).SqlType};";

                    await con.RunCommandAsync(alterState);
                }
            }
            return(false);
        }
コード例 #3
0
        public void AnalyticalObjectComplexText()
        {
            var analyzed            = new Parcel2LevelAnalyzer();
            var analyzedHash        = Hashing.HashTypeMaps(analyzed.TypeMap);
            var analyzedCurrentHash = Hashing.HashTypeMaps(TestTypeMaps.P2TypeMap);

            TypeMapDifferences differences = new TypeMapDifferences(analyzed.TypeMap, TestTypeMaps.P2TypeMap, new DifferenceType[]
            {
                DifferenceType.ChangedColumnOrder
            });

            Assert.AreEqual(analyzedHash, analyzedCurrentHash);
        }
コード例 #4
0
        public void AnalyticalObjectComplexText()
        {
            var analyzed            = new Parcel2LevelAnalyzer();
            var analyzedHash        = Hashing.HashTypeMaps(analyzed.TypeMap);
            var analyzedCurrentHash = Hashing.HashTypeMaps(TestTypeMaps.P2TypeMap);

            foreach (string key in analyzed.TypeMap.Keys)
            {
                Assert.IsTrue(TestTypeMaps.P2TypeMap.ContainsKey(key));
            }

            TypeMapDifferences differences = new TypeMapDifferences(analyzed.TypeMap, TestTypeMaps.P2TypeMap);

            Assert.AreEqual(analyzedHash, analyzedCurrentHash);
        }
コード例 #5
0
        public void DeepSelfRefTest()
        {
            var analyzed                   = new WideParcelSelfReferenceDeep();
            var analyzedHash               = Hashing.HashTypeMaps(analyzed.TypeMap);
            var analyzedCurrentHash        = Hashing.HashTypeMaps(TestTypeMaps.SelfReferenceTestDeep);
            TypeMapDifferences differences = new TypeMapDifferences(analyzed.TypeMap, TestTypeMaps.SelfReferenceTest, new List <DifferenceType>
            {
                DifferenceType.ChangedColumnOrder
            });

            var test = string.Empty;

            test += analyzed.TypeMap.ToString() + "\n\n\n\n\n\n\n\n\n";
            test += TestTypeMaps.SelfReferenceTest.ToString();

            Assert.AreEqual(analyzedHash, analyzedCurrentHash);
        }
コード例 #6
0
        public void ExternalAnalyticalObjectTest()
        {
            // merge dictionaries (like GetFromService)
            foreach (var entry in TestTypeMaps.P2TypeMap)
            {
                TestTypeMaps.P3TypeMap.Add(entry);
            }

            var analyzed            = new Parcel3LevelAnalyzer();
            var analyzedHash        = Hashing.HashTypeMaps(analyzed.TypeMap);
            var analyzedCurrentHash = Hashing.HashTypeMaps(TestTypeMaps.P3TypeMap);

            DictionaryAssert.KeysMatch(analyzed.TypeMap, TestTypeMaps.P3TypeMap);

            TypeMapDifferences differences = new TypeMapDifferences(analyzed.TypeMap, TestTypeMaps.P3TypeMap);

            Assert.AreEqual(analyzedHash, analyzedCurrentHash);
        }
コード例 #7
0
        public void ExternalAnalyticalObjectTestNoReference()
        {
            // merge dictionaries (like GetFromService)
            foreach (var entry in TestTypeMaps.P2TypeMap)
            {
                TestTypeMaps.P3TypeMapNoRef.Add(new KeyValuePair <string, NodeProperties>(entry.Key, entry.Value));
            }

            var analyzed = new Parcel3LevelAnalyzer();

            analyzed.Property("referencetoparcel2level", new AnalyticalObject <Parcel2Level>()).GetFromService("SomeService", new Parcel2LevelAnalyzer());
            var analyzedHash        = Hashing.HashTypeMaps(analyzed.TypeMap);
            var analyzedCurrentHash = Hashing.HashTypeMaps(TestTypeMaps.P3TypeMapNoRef);

            TypeMapDifferences differences = new TypeMapDifferences(analyzed.TypeMap, TestTypeMaps.P3TypeMapNoRef, new List <DifferenceType>()
            {
                DifferenceType.ChangedColumnOrder
            });

            Assert.IsFalse(differences.Any());
        }