未验证 提交 55433144 编写于 作者: A Anastasiya 提交者: GitHub

#15829 add Oracle Sequences DDL tab (#15838)

上级 1a33a440
......@@ -196,6 +196,7 @@
<objectType name="org.jkiss.dbeaver.ext.oracle.model.OracleTableIndex"/>
<objectType name="org.jkiss.dbeaver.ext.oracle.model.OracleJavaClass"/>
<objectType name="org.jkiss.dbeaver.ext.oracle.model.OracleJob"/>
<objectType name="org.jkiss.dbeaver.ext.oracle.model.OracleSequence"/>
</editor>
<editor id="source.definition" class="org.jkiss.dbeaver.ext.oracle.ui.editors.OracleSourceDefinitionEditor"
label="%editor.package.body.name" description="%editor.package.body.description" icon="#sql_text" position="additions_middle"
......
......@@ -27,6 +27,7 @@ import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.menus.UIElement;
import org.jkiss.dbeaver.ext.oracle.model.OracleObjectPersistAction;
import org.jkiss.dbeaver.ext.oracle.model.OracleSequence;
import org.jkiss.dbeaver.ext.oracle.model.OracleUtils;
import org.jkiss.dbeaver.ext.oracle.model.source.OracleSourceObject;
import org.jkiss.dbeaver.model.DBPEvent;
......@@ -205,6 +206,10 @@ public class CompileHandler extends OracleTaskHandler
{
final DBEPersistAction[] compileActions = unit.getCompileActions(monitor);
if (ArrayUtils.isEmpty(compileActions)) {
if (unit instanceof OracleSequence) {
// Sequence can not be compiled
return false;
}
throw new DBCException("No compile actions associated with " + unit.getSourceType().name());
}
......
......@@ -19,9 +19,12 @@ package org.jkiss.dbeaver.ext.oracle.ui.editors;
import org.eclipse.jface.action.IContributionManager;
import org.jkiss.dbeaver.ext.oracle.model.OracleConstants;
import org.jkiss.dbeaver.ext.oracle.model.OracleJob;
import org.jkiss.dbeaver.ext.oracle.model.OracleSequence;
import org.jkiss.dbeaver.ext.oracle.model.OracleTableBase;
import org.jkiss.dbeaver.ext.oracle.model.source.OracleSourceObject;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObjectWithScript;
import org.jkiss.dbeaver.ui.editors.sql.SQLSourceViewer;
import org.jkiss.utils.CommonUtils;
......@@ -50,7 +53,8 @@ public class OracleSourceDeclarationEditor extends SQLSourceViewer<OracleSourceO
@Override
protected boolean isReadOnly() {
return false;
DBSObjectWithScript sourceObject = getSourceObject();
return sourceObject instanceof OracleSequence || sourceObject instanceof OracleJob;
}
@Override
......
......@@ -68,7 +68,7 @@ public class OracleSequenceManager extends SQLObjectEditor<OracleSequence, Oracl
@Override
protected void addObjectCreateActions(DBRProgressMonitor monitor, DBCExecutionContext executionContext, List<DBEPersistAction> actions, ObjectCreateCommand command, Map<String, Object> options) {
String sql = buildStatement(command.getObject(), false);
String sql = command.getObject().buildStatement(false);
actions.add(new SQLDatabasePersistAction("Create Sequence", sql));
String comment = buildComment(command.getObject());
......@@ -79,7 +79,7 @@ public class OracleSequenceManager extends SQLObjectEditor<OracleSequence, Oracl
@Override
protected void addObjectModifyActions(DBRProgressMonitor monitor, DBCExecutionContext executionContext, List<DBEPersistAction> actionList, ObjectChangeCommand command, Map<String, Object> options) {
String sql = buildStatement(command.getObject(), true);
String sql = command.getObject().buildStatement(true);
actionList.add(new SQLDatabasePersistAction("Alter Sequence", sql));
String comment = buildComment(command.getObject());
......@@ -95,44 +95,6 @@ public class OracleSequenceManager extends SQLObjectEditor<OracleSequence, Oracl
actions.add(action);
}
private String buildStatement(OracleSequence sequence, Boolean forUpdate) {
StringBuilder sb = new StringBuilder();
if (forUpdate) {
sb.append("ALTER SEQUENCE ");
} else {
sb.append("CREATE SEQUENCE ");
}
sb.append(sequence.getFullyQualifiedName(DBPEvaluationContext.DDL)).append(" ");
if (sequence.getIncrementBy() != null) {
sb.append("INCREMENT BY ").append(sequence.getIncrementBy()).append(" ");
}
if (sequence.getMinValue() != null) {
sb.append("MINVALUE ").append(sequence.getMinValue()).append(" ");
}
if (sequence.getMaxValue() != null) {
sb.append("MAXVALUE ").append(sequence.getMaxValue()).append(" ");
}
if (sequence.isCycle()) {
sb.append("CYCLE ");
} else {
sb.append("NOCYCLE ");
}
if (sequence.getCacheSize() > 0) {
sb.append("CACHE ").append(sequence.getCacheSize()).append(" ");
} else {
sb.append("NOCACHE ");
}
if (sequence.isOrder()) {
sb.append("ORDER ");
} else {
sb.append("NOORDER ");
}
return sb.toString();
}
private String buildComment(OracleSequence sequence) {
if (!CommonUtils.isEmpty(sequence.getDescription())) {
return "COMMENT ON SEQUENCE " + sequence.getFullyQualifiedName(DBPEvaluationContext.DDL) + " IS " + SQLUtils.quoteString(sequence, sequence.getDescription());
......
......@@ -17,18 +17,26 @@
package org.jkiss.dbeaver.ext.oracle.model;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.oracle.model.source.OracleSourceObject;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObjectState;
import org.jkiss.dbeaver.model.struct.rdb.DBSSequence;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.util.Map;
/**
* Oracle sequence
*/
public class OracleSequence extends OracleSchemaObject implements DBSSequence {
public class OracleSequence extends OracleSchemaObject implements DBSSequence, OracleSourceObject {
private BigDecimal minValue;
private BigDecimal maxValue;
......@@ -38,6 +46,8 @@ public class OracleSequence extends OracleSchemaObject implements DBSSequence {
private boolean flagCycle;
private boolean flagOrder;
private String sourceText;
public OracleSequence(OracleSchema schema, String name) {
super(schema, name, false);
this.minValue = null;
......@@ -138,4 +148,79 @@ public class OracleSequence extends OracleSchemaObject implements DBSSequence {
public void setOrder(boolean flagOrder) {
this.flagOrder = flagOrder;
}
public String buildStatement(boolean forUpdate) {
StringBuilder sb = new StringBuilder();
if (forUpdate) {
sb.append("ALTER SEQUENCE ");
} else {
sb.append("CREATE SEQUENCE ");
}
sb.append(getFullyQualifiedName(DBPEvaluationContext.DDL)).append(" ");
if (getIncrementBy() != null) {
sb.append("INCREMENT BY ").append(getIncrementBy()).append(" ");
}
if (getMinValue() != null) {
sb.append("MINVALUE ").append(getMinValue()).append(" ");
}
if (getMaxValue() != null) {
sb.append("MAXVALUE ").append(getMaxValue()).append(" ");
}
if (isCycle()) {
sb.append("CYCLE ");
} else {
sb.append("NOCYCLE ");
}
if (getCacheSize() > 0) {
sb.append("CACHE ").append(getCacheSize()).append(" ");
} else {
sb.append("NOCACHE ");
}
if (isOrder()) {
sb.append("ORDER ");
} else {
sb.append("NOORDER ");
}
return sb.toString();
}
@Override
public OracleSourceType getSourceType() {
return OracleSourceType.SEQUENCE;
}
@Override
public DBEPersistAction[] getCompileActions(DBRProgressMonitor monitor) throws DBCException {
// No compilation for the sequence
return new DBEPersistAction[0];
}
@NotNull
@Override
public DBSObjectState getObjectState() {
return DBSObjectState.NORMAL;
}
@Override
public void refreshObjectState(@NotNull DBRProgressMonitor monitor) throws DBCException {
// Do nothing
}
@Override
public void setObjectDefinitionText(String source) {
this.sourceText = source;
}
@Override
public String getObjectDefinitionText(DBRProgressMonitor monitor, Map<String, Object> options) throws DBException {
if (sourceText == null) {
sourceText = buildStatement(false);
}
return sourceText;
}
}
......@@ -30,7 +30,8 @@ public enum OracleSourceType {
VIEW(true),
MATERIALIZED_VIEW(true),
JAVA_SOURCE(false),
JOB(false);
JOB(false),
SEQUENCE(false);
private final boolean isCustom;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册