/// <inheritdoc/>
        protected override IPathNode VisitFullTextIndexInfo(FullTextIndexInfo fullTextIndex)
        {
            if (!providerInfo.Supports(ProviderFeatures.FullText))
            {
                UpgradeLog.Warning(Strings.LogFullTextIndexesAreNotSupportedByCurrentStorageIgnoringIndexX, fullTextIndex.Name);
                return(null);
            }

            var table        = GetTable(fullTextIndex.PrimaryIndex.ReflectedType);
            var primaryIndex = table.PrimaryIndex;
            var ftIndex      = new StorageFullTextIndexInfo(table, fullTextIndex.Name);

            foreach (var fullTextColumn in fullTextIndex.Columns)
            {
                var    column     = table.Columns[fullTextColumn.Name];
                string typeColumn = null;
                if (providerInfo.Supports(ProviderFeatures.FullTextColumnDataTypeSpecification))
                {
                    if (fullTextColumn.TypeColumn != null)
                    {
                        typeColumn = table.Columns[fullTextColumn.TypeColumn.Name].Name;
                    }
                }
                else
                {
                    UpgradeLog.Warning(Strings.LogSpecificationOfTypeColumnForFulltextColumnIsNotSupportedByCurrentStorageIgnoringTypeColumnSpecificationForColumnX, fullTextColumn.Column.Name);
                }
                new FullTextColumnRef(ftIndex, column, fullTextColumn.Configuration, typeColumn);
            }

            ftIndex.FullTextCatalog =
                fulltextCatalogNameBuilder.Build(fullTextIndex.PrimaryIndex.ReflectedType, table);
            ftIndex.ChangeTrackingMode = configuration.FullTextChangeTrackingMode;
            return(ftIndex);
        }
        private void CreateFullTextIndex(TableInfo tableInfo, Table table, StorageFullTextIndexInfo fullTextIndexInfo)
        {
            var ftIndex = table.CreateFullTextIndex(fullTextIndexInfo.Name);

            ftIndex.UnderlyingUniqueIndex = tableInfo.PrimaryIndex.EscapedName;
            ftIndex.FullTextCatalog       = "Default";
            foreach (var columnRef in fullTextIndexInfo.Columns)
            {
                var configuration  = columnRef.Configuration;
                var typeColumnName = columnRef.TypeColumnName;
                var column         = columnRef.Value;

                var tableColumn = FindColumn(table, column.Name);
                var ftColumn    = ftIndex.CreateIndexColumn(tableColumn);

                ftColumn.TypeColumn = (!typeColumnName.IsNullOrEmpty() && provider.Supports(ProviderFeatures.FullTextColumnDataTypeSpecification))
          ? FindColumn(table, typeColumnName)
          : null;
                ftColumn.Languages.Add(new Language(configuration));
            }
        }
        /// <inheritdoc/>
        protected override IPathNode VisitFullTextIndex(FullTextIndex index)
        {
            var tableInfo = currentTable;
            var name      = index.Name.IsNullOrEmpty()
        ? string.Format("FT_{0}", index.DataTable.Name)
        : index.Name;
            var ftIndex = new StorageFullTextIndexInfo(tableInfo, name)
            {
                FullTextCatalog    = index.FullTextCatalog,
                ChangeTrackingMode = ConvertChangeTrackingMode(index.ChangeTrackingMode)
            };

            foreach (var column in index.Columns)
            {
                var    columnInfo = tableInfo.Columns[column.Column.Name];
                string typeColumn = null;
                if (column.TypeColumn != null)
                {
                    typeColumn = tableInfo.Columns[column.TypeColumn.Name].Name;
                }
                new FullTextColumnRef(ftIndex, columnInfo, column.Languages.Single().Name, typeColumn);
            }
            return(ftIndex);
        }