package com.orientechnologies.orient.core.sql; import com.orientechnologies.orient.core.command.OCommandDistributedReplicateRequest; import com.orientechnologies.orient.core.command.OCommandRequest; import com.orientechnologies.orient.core.command.OCommandRequestText; import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal; import com.orientechnologies.orient.core.db.document.ODatabaseDocument; import com.orientechnologies.orient.core.exception.OCommandExecutionException; import com.orientechnologies.orient.core.metadata.sequence.OSequence; import java.util.Map; /** * @author Matan Shukry (matanshukry@gmail.com) * @since 3/5/2015 */ public class OCommandExecutorSQLAlterSequence extends OCommandExecutorSQLAbstract implements OCommandDistributedReplicateRequest { public static final String KEYWORD_ALTER = "ALTER"; public static final String KEYWORD_SEQUENCE = "SEQUENCE"; public static final String KEYWORD_START = "START"; public static final String KEYWORD_INCREMENT = "INCREMENT"; public static final String KEYWORD_CACHE = "CACHE"; private String sequenceName; private OSequence.CreateParams params; @Override public OCommandExecutorSQLAlterSequence parse(OCommandRequest iRequest) { final OCommandRequestText textRequest = (OCommandRequestText) iRequest; String queryText = textRequest.getText(); String originalQuery = queryText; try { queryText = preParse(queryText, iRequest); textRequest.setText(queryText); init((OCommandRequestText) iRequest); final ODatabaseDocumentInternal database = getDatabase(); final StringBuilder word = new StringBuilder(); parserRequiredKeyword(KEYWORD_ALTER); parserRequiredKeyword(KEYWORD_SEQUENCE); this.sequenceName = parserRequiredWord(false, "Expected <sequence name>"); this.params = new OSequence.CreateParams(); String temp; while ((temp = parseOptionalWord(true)) != null) { if (parserIsEnded()) { break; } if (temp.equals(KEYWORD_START)) { String startAsString = parserRequiredWord(true, "Expected <start value>"); this.params.start = Long.parseLong(startAsString); } else if (temp.equals(KEYWORD_INCREMENT)) { String incrementAsString = parserRequiredWord(true, "Expected <increment value>"); this.params.increment = Integer.parseInt(incrementAsString); } else if (temp.equals(KEYWORD_CACHE)) { String cacheAsString = parserRequiredWord(true, "Expected <cache value>"); this.params.cacheSize = Integer.parseInt(cacheAsString); } } } finally { textRequest.setText(originalQuery); } return this; } @Override public Object execute(Map<Object, Object> iArgs) { if (this.sequenceName == null) { throw new OCommandExecutionException("Cannot execute the command because it has not been parsed yet"); } final ODatabaseDocument database = getDatabase(); OSequence sequence = database.getMetadata().getSequenceLibrary().getSequence(this.sequenceName); boolean result = sequence.updateParams(this.params); sequence.reset(); return result; } @Override public String getSyntax() { return "ALTER SEQUENCE <sequence> [START <value>] [INCREMENT <value>] [CACHE <value>]"; } @Override public QUORUM_TYPE getQuorumType() { return QUORUM_TYPE.ALL; } }