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

#3575 PG: procedure parameter default value read


Former-commit-id: 6e77a9db
上级 10b364f9
......@@ -292,6 +292,8 @@ meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedureParameter.parameterK
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedureParameter.parameterKind.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedureParameter.parameterType.name=Parameter Type
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedureParameter.parameterType.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedureParameter.defaultValue.name=Default
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedureParameter.defaultValue.description=Parameter default value
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema.dataTypes.name=Data Types
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema.dataTypes.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema.database.name=Database
......
......@@ -24,6 +24,7 @@ import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.impl.struct.AbstractProcedure;
......@@ -92,7 +93,6 @@ public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, Postg
private boolean returnsSet;
private ProcedureVolatile procVolatile;
private PostgreDataType returnType;
private Object[] argDefaults;
private int[] transformTypes;
private String[] config;
private Object acl;
......@@ -143,17 +143,19 @@ public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, Postg
log.debug(e);
}
}
DBSProcedureParameterKind parameterKind = mode == null ? DBSProcedureParameterKind.IN : mode.getParameterKind();
PostgreProcedureParameter param = new PostgreProcedureParameter(
this,
paramName,
dataType,
mode == null ? DBSProcedureParameterKind.IN : mode.getParameterKind(),
parameterKind,
i + 1);
params.add(param);
}
} else {
long[] inArgTypes = PostgreUtils.getIdVector(JDBCUtils.safeGetObject(dbResult, "proargtypes"));
if (!ArrayUtils.isEmpty(inArgTypes)) {
for (int i = 0; i < inArgTypes.length; i++) {
Long paramType = inArgTypes[i];
......@@ -165,12 +167,38 @@ public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, Postg
//String paramName = argNames == null || argNames.length < inArg
//String paramName = "$" + (i + 1);
String paramName = argNames == null || argNames.length < inArgTypes.length ? "$" + (i + 1) : argNames[i];
PostgreProcedureParameter param = new PostgreProcedureParameter(this, paramName, dataType, DBSProcedureParameterKind.IN, i + 1);
PostgreProcedureParameter param = new PostgreProcedureParameter(
this, paramName, dataType, DBSProcedureParameterKind.IN, i + 1);
params.add(param);
}
}
}
try {
String argDefaultsString = JDBCUtils.safeGetString(dbResult, "arg_defaults");
String[] argDefaults = null;
if (!CommonUtils.isEmpty(argDefaultsString)) {
try {
argDefaults = PostgreUtils.parseObjectString(argDefaultsString);
} catch (DBCException e) {
log.debug("Error parsing function parameters defaults", e);
}
}
if (argDefaults != null && argDefaults.length > 0) {
// Assign defaults to last X arguments
int paramsAssigned = 0;
for (int i = params.size() - 1; i >= 0; i--) {
params.get(i).setDefaultValue(argDefaults[argDefaults.length - 1 - paramsAssigned]);
paramsAssigned++;
if (paramsAssigned >= argDefaults.length) {
break;
}
}
}
} catch (Exception e) {
log.error("Error parsing parameters defaults", e);
}
this.overloadedName = makeOverloadedName(false);
{
......
......@@ -35,6 +35,7 @@ public class PostgreProcedureParameter implements DBSProcedureParameter, DBSAttr
private int ordinalPosition;
private PostgreDataType dataType;
private DBSProcedureParameterKind parameterKind;
private String defaultValue;
public PostgreProcedureParameter(
PostgreProcedure procedure,
......@@ -146,4 +147,13 @@ public class PostgreProcedureParameter implements DBSProcedureParameter, DBSAttr
public long getMaxLength() {
return dataType.getMaxLength();
}
@Property(viewable = true, order = 5)
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
}
......@@ -786,7 +786,7 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj
@Override
public JDBCStatement prepareLookupStatement(@NotNull JDBCSession session, @NotNull PostgreSchema owner, @Nullable PostgreProcedure object, @Nullable String objectName) throws SQLException {
JDBCPreparedStatement dbStat = session.prepareStatement(
"SELECT p.oid,p.*,d.description\n" +
"SELECT p.oid,p.*,pg_catalog.pg_get_expr(p.proargdefaults, 0) as arg_defaults,d.description\n" +
"FROM pg_catalog.pg_proc p\n" +
"LEFT OUTER JOIN pg_catalog.pg_description d ON d.objoid=p.oid\n" +
"WHERE p.pronamespace=?" +
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册