CVE-2020-26207 (C#, published 2020-11-04T22:15Z)
Description: value: DatabaseSchemaViewer before version 2.7.4.3 is vulnerable to arbitrary code execution if a user is tricked into opening a specially crafted `.dbschema` file. The patch was released in v2.7.4.3. As a workaround, ensure `.dbschema` files from untrusted sources are not opened.
Severity: MEDIUM (CVSS v3 base score: 8)
Weakness: CWE-502 \u2014 Deserialization of Untrusted Data
The product deserializes untrusted data without sufficiently verifying that the resulting data will be valid.
Repository: https://github.com/martinjw/dbschemareader
Files changed:
DatabaseSchemaReader.sln
DatabaseSchemaReader/Data/InsertWriter.cs
DatabaseSchemaReader/Data/ScriptWriter.cs
DatabaseSchemaReader/SqlGen/ConstraintWriterBase.cs
DatabaseSchemaReader/SqlGen/Db2/TablesGenerator.cs
DatabaseSchemaReader/SqlGen/DropTables.cs
DatabaseSchemaReader/SqlGen/IMigrationGenerator.cs
DatabaseSchemaReader/SqlGen/ITableGenerator.cs
DatabaseSchemaReader/SqlGen/ITablesGenerator.cs
DatabaseSchemaReader/SqlGen/MigrationGenerator.cs
DatabaseSchemaReader/SqlGen/MySql/TablesGenerator.cs
DatabaseSchemaReader/SqlGen/SqlServer/TableGenerator.cs
DatabaseSchemaReader/SqlGen/SqlServer/TablesGenerator.cs
DatabaseSchemaReader/SqlGen/TableGeneratorBase.cs
DatabaseSchemaReader/SqlGen/TablesGeneratorBase.cs
DatabaseSchemaReader/SqlWriter.cs
DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddColumn.cs
DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddForeignKey.cs
DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddIndex.cs
DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddPrimaryKey.cs
DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationCreateTable.cs
DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationDropColumn.cs
DatabaseSchemaViewer/DatabaseSchemaViewer.csproj
DatabaseSchemaViewer/Form1.Designer.cs
DatabaseSchemaViewer/Form1.cs
DatabaseSchemaViewer/Form1.resx
DatabaseSchemaViewer/Properties/Resources.Designer.cs
DatabaseSchemaViewer/Properties/Settings.Designer.cs
DatabaseSchemaViewer/SqlTasks.cs
DatabaseSchemaViewer/app.config
DatabaseSchemaViewer/packages.config
build.proj
Commit message: SqlGen - EscapeNames property to disable escaping


Vulnerable code:
# Visual Studio 15
VisualStudioVersion = 15.0.26228.4
            _template = "INSERT INTO " + _sqlWriter.EscapedTableName + @" (
                cols.Add(_sqlWriter.EscapedColumnName(databaseColumn.Name));
            return SqlFormatProvider().Escape(name);
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
        public static string Write(DatabaseSchema schema, ISqlFormatProvider formatter)
                    sb.AppendLine("-- ALTER TABLE " + formatter.Escape(table.Name) + " DROP CONSTRAINT " + foreignKey.Name + lineEnding);

                sb.AppendLine("-- DROP TABLE " + formatter.Escape(table.Name) + lineEnding);
        /// Adds the table. If any primary key, unqiue or check constraints are attached, they are written too (don't write them individually). Foreign keys must be added separately (use <see cref="AddConstraint"/>)


using DatabaseSchemaReader.SqlGen.SqLite;
            return _ddlFactory.TableGenerator(databaseTable);
            return SqlFormatProvider().Escape(name);
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
            return new ConstraintWriter(Table) { IncludeSchema = IncludeSchema };
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
            return SqlFormatProvider().Escape(name);
        private readonly char _parameterPrefix;
        private readonly string _nameEscapeStart;
        private readonly string _nameEscapeEnd;
            switch (sqlType)
            return _table.Columns.Find(delegate(DatabaseColumn col)
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
            this.toolStripButton2});
            // toolStripSeparator1
            this.toolStripSeparator1.Name = "toolStripSeparator1";
            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildAllTableDdl(schema);
                deletes.Click += (s, ea) => new SqlTasks(sqlType).DeleteAllData(schema);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildPackage(pack);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildFunction(fun);
                    create.Click += (s, ea) => new SqlTasks(sqlType).BuildProcedure(sproc);
                code.Click += (s, ea) => new SqlTasks(sqlType).BuildProcedureCode(_databaseSchema, sproc);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddColumn(column);
                alter.Click += (s, ea) => new SqlTasks(sqlType).BuildAlterColumn(column);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddConstraint(parentTable, constraint);
                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropConstraint(parentTable, constraint);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddTrigger(parentTable, trigger);
                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropTrigger(trigger);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddIndex(parentTable, index);
                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropIndex(parentTable, index);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildView(view);
            select.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelect(view);
            selectPaged.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelectPaged(view);
            create.Click += (s, ea) => new SqlTasks(sqlType).BuildTableDdl(table);
            drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropTable(table);
            select.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelect(table);
            selectPaged.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelectPaged(table);
            insert.Click += (s, ea) => new SqlTasks(sqlType).BuildTableInsert(table);
            update.Click += (s, ea) => new SqlTasks(sqlType).BuildTableUpdate(table);
            code.Click += (s, ea) => new SqlTasks(sqlType).BuildClass(table);
            data.Click += (s, ea) => new SqlTasks(sqlType).GetData(table, ConnectionString.Text.Trim(), (string)DataProviders.SelectedItem);
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ0SURBVDhPvZNJSBRgGIbn0KFLFpmRBEmWiAWDgSHVIcSK
        cqVcQcmFyo0yQzHHpRm3UWdxnVLRZkZt1NHKUgwrhEKRCC0XSkzNgqJSTA2V3J7GEYam7OClH97Lz/c+
        3/v9i0DwP1ZWSbWrpFDH9VwtUpWeZJkmZUN9Q+NV+EQpgldNl5MqrdINsIRMtV9IfAmCxpr8AIP4U611
        UsW/ukSJSj19YxR4RxUYAQz1aZifajDq56SOxXE1eq2CppqM9PUgPtFKvCML8YgoRtBQpWRustbMvPyl
        lMWBOGpv51Jdlo26JJ3ygjRuyUUU5yRiBq3TyJj7pjF1XjGYGRLBQMS6+gtwpyKHH5/LjbFXzW2NMqMe
        6fNo1uVwvzobvToDXbkEreoGlYUplClFqGRJa2mqy7OZ+VDEauzRDjFNtUqWRyUwlmmu94a9kWQYjIc3
        MfTW+xMb5lUlUKsymB7OhY9yHtQp6HosXyv6fYTXIdDty1KnO/NPXHhXJST6/Mnpqxc8DwoqCsV8fyth
        rDOVJp2clREx9EeuAXrDDcZAlrq8mG8/xUzrMSYaDyGJsiPQ1bLAeJilylQm+pK4WyOj57khyWCcAXAR
        eoJZeXGWhWdnmG07zmSTE1/rHOjO2kaQuy1O9lvsjQBVnoj+9jTu1eTBcBq8MsR96cdChwezT12YanZm
        XC/kk2Y/A3JLxBH7cDxg3WK6yiJpIg3aXAYeRtOdLzCpS76J9pzNtKRvpT7FCnXibm5esyHIbe+Ks6ON
        mwmQn5lAvvgS0qRQkq8EEBvuRZj/Cc6dPoLrUSGHhXY42O5mj/UOdm63YJelhflD2tCvWqf4F+fW5Qkp
        G1zGAAAAAElFTkSuQmCC
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAItSURBVDhPrZPdS5NxFMf9F7zvJvCi25oaw7VYDZ5yDmXZ
        MKyIUp/wNU2X+UKKpWnU8gWyFS6dtFpNwklFvoApYiKLpWhl5oqmOHxFJ4LBt9/5Rc8v07rJH5zLz+c8
        55zvExa2E+/F8xCoPO0raHMv45FzAS3NQdyzzaCh/hust/y4XjWJ8rKPKC4aQ0H+CC7k+KD0JrCnG6iv
        W8e/3tr6BgxJPTiR9IyXInA/XeKCmurFv/IEBxfWcND0EiqVDPNxlxA4H85zQXnZ9LaCX/DnwBIijR4U
        XZ7CMVOrENibZrngkuXTFsHv8LuJIPZIbuTljiMh3i4EjXcCXJCdNbJJ8Cc84Atgl84JWR6G0WgTgrra
        r1wgpw0rgu3g7qEvCI9pxslTrxEb2yAEN2qm0NUJdkrgzLk3MJ/u59umhdHM9NnU+Sfci0TzK0iSVQiu
        VkygwwOWAaDV8Z3dfRVVlXN8qbQwmjkzw6fAcQnt0OurhaCkeByux8AD+wYLTgiG5NxNZTprQXJ6Ke8c
        F8/goy7odBVCYCkYZTBQezvEO5OAhQSRGgneD7MYnZyDnH8Nhw1tHNYcckCrLRUCiqXtLpTPJgHB5wtv
        4r1/Hv6ZZVy8YkWUzsHgFkQduA9NTKEQZGa8ZXOv8Jkj9C7s3ifhSUcfPJ0D6OodQv+gF0eMZqi0TYhm
        8F51I9TqPCHISvcmpqb08XhSwigkdGc6FW2bFkYzU1cqgvdHZwvB//zRPwBCVjq+3Cul5wAAAABJRU5E
        rkJggg==
        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
  <metadata name="connectionContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="errorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="treeContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
//     Runtime Version:4.0.30319.1
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
//     Runtime Version:4.0.30319.34011
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
        public SqlTasks(SqlType sqlType)
                    sb.AppendLine("DELETE FROM " + sqlWriter.EscapedTableName);
        public void BuildTableSelect(DatabaseTable databaseTable)
            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
﻿<?xml version="1.0" encoding="utf-8" ?>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="DatabaseSchemaViewer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
		Properties="Configuration=Release;OutputPath=$(OutputPath)net35\;IntermediateOutputPath=$(ObjPath)Release\"/>

Fixed code:
# Visual Studio Version 16
VisualStudioVersion = 16.0.30225.117
		net35|Any CPU = net35|Any CPU
		net35|x86 = net35|x86
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|Any CPU.ActiveCfg = Release|Any CPU
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|Any CPU.Build.0 = Release|Any CPU
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|x86.ActiveCfg = Release|Any CPU
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|x86.Build.0 = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|Any CPU.ActiveCfg = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|Any CPU.Build.0 = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|x86.ActiveCfg = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|x86.Build.0 = Release|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|Any CPU.ActiveCfg = net45|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|Any CPU.Build.0 = net45|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|x86.ActiveCfg = net45|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|x86.Build.0 = net45|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|Any CPU.ActiveCfg = net35|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|Any CPU.Build.0 = net35|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|x86.ActiveCfg = net35|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|x86.Build.0 = net35|Any CPU
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|Any CPU.ActiveCfg = Release|x86
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|Any CPU.Build.0 = Release|x86
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|x86.ActiveCfg = net45|x86
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|x86.Build.0 = net45|x86
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {9D3E963B-CAE9-4937-86C7-E49C5DC2CDED}
	EndGlobalSection
        /// <summary>
        /// Escape table and column names (default true)
        /// </summary>
        public bool EscapeNames { get; set; } = true;

            _template = "INSERT INTO " + (EscapeNames ? _sqlWriter.EscapedTableName : _databaseTable.Name) + @" (
                var name = databaseColumn.Name;
                if (EscapeNames) name = _sqlWriter.EscapedColumnName(databaseColumn.Name);
                cols.Add(name);
        /// <summary>
        /// Escape table and column names (default true)
        /// </summary>
        public bool EscapeNames { get; set; } = true;

            w.EscapeNames = EscapeNames;
            w.EscapeNames = EscapeNames;
            EscapeNames = true;
        public bool EscapeNames { get; set; }

            return EscapeNames? SqlFormatProvider().Escape(name) : name;

            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
        public static string Write(DatabaseSchema schema, ISqlFormatProvider formatter, bool escapeNames)
                    sb.AppendLine("-- ALTER TABLE " + (escapeNames ? formatter.Escape(table.Name) : table.Name) + 
                                  " DROP CONSTRAINT " + foreignKey.Name + lineEnding);
                sb.AppendLine("-- DROP TABLE " + (escapeNames ? formatter.Escape(table.Name) : table.Name) + lineEnding);
        /// Escape the names (default true)
        /// </summary>
        bool EscapeNames { get; set; }
        /// <summary>
        /// Adds the table. If any primary key, unique or check constraints are attached, they are written too (don't write them individually). Foreign keys must be added separately (use <see cref="AddConstraint"/>)
        /// <summary>
        /// Escape the names (default true)
        /// </summary>
        bool EscapeNames { get; set; }
        /// <summary>
        /// Escape the table and column names
        /// </summary>
        bool EscapeNames { get; set; }

            EscapeNames = true;
        /// <summary>
        /// Escape any names
        /// </summary>
        public bool EscapeNames { get; set; }

            var tableGenerator = _ddlFactory.TableGenerator(databaseTable);
            if (!EscapeNames) tableGenerator.EscapeNames = false;
            return tableGenerator;
            return EscapeNames ? SqlFormatProvider().Escape(name) : name;
            constraintWriter.EscapeNames = EscapeNames;
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
            return new ConstraintWriter(Table) { IncludeSchema = IncludeSchema, EscapeNames = EscapeNames};
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
            EscapeNames = true;
        /// <summary>
        /// Escape any names
        /// </summary>
        public bool EscapeNames { get; set; }

            return EscapeNames? SqlFormatProvider().Escape(name) : name;
            EscapeNames = true;
        public bool EscapeNames { get; set; }

                tableGenerator.EscapeNames = EscapeNames;
                constraintWriter.EscapeNames = EscapeNames;
        private char _parameterPrefix;
        private string _nameEscapeStart;
        private string _nameEscapeEnd;
        private bool _escapeNames;
            _escapeNames = true;
            ParametersByType();
        }

        private void ParametersByType()
        {
            switch (_sqlType)
        /// <summary>
        /// Escape the names (default true)
        /// </summary>
        public bool EscapeNames
        {
            get { return _escapeNames; }
            set
            {
                _escapeNames = value;
                if (value)
                {
                    ParametersByType(); //reset the start and end
                }
                else
                {
                    _nameEscapeStart = _nameEscapeEnd = string.Empty; //empty them out
                }
            }
        }
            return _table.Columns.Find(delegate (DatabaseColumn col)
        [TestMethod]
        public void TestSqlServerNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var column = CreateNewColumn();

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddColumn(table, column);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD COUNTRY VARCHAR (20)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }
        [TestMethod]
        public void TestSqlServerNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var fk = MigrationCommon.CreateForeignKey(table);

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddConstraint(table, fk);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD CONSTRAINT FK_Orders FOREIGN KEY (Parent) REFERENCES Orders (Id)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }
        [TestMethod]
        public void TestOracleNoSchemaNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.Oracle).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var fk = MigrationCommon.CreateForeignKey(table);

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddConstraint(table, fk);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD CONSTRAINT FK_Orders FOREIGN KEY (Parent) REFERENCES Orders (Id)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }


        [TestMethod]
        public void TestSqlServerNoSchemaNoEscapeNames()
        {
            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var column = MigrationCommon.CreateNewColumn();
            var index = MigrationCommon.CreateUniqueIndex(column, "COUNTRY");

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddIndex(table, index);

            //assert
            Assert.IsTrue(sql.StartsWith("CREATE UNIQUE INDEX UI_COUNTRY ON Orders(COUNTRY)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }

        [TestMethod]
        public void TestAddPrimaryKeyNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var schema = new DatabaseSchema(null, SqlType.SqlServer);
            var table = schema.AddTable("Test")
                .AddColumn<int>("Id")
                .AddColumn<string>("Name")
                .Table;
            var pk = new DatabaseConstraint
            {
                Name = "Test_PK",
                ConstraintType = ConstraintType.PrimaryKey
            };
            pk.Columns.Add("Id");

            //act
            var sql = migration.AddConstraint(table, pk);

            //assert
            Assert.IsTrue(sql.IndexOf("ADD CONSTRAINT Test_PK PRIMARY KEY (Id)", StringComparison.OrdinalIgnoreCase) != -1, "adding a primary key");
        }

        [TestMethod]
        public void TestSqlServerCreateTableNoSchemaNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddTable(table);

            //assert
            Assert.IsTrue(sql.StartsWith("CREATE TABLE Orders", StringComparison.OrdinalIgnoreCase), "table name should be quoted correctly");
            Assert.IsTrue(sql.Contains("ALTER TABLE Orders ADD CONSTRAINT PK_Orders PRIMARY KEY (Id)"), "Primary key should be set with name");
        }
        [TestMethod]
        public void TestSqlServerNoSchemaNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var column = MigrationCommon.CreateNewColumn();

            //act
            migration.IncludeSchema = false;
            var sql = migration.DropColumn(table, column);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders DROP COLUMN COUNTRY", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <TargetFrameworkProfile />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'net35|AnyCPU'">
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <OutputPath>bin\net35\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <ItemGroup Condition="'$(Configuration)' != 'net35'">
    <Reference Include="Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
      <HintPath>..\packages\Oracle.ManagedDataAccess.19.8.0\lib\net40\Oracle.ManagedDataAccess.dll</HintPath>
    </Reference>
  </ItemGroup>
    <None Include="packages.config" />
            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
            this.tsbQuote = new System.Windows.Forms.ToolStripButton();
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
            this.toolStripButton2,
            this.tsbQuote});
            // toolStripSeparator1
            // 
            this.toolStripSeparator1.Name = "toolStripSeparator1";
            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
            // 
            // tsbQuote
            this.tsbQuote.Checked = true;
            this.tsbQuote.CheckOnClick = true;
            this.tsbQuote.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbQuote.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
            this.tsbQuote.Image = ((System.Drawing.Image)(resources.GetObject("tsbQuote.Image")));
            this.tsbQuote.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbQuote.Name = "tsbQuote";
            this.tsbQuote.Size = new System.Drawing.Size(87, 22);
            this.tsbQuote.Text = "Escape Names";
            this.tsbQuote.Click += new System.EventHandler(this.tsbQuote_Click);
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
        private System.Windows.Forms.ToolStripButton tsbQuote;
                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAllTableDdl(schema);
                deletes.Click += (s, ea) => BuildSqlTasks(sqlType).DeleteAllData(schema);
                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildPackage(pack);
                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildFunction(fun);
                    create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildProcedure(sproc);
                code.Click += (s, ea) => BuildSqlTasks(sqlType).BuildProcedureCode(_databaseSchema, sproc);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddColumn(column);
                alter.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAlterColumn(column);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddConstraint(parentTable, constraint);
                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropConstraint(parentTable, constraint);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddTrigger(parentTable, trigger);
                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropTrigger(trigger);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddIndex(parentTable, index);
                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropIndex(parentTable, index);
        private SqlTasks BuildSqlTasks(SqlType sqlType)
        {
            return new SqlTasks(sqlType, tsbQuote.Checked);
        }

                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildView(view);
            select.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelect(view);
            selectPaged.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelectPaged(view);
            create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableDdl(table);
            drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropTable(table);
            select.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelect(table);
            selectPaged.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelectPaged(table);
            insert.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableInsert(table);
            update.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableUpdate(table);
            code.Click += (s, ea) => BuildSqlTasks(sqlType).BuildClass(table);
            data.Click += (s, ea) => BuildSqlTasks(sqlType).GetData(table, ConnectionString.Text.Trim(), (string)DataProviders.SelectedItem);
        private void tsbQuote_Click(object sender, EventArgs e)
        {
            tsbQuote.ForeColor = tsbQuote.Checked ? SystemColors.ControlText : SystemColors.InactiveCaption;
        }
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ0SURBVDhPvZJZSNRRHEb/Dz30kkVmJEKSJWKBGBhSPYQo
        Ua6UKyi5UOkoZYZijksz7jqL65SKNuPSqKPVlGJYIRSKRGi5UGJqFhSVYmqo5HYaR5EsH4KgDz643HvP
        4cflCv8lGcXVztICLddyKslS6UiUaZLWjv4uIbEqvEWKoJX1pYQKs1SDLC5d7RscW4zQWJPnbyi/t6Uu
        S2GkN4lIXOLhE6XAS5RvFDDYq2FussHYHxNaFsbU6CoV6GvSUteYDfGOVOIVUYB7eBFCQ5WS2YnaDfDS
        5xIW+mOovZVDdWkm6uJUyvJTuCkXU5Qdz5pnNXUaGbNfNevwsgFmUAz94Zv2D8Ht8my+fypbh1sbZcY+
        1OXSpM3mXnUmOnUa2jIplarrVBQkUaoUo5IlrMqqyzKZfl9oHHukXYK+VsnSiBRG0zf2nWFvOBEGYuF1
        FD31fkSHelYJalUaU0M58EHO/ToFnY/kq5d+Hf1VMHT5sNjhxtxjJ95W2SE65zJ15bzHIaG8QMK3N1JG
        O5LRa+UsD0ugL2IV7AkzgAEsdnoy13aS6ZbjjDceRiqyJsDZNN/4BiXKZMZ7E7hTI6P7mWGSgRiD4AJ0
        B7H8/AzzT08z03qCCb0DX+ps6crYQaCbFQ4222yMAlWumL62FO7W5MJQCrw0jPvCl/l2d2aeODHZ5MiY
        zo6PmgP0y02RhO/H/qB5sxFeSWFWPA2VOfQ/iKQrT1hvp3wLbdlbaU7dTn2SGep4C25ctSTQdd+yo72l
        6xouCHnpceRJLpKVEELiZX+iwzwJ9XPh7KmjOB+z44idNbZWFuw138XunSbsMTXZ+A/+LYLwE+S85Qd1
        BNSrAAAAAElFTkSuQmCC
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIzSURBVDhPrZLrS9NRGMd//0LvexP0orc1NYZrsRr8yjWU
        ZcOwIrr9wltpuswLKZamUcsLZCtcOmm1moSTiryAKWIii6VoZeaKpji8ohPB4Nt5zn55sqIX0QPPm8P5
        fM55LtJ/iefPIqD0tS6hxbuIh+45NDWGcdcxhbrar7DfDOJaxThKSz6gsGAEeblDOH8uABWXJAK7OoHa
        mlX8LVZW12BK6cLhlKc8VVySvE8WuKCqcl69+nsQHJ5bwW7LC2g0CqyHPELgfjDLBaUlk+r1jfED/hRa
        QIzZh4JLEzhoaRYCZ8M0F1y0fVQRET/Db8fC2CZ7kZM9iqREpxDU3w5xQVbmkIpF41e4LxDCZoMbijII
        s9khBDXVX7hAOTOoon+GOwc+Y1N8I44cfYWEhDohuF41gY52sFECx0++hvVYL+82NYxqpm/Ty1G4G8nW
        l5BluxBcKRtDmw9sB4Bm1zc292VUlM/wplLDqOaM9MA6fCCpFUZjpRAUFY7C8wi471xjixOBKTV7Q1pO
        2JCaVhyFExm83wODoUwIbHnDDAaqb0X4ywSxY8ToZPjfT2N4fAZK7lXsNbVwWLfHBb2+WAhoLR13sP5t
        EhB8Nv8G3gVnEZxaxIXLdsQaXAxuQuyue9DF5wtBRvobVvcSh7caPdiyQ8bjth742vvQ0T2A3n4/9pmt
        0OgbEMfg7dp6aLU5QpCZ5k8+faqHrydtGC0JzZlGRd2mhlHN9ColwTvjsoTg30OSvgNCVjq+glI0hgAA
        AABJRU5ErkJggg==
        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
  <data name="tsbQuote.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
        YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
        0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
        bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
        VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
        c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
        Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
        mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
        kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
        TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
  </data>
  <metadata name="connectionContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="errorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="treeContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
//     Runtime Version:4.0.30319.42000
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
//     Runtime Version:4.0.30319.42000
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0")]
        public SqlTasks(SqlType sqlType, bool escapeNames)
            EscapeNames = _migrationGenerator.EscapeNames = escapeNames;
        public bool EscapeNames { get; set; }

            tg.EscapeNames = EscapeNames;
                    sb.AppendLine("DELETE FROM " + (EscapeNames ? sqlWriter.EscapedTableName : databaseTable.Name));
                sw.EscapeNames = EscapeNames;
            tg.EscapeNames = EscapeNames;
        private SqlWriter BuildSqlWriter(DatabaseTable databaseTable)
            sqlWriter.EscapeNames = EscapeNames;
            return sqlWriter;
        }

        public void BuildTableSelect(DatabaseTable databaseTable)
        {
            var sqlWriter = BuildSqlWriter(databaseTable);


            var sqlWriter = BuildSqlWriter(databaseTable);
            var sqlWriter = BuildSqlWriter(databaseTable);
            var sqlWriter = BuildSqlWriter(databaseTable);
﻿<?xml version="1.0" encoding="utf-8"?>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="DatabaseSchemaViewer.Properties.Settings"
        type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
      <remove invariant="Oracle.ManagedDataAccess.Client"/>
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
        type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no"/>
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral"/>
        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.19.1"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
﻿<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Oracle.ManagedDataAccess" version="19.8.0" targetFramework="net40" />
</packages>
		Properties="Configuration=net35;OutputPath=$(OutputPath)net35\;IntermediateOutputPath=$(ObjPath)Release\"/>