提交 9428bccf 编写于 作者: S serge-rider

#2488 SQL Server: procedure comments edit support

上级 5db62334
......@@ -19,9 +19,9 @@ package org.jkiss.dbeaver.ext.mssql.edit;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.mssql.model.SQLServerDatabase;
import org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedure;
import org.jkiss.dbeaver.ext.mssql.model.SQLServerSchema;
import org.jkiss.dbeaver.ext.mssql.SQLServerUtils;
import org.jkiss.dbeaver.ext.mssql.model.*;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBUtils;
......@@ -31,7 +31,7 @@ import org.jkiss.dbeaver.model.impl.DBSObjectCache;
import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistAction;
import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.ui.UITask;
import org.jkiss.dbeaver.ui.editors.object.struct.CreateProcedurePage;
import org.jkiss.utils.CommonUtils;
......@@ -61,7 +61,7 @@ public class SQLServerProcedureManager extends SQLObjectEditor<SQLServerProcedur
if (CommonUtils.isEmpty(command.getObject().getName())) {
throw new DBException("Procedure name cannot be empty");
}
if (CommonUtils.isEmpty(command.getObject().getBody())) {
if (!command.getObject().isPersisted() && CommonUtils.isEmpty(command.getObject().getBody())) {
throw new DBException("Procedure body cannot be empty");
}
}
......@@ -90,7 +90,9 @@ public class SQLServerProcedureManager extends SQLObjectEditor<SQLServerProcedur
@Override
protected void addObjectModifyActions(DBRProgressMonitor monitor, List<DBEPersistAction> actionList, ObjectChangeCommand command, Map<String, Object> options) {
createOrReplaceProcedureQuery(actionList, command.getObject());
if (command.getProperties().size() > 1 || command.getProperty("description") == null) {
createOrReplaceProcedureQuery(actionList, command.getObject());
}
}
@Override
......@@ -111,7 +113,6 @@ public class SQLServerProcedureManager extends SQLObjectEditor<SQLServerProcedur
}
private void createOrReplaceProcedureQuery(List<DBEPersistAction> actions, SQLServerProcedure procedure) {
SQLServerDatabase procDatabase = procedure.getContainer().getDatabase();
SQLServerDatabase defaultDatabase = procDatabase.getDataSource().getDefaultObject();
if (defaultDatabase != procDatabase) {
......@@ -128,5 +129,26 @@ public class SQLServerProcedureManager extends SQLObjectEditor<SQLServerProcedur
}
}
@Override
protected void addObjectExtraActions(DBRProgressMonitor monitor, List<DBEPersistAction> actions, NestedObjectCommand<SQLServerProcedure, PropertyHandler> command, Map<String, Object> options) throws DBException {
final SQLServerProcedure procedure = command.getObject();
if (command.getProperty(DBConstants.PROP_ID_DESCRIPTION) != null) {
SQLServerDatabase database = procedure.getContainer().getDatabase();
boolean isUpdate = SQLServerUtils.isCommentSet(
monitor,
database,
SQLServerObjectClass.OBJECT_OR_COLUMN,
procedure.getObjectId(),
0);
actions.add(
new SQLDatabasePersistAction(
"Add procedure comment",
"EXEC " + SQLServerUtils.getSystemTableName(database, isUpdate ? "sp_updateextendedproperty" : "sp_addextendedproperty") +
" 'MS_Description', " + SQLUtils.quoteString(command.getObject(), command.getObject().getDescription()) + "," +
" 'schema', '" + procedure.getContainer().getName() + "'," +
" 'procedure', '" + procedure.getName() + "'"));
}
}
}
......@@ -18,7 +18,6 @@
package org.jkiss.dbeaver.ext.mssql.edit;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.mssql.SQLServerUtils;
import org.jkiss.dbeaver.ext.mssql.model.*;
......@@ -30,13 +29,11 @@ import org.jkiss.dbeaver.model.edit.DBEObjectRenamer;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
import org.jkiss.dbeaver.model.impl.DBSObjectCache;
import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistAction;
import org.jkiss.dbeaver.model.impl.edit.SQLScriptCommand;
import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.impl.sql.edit.struct.SQLTableManager;
import org.jkiss.dbeaver.model.messages.ModelMessages;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex;
import org.jkiss.utils.CommonUtils;
......
......@@ -20,9 +20,7 @@ package org.jkiss.dbeaver.ext.mssql.ui.editors;
import org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedure;
import org.jkiss.dbeaver.ext.mssql.model.SQLServerTableTrigger;
import org.jkiss.dbeaver.ext.mssql.model.SQLServerView;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectWithScript;
import org.jkiss.dbeaver.ui.editors.sql.SQLSourceViewer;
......
......@@ -36,7 +36,7 @@ meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableForeignKeyColumn.referenced
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableIndex.objectId.name = ID
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedure.objectId.name = ID
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedure.declaration.name = Definition
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedure.objectDefinitionText.name = Definition
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedureParameter.name.name = Name
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedureParameter.defaultValue.name = Default
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerProcedureParameter.parameterType.name = Type
......
......@@ -21,14 +21,11 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.generic.model.GenericCatalog;
import org.jkiss.dbeaver.ext.generic.model.GenericDataSource;
import org.jkiss.dbeaver.ext.mssql.model.*;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
......
......@@ -39,8 +39,7 @@ import java.util.Map;
/**
* SQLServerProcedure
*/
public class SQLServerProcedure extends AbstractProcedure<SQLServerDataSource, SQLServerSchema> implements DBPRefreshableObject, DBSObjectWithScript, SQLServerObject
{
public class SQLServerProcedure extends AbstractProcedure<SQLServerDataSource, SQLServerSchema> implements DBPRefreshableObject, DBSObjectWithScript, SQLServerObject {
private static final Log log = Log.getLog(SQLServerProcedure.class);
private DBSProcedureType procedureType;
......@@ -48,22 +47,19 @@ public class SQLServerProcedure extends AbstractProcedure<SQLServerDataSource, S
private long objectId;
private SQLServerObjectType objectType;
public SQLServerProcedure(SQLServerSchema schema)
{
public SQLServerProcedure(SQLServerSchema schema) {
super(schema, false);
this.procedureType = DBSProcedureType.PROCEDURE;
}
public SQLServerProcedure(
SQLServerSchema catalog,
ResultSet dbResult)
{
ResultSet dbResult) {
super(catalog, true);
loadInfo(dbResult);
}
private void loadInfo(ResultSet dbResult)
{
private void loadInfo(ResultSet dbResult) {
this.objectId = JDBCUtils.safeGetLong(dbResult, "object_id");
this.name = JDBCUtils.safeGetString(dbResult, "name");
this.objectType = SQLServerObjectType.P;
......@@ -102,27 +98,29 @@ public class SQLServerProcedure extends AbstractProcedure<SQLServerDataSource, S
@Override
@Property(order = 5)
public DBSProcedureType getProcedureType()
{
return procedureType ;
public DBSProcedureType getProcedureType() {
return procedureType;
}
public void setProcedureType(DBSProcedureType procedureType)
{
public void setProcedureType(DBSProcedureType procedureType) {
this.procedureType = procedureType;
}
@Override
@Property(viewable = true, editable = true, updatable = true, multiline = true, order = 100)
public String getDescription() {
return super.getDescription();
}
@Override
public Collection<SQLServerProcedureParameter> getParameters(DBRProgressMonitor monitor)
throws DBException
{
throws DBException {
return getContainer().getProcedureCache().getChildren(monitor, getContainer(), this);
}
@NotNull
@Override
public String getFullyQualifiedName(DBPEvaluationContext context)
{
public String getFullyQualifiedName(DBPEvaluationContext context) {
return DBUtils.getFullQualifiedName(getDataSource(),
getContainer(),
this);
......@@ -130,8 +128,7 @@ public class SQLServerProcedure extends AbstractProcedure<SQLServerDataSource, S
@Property(hidden = true, editable = true, updatable = true, order = -1)
public String getObjectDefinitionText(DBRProgressMonitor monitor, Map<String, Object> options) throws DBException
{
public String getObjectDefinitionText(DBRProgressMonitor monitor, Map<String, Object> options) throws DBException {
if (body == null) {
if (!persisted) {
this.body =
......@@ -147,8 +144,7 @@ public class SQLServerProcedure extends AbstractProcedure<SQLServerDataSource, S
}
@Override
public void setObjectDefinitionText(String sourceText)
{
public void setObjectDefinitionText(String sourceText) {
this.body = sourceText;
}
......
......@@ -21,7 +21,6 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.mssql.SQLServerUtils;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement;
......@@ -33,14 +32,14 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCObjectCache;
import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.utils.CommonUtils;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.Collection;
import java.util.Map;
import java.util.stream.Collectors;
/**
......
......@@ -30,11 +30,13 @@ import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.utils.CommonUtils;
import java.sql.ResultSet;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* MySQLTable base
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册