示例#1
0
        protected override string CreateCreatePrimaryKeyQuery(MetaComparisonTableGroup tableGroup,
                                                              MetaComparisonPrimaryKeyGroup primaryKeyGroup)
        {
            var requiredTable = (MetaTable)tableGroup.RequiredItem;
            var primaryKey    = (MetaPrimaryKey)primaryKeyGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("ALTER TABLE [");
            sb.Append(requiredTable.Name);
            sb.Append("] ADD CONSTRAINT ");
            sb.Append(primaryKey.Name);
            sb.Append(" PRIMARY KEY ( ");

            bool first = true;

            foreach (String columnName in primaryKey.ColumnNames)
            {
                if (!first)
                {
                    sb.Append(" ,\n ");
                }
                else
                {
                    first = false;
                }
                sb.Append(columnName);
                sb.Append(" ");
            }

            sb.Append(")");
            return(sb.ToString());
        }
示例#2
0
        protected override string CreateCreateForeginKeyQuery(MetaComparisonTableGroup tableGroup,
                                                              MetaComparisonForeignKeyGroup foreignKeyGroup)
        {
            var requiredTable  = (MetaTable)tableGroup.RequiredItem;
            var metaForeignKey = (MetaForeignKey)foreignKeyGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("ALTER TABLE [");
            sb.Append(requiredTable.Name);
            sb.Append("] ADD CONSTRAINT ");
            sb.Append(metaForeignKey.Name);
            sb.Append(" FOREIGN KEY ");

            sb.Append(" ( ");
            IEnumerator <MetaForeignKeyColumnMapping> enumerator = metaForeignKey.ColumnMappings.GetEnumerator();

            enumerator.Reset();

            int i = 0;

            while (enumerator.MoveNext())
            {
                MetaForeignKeyColumnMapping mapping = enumerator.Current;
                if (i > 0)
                {
                    sb.Append(" , ");
                }
                sb.Append(mapping.FromColumn);
                i++;
            }
            sb.Append(" ) ");

            sb.Append(" REFERENCES ");
            sb.Append(metaForeignKey.ToTable);

            sb.Append(" ( ");
            enumerator = metaForeignKey.ColumnMappings.GetEnumerator();
            enumerator.Reset();
            i = 0;
            while (enumerator.MoveNext())
            {
                MetaForeignKeyColumnMapping mapping = enumerator.Current;
                if (i > 0)
                {
                    sb.Append(" , ");
                }
                sb.Append(mapping.ToColumn);
                i++;
            }
            sb.Append(" ) ");
            sb.Append(" ON DELETE ").Append(metaForeignKey.DeleteRule);
            if (metaForeignKey.UpdateRule != ReferentialRuleType.Restrict)
            {
                sb.Append(" ON UPDATE ").Append(metaForeignKey.UpdateRule);
            }

            return(sb.ToString());
        }
示例#3
0
        protected override string CreateDropTableQuery(MetaComparisonTableGroup tableGroup)
        {
            var metaTable = (MetaTable)tableGroup.ExistingItem;

            var sb = new StringBuilder();

            sb.Append("DROP TABLE ");
            sb.Append(metaTable.Name);
            return(sb.ToString());
        }
示例#4
0
        protected override string CreateDropPrimaryKeyQuery(MetaComparisonTableGroup tableGroup
                                                            , MetaComparisonPrimaryKeyGroup primaryKeyGroup)
        {
            var requiredTable = (MetaTable)tableGroup.ExistingItem;
            var primaryKey    = (MetaColumn)primaryKeyGroup.ExistingItem;

            var sb = new StringBuilder();

            sb.Append("ALTER TABLE ");
            sb.Append(requiredTable.Name);
            sb.Append(" DROP PRIMARY KEY");
            return(sb.ToString());
        }
示例#5
0
        protected override string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup,
                                                            MetaComparisonForeignKeyGroup foreignKeyGroup)
        {
            var requiredTable  = (MetaTable)tableGroup.RequiredItem;
            var metaForeignKey = (MetaForeignKey)foreignKeyGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("ALTER TABLE [");
            sb.Append(requiredTable.Name);
            sb.Append("] DROP CONSTRAINT ");
            sb.Append(metaForeignKey.ToTable);
            return(sb.ToString());
        }
示例#6
0
        protected override string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup
                                                            , MetaComparisonForeignKeyGroup foreignKeyGroup)
        {
            var requiredTable  = (MetaTable)tableGroup.ExistingItem;
            var metaForeignKey = (MetaColumn)foreignKeyGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("ALTER TABLE ");
            sb.Append(requiredTable.Name);
            sb.Append(" DROP FOREIGN KEY ");
            sb.Append(metaForeignKey.Name);
            return(sb.ToString());
        }
示例#7
0
        protected override string CreateDropColumnQuery(MetaComparisonTableGroup tableGroup,
                                                        MetaComparisonColumnGroup columnGroup)
        {
            var metaTable  = (MetaTable)tableGroup.RequiredItem;
            var metaColumn = (MetaColumn)columnGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("ALTER TABLE [");
            sb.Append(metaTable.Name);
            sb.Append("] DROP COLUMN ");
            sb.Append(metaColumn.Name);
            sb.Append(" ");

            return(sb.ToString());
        }
示例#8
0
        protected override string CreateAlterColumnQuery(MetaComparisonTableGroup tableGroup,
                                                         MetaComparisonColumnGroup columnGroup)
        {
            var metaTable  = (MetaTable)tableGroup.RequiredItem;
            var metaColumn = (MetaColumn)columnGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("ALTER TABLE [");
            sb.Append(metaTable.Name);
            sb.Append("] ALTER ");
            sb.Append(metaColumn.Name);
            sb.Append(" ");
            sb.Append(" SET DATA TYPE ");
            if (metaColumn.ColumnType == ColumnType.Char ||
                metaColumn.ColumnType == ColumnType.Varchar)
            {
                sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType));
                sb.Append("(");
                sb.Append(metaColumn.Size);
                sb.Append(")");
            }
            else
            {
                sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType));
            }

            sb.Append(" DEFAULT ");
            if (!metaColumn.Null)
            {
                string defaultValue = GetDefaultValueForType(metaColumn.ColumnType);
                if (defaultValue != null)
                {
                    sb.Append(defaultValue);
                }
            }
            else
            {
                sb.Append("NULL");
            }

            sb.Append(" ");
            sb.Append(metaColumn.Null ? "" : "NOT NULL");
            sb.Append(" ");

            return(sb.ToString());
        }
示例#9
0
        protected override string CreateCreateTableQuery(MetaComparisonTableGroup tableGroup)
        {
            var metaTable = (MetaTable)tableGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("CREATE TABLE [");
            sb.Append(metaTable.Name);
            sb.Append("] ( ");
            bool first = true;

            foreach (MetaColumn metaColumn in metaTable.Columns)
            {
                if (!first)
                {
                    sb.Append(" ,\n ");
                }
                else
                {
                    first = false;
                }
                sb.Append(metaColumn.Name);
                sb.Append(" ");
                if (metaColumn.ColumnType == ColumnType.Char ||
                    metaColumn.ColumnType == ColumnType.Varchar)
                {
                    sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType));
                    sb.Append("(");
                    sb.Append(metaColumn.Size > 0 ? "" + metaColumn.Size : "max");
                    sb.Append(")");
                }
                else
                {
                    sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType));
                }
                sb.Append(" ");
                sb.Append(metaColumn.Null ? "" : "NOT NULL");
                sb.Append(" ");
            }

            sb.Append(")");
            return(sb.ToString());
        }
示例#10
0
 protected abstract string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonForeignKeyGroup foreignKeyGroup);
示例#11
0
 protected abstract string CreateDropPrimaryKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonPrimaryKeyGroup primaryKeyGroup);
示例#12
0
 protected abstract string CreateAlterColumnQuery(MetaComparisonTableGroup tableGroup, MetaComparisonColumnGroup columnGroup);
示例#13
0
 protected abstract string CreateAlterTableQuery(MetaComparisonTableGroup tableGroup);
示例#14
0
        public ICollection <MetaQueryHolder> CreateDbPathSql(IMetaComparisonGroup metaComparisonGroup)
        {
            List <MetaQueryHolder> holders = new List <MetaQueryHolder>();

            if (metaComparisonGroup is MetaComparisonTableGroup)
            {
                MetaComparisonTableGroup tableGroup = (MetaComparisonTableGroup)metaComparisonGroup;
                if (metaComparisonGroup.ShouldCreateInDb())
                {
                    string query = CreateCreateTableQuery(tableGroup);
                    if (!string.IsNullOrEmpty(query))
                    {
                        holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_TABLE,
                                                        MetaQueryHolder.OPERATION_TYPE_ADD, query));
                    }
                }
                if (metaComparisonGroup.ShouldDeleteFromDb())
                {
                    string query = CreateDropTableQuery(tableGroup);
                    if (!string.IsNullOrEmpty(query))
                    {
                        holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_TABLE,
                                                        MetaQueryHolder.OPERATION_TYPE_DELETE, query));
                    }
                }
                if (metaComparisonGroup.ShouldAlterInDb())
                {
                    string query = CreateAlterTableQuery(tableGroup);
                    if (!string.IsNullOrEmpty(query))
                    {
                        holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_TABLE,
                                                        MetaQueryHolder.OPERATION_TYPE_ALTER, query));
                    }
                }
                if (tableGroup.PrimaryKey != null)
                {
                    MetaComparisonPrimaryKeyGroup primaryKeyGroup = tableGroup.PrimaryKey;
                    if (primaryKeyGroup.ShouldCreateInDb() ||
                        primaryKeyGroup.ShouldAlterInDb())
                    {
                        string query = CreateCreatePrimaryKeyQuery(tableGroup, primaryKeyGroup);
                        if (!string.IsNullOrEmpty(query))
                        {
                            holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_PRIMARY_KEY,
                                                            MetaQueryHolder.OPERATION_TYPE_ADD, query));
                        }
                    }
                    if (tableGroup.ShouldDeleteFromDb() ||
                        primaryKeyGroup.ShouldAlterInDb())
                    {
                        string query = CreateDropPrimaryKeyQuery(tableGroup, primaryKeyGroup);
                        if (!string.IsNullOrEmpty(query))
                        {
                            holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_PRIMARY_KEY,
                                                            MetaQueryHolder.OPERATION_TYPE_DELETE, query));
                        }
                    }
                }

                foreach (MetaComparisonColumnGroup comparisonColumnGroup in tableGroup.Columns)
                {
                    if (comparisonColumnGroup.ShouldCreateInDb())
                    {
                        string query = CreateCreateColumnQuery(tableGroup, comparisonColumnGroup);
                        if (!string.IsNullOrEmpty(query))
                        {
                            holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_COLUMN,
                                                            MetaQueryHolder.OPERATION_TYPE_ADD, query));
                        }
                    }
                    if (comparisonColumnGroup.ShouldDeleteFromDb())
                    {
                        string query = CreateDropColumnQuery(tableGroup, comparisonColumnGroup);
                        if (!string.IsNullOrEmpty(query))
                        {
                            holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_COLUMN,
                                                            MetaQueryHolder.OPERATION_TYPE_DELETE, query));
                        }
                    }
                    if (comparisonColumnGroup.ShouldAlterInDb())
                    {
                        string query = CreateAlterColumnQuery(tableGroup, comparisonColumnGroup);
                        if (!string.IsNullOrEmpty(query))
                        {
                            holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_COLUMN,
                                                            MetaQueryHolder.OPERATION_TYPE_ALTER, query));
                        }
                    }
                }

                foreach (MetaComparisonForeignKeyGroup foreignKeyGroup in tableGroup.ForeignKeys)
                {
                    if (foreignKeyGroup.ShouldCreateInDb() ||
                        foreignKeyGroup.ShouldAlterInDb())
                    {
                        string query = CreateCreateForeginKeyQuery(tableGroup, foreignKeyGroup);
                        if (!string.IsNullOrEmpty(query))
                        {
                            holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_FOREIGN_KEY,
                                                            MetaQueryHolder.OPERATION_TYPE_ADD, query));
                        }
                    }
                    if (tableGroup.ShouldDeleteFromDb() ||
                        foreignKeyGroup.ShouldAlterInDb())
                    {
                        string query = CreateDropForeignKeyQuery(tableGroup, foreignKeyGroup);
                        if (!string.IsNullOrEmpty(query))
                        {
                            holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_FOREIGN_KEY,
                                                            MetaQueryHolder.OPERATION_TYPE_DELETE, query));
                        }
                    }
                }
            }

            return(holders);
        }
示例#15
0
        protected override string CreateCreateTableQuery(MetaComparisonTableGroup tableGroup)
        {
            var metaTable = (MetaTable)tableGroup.RequiredItem;

            var sb = new StringBuilder();

            sb.Append("CREATE TABLE ");
            sb.Append(metaTable.Name);
            sb.Append(" ( ");
            bool first = true;

            foreach (MetaColumn metaColumn in metaTable.Columns)
            {
                if (!first)
                {
                    sb.Append(" ,\n ");
                }
                else
                {
                    first = false;
                }
                sb.Append(metaColumn.Name);
                sb.Append(" ");
                if (metaColumn.ColumnType == ColumnType.Char ||
                    metaColumn.ColumnType == ColumnType.Varchar)
                {
                    sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType));
                    sb.Append("(");
                    sb.Append(metaColumn.Size);
                    sb.Append(")");
                }
                else
                {
                    sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType));
                }
                sb.Append(" ");
                sb.Append(metaColumn.Null ? "" : "NOT NULL");
                sb.Append(" ");
            }

            if (tableGroup.PrimaryKey != null && tableGroup.PrimaryKey.RequiredItem != null)
            {
                var primaryKey = (MetaPrimaryKey)tableGroup.PrimaryKey.RequiredItem;
                sb.Append(",");
                sb.Append("PRIMARY KEY(");

                bool mapFirst = true;
                foreach (string colName in primaryKey.ColumnNames)
                {
                    if (!mapFirst)
                    {
                        sb.Append(",");
                    }
                    sb.Append(colName);
                    mapFirst = false;
                }
                sb.Append(") ");
            }

            foreach (MetaComparisonForeignKeyGroup foreignKeyGroup in tableGroup.ForeignKeys)
            {
                var requiredKey = (MetaForeignKey)foreignKeyGroup.RequiredItem;
                sb.Append(",");
                sb.Append("FOREIGN KEY(");

                bool mapFirst = true;
                foreach (MetaForeignKeyColumnMapping mapping in requiredKey.ColumnMappings)
                {
                    if (!mapFirst)
                    {
                        sb.Append(",");
                    }
                    sb.Append(mapping.FromColumn);
                    mapFirst = false;
                }
                sb.Append(") ");
                sb.Append("REFERENCES ");
                sb.Append(requiredKey.ToTable);
                sb.Append(" (");

                mapFirst = true;
                foreach (MetaForeignKeyColumnMapping mapping in requiredKey.ColumnMappings)
                {
                    if (!mapFirst)
                    {
                        sb.Append(",");
                    }
                    sb.Append(mapping.ToColumn);
                    mapFirst = false;
                }
                sb.Append(") ");
            }
            sb.Append(")");
            return(sb.ToString());
        }
示例#16
0
 protected override string CreateDropColumnQuery(MetaComparisonTableGroup tableGroup,
                                                 MetaComparisonColumnGroup columnGroup)
 {
     //sql lite does not support this
     return(null);
 }
示例#17
0
 protected override string CreateDropPrimaryKeyQuery(MetaComparisonTableGroup tableGroup,
                                                     MetaComparisonPrimaryKeyGroup primaryKeyGroup)
 {
     return(null);
 }
示例#18
0
 protected override string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup,
                                                     MetaComparisonForeignKeyGroup foreignKeyGroup)
 {
     return(null);
 }
示例#19
0
 protected override string CreateAlterTableQuery(MetaComparisonTableGroup tableGroup)
 {
     return(null);
 }