Skip to content

Commit

Permalink
#6286 Snowflake stored procedures def read
Browse files Browse the repository at this point in the history
  • Loading branch information
serge-rider committed Jul 16, 2019
1 parent 32c3f7c commit effffa3
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,14 @@
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.generic.GenericConstants;
import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaObject;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPRefreshableObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCConstants;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.impl.struct.AbstractProcedure;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.DBPUniqueObject;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureParameterKind;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureType;
Expand Down Expand Up @@ -283,4 +280,34 @@ public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBExc
source = null;
return this;
}

@NotNull
public String getProcedureSignature(DBRProgressMonitor monitor, boolean showParamNames) throws DBException {
return getFullyQualifiedName(DBPEvaluationContext.DML) + "(" + makeSignature(monitor, showParamNames) + ")";
}

private String makeSignature(DBRProgressMonitor monitor, boolean showParamNames) throws DBException {
Collection<GenericProcedureParameter> parameters = getParameters(monitor);
if (!CommonUtils.isEmpty(parameters)) {
StringBuilder paramsSignature = new StringBuilder(64);
boolean hasParam = false;
for (GenericProcedureParameter param : parameters) {
if (param.getParameterKind() != DBSProcedureParameterKind.IN &&
param.getParameterKind() != DBSProcedureParameterKind.INOUT)
{
continue;
}
if (hasParam) paramsSignature.append(',');
hasParam = true;
if (showParamNames) {
paramsSignature.append(param.getName()).append(' ');
}
paramsSignature.append(param.getFullTypeName());
}
return paramsSignature.toString();
} else {
return "";
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.generic.model.GenericDataSource;
import org.jkiss.dbeaver.ext.generic.model.GenericProcedure;
import org.jkiss.dbeaver.ext.generic.model.GenericTableBase;
import org.jkiss.dbeaver.ext.generic.model.GenericView;
import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel;
Expand All @@ -29,6 +30,7 @@
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureType;

import java.sql.SQLException;
import java.util.Map;
Expand Down Expand Up @@ -74,6 +76,29 @@ public String getViewDDL(DBRProgressMonitor monitor, GenericView sourceObject, M
return getTableDDL(monitor, sourceObject, options);
}

@Override
public String getProcedureDDL(DBRProgressMonitor monitor, GenericProcedure sourceObject) throws DBException {
GenericDataSource dataSource = sourceObject.getDataSource();
boolean isFunction = sourceObject.getProcedureType() == DBSProcedureType.FUNCTION;
try (JDBCSession session = DBUtils.openMetaSession(monitor, sourceObject, "Read Snowflake object DDL")) {
try (JDBCPreparedStatement dbStat = session.prepareStatement(
"DESCRIBE " + sourceObject.getProcedureType() + " " + sourceObject.getProcedureSignature(monitor, false)))
{
try (JDBCResultSet dbResult = dbStat.executeQuery()) {
StringBuilder sql = new StringBuilder();
while (dbResult.nextRow()) {
if ("body".equals(dbResult.getString("property"))) {
sql.append(dbResult.getString("value"));
}
}
return sql.toString();
}
}
} catch (SQLException e) {
throw new DBException(e, dataSource);
}
}

@Override
public boolean isTableCommentEditable() {
return true;
Expand Down

0 comments on commit effffa3

Please sign in to comment.