示例#1
0
        public override string GetCreateTable(CreateTableSchema table)
        {
            var result = new List <string>();

            this.AddTimestamps(table);

            var columns = table.GetColumns();

            foreach (var column in columns)
            {
                result.Add("\t" + this.GetColumn(column.Value));
            }

            // unique
            foreach (var column in table.columns)
            {
                if (column.Value.Unique)
                {
                    result.Add("\tUNIQUE (" + this.WrapWithQuotes(column.Key) + ")");
                }
            }

            return("CREATE TABLE " + this.FormatWithSchemaName(table.TableName) + " (\r"
                   + string.Join(",\r", result)
                   + "\r) " + this.GetTableEngine() + ";\r");
        }
示例#2
0
 public virtual void AddTimestamps(CreateTableSchema table)
 {
     if (table.Timestamps &&
         !table.HasColumn("created_at") &&
         !table.HasColumn("updated_at"))
     {
         table.AddColumn("created_at", ColumnType.DateTime(), true, "CURRENT_TIMESTAMP");
         table.AddColumn("updated_at", ColumnType.DateTime(), true);
     }
 }
示例#3
0
        public virtual string GetAddForeignKeyConstraints(CreateTableSchema table)
        {
            var result = "";

            foreach (var foreignKey in table.foreignKeys)
            {
                result += this.GetAddForeignKeyConstraint(table.TableName, foreignKey.Value);
            }
            return(result);
        }
示例#4
0
        public virtual string GetSeeds(CreateTableSchema table)
        {
            var result = "";

            foreach (var seedRowCommand in table.seedTable.rows)
            {
                result += this.GetSeedRow(seedRowCommand.TableName, seedRowCommand.columnValues);
            }
            return(result);
        }
示例#5
0
        public override string GetAddForeignKeyConstraints(CreateTableSchema table)
        {
            var result = "";

            foreach (var foreignKey in table.foreignKeys)
            {
                result += "CREATE INDEX " + this.WrapWithQuotes(foreignKey.Value.ColumnName + "_index") + " ON " + this.FormatWithSchemaName(table.TableName) + " (" + this.WrapWithQuotes(foreignKey.Value.ColumnName) + ");\r";
                result += "ALTER TABLE " + this.FormatWithSchemaName(table.TableName) + " ADD FOREIGN KEY (" + this.WrapWithQuotes(foreignKey.Value.ColumnName) + ") REFERENCES " + this.FormatWithSchemaName(foreignKey.Value.TableReferenced) + "(" + this.WrapWithQuotes(foreignKey.Value.PrimaryKeyReferenced) + ");\r";
            }
            return(result);
        }
示例#6
0
 public bool HasIdentityPrimaryKey(CreateTableSchema table)
 {
     foreach (var primaryKey in table.primaryKeys)
     {
         if (primaryKey.Value.AutoIncrement)
         {
             return(true);
         }
     }
     return(false);
 }
        public void TestGetColumn_WithDate()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.Date());

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("`column1` DATE NOT NULL", result);
        }
        public void TestGetColumn_WithLongText()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.LongText());

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("`column1` LONGTEXT COLLATE utf8mb4_unicode_ci NOT NULL", result);
        }
        public void TestGetColumn_WithString()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1");

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("`column1` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL", result);
        }
示例#10
0
        public void TestGetColumn_WithDefaultInt()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.Int(), false, 10);

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] INT NOT NULL DEFAULT 10", result);
        }
示例#11
0
        public void TestGetColumn_WithTimestamp()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.Timestamp());

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] TIMESTAMP NOT NULL", result);
        }
示例#12
0
        public void TestGetColumn_WithUnsignedBigInt()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.BigInt(true));

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("`column1` BIGINT UNSIGNED NOT NULL", result);
        }
示例#13
0
        public void TestGetColumn_WithNotNullable()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", false);

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] NVARCHAR(255) NOT NULL", result);
        }
示例#14
0
        public void TestGetColumn_WithLongText()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.LongText());

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] NTEXT NOT NULL", result);
        }
示例#15
0
        public void TestGetColumn_WithFloatAndDigits()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.Float(2));

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] DECIMAL(18,2) NOT NULL", result);
        }
示例#16
0
        public void TestGetColumn_WithStringAndValue()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.VarChar(100));

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] NVARCHAR(100) NOT NULL", result);
        }
示例#17
0
        public void TestGetColumn_WithBigIntUnisgned_IgnoreUnsigned()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.BigInt(true));

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] BIGINT NOT NULL", result);
        }
示例#18
0
        public void TestGetColumn_WithCharAndValue()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.Char(100));

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("`column1` CHAR(100) COLLATE utf8mb4_unicode_ci NOT NULL", result);
        }
示例#19
0
        public void TestGetColumn_WithDefault()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.VarChar(), false, "my value");

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] NVARCHAR(255) NOT NULL DEFAULT 'my value'", result);
        }
示例#20
0
        public void TestAltertableAddForeignKey_WithNoForeignKey_ReturnsEmptyString()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("posts");

            var result = service.GetAddForeignKeyConstraints(table);

            var expected = "";

            Assert.AreEqual(expected, result);
        }
示例#21
0
        public void TestGetColumn_WithBlob()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1");

            table.AddColumn("column1", ColumnType.Blob());

            var result = service.GetColumn(table.GetColumn("column1"));

            Assert.AreEqual("[column1] VARBINARY(MAX) NOT NULL", result);
        }
示例#22
0
        public void TestChangeEngine()
        {
            var service = new MySqlQueryService("MyISAM");

            var table = new CreateTableSchema("table1")
                        .AddColumn("column1");

            var result = service.GetCreateTable(table);

            var expected = "CREATE TABLE `table1` (\r\t`column1` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL\r) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;\r";

            Assert.AreEqual(expected, result);
        }
示例#23
0
        public string GetAutoIncrement(CreateTableSchema table)
        {
            var result = "";

            foreach (var column in table.primaryKeys)
            {
                if (column.Value.AutoIncrement)
                {
                    result += "ALTER TABLE " + this.FormatWithSchemaName(table.TableName) + " MODIFY " + this.WrapWithQuotes(column.Key) + " INT UNSIGNED NOT NULL AUTO_INCREMENT;\r";
                }
            }
            return(result);
        }
示例#24
0
        public void TestAltertableAddPForeignKey()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("posts")
                        .AddForeignKey("user_id", "users", "id");

            var result = service.GetAddForeignKeyConstraints(table);

            var expected = "ALTER TABLE [dbo].[posts] ADD FOREIGN KEY ([user_id]) REFERENCES [dbo].[users]([id]);\r";

            Assert.AreEqual(expected, result);
        }
示例#25
0
        public void TestAltertableAddForeignKey()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("posts")
                        .AddForeignKey("user_id", "users", "id");

            var result = service.GetAddForeignKeyConstraints(table);

            var expected = "CREATE INDEX `user_id_index` ON `posts` (`user_id`);\rALTER TABLE `posts` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`);\r";

            Assert.AreEqual(expected, result);
        }
示例#26
0
        public void TestAltertableAddPrimaryKey_WithNoPrimaryKey_ReturnsEmptyString()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1")
                        .AddColumn("column1");

            var result = service.GetAddPrimaryKeyConstraint(table);

            var expected = "";

            Assert.AreEqual(expected, result);
        }
示例#27
0
        public void TestCreateTable_WithNoKeys()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1")
                        .AddColumn("column1")
                        .AddColumn("column2");

            var result = service.GetCreateTable(table);

            var expected = "CREATE TABLE `table1` (\r\t`column1` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL,\r\t`column2` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL\r) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;\r";

            Assert.AreEqual(expected, result);
        }
示例#28
0
        public void TestAltertableAddPrimaryKey()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1")
                        .AddPrimaryKey("pk1")
                        .AddColumn("column1");

            var result = service.GetAddPrimaryKeyConstraint(table);

            var expected = "ALTER TABLE `table1` ADD PRIMARY KEY (`pk1`);\rALTER TABLE `table1` MODIFY `pk1` INT UNSIGNED NOT NULL AUTO_INCREMENT;\r";

            Assert.AreEqual(expected, result);
        }
示例#29
0
        public void TestCreateTable_WithNoKeys()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1")
                        .AddColumn("column1")
                        .AddColumn("column2");

            var result = service.GetCreateTable(table);

            var expected = "CREATE TABLE [dbo].[table1] (\r\t[column1] NVARCHAR(255) NOT NULL,\r\t[column2] NVARCHAR(255) NOT NULL\r);\r";

            Assert.AreEqual(expected, result);
        }
示例#30
0
        public void TestAltertableAddPrimaryKey()
        {
            var service = this.GetService();

            var table = new CreateTableSchema("table1")
                        .AddPrimaryKey("pk1")
                        .AddColumn("column1");

            var result = service.GetAddPrimaryKeyConstraint(table);

            var expected = "ALTER TABLE [dbo].[table1] ADD PRIMARY KEY ([pk1]);\r";

            Assert.AreEqual(expected, result);
        }