Examples of AkibanInformationSchema


Examples of com.foundationdb.ais.model.AkibanInformationSchema

            txnService.run(session, new Runnable() {
                @Override
                public void run() {
                    schemaManager().startOnline(session);
                    TableName tableName = schemaManager().createTableDefinition(session, table);
                    AkibanInformationSchema onlineAIS = schemaManager().getOnlineAIS(session);
                    int onlineTableID = onlineAIS.getTable(table.getName()).getTableId();
                    List<TableName> tableNames = getTableNames(session, server, queryExpression, table);
                    if(tableNames.size() > 1)
                        throw new UnsupportedCreateSelectException();
                    for( TableName name : tableNames){
                        ChangeSet fromChangeSet = buildChangeSet(onlineAIS.getTable(name), queryExpression,  onlineTableID);
                        schemaManager().addOnlineChangeSet(session, fromChangeSet);
                    }
                    ChangeSet toChangeSet = buildChangeSet(onlineAIS.getTable(tableName), queryExpression, onlineTableID);
                    schemaManager().addOnlineChangeSet(session, toChangeSet);

                }
            });
            onlineAt(OnlineDDLMonitor.Stage.POST_METADATA);

            final boolean[] success = {false};
            try {
                onlineAt(OnlineDDLMonitor.Stage.PRE_TRANSFORM);
                store().getOnlineHelper().createAsSelect(session, context, server, queryExpression, table.getName());
                onlineAt(OnlineDDLMonitor.Stage.POST_TRANSFORM);

                txnService.run(session, new Runnable() {
                    @Override
                    public void run() {
                        AkibanInformationSchema onlineAIS = schemaManager().getOnlineAIS(session);
                        final Table onlineTable = onlineAIS.getTable(table.getName());
                        for (TableListener listener : listenerService.getTableListeners()) {
                            listener.onCreate(session, onlineTable);
                        }
                    }
                });
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

    {
        onlineAt(OnlineDDLMonitor.Stage.PRE_METADATA);
        final AISValidatorPair pair = txnService.run(session, new Callable<AISValidatorPair>() {
            @Override
            public AISValidatorPair call() {
                AkibanInformationSchema origAIS = getAIS(session);
                Table origTable = origAIS.getTable(tableName);
                schemaManager().startOnline(session);
                TableChangeValidator validator = alterTableDefinitions(
                    session, origTable, newDefinition, columnChanges, tableIndexChanges
                );
                List<ChangeSet> changeSets = buildChangeSets(
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

    @Override
    public void alterSequence(Session session, TableName sequenceName, Sequence newDefinition)
    {
        logger.trace("altering sequence {}", sequenceName);
        AkibanInformationSchema ais = getAIS(session);
        Sequence oldSeq = ais.getSequence(sequenceName);
        if(oldSeq == null) {
            throw new NoSuchSequenceException(sequenceName);
        }
        schemaManager().alterSequence(session, sequenceName, newDefinition);
        // Remove old storage
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

    }

    @Override
    public Table getTable(Session session, TableName tableName) throws NoSuchTableException {
        logger.trace("getting AIS Table for {}", tableName);
        AkibanInformationSchema ais = getAIS(session);
        Table table = ais.getTable(tableName);
        if (table == null) {
            throw new NoSuchTableException(tableName);
        }
        return table;
    }
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

        txnService.run(session, new Runnable() {
            @Override
            public void run() {
                schemaManager().startOnline(session);
                schemaManager().createIndexes(session, indexesToAdd, false);
                AkibanInformationSchema onlineAIS = schemaManager().getOnlineAIS(session);
                List<ChangeSet> changeSets = buildChangeSets(onlineAIS, indexesToAdd);
                for(ChangeSet cs : changeSets) {
                    schemaManager().addOnlineChangeSet(session, cs);
                }
            }
        });
        onlineAt(OnlineDDLMonitor.Stage.POST_METADATA);

        final String errorMsg;
        final boolean[] success = { false };
        try {
            onlineAt(OnlineDDLMonitor.Stage.PRE_TRANSFORM);
            store().getOnlineHelper().buildIndexes(session, null);
            onlineAt(OnlineDDLMonitor.Stage.POST_TRANSFORM);

            txnService.run(session, new Runnable() {
                @Override
                public void run() {
                    Collection<ChangeSet> changeSets = schemaManager().getOnlineChangeSets(session);
                    AkibanInformationSchema onlineAIS = schemaManager().getOnlineAIS(session);
                    Collection<Index> newIndexes = OnlineHelper.findIndexesToBuild(changeSets, onlineAIS);
                    for(TableListener listener : listenerService.getTableListeners()) {
                        listener.onCreateIndex(session, newIndexes);
                    }
                }
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

    private void alterTableRemoveOldStorage(Session session,
                                            Table origTable,
                                            Table newTable,
                                            TableChangeValidator validator)
    {
        AkibanInformationSchema origAIS = origTable.getAIS();
        TableChangeValidatorState changeState = validator.getState();
        ChangeLevel changeLevel = validator.getFinalChangeLevel();

        List<Sequence> sequencesToDrop = new ArrayList<>();
        for(ChangedTableDescription desc : changeState.descriptions) {
            for(TableName name : desc.getDroppedSequences()) {
                sequencesToDrop.add(origAIS.getSequence(name));
            }
        }

        List<Index> indexesToDrop = new ArrayList<>();
        Group group = origTable.getGroup();
        for(String name : changeState.droppedGI) {
            indexesToDrop.add(group.getIndex(name));
        }

        List<HasStorage> storageToRemove = new ArrayList<>();
        for(TableChange ic : validator.getState().tableIndexChanges) {
            switch(ic.getChangeType()) {
                case MODIFY:
                case DROP:
                    Index index = origTable.getIndexIncludingInternal(ic.getOldName());
                    storageToRemove.add(index);
                break;
            }
        }

        // Old group storage
        if(changeLevel == ChangeLevel.TABLE || changeLevel == ChangeLevel.GROUP) {
            storageToRemove.add(origTable.getGroup());
        }

        // New parent's old group storage
        // but only if the storage location is different - metadata changes may not move the group data
        Table newParent = newTable.getParentTable();
        if(newParent != null) {
            Table newParentOldTable = origAIS.getTable(newParent.getTableId());
            if (!newParent.getGroup().getStorageDescription().getUniqueKey().equals(
                    newParentOldTable.getGroup().getStorageDescription().getUniqueKey()))
            {
                storageToRemove.add(newParentOldTable.getGroup());
            }
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

                                      final Table newTable) {
        if(changeState.affectedGI.isEmpty()) {
            return;
        }

        AkibanInformationSchema tempAIS = getAISCloner().clone(
            newTable.getAIS(),
            new TableSelector() {
                @Override
                public boolean isSelected(Columnar columnar) {
                    if(columnar.isTable()) {
                        if(((Table)columnar).getGroup() == newTable.getGroup()) {
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public boolean isSelected(ForeignKey foreignKey) {
                    return false;
                }
            }
        );

        List<Index> indexesToBuild = new ArrayList<>();
        Group origGroup = origTable.getGroup();
        Group tempGroup = tempAIS.getGroup(newTable.getGroup().getName());
        for(Entry<String, List<ColumnName>> entry : changeState.affectedGI.entrySet()) {
            GroupIndex origIndex = origGroup.getIndex(entry.getKey());
            GroupIndex tempIndex = GroupIndex.create(tempAIS, tempGroup, origIndex);
            int pos = 0;
            for(ColumnName cn : entry.getValue()) {
                Table tempTable = tempAIS.getTable(cn.getTableName());
                Column tempColumn = tempTable.getColumn(cn.getName());
                IndexColumn.create(tempIndex, tempColumn, pos++, true, null);
            }
            if(!changeState.dataAffectedGI.containsKey(entry.getKey())) {
                // TODO: Maybe need a way to say copy without the tree name part?
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

        ChangeLevel actual = ddlForAlter().alterTable(session(), name, newDefinition, columnChanges, indexChanges, queryContext());
        assertEquals("ChangeLevel", expectedChangeLevel, actual);
    }

    protected void runRenameTable(TableName oldName, TableName newName) {
        AkibanInformationSchema aisCopy = aisCloner().clone(ddl().getAIS(session()));
        Table oldTable = aisCopy.getTable(oldName);
        assertNotNull("Found old table " + oldName, oldTable);
        AISTableNameChanger changer = new AISTableNameChanger(aisCopy.getTable(oldName), newName);
        changer.doChange();
        Table newTable = aisCopy.getTable(newName);
        assertNotNull("Found new table " + newName, oldTable);
        runAlter(ChangeLevel.METADATA, oldName, newTable, NO_CHANGES, NO_CHANGES);
    }
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

        assertNotNull("Found new table " + newName, oldTable);
        runAlter(ChangeLevel.METADATA, oldName, newTable, NO_CHANGES, NO_CHANGES);
    }

    protected void runRenameColumn(TableName tableName, String oldColName, String newColName) {
        AkibanInformationSchema aisCopy = aisCloner().clone(ddl().getAIS(session()));
        Table tableCopy = aisCopy.getTable(tableName);
        assertNotNull("Found table " + tableName, tableCopy);
        Column oldColumn = tableCopy.getColumn(oldColName);
        assertNotNull("Found old column " + oldColName, oldColumn);

        // Have to do this manually as parser doesn't support it, duplicates much of the work in AlterTableDDL
        List<Column> columns = new ArrayList<>(tableCopy.getColumns());
        tableCopy.dropColumns();
        for(Column column : columns) {
            Column.create(tableCopy, column, (column == oldColumn) ? newColName : null, null);
        }

        Column newColumn = tableCopy.getColumn(newColName);
        assertNotNull("Found new column " + newColName, newColumn);

        List<TableIndex> indexes = new ArrayList<>(tableCopy.getIndexes());
        for(TableIndex index : indexes) {
            if(index.containsTableColumn(tableName, oldColName)) {
                tableCopy.removeIndexes(Collections.singleton(index));
                if (index.getConstraintName() != null) {
                    aisCopy.removeConstraint(index.getConstraintName());
                }
                TableIndex indexCopy = TableIndex.create(tableCopy, index);
                for(IndexColumn iCol : index.getKeyColumns()) {
                    IndexColumn.create(indexCopy, (iCol.getColumn() == oldColumn) ? newColumn : iCol.getColumn(), iCol, iCol.getPosition());
                }
View Full Code Here

Examples of com.foundationdb.ais.model.AkibanInformationSchema

    private void checkIndexContents(int tableID) {
        if(tableID == 0) {
            return;
        }

        AkibanInformationSchema ais = ddl().getAIS(session());
        Table table = ais.getTable(tableID);
        List<Row> tableRows = new ArrayList<>(scanAll(tableID));

        for(TableIndex index : table.getIndexesIncludingInternal()) {
            if(index.getKeyColumns().size() == 1) {
                int idxPos = 0;
View Full Code Here
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.