From a884c3e9f6905c617523d18860e66d6f029829dc Mon Sep 17 00:00:00 2001 From: serge-rider Date: Tue, 12 Jun 2018 21:12:09 +0300 Subject: [PATCH] #3575 PG: procedure parameter default value read Former-commit-id: 6e77a9db9bbebada7e2130aefdc8abac3429bc3b --- .../OSGI-INF/l10n/bundle.properties | 2 ++ .../postgresql/model/PostgreProcedure.java | 34 +++++++++++++++++-- .../model/PostgreProcedureParameter.java | 10 ++++++ .../ext/postgresql/model/PostgreSchema.java | 2 +- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/OSGI-INF/l10n/bundle.properties b/plugins/org.jkiss.dbeaver.ext.postgresql/OSGI-INF/l10n/bundle.properties index 81bf431016..2750412008 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/OSGI-INF/l10n/bundle.properties +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/OSGI-INF/l10n/bundle.properties @@ -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 diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java index cc555044cb..1a3ea1f903 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java @@ -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 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); { diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedureParameter.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedureParameter.java index 9008074daa..5f2395d8fa 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedureParameter.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedureParameter.java @@ -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; + } } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java index 0b3b4ea78c..b512e65683 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java @@ -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=?" + -- GitLab