From c5fd4e765a010d0c52cabd0d79228415196aac7f Mon Sep 17 00:00:00 2001 From: alanv Date: Tue, 8 Sep 2026 22:12:07 -0500 Subject: [PATCH 1/3] GetQueryDetailsAction: serialize named parameters in response --- api/src/org/labkey/api/query/QueryService.java | 14 ++++++++++++++ .../query/controllers/GetQueryDetailsAction.java | 6 ++++++ query/src/org/labkey/query/sql/QParameter.java | 14 ++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/api/src/org/labkey/api/query/QueryService.java b/api/src/org/labkey/api/query/QueryService.java index f90e5c90704..2882bc949ef 100644 --- a/api/src/org/labkey/api/query/QueryService.java +++ b/api/src/org/labkey/api/query/QueryService.java @@ -323,6 +323,7 @@ interface ParameterDecl extends ParameterDescription { Object getDefault(); boolean isRequired(); + JSONObject toJSON(); } class ParameterDeclaration extends ParameterDescriptionImpl implements ParameterDecl @@ -358,6 +359,19 @@ public boolean isRequired() { return _required; } + + @Override + public JSONObject toJSON() + { + JSONObject json = new JSONObject(); + + json.put("name", getName()); + json.put("defaultValue", getDefault()); + json.put("isRequired", isRequired()); + json.put("jdbcType", getJdbcType()); + + return json; + } } diff --git a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java index 5394da6b60f..6b65cd3e3db 100644 --- a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java +++ b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java @@ -41,6 +41,8 @@ import org.labkey.api.exp.property.Domain; import org.labkey.api.exp.property.DomainKind; import org.labkey.api.exp.property.PropertyService; +import org.labkey.api.formSchema.Field; +import org.labkey.api.formSchema.FormSchema; import org.labkey.api.query.CustomView; import org.labkey.api.query.DefaultSchema; import org.labkey.api.query.FieldKey; @@ -69,6 +71,7 @@ import org.springframework.beans.PropertyValues; import org.springframework.validation.BindException; +import java.sql.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -168,6 +171,9 @@ public ApiResponse execute(Form form, BindException errors) resp.put("supportGroupConcatSubSelect", tinfo.getSqlDialect().supportsGroupConcatSubSelect()); resp.put("supportMerge", tinfo.supportsInsertOption(QueryUpdateService.InsertOption.MERGE)); + var namedParams = tinfo.getNamedParameters().stream().map(QueryService.ParameterDecl::toJSON).toList(); + resp.put("namedParameters", new JSONArray(namedParams)); + // check if this query is shadowing a local table if (isUserDefined) { diff --git a/query/src/org/labkey/query/sql/QParameter.java b/query/src/org/labkey/query/sql/QParameter.java index 2d47245a73d..219da11f6ba 100644 --- a/query/src/org/labkey/query/sql/QParameter.java +++ b/query/src/org/labkey/query/sql/QParameter.java @@ -16,6 +16,7 @@ package org.labkey.query.sql; import org.jetbrains.annotations.NotNull; +import org.json.JSONObject; import org.labkey.api.data.JdbcType; import org.labkey.api.query.QueryService; @@ -76,6 +77,19 @@ public boolean isRequired() return _required; } + @Override + public JSONObject toJSON() + { + JSONObject json = new JSONObject(); + + json.put("name", getName()); + json.put("defaultValue", getDefault()); + json.put("isRequired", isRequired()); + json.put("jdbcType", getJdbcType().toString()); + + return json; + } + @Override public void appendSource(SourceBuilder builder) { From 47f0568a6c1aab41daaf18e0dcef082727716ff6 Mon Sep 17 00:00:00 2001 From: alanv Date: Wed, 9 Sep 2026 12:34:23 -0500 Subject: [PATCH 2/3] ParameterDecl: Add default toJSON implementation Remove toJSON implementation from QParameter and ParameterDeclaration --- .../org/labkey/api/query/QueryService.java | 25 ++++++++----------- .../src/org/labkey/query/sql/QParameter.java | 13 ---------- 2 files changed, 11 insertions(+), 27 deletions(-) diff --git a/api/src/org/labkey/api/query/QueryService.java b/api/src/org/labkey/api/query/QueryService.java index 2882bc949ef..136420b78af 100644 --- a/api/src/org/labkey/api/query/QueryService.java +++ b/api/src/org/labkey/api/query/QueryService.java @@ -323,7 +323,17 @@ interface ParameterDecl extends ParameterDescription { Object getDefault(); boolean isRequired(); - JSONObject toJSON(); + + default JSONObject toJSON() { + JSONObject json = new JSONObject(); + + json.put("name", getName()); + json.put("defaultValue", getDefault()); + json.put("isRequired", isRequired()); + json.put("jdbcType", getJdbcType().toString()); + + return json; + } } class ParameterDeclaration extends ParameterDescriptionImpl implements ParameterDecl @@ -359,19 +369,6 @@ public boolean isRequired() { return _required; } - - @Override - public JSONObject toJSON() - { - JSONObject json = new JSONObject(); - - json.put("name", getName()); - json.put("defaultValue", getDefault()); - json.put("isRequired", isRequired()); - json.put("jdbcType", getJdbcType()); - - return json; - } } diff --git a/query/src/org/labkey/query/sql/QParameter.java b/query/src/org/labkey/query/sql/QParameter.java index 219da11f6ba..8c2267936b2 100644 --- a/query/src/org/labkey/query/sql/QParameter.java +++ b/query/src/org/labkey/query/sql/QParameter.java @@ -77,19 +77,6 @@ public boolean isRequired() return _required; } - @Override - public JSONObject toJSON() - { - JSONObject json = new JSONObject(); - - json.put("name", getName()); - json.put("defaultValue", getDefault()); - json.put("isRequired", isRequired()); - json.put("jdbcType", getJdbcType().toString()); - - return json; - } - @Override public void appendSource(SourceBuilder builder) { From c757569bd6e1687c68c6ece5e7253eeb17e4b0b9 Mon Sep 17 00:00:00 2001 From: alanv Date: Wed, 9 Sep 2026 12:43:30 -0500 Subject: [PATCH 3/3] cleanup --- api/src/org/labkey/api/query/QueryService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/query/QueryService.java b/api/src/org/labkey/api/query/QueryService.java index 136420b78af..ad554eff30b 100644 --- a/api/src/org/labkey/api/query/QueryService.java +++ b/api/src/org/labkey/api/query/QueryService.java @@ -324,7 +324,8 @@ interface ParameterDecl extends ParameterDescription Object getDefault(); boolean isRequired(); - default JSONObject toJSON() { + default JSONObject toJSON() + { JSONObject json = new JSONObject(); json.put("name", getName());