Skip to content

Skip expensive work in getQueries.api if certain props aren't needed #3961

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jan 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions core/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
}
},
"dependencies": {
"@labkey/api": "1.17.1",
"@labkey/api": "1.18.0",
"@labkey/components": "2.274.0",
"@labkey/themes": "1.3.0"
},
Expand Down
14 changes: 12 additions & 2 deletions internal/webapp/sqv/Selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -533,14 +533,24 @@ Ext4.define('LABKEY.sqv.Model', {
if (this.queryCombo.includeSystemQueries === false)
includeSystemQueries = false;

var includeTitle = true;
if (this.queryCombo.includeTitle === false)
includeTitle = false;

var includeViewDataUrl = true;
if (this.queryCombo.includeViewDataUrl === false)
includeViewDataUrl = false;

this.queryCombo.setLoading(true);
LABKEY.Query.getQueries({
containerPath: selectedContainerId,
schemaName : selectedSchema,
schemaName: selectedSchema,
includeUserQueries: includeUserQueries,
includeSystemQueries: includeSystemQueries,
includeTitle: includeTitle,
includeViewDataUrl: includeViewDataUrl,
includeColumns: false,
success : function (details) {
success: function (details) {
this.queryCombo.setLoading(false);
var newQueries = details.queries;
this.queryStore.loadData(newQueries);
Expand Down
95 changes: 62 additions & 33 deletions query/src/org/labkey/query/controllers/QueryController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6225,6 +6225,8 @@ public static class GetQueriesForm
private boolean _includeUserQueries = true;
private boolean _includeSystemQueries = true;
private boolean _includeColumns = true;
private boolean _includeViewDataUrl = true;
private boolean _includeTitle = true;
private boolean _queryDetailColumns = false;

public String getSchemaName()
Expand Down Expand Up @@ -6276,6 +6278,26 @@ public void setQueryDetailColumns(boolean queryDetailColumns)
{
_queryDetailColumns = queryDetailColumns;
}

public boolean isIncludeViewDataUrl()
{
return _includeViewDataUrl;
}

public void setIncludeViewDataUrl(boolean includeViewDataUrl)
{
_includeViewDataUrl = includeViewDataUrl;
}

public boolean isIncludeTitle()
{
return _includeTitle;
}

public void setIncludeTitle(boolean includeTitle)
{
_includeTitle = includeTitle;
}
}


Expand Down Expand Up @@ -6312,8 +6334,8 @@ public ApiResponse execute(GetQueriesForm form, BindException errors)
{
if (!qdef.isTemporary())
{
ActionURL viewDataUrl = uschema.urlFor(QueryAction.executeQuery, qdef);
qinfos.add(getQueryProps(qdef, viewDataUrl, true, uschema, form.isIncludeColumns(), form.isQueryDetailColumns()));
ActionURL viewDataUrl = form.isIncludeViewDataUrl() ? uschema.urlFor(QueryAction.executeQuery, qdef) : null;
qinfos.add(getQueryProps(qdef, viewDataUrl, true, uschema, form.isIncludeColumns(), form.isQueryDetailColumns(), form.isIncludeTitle()));
}
}
}
Expand All @@ -6328,8 +6350,8 @@ public ApiResponse execute(GetQueriesForm form, BindException errors)
QueryDefinition qdef = uschema.getQueryDefForTable(qname);
if (qdef != null)
{
ActionURL viewDataUrl = uschema.urlFor(QueryAction.executeQuery, qdef);
qinfos.add(getQueryProps(qdef, viewDataUrl, false, uschema, form.isIncludeColumns(), form.isQueryDetailColumns()));
ActionURL viewDataUrl = form.isIncludeViewDataUrl() ? uschema.urlFor(QueryAction.executeQuery, qdef) : null;
qinfos.add(getQueryProps(qdef, viewDataUrl, false, uschema, form.isIncludeColumns(), form.isQueryDetailColumns(), form.isIncludeTitle()));
}
}
}
Expand All @@ -6338,7 +6360,7 @@ public ApiResponse execute(GetQueriesForm form, BindException errors)
return response;
}

protected Map<String, Object> getQueryProps(QueryDefinition qdef, ActionURL viewDataUrl, boolean isUserDefined, UserSchema schema, boolean includeColumns, boolean useQueryDetailColumns)
protected Map<String, Object> getQueryProps(QueryDefinition qdef, ActionURL viewDataUrl, boolean isUserDefined, UserSchema schema, boolean includeColumns, boolean useQueryDetailColumns, boolean includeTitle)
{
Map<String, Object> qinfo = new HashMap<>();
qinfo.put("hidden", qdef.isHidden());
Expand Down Expand Up @@ -6368,44 +6390,51 @@ protected Map<String, Object> getQueryProps(QueryDefinition qdef, ActionURL view
String name = qdef.getName();
try
{
//get the table info if the user requested column info
TableInfo table = qdef.getTable(schema, null, true);

if (null != table)
// get the TableInfo if the user requested column info or title, otherwise skip (it can be expensive)
if (includeColumns || includeTitle)
{
if (includeColumns)
{
Collection<Map<String, Object>> columns;
TableInfo table = qdef.getTable(schema, null, true);

if (useQueryDetailColumns)
if (null != table)
{
if (includeColumns)
{
columns = JsonWriter
Collection<Map<String, Object>> columns;

if (useQueryDetailColumns)
{
columns = JsonWriter
.getNativeColProps(table, Collections.emptyList(), null, false, false)
.values();
}
else
{
columns = new ArrayList<>();
for (ColumnInfo col : table.getColumns())
}
else
{
Map<String, Object> cinfo = new HashMap<>();
cinfo.put("name", col.getName());
if (null != col.getLabel())
cinfo.put("caption", col.getLabel());
if (null != col.getShortLabel())
cinfo.put("shortCaption", col.getShortLabel());
if (null != col.getDescription())
cinfo.put("description", col.getDescription());

columns.add(cinfo);
columns = new ArrayList<>();
for (ColumnInfo col : table.getColumns())
{
Map<String, Object> cinfo = new HashMap<>();
cinfo.put("name", col.getName());
if (null != col.getLabel())
cinfo.put("caption", col.getLabel());
if (null != col.getShortLabel())
cinfo.put("shortCaption", col.getShortLabel());
if (null != col.getDescription())
cinfo.put("description", col.getDescription());

columns.add(cinfo);
}
}

if (columns.size() > 0)
qinfo.put("columns", columns);
}

if (columns.size() > 0)
qinfo.put("columns", columns);
if (includeTitle)
{
name = table.getPublicName();
title = table.getTitle();
}
}
name = table.getPublicName();
title = table.getTitle();
}
}
catch(Exception e)
Expand Down
4 changes: 3 additions & 1 deletion query/src/org/labkey/query/view/linkedSchema.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,9 @@
tablesValue = tables.join(",");
}
return tablesValue;
}
},
includeViewDataUrl: false,
includeTitle: false
}));
tablesCombo.on('change', updateTablesMessage);
tablesCombo.on('dataloaded', updateTablesMessage);
Expand Down