public void NaturalizeNames_FieldNameTest()
        {
            Pattern.LanguageSettings.KeywordsCaseSensitive = true;
            var analyzer = new SchemaAnalyzer_Accessor(Project, Pattern, Database);
            var table    = new DbTable("tbl_Test");
            var col0     = new DbColumn("Test_Other");
            var col1     = new DbColumn("Test_Col");
            var col2     = new DbColumn("Test_Col");
            var col3     = new DbColumn("Test_Col");
            var col4     = new DbColumn("Test_Col");
            var col5     = new DbColumn("Test_Col");

            table.SchemaColumns.AddRange(new[]
            {
                col0,
                col1,
                col2,
                col3,
                col4,
                col5
            });
            foreach (var col in table.SchemaColumns)
            {
                col.FieldNameSchema = analyzer.NaturalizeNames_FieldName(table, col, col.FieldNameSchema, true);
            }
            Assert.AreEqual("Test_Col", col1.FieldNameSchema);
            Assert.AreEqual("Test_Col_", col2.FieldNameSchema);
            Assert.AreEqual("Test_Col_3", col5.FieldNameSchema);
        }
        public void NaturalizeNames_ForeignTableFieldNameTest()
        {
            Pattern.LanguageSettings.KeywordsCaseSensitive = true;
            var analyzer    = new SchemaAnalyzer_Accessor(Project, Pattern, Database);
            var table       = new DbTable("tbl_Test");
            var foreignKey0 = new DbForeignKey()
            {
                ForeignTableName = "tblOthers"
            };
            var foreignKey1 = new DbForeignKey()
            {
                ForeignTableName = "tblTest"
            };
            var foreignKey2 = new DbForeignKey()
            {
                ForeignTableName = "tblTest"
            };
            var foreignKey3 = new DbForeignKey()
            {
                ForeignTableName = "tblTest"
            };
            var foreignKey4 = new DbForeignKey()
            {
                ForeignTableName = "tblTest"
            };
            var foreignKey5 = new DbForeignKey()
            {
                ForeignTableName = "tblTest"
            };
            var foreignKey6 = new DbForeignKey()
            {
                ForeignTableName = "tblTest"
            };

            table.ForeignKeys.AddRange(new[]
            {
                foreignKey0,
                foreignKey1,
                foreignKey2,
                foreignKey3,
                foreignKey4,
                foreignKey5,
                foreignKey6,
            });
            foreach (var key in table.ForeignKeys)
            {
                key.ForeignTableNameInLocalTable = analyzer.NaturalizeNames_ForeignTableFieldName(table, key);
            }
            Assert.AreEqual("tblTest", foreignKey1.ForeignTableNameInLocalTable);

            Assert.AreEqual("tblTest_", foreignKey2.ForeignTableNameInLocalTable);
        }
        public void NaturalizeNames_FieldNameTest_SameAsParent()
        {
            Pattern.LanguageSettings.KeywordsCaseSensitive = true;
            var analyzer = new SchemaAnalyzer_Accessor(Project, Pattern, Database);
            var table    = new DbTable("SameName");
            var col1     = new DbColumn("SameName");
            var col2     = new DbColumn("SameName");
            var col3     = new DbColumn("SameName");

            table.SchemaColumns.AddRange(new[]
            {
                col1,
                col2,
                col3,
            });
            foreach (var col in table.SchemaColumns)
            {
                col.FieldNameSchema = analyzer.NaturalizeNames_FieldName(table, col, col.FieldNameSchema, true);
            }
            Assert.AreEqual("SameName_", col1.FieldNameSchema);
            Assert.AreEqual("SameName_1", col2.FieldNameSchema);
        }
        public void NaturalizeNames_TableSchemaName_DuplicateTest_ForView()
        {
            Pattern.LanguageSettings.KeywordsCaseSensitive = true;
            var analyzer = new SchemaAnalyzer_Accessor(Project, Pattern, Database);
            var table0   = new DbView("tbl_Other");
            var table1   = new DbView("tbl_Test");
            var table2   = new DbView("tbl_Test");
            var table3   = new DbView("tbl_Test");
            var table4   = new DbView("tbl_Test");
            var table5   = new DbView("tbl_Test");
            var table6   = new DbView("tbl_Test");

            Database.SchemaViews.AddRange(new[]
            {
                table0,
                table1,
                table2,
                table3,
                table4,
                table5,
                table6,
            });
            try
            {
                foreach (var dbTable in Database.SchemaViews)
                {
                    dbTable.TableNameSchema = analyzer.NaturalizeNames_TableSchemaName_Duplicate(dbTable, true);
                }
            }
            finally
            {
                Database.SchemaViews.Clear();
            }
            Assert.AreEqual("tbl_Test", table1.TableNameSchema);
            Assert.AreEqual("tbl_Test_", table2.TableNameSchema);
            Assert.AreEqual("tbl_Test_1", table3.TableNameSchema);
            Assert.AreEqual("tbl_Test_2", table4.TableNameSchema);
        }
        public void Determine_DataTypeNullableTest()
        {
            var analyzer = new SchemaAnalyzer_Accessor(Project, Pattern, Database);
            var dbColumn = new DbColumn("testField");

            dbColumn.DataTypeDotNet = "String";
            Assert.IsTrue(analyzer.Determine_DataTypeNullable(dbColumn));

            dbColumn.DataTypeDotNet = "Object";
            Assert.IsTrue(analyzer.Determine_DataTypeNullable(dbColumn));

            dbColumn.DataTypeDotNet = "Object[]";
            Assert.IsTrue(analyzer.Determine_DataTypeNullable(dbColumn));

            dbColumn.DataTypeDotNet = "Int32";
            Assert.IsFalse(analyzer.Determine_DataTypeNullable(dbColumn));

            dbColumn.DataTypeDotNet = "System.Guid";
            Assert.IsFalse(analyzer.Determine_DataTypeNullable(dbColumn));

            dbColumn.DataTypeDotNet = "Microsoft.SqlServer.Types.FooType";
            Assert.IsFalse(analyzer.Determine_DataTypeNullable(dbColumn));
        }