Package com.foundationdb.ais.model

Source Code of com.foundationdb.ais.model.FullTextIndex

/**
* Copyright (C) 2009-2013 FoundationDB, LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.foundationdb.ais.model;

import com.foundationdb.ais.model.validation.AISInvariants;
import com.foundationdb.server.error.BranchingGroupIndexException;
import com.foundationdb.server.error.IndexColNotInGroupException;

import java.util.*;

public class FullTextIndex extends Index
{
    /* Index */

    @Override
    public HKey hKey() {
        return indexedTable.hKey();
    }

    @Override
    public boolean isTableIndex() {
        return false;
    }

    @Override
    public boolean isGroupIndex() {
        return false;
    }

    @Override
    public IndexType getIndexType() {
        return IndexType.FULL_TEXT;
    }

    @Override
    public IndexMethod getIndexMethod() {
        return IndexMethod.FULL_TEXT;
    }

    @Override
    public void computeFieldAssociations(Map<Table,Integer> ordinalMap) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Table leafMostTable() {
        // This is not entirely well-defined, since more than one
        // descendant to the same depth can be indexed.
        Table deepest = null;
        for (IndexColumn indexColumn : keyColumns) {
            if ((deepest == null) ||
                (indexColumn.getColumn().getTable().getDepth() > deepest.getDepth())) {
                deepest = indexColumn.getColumn().getTable();
            }
        }
        return deepest;
    }

    @Override
    public Table rootMostTable() {
        Table shallowest = null;
        for (IndexColumn indexColumn : keyColumns) {
            if ((shallowest == null) ||
                (indexColumn.getColumn().getTable().getDepth() < shallowest.getDepth())) {
                shallowest = indexColumn.getColumn().getTable();
            }
        }
        return shallowest;
    }

    @Override
    public void checkMutability() {
        indexedTable.checkMutability();
    }

    @Override
    public Collection<Integer> getAllTableIDs() {
        Set<Integer> ids = new HashSet<>();
        for (IndexColumn indexColumn : keyColumns) {
            ids.add(indexColumn.getColumn().getTable().getTableId());
        }
        ids.add(indexedTable.getTableId());
        return ids;
    }

    @Override
    public void addColumn(IndexColumn indexColumn) {
        Table table = indexColumn.getColumn().getTable();
        if (!((table == indexedTable) ||
              table.isDescendantOf(indexedTable) ||
              indexedTable.isDescendantOf(table))) {
            if (table.getGroup() != indexedTable.getGroup()) {
                throw new IndexColNotInGroupException(indexColumn.getIndex().getIndexName().getName(),
                                                      indexColumn.getColumn().getName());
            }
            else {
                throw new BranchingGroupIndexException(indexColumn.getIndex().getIndexName().getName(),
                                                       table.getName(),
                                                       indexedTable.getName());
            }
        }
        super.addColumn(indexColumn);
        table.addFullTextIndex(this);
    }

    /* FullTextIndex */

    public Table getIndexedTable() {
        return indexedTable;
    }

    public static FullTextIndex create(AkibanInformationSchema ais,
                                       Table table, String indexName,
                                       Integer indexId) {
        return create(ais, table, indexName, indexId, null);
    }

    public static FullTextIndex create(AkibanInformationSchema ais,
                                       Table table, String indexName,
                                       Integer indexId, TableName constraintName)
    {
        ais.checkMutability();
        if(constraintName != null) {
            throw new IllegalArgumentException("Full Text indexes are never constraints");
        }
        table.checkMutability();
        AISInvariants.checkDuplicateIndexesInTable(table, indexName);
        FullTextIndex index = new FullTextIndex(table, indexName, indexId);
        table.addFullTextIndex(index);
        return index;
    }

    private FullTextIndex(Table indexedTable, String indexName, Integer indexId)
    {
        super(indexedTable.getName(), indexName, indexId, false, false, null, null);
        this.indexedTable = indexedTable;
    }
   
    private final Table indexedTable;
}
TOP

Related Classes of com.foundationdb.ais.model.FullTextIndex

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.