Package com.foundationdb.ais.model

Examples of com.foundationdb.ais.model.Table


        T toInsert = node;
        if (node.getDepth() < root.getDepth()) {
            toInsert = root;
            root = node;
        }
        Table parentTable = toInsert.getTable().getParentTable();
        assert (parentTable != null);
        T parent = addNode(parentTable);
        assert ((toInsert.getParent() == null) && // Brand new or old root.
                (toInsert.getNextSibling() == null));
        toInsert.setParent(parent);
View Full Code Here


                                         String defaultSchemaName,
                                         AlterTableNode alterTable,
                                         QueryContext context) {
        final AkibanInformationSchema curAIS = ddlFunctions.getAIS(session);
        final TableName tableName = convertName(defaultSchemaName, alterTable.getObjectName());
        final Table table = curAIS.getTable(tableName);
        if((table == null) &&
           skipOrThrow(context, alterTable.getExistenceCheck(), null, new NoSuchTableException(tableName))) {
            return null;
        }

        if (alterTable.isUpdateStatistics()) {
            Collection<String> indexes = null;
            if (!alterTable.isUpdateStatisticsAll())
                indexes = Collections.singletonList(alterTable.getIndexNameForUpdateStatistics());
            ddlFunctions.updateTableStatistics(session, tableName, indexes);
            return null;
        }

        if (alterTable.isTruncateTable()) {
            dmlFunctions.truncateTable(session, table.getTableId(), alterTable.isCascade());
            return null;
        }

        ChangeLevel level = null;
        if((alterTable.tableElementList != null) && !alterTable.tableElementList.isEmpty()) {
View Full Code Here

                                            foreignKey, origTable);
            }
        }

        final AkibanInformationSchema origAIS = origTable.getAIS();
        final Table tableCopy = copyTable(ddl.getAISCloner(), origTable, columnChanges);
        final AkibanInformationSchema aisCopy = tableCopy.getAIS();
        TableDDL.cloneReferencedTables(defaultSchema, ddl.getAISCloner(), origAIS, aisCopy, elements);
        final TypesTranslator typesTranslator = ddl.getTypesTranslator();
        final AISBuilder builder = new AISBuilder(aisCopy);
        builder.getNameGenerator().mergeAIS(origAIS);

        int pos = tableCopy.getColumnsIncludingInternal().size();
        for(ColumnDefinitionNode cdn : columnDefNodes) {
            if(cdn instanceof ModifyColumnNode) {
                ModifyColumnNode modNode = (ModifyColumnNode) cdn;
                handleModifyColumnNode(modNode, builder, tableCopy, typesTranslator);
            } else {
                TableDDL.addColumn(builder, typesTranslator, cdn, origTable.getName().getSchemaName(), origTable.getName().getTableName(), pos++);
            }
        }
        // Ensure that internal columns stay at the end
        // because there's a bunch of places that assume that they are
        // (e.g. they assume getColumns() have indexes (1...getColumns().size()))
        // If the original table had a primary key, the hidden pk is added a bit farther down
       
        for (Column origColumn : origTable.getColumnsIncludingInternal()) {
            if (origColumn.isInternalColumn()) {
                String newName = findNewName(columnChanges, origColumn.getName());
                if (newName != null) {
                    Column.create(tableCopy, origColumn, newName, pos++);
                }
            }
        }
        copyTableIndexes(origTable, tableCopy, columnChanges, indexChanges);

        IndexNameGenerator indexNamer = DefaultIndexNameGenerator.forTable(tableCopy);
        TableName newName = tableCopy.getName();
        for(ConstraintDefinitionNode cdn : conDefNodes) {
            assert cdn.getConstraintType() != ConstraintType.DROP : cdn;
            String name = TableDDL.addIndex(indexNamer, builder, cdn, newName.getSchemaName(), newName.getTableName(), context);
            indexChanges.add(TableChange.createAdd(name));
            // This is required as the addIndex() for a primary key constraint
            // *may* alter the NULL->NOT NULL status
            // of the columns in the primary key
            if (name.equals(Index.PRIMARY)) {
                for (IndexColumn col : tableCopy.getIndex(name).getKeyColumns())
                {
                    String columnName = col.getColumn().getName();
                   
                    // Check if the column was added in the same alter as creating the index:
                    // ALTER TABLE c ADD COLUMN n SERIAL PRIMARY KEY
                    // You can't add and modify the column, so assume the add does the correct thing.
                    boolean columnAdded = false;
                    for (TableChange change : columnChanges) {
                        if (change.getChangeType() ==  ChangeType.ADD && columnName.equals(change.getNewName()))
                            columnAdded = true;
                    }
                    if (!columnAdded)
                        columnChanges.add(TableChange.createModify(columnName, columnName));
                }
            }
        }

        for(IndexDefinitionNode idn : indexDefNodes) {
            String name = TableDDL.addIndex(indexNamer, builder, idn, newName.getSchemaName(), newName.getTableName(), context, ddl);
            indexChanges.add(TableChange.createAdd(name));
        }

        // Correctly adds the Hidden PK (including sequence).
        if (tableCopy.getPrimaryKeyIncludingInternal() == null) {
            if (origTable.getPrimaryKeyIncludingInternal().isAkibanPK()) {
                Column origColumn = origTable.getPrimaryKeyIncludingInternal().getColumns().get(0);
                Column.create(tableCopy, origColumn, Column.ROW_ID_NAME, tableCopy.getColumns().size());
            } else {
                tableCopy.addHiddenPrimaryKey(builder.getNameGenerator());
                columnChanges.add(TableChange.createAdd(Column.ROW_ID_NAME));
            }
        }
       
        for(FKConstraintDefinitionNode fk : fkDefNodes) {
            if(fk.isGrouping()) {
                if(fk.getConstraintType() == ConstraintType.DROP) {
                    Join parentJoin = tableCopy.getParentJoin();
                    tableCopy.setGroup(null);
                    tableCopy.removeCandidateParentJoin(parentJoin);
                    parentJoin.getParent().removeCandidateChildJoin(parentJoin);
                } else {
                    if(origTable.getParentJoin() != null) {
                        throw new JoinToMultipleParentsException(origTable.getName());
                    }
                    tableCopy.setGroup(null);
                    TableDDL.addJoin(builder, fk, defaultSchema, newName.getSchemaName(), newName.getTableName());
                }
            } else {
                if(fk.getConstraintType() == ConstraintType.DROP) {
                    String name = fk.getConstraintName().getTableName();
                    ForeignKey tableFK = null;
                    for (ForeignKey tfk : tableCopy.getReferencingForeignKeys()) {
                        if (name.equals(tfk.getConstraintName().getTableName())) {
                            tableFK = tfk;
                            break;
                        }
                    }
                    assert tableFK != null : name;
                    tableCopy.removeForeignKey(tableFK);
                } else {
                    TableDDL.addForeignKey(builder, origAIS, fk, defaultSchema, newName.getSchemaName(), newName.getTableName());
                }
            }
        }
View Full Code Here

        }
    }

    private static Table copyTable(AISCloner aisCloner, Table origTable, List<TableChange> columnChanges) {
        AkibanInformationSchema aisCopy = aisCloner.clone(origTable.getAIS(), new TableGroupWithoutIndexesSelector(origTable));
        Table tableCopy = aisCopy.getTable(origTable.getName());

        // Remove and recreate. NB: hidden PK/column handled downstream.
        tableCopy.dropColumns();

        int colPos = 0;
        // internal columns are copied after we add new columns
        for(Column origColumn : origTable.getColumns()) {
            String newName = findNewName(columnChanges, origColumn.getName());
View Full Code Here

        }
        return true;
    }

    protected Table lookupTableName(TableName origName, String schemaName, String tableName) {
        Table result = ais.getTable(schemaName, tableName);
        if ((result == null) ||
            ((context != null) && !context.isAccessible(result.getName())))
            throw new NoSuchTableException(schemaName, tableName, origName);
        return result;
    }
View Full Code Here

    /** Make a nested result set for this child (and so on recursively). */
    protected ResultColumn childJoinSubquery(FromBaseTable parentTable, Join child)
            throws StandardException {
        NodeFactory nodeFactory = parentTable.getNodeFactory();
        SQLParserContext parserContext = parentTable.getParserContext();
        Table childAisTable = child.getChild();
        Object childName = nodeFactory.getNode(NodeTypes.TABLE_NAME,
                                               childAisTable.getName().getSchemaName(),
                                               childAisTable.getName().getTableName(),
                                               parserContext);
        FromBaseTable childTable = (FromBaseTable)
            nodeFactory.getNode(NodeTypes.FROM_BASE_TABLE,
                                childName, childAisTable.getName().getTableName(),
                                null,  null, null, parserContext);
        childTable.setUserData(new TableBinding(childAisTable, false));
        ValueNode whereClause = null;
        for (JoinColumn join : child.getJoinColumns()) {
            ColumnReference parentPK = (ColumnReference)
                nodeFactory.getNode(NodeTypes.COLUMN_REFERENCE,
                                    join.getParent().getName(),
                                    parentTable.getTableName(),
                                    parserContext);
            parentPK.setUserData(new ColumnBinding(parentTable, join.getParent(), false));
            ColumnReference childFK = (ColumnReference)
                nodeFactory.getNode(NodeTypes.COLUMN_REFERENCE,
                                    join.getChild().getName(),
                                    childName,
                                    parserContext);
            childFK.setUserData(new ColumnBinding(childTable, join.getChild(), false));
            ValueNode equals = (ValueNode)
                nodeFactory.getNode(NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
                                    parentPK,
                                    childFK,
                                    parserContext);
            if (whereClause == null) {
                whereClause = equals;
            }
            else {
                whereClause = (ValueNode)
                    nodeFactory.getNode(NodeTypes.AND_NODE,
                                        whereClause, equals,
                                        parserContext);
            }
        }
        FromList fromList = (FromList)
            nodeFactory.getNode(NodeTypes.FROM_LIST,
                                parserContext);
        fromList.addFromTable(childTable);
        ResultColumnList rcl = getAllResultColumns(null, childTable, true);
        SelectNode selectNode = (SelectNode)
            nodeFactory.getNode(NodeTypes.SELECT_NODE,
                                rcl, null, fromList, whereClause, null, null, null,
                                parserContext);
        SubqueryNode subquery = (SubqueryNode)
            nodeFactory.getNode(NodeTypes.SUBQUERY_NODE,
                                selectNode, SubqueryNode.SubqueryType.EXPRESSION,
                                null, null, null, null,
                                parserContext);
        ResultColumn resultColumn = (ResultColumn)
            nodeFactory.getNode(NodeTypes.RESULT_COLUMN,
                                childAisTable.getNameForOutput(),
                                subquery,
                                parserContext);
        return resultColumn;
    }
View Full Code Here

    protected void dmlModStatementNode(DMLModStatementNode node) {
        TableName tableName = node.getTargetTableName();
        String schemaName = tableName.getSchemaName();
        if (schemaName == null)
            schemaName = defaultSchemaName;
        Table table = lookupTableName(tableName, schemaName, tableName.getTableName());
        tableName.setUserData(table);
       
        ResultColumnList targetColumns = null;
        if (node instanceof InsertNode)
            targetColumns = ((InsertNode)node).getTargetColumnList();
        else
            targetColumns = node.getResultSetNode().getResultColumns();
        if (targetColumns != null) {
            for (ResultColumn targetColumn : targetColumns) {
                ColumnReference columnReference = targetColumn.getReference();
                String columnName = columnReference.getColumnName();
                Column column = table.getColumn(columnName);
                if (column == null)
                    throw new NoSuchColumnException(columnName, columnReference);
                ColumnBinding columnBinding = new ColumnBinding(null, column, false);
                columnReference.setUserData(columnBinding);
            }
View Full Code Here

    }

    @Override
    protected void insertNode(InsertNode node) throws StandardException {
        TableName tableName = node.getTargetTableName();
        Table table = (Table)tableName.getUserData();
        if (table == null) return;
        ResultSetNode source = node.getResultSetNode();
        int ncols = source.getResultColumns().size();
        ResultColumnList targetColumns = node.getTargetColumnList();
        List<Column> columns;
        if (targetColumns != null) {
            if (ncols > targetColumns.size())
                ncols = targetColumns.size();
            columns = new ArrayList<>(ncols);
            for (int i = 0; i < ncols; i++) {
                ColumnBinding cb = (ColumnBinding)
                    targetColumns.get(i).getReference().getUserData();
                columns.add((cb == null) ? null : cb.getColumn());
            }
        }
        else {
            List<Column> allColumns = table.getColumns();
            if (ncols > allColumns.size())
                ncols = allColumns.size();
            columns = new ArrayList<>(ncols);
            for (int i = 0; i < ncols; i++) {
                columns.add(allColumns.get(i));
View Full Code Here

        Object[] keyArray = new Object[keySize];
        int h = 0;
        key.indexTo(0);
        while (k < hKeySegments.size()) {
            HKeySegment hKeySegment = hKeySegments.get(k++);
            Table table = hKeySegment.table();
            int ordinal = (Integer) key.decode();
            assert ordinalToTable.get(ordinal) == table : ordinalToTable.get(ordinal);
            keyArray[h++] = table;
            for (int i = 0; i < hKeySegment.columns().size(); i++) {
                keyArray[h++] = key.decode();
View Full Code Here

    /** <code>Tuple</code> does not distinguish integer types. This is
     * mostly not a problem, since they are all encoded as longs in
     * Persistit.  Except for ordinals, which are ints.
     */
    public static void appendHKeySegments(Tuple2 t, Key key, Group group) {
        Table table = null;
        int nextOrdinalIndex = 0;
        for (int i = 0; i < t.size(); i++) {
            Object seg = t.get(i);
            if ((i == nextOrdinalIndex) &&
                (seg instanceof Long)) {
                int ordinal = ((Long)seg).intValue();
                boolean found = false;
                if (i == 0) {
                    table = group.getRoot();
                    found = (table.getOrdinal() == ordinal);
                }
                else {
                    for (Join join : table.getChildJoins()) {
                        table = join.getChild();
                        if (table.getOrdinal() == ordinal) {
                            found = true;
                            break;
                        }
                    }
                }
                if (found) {
                    int[] keyDepth = table.hKey().keyDepth();
                    nextOrdinalIndex = keyDepth[keyDepth.length - 1];
                    seg = ordinal;
                }
            }
            key.append(seg);
View Full Code Here

TOP

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

Copyright © 2018 www.massapicom. 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.