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);
        }