Package com.foundationdb.sql.aisddl

Source Code of com.foundationdb.sql.aisddl.SequenceDDL

/**
* 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.sql.aisddl;

import com.foundationdb.ais.model.AISBuilder;
import com.foundationdb.ais.model.Sequence;
import com.foundationdb.ais.model.TableName;
import com.foundationdb.server.api.DDLFunctions;
import com.foundationdb.server.error.NoSuchSequenceException;
import com.foundationdb.server.service.session.Session;
import com.foundationdb.sql.parser.CreateSequenceNode;
import com.foundationdb.sql.parser.DropSequenceNode;
import com.foundationdb.qp.operator.QueryContext;
import com.foundationdb.sql.types.TypeId;

import static com.foundationdb.sql.aisddl.DDLHelper.skipOrThrow;

public class SequenceDDL {
    private SequenceDDL() { }
   
    public static void createSequence (DDLFunctions ddlFunctions,
                                    Session session,
                                    String defaultSchemaName,
                                    CreateSequenceNode node) {
        final TableName seqName = DDLHelper.convertName(defaultSchemaName, node.getObjectName());
        // Implementation defined if unspecified
        long minValue = (node.getMinValue() != null) ? node.getMinValue() : 1;
        long maxValue = (node.getMaxValue() != null) ? node.getMaxValue() : Long.MAX_VALUE;
        // Standard compliant defaults
        long startWith = (node.getStartWith() != null) ? node.getStartWith() : minValue;
        long incBy = (node.getIncrementBy() != null) ? node.getIncrementBy() : 1;
        boolean isCycle = (node.isCycle() != null) ? node.isCycle() : false;
        // Sequence doesn't have a backing SQL data type so just limit the max if one was given
        if((node.getMaxValue() == null) && (node.getDataType() != null)) {
            TypeId typeId = node.getDataType().getTypeId();
            if(typeId == TypeId.TINYINT_ID) {
                maxValue = Byte.MAX_VALUE;
            } else if(typeId == TypeId.SMALLINT_ID) {
                maxValue = Short.MAX_VALUE;
            } else if(typeId == TypeId.INTEGER_ID) {
                maxValue = Integer.MAX_VALUE;
            }
            // else keep long max
        }
        AISBuilder builder = new AISBuilder();
        builder.sequence(seqName.getSchemaName(), seqName.getTableName(), startWith, incBy, minValue, maxValue, isCycle);
        Sequence sequence = builder.akibanInformationSchema().getSequence(seqName);
        if (node.getStorageFormat() != null) {
            TableDDL.setStorage(ddlFunctions, sequence, node.getStorageFormat());
        }
        ddlFunctions.createSequence(session, sequence);
    }
   
    public static void dropSequence (DDLFunctions ddlFunctions,
                                        Session session,
                                        String defaultSchemaName,
                                        DropSequenceNode dropSequence,
                                        QueryContext context) {
        final TableName sequenceName = DDLHelper.convertName(defaultSchemaName, dropSequence.getObjectName());

        Sequence sequence = ddlFunctions.getAIS(session).getSequence(sequenceName);
        if((sequence == null) &&
           skipOrThrow(context, dropSequence.getExistenceCheck(), sequence, new NoSuchSequenceException(sequenceName))) {
            return;
        }

        ddlFunctions.dropSequence(session, sequenceName);
    }
}
TOP

Related Classes of com.foundationdb.sql.aisddl.SequenceDDL

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.