Skip to content
Open
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
2 changes: 1 addition & 1 deletion api/src/org/labkey/api/assay/AbstractAssayProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ public ActionURL linkToStudy(User user, Container assayDataContainer, ExpProtoco
ColumnInfo rowIdColumn = columns.get(objectIdFK);
ColumnInfo runLSIDColumn = columns.get(runLSIDFK);

SQLFragment sql = QueryService.get().getSelectSQL(dataTable, columns.values(), filter, null, Table.ALL_ROWS, Table.NO_OFFSET, false);
SQLFragment sql = QueryService.get().getSelectBuilder(dataTable).columns(columns.values()).filter(filter).buildSqlFragment();

List<Map<String, Object>> dataMaps = new ArrayList<>();
Container sourceContainer = null;
Expand Down
2 changes: 1 addition & 1 deletion api/src/org/labkey/api/data/DataRegion.java
Original file line number Diff line number Diff line change
Expand Up @@ -2128,7 +2128,7 @@ private void renderMultipleUpdateForm(RenderContext ctx, HtmlWriter out)
for (Map.Entry<FieldKey, ColumnInfo> entry : selectKeyMap.entrySet())
{
ColumnInfo col = entry.getValue();
SQLFragment selectSql = service.getSelectSQL(table, Collections.singletonList(col), pkFilter, null, Table.ALL_ROWS, Table.NO_OFFSET, false, queryLogging);
SQLFragment selectSql = service.getSelectBuilder(table).columns(Collections.singletonList(col)).filter(pkFilter).queryLogging(queryLogging).buildSqlFragment();

SQLFragment sql = new SQLFragment("SELECT DISTINCT ").appendIdentifier(col.getAlias()).append(" AS value FROM (");
sql.append(selectSql);
Expand Down
2 changes: 1 addition & 1 deletion api/src/org/labkey/api/data/GroupTableInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public SQLFragment getFromSQL()
sql.append("\nFROM (\n");
TableInfo source = getSourceTable();

sql.append(QueryService.get().getSelectSQL(source, getDistinctColumns(), _sourceFilter, null, Table.ALL_ROWS, Table.NO_OFFSET, false));
sql.append(QueryService.get().getSelectBuilder(source).columns(getDistinctColumns()).filter(_sourceFilter).buildSqlFragment());
sql.append("\n) AS ");
sql.append(ALIAS_SOURCE);

Expand Down
6 changes: 3 additions & 3 deletions api/src/org/labkey/api/data/NestedRenderContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,8 @@ public SimpleFilter buildFilter(TableInfo tinfo, List<ColumnInfo> displayColumns
fromSQL.append(" ) FilterOnly ");

Collection<ColumnInfo> cols = Collections.singletonList(groupColumn);
SQLFragment withoutSort = QueryService.get().getSelectSQL(tinfo, cols, new SimpleFilter(), new Sort(), Table.ALL_ROWS, Table.NO_OFFSET, false);
SQLFragment withSort = QueryService.get().getSelectSQL(tinfo, cols, new SimpleFilter(), groupingSort, Table.ALL_ROWS, Table.NO_OFFSET, false);
SQLFragment withoutSort = QueryService.get().getSelectBuilder(tinfo).columns(cols).buildSqlFragment();
SQLFragment withSort = QueryService.get().getSelectBuilder(tinfo).columns(cols).sort(groupingSort).buildSqlFragment();

// Figure out what the ORDER BY is
String sortSQL = withSort.getSQL().substring(withSort.getSQL().toUpperCase().lastIndexOf("ORDER BY"));
Expand Down Expand Up @@ -205,7 +205,7 @@ private ColumnInfo appendFromSQL(TableInfo tinfo, String dataRegionName, Sort so

// We need to stick the GROUP BY before the ORDER BY. QueryService won't help us generate
// the GROUP BY, so get the query with and without the ORDER BY
SQLFragment withoutSort = QueryService.get().getSelectSQL(tinfo, cols, filter, new Sort(), Table.ALL_ROWS, Table.NO_OFFSET, false);
SQLFragment withoutSort = QueryService.get().getSelectBuilder(tinfo).columns(cols).filter(filter).buildSqlFragment();

sql.append(withoutSort);

Expand Down
2 changes: 1 addition & 1 deletion api/src/org/labkey/api/data/Table.java
Original file line number Diff line number Diff line change
Expand Up @@ -1240,7 +1240,7 @@ public static void truncate(TableInfo table)

public static SQLFragment getSelectSQL(TableInfo table, @Nullable Collection<ColumnInfo> columns, @Nullable Filter filter, @Nullable Sort sort)
{
return QueryService.get().getSelectSQL(table, columns, filter, sort, ALL_ROWS, NO_OFFSET, false);
return QueryService.get().getSelectBuilder(table).columns(columns).filter(filter).sort(sort).buildSqlFragment();
}

public static void ensureRequiredColumns(TableInfo table, Map<FieldKey, ColumnInfo> cols, @Nullable Filter filter, @Nullable Sort sort, @Nullable List<Aggregate> aggregates)
Expand Down
8 changes: 4 additions & 4 deletions api/src/org/labkey/api/data/TableSelector.java
Original file line number Diff line number Diff line change
Expand Up @@ -618,9 +618,9 @@ public SQLFragment getSql()
{
Map<FieldKey, ColumnInfo> map = getDisplayColumnsList(_columns);

// QueryService.getSelectSQL() also calls ensureRequiredColumns, so this call is redundant. However, we
// need to know the actual select columns (e.g., if the caller is building a Results) and getSelectSQL()
// doesn't return them. TODO: Provide a way to return the selected columns from getSelectSQL()
// SelectBuilderImpl.buildSqlFragment() also calls ensureRequiredColumns, so this call is redundant.
// However, we need to know the actual select columns (e.g., if the caller is building a Results)
// and buildSqlFragment() doesn't return them.
Table.ensureRequiredColumns(_table, map, _filter, _sort, null);
_columns = map.values();
}
Expand All @@ -646,7 +646,7 @@ public SQLFragment getSql()
}

int selectMaxRows = (Table.ALL_ROWS == _maxRows || Table.NO_ROWS == _maxRows) ? _maxRows : (int)_scrollOffset + _maxRows + _extraRows;
SQLFragment sql = QueryService.get().getSelectSQL(_table, _columns, _filter, _sort, selectMaxRows, selectOffset, forceSort, getQueryLogging());
SQLFragment sql = QueryService.get().getSelectBuilder(_table).columns(_columns).filter(_filter).sort(_sort).maxRows(selectMaxRows).offset(selectOffset).forceSort(forceSort).queryLogging(getQueryLogging()).buildSqlFragment();

// This is for SAS, which doesn't support a SQL LIMIT syntax, so we must set Statement.maxRows() instead
_statementMaxRows = _table.getSqlDialect().requiresStatementMaxRows() ? selectMaxRows : null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public DataIterator getDataIterator(DataIteratorContext context)
try
{
var select = qs.getSelectBuilder(t).columns(selectCols).filter(_filter);
ResultSet rs = select.select(_parameters, false);
ResultSet rs = select.select(false, _parameters);
return new ResultSetDataIterator(rs, context);
}
catch (QueryParseException x)
Expand Down
25 changes: 11 additions & 14 deletions api/src/org/labkey/api/query/QueryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -259,25 +259,16 @@ default ResultSet select(QuerySchema schema, String sql)
/* strictColumnList requires that query not add any addition columns to the query result */
Results select(QuerySchema schema, String sql, @Nullable Map<String, TableInfo> tableMap, boolean strictColumnList, boolean cached);

/** superseded by {@link QueryService#getSelectBuilder} */
Results selectResults(@NotNull QuerySchema schema, String sql, @Nullable Map<String, TableInfo> tableMap, Map<String, Object> parameters, boolean strictColumnList, boolean cached);

/** superseded by {@link QueryService#getSelectBuilder} */
default Results select(TableInfo table, Collection<ColumnInfo> columns, @Nullable Filter filter, @Nullable Sort sort)
{
return getSelectBuilder(table).columns(columns).filter(filter).sort(sort).select();
}

/** superseded by {@link QueryService#getSelectBuilder} */
Results select(TableInfo table, Collection<ColumnInfo> columns, @Nullable Filter filter, @Nullable Sort sort, Map<String, Object> parameters, boolean cached);

/** superseded by {@link QueryService#getSelectBuilder} */
SQLFragment getSelectSQL(TableInfo table, @Nullable Collection<ColumnInfo> columns, @Nullable Filter filter, @Nullable Sort sort, int maxRows, long offset, boolean forceSort);
/** superseded by {@link QueryService#getSelectBuilder} */
SQLFragment getSelectSQL(TableInfo table, @Nullable Collection<ColumnInfo> columns, @Nullable Filter filter, @Nullable Sort sort, int maxRows, long offset, boolean forceSort, @NotNull QueryLogging queryLogging);

SelectBuilder getSelectBuilder(TableInfo table);
SelectBuilder getSelectBuilder(QuerySchema schema, String sql);
/** Use when the query must not return extra hidden sort columns (e.g. HTTP endpoints that reflect column names to callers). */
SelectBuilder getSelectBuilder(QuerySchema schema, String sql, boolean strictColumnList);

MutableColumnInfo createQueryExpressionColumn(TableInfo table, FieldKey key, String labKeySql, ColumnType columnType);
MutableColumnInfo createQueryExpressionColumn(TableInfo table, FieldKey key, FieldKey wrapped, ColumnType columnType);
Expand Down Expand Up @@ -697,13 +688,19 @@ default SelectBuilder columns(ColumnInfo... cols)
SelectBuilder forceSort(boolean b);
SelectBuilder queryLogging(QueryLogging queryLogging);
SelectBuilder distinct(boolean b);
/** Enable PostgreSQL JDBC-level result buffering. Rarely needed; defaults to false (streaming). */
SelectBuilder jdbcCaching(boolean jdbcCaching);

SQLFragment buildSqlFragment();
SqlSelector buildSqlSelector(@Nullable Map<String, Object> parameters);
Results select(@Nullable Map<String, Object> parameters, boolean cache);
SqlSelector buildSqlSelector();
Results select(boolean labkeyCachedResultSet, @NotNull Map<String, Object> parameters);
default Results select(boolean labkeyCachedResultSet)
{
return select(labkeyCachedResultSet, Map.of());
}
default Results select()
{
return select(Map.of(), true);
return select(true);
}

QueryLogging getQueryLogging();
Expand Down
2 changes: 1 addition & 1 deletion api/src/org/labkey/api/study/assay/SpecimenForeignKey.java
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ public SQLFragment _declareJoinsAssayAndVial(String parentAlias, ColumnInfo fore
// Select all the assay-side specimen columns that we'll need to do the comparison
// TODO ContainerFilter make sure all callers of new SpecimenForeignKey() pass in appropriately constructed _assayDataTable
// ((ContainerFilterable)_assayDataTable).setContainerFilter(foreignKey.getParentTable().getContainerFilter());
SQLFragment targetStudySQL = QueryService.get().getSelectSQL(_assayDataTable, _assayColumns.values(), null, null, Table.ALL_ROWS, Table.NO_OFFSET, false);
SQLFragment targetStudySQL = QueryService.get().getSelectBuilder(_assayDataTable).columns(_assayColumns.values()).buildSqlFragment();
sql.append(targetStudySQL);

String baseAlias = getBaseAlias(parentAlias, foreignKey.getAlias());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ private SQLFragment getPercentNeutralizationInitialDilution()
if (samplesTable != null && samplesTable.getColumn("InitialDilution") != null)
{
List<ColumnInfo> columns = Arrays.asList(samplesTable.getColumn("LSID"), samplesTable.getColumn("InitialDilution"));
SQLFragment samplesSql = QueryService.get().getSelectSQL(samplesTable, columns, null, null, Table.ALL_ROWS, 0, false);
SQLFragment samplesSql = QueryService.get().getSelectBuilder(samplesTable).columns(columns).buildSqlFragment();
return sql.append(" LEFT JOIN (").append(samplesSql).append(" ) x ON x.LSID = ").append(ExprColumn.STR_TABLE_ALIAS + ".SpecimenLsid")
.append(" WHERE dd.RunDataId = ").append(ExprColumn.STR_TABLE_ALIAS + ".RowId")
.append(" AND dd.Dilution = x.InitialDilution)");
Expand Down
4 changes: 2 additions & 2 deletions assay/src/org/labkey/assay/plate/PlateManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -4248,7 +4248,7 @@ private long getReplicateGroupCount(@NotNull UserSchema plateSchema, @NotNull Lo
FROM plate.Well WHERE PlateId.PlateSet.RowId = %s AND ReplicateGroup IS NOT NULL
""", plateSetRowId);

return QueryService.get().getSelectBuilder(plateSchema, labkeySql).buildSqlSelector(null).getRowCount();
return QueryService.get().getSelectBuilder(plateSchema, labkeySql).buildSqlSelector().getRowCount();
}

private String getReplicateGroupLabKeySql(@NotNull UserSchema plateSchema, @NotNull Long plateSetRowId)
Expand Down Expand Up @@ -4349,7 +4349,7 @@ private String getSampleGroupLabKeySql(@NotNull Long plateSetRowId, boolean incl
private long getSampleGroupCount(@NotNull UserSchema plateSchema, @NotNull Long plateSetRowId)
{
String labkeySql = getSampleGroupLabKeySql(plateSetRowId, false);
return QueryService.get().getSelectBuilder(plateSchema, labkeySql).buildSqlSelector(null).getRowCount();
return QueryService.get().getSelectBuilder(plateSchema, labkeySql).buildSqlSelector().getRowCount();
}

private void validatePlateSetSampleGroups(Container container, User user, @NotNull Long plateSetRowId) throws ValidationException
Expand Down
2 changes: 1 addition & 1 deletion assay/src/org/labkey/assay/plate/PlateManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2096,7 +2096,7 @@ private Map<String, Object> getWellRow(long plateRowId, @NotNull String position
return QueryService.get().getSelectBuilder(wellTable)
.columns(getWellTableColumns(wellTable).values())
.filter(filter)
.buildSqlSelector(null)
.buildSqlSelector()
.getMap();
}

Expand Down
4 changes: 2 additions & 2 deletions assay/src/org/labkey/assay/plate/data/WellTriggerFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ private Map<Long, String> getWellTypes(Container container, User user, long plat
UserSchema schema = QueryService.get().getUserSchema(user, container, "plate");
SQLFragment sql = new SQLFragment("SELECT RowId, Type FROM plate.Well WHERE PlateId = ?").add(plateRowId);
QueryService.get().getSelectBuilder(schema, sql.toDebugString())
.buildSqlSelector(null)
.buildSqlSelector()
.forEach(r -> map.put(r.getLong(WellTable.Column.RowId.name()), r.getString(WellTable.Column.Type.name())));

return map;
Expand All @@ -425,7 +425,7 @@ private Map<Long, String> getWellReplicateGroups(Container container, User user,
UserSchema schema = QueryService.get().getUserSchema(user, container, "plate");
SQLFragment sql = new SQLFragment("SELECT RowId, ReplicateGroup FROM plate.Well WHERE PlateId = ?").add(plateRowId);
QueryService.get().getSelectBuilder(schema, sql.toDebugString())
.buildSqlSelector(null)
.buildSqlSelector()
.forEach(r -> map.put(r.getLong(WellTable.Column.RowId.name()), r.getString(WellTable.Column.ReplicateGroup.name())));

return map;
Expand Down
5 changes: 2 additions & 3 deletions core/src/org/labkey/core/query/CoreQuerySchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -779,11 +779,10 @@ public static boolean requiresProfileUpdate(User user)

settings.setBaseFilter(new SimpleFilter(FieldKey.fromParts("UserId"), user.getUserId()));

Map<String, Object> params = Collections.emptyMap();
TableInfo table = schema.getTable(CoreQuerySchema.USERS_TABLE_NAME);

try (Results results = QueryService.get().select(table, table.getColumns(),
new SimpleFilter(FieldKey.fromParts("UserId"), user.getUserId()), null, params, true))
try (Results results = QueryService.get().getSelectBuilder(table).filter(
new SimpleFilter(FieldKey.fromParts("UserId"), user.getUserId())).select(true))
{
if (results.next())
{
Expand Down
2 changes: 1 addition & 1 deletion experiment/src/org/labkey/experiment/api/LineageTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ public void testDeriveDuringImport() throws Exception
"FROM exp.data." + firstDataClassName + " AS dc\n" +
"ORDER BY dc.RowId\n";

try (Results rs = QueryService.get().selectResults(schema, sql, null, null, true, true))
try (Results rs = QueryService.get().getSelectBuilder(schema, sql, true).select())
{
RenderContext ctx = new RenderContext(new ViewContext());
ctx.getViewContext().setRequest(TestContext.get().getRequest());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ private void lineageQueries(String prefix, CPUTimer lineageQuery, CPUTimer linea
"FROM samples.MySamples AS ss\n";

final UserSchema schema = QueryService.get().getUserSchema(_user, _container, "samples");
final TableSelector ts = QueryService.get().selector(schema, sql);
final SqlSelector ts = QueryService.get().getSelectBuilder(schema, sql).buildSqlSelector();

final ExpLineageOptions opt = new ExpLineageOptions();
final ViewBackgroundInfo info = new ViewBackgroundInfo(_container, _user, null);
Expand Down
2 changes: 1 addition & 1 deletion issues/src/org/labkey/issue/model/IssueManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ private static IssueObject _getIssue(@Nullable Container c, User user, int issue
if (table != null)
{
var select = QueryService.get().getSelectBuilder(table).filter(filter);
try (Results rs = select.select(Map.of(), false))
try (Results rs = select.select(false))
{
Map<String, Object> rowMap = new CaseInsensitiveHashMap<>();
if (rs.next())
Expand Down
4 changes: 2 additions & 2 deletions list/src/org/labkey/list/model/ListWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ private void writeLists(List<Pair<String, ListDefinition>> listsToExport, Virtua

// NOTE: TSVGridWriter generates and closes Results

try (TSVGridWriter tsvWriter = new TSVGridWriter(()->QueryService.get().getSelectBuilder(ti).columns(columns).sort(sort).select(null, false), displayColumns))
try (TSVGridWriter tsvWriter = new TSVGridWriter(()->QueryService.get().getSelectBuilder(ti).columns(columns).sort(sort).select(false), displayColumns))
{
tsvWriter.setApplyFormats(false);
tsvWriter.setColumnHeaderType(ColumnHeaderType.ImportField); // Issue 53431
Expand Down Expand Up @@ -292,7 +292,7 @@ private void writeAttachments(TableInfo ti, ListDefinition def, Container c, Vir
List<ColumnInfo> selectColumns = new ArrayList<>(attachmentColumns);
selectColumns.addFirst(ti.getColumn("EntityId"));

try (ResultSet rs = QueryService.get().getSelectBuilder(ti).columns(selectColumns).select(null, false))
try (ResultSet rs = QueryService.get().getSelectBuilder(ti).columns(selectColumns).select(false))
{
while (rs.next())
{
Expand Down
Loading