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
99 changes: 97 additions & 2 deletions api/src/org/labkey/api/data/CompareType.java
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,39 @@ protected Collection getCollectionParam(Object value)
* <xsd:enumeration value="arrayisempty"/>
* <xsd:enumeration value="arrayisnotempty"/>
*/


public static final CompareType ARRAY_IS_EMPTY = new CompareType("Is Empty", "arrayisempty", "ARRAYISEMPTY", false, null, OperatorType.ARRAYISEMPTY)
{
@Override
public ArrayIsEmptyClause createFilterClause(@NotNull FieldKey fieldKey, Object value)
{
return new ArrayIsEmptyClause(fieldKey);
}

@Override
public boolean meetsCriteria(ColumnRenderProperties col, Object value, Object[] filterValues)
{
throw new UnsupportedOperationException("Conditional formatting not yet supported for Multi Choices");
}
};


public static final CompareType ARRAY_IS_NOT_EMPTY = new CompareType("Is Not Empty", "arrayisnotempty", "ARRAYISNOTEMPTY", false, null, OperatorType.ARRAYISNOTEMPTY)
{
@Override
public ArrayIsEmptyClause createFilterClause(@NotNull FieldKey fieldKey, Object value)
{
return new ArrayIsNotEmptyClause(fieldKey);
}

@Override
public boolean meetsCriteria(ColumnRenderProperties col, Object value, Object[] filterValues)
{
throw new UnsupportedOperationException("Conditional formatting not yet supported for Multi Choices");
}
};

public static final CompareType ARRAY_CONTAINS_ALL = new CompareType("Contains All", "arraycontainsall", "ARRAYCONTAINSALL", true, null, OperatorType.ARRAYCONTAINSALL)
{
@Override
Expand Down Expand Up @@ -934,7 +967,7 @@ public String getValueSeparator()

public static abstract class ArrayClause extends SimpleFilter.MultiValuedFilterClause
{
public static final String ARRAY_VALUE_SEPARATOR = ",";
public static final String ARRAY_VALUE_SEPARATOR = ";";

public ArrayClause(@NotNull FieldKey fieldKey, CompareType comparison, Collection<?> params, boolean negated)
{
Expand All @@ -958,7 +991,7 @@ public SQLFragment[] getParamSQLFragments(SqlDialect dialect)
}

for (int i = 0; i < params.length; i++)
fragments[i] = new SQLFragment().append(escapeLabKeySqlValue(params[i], type));
fragments[i] = SQLFragment.unsafe(escapeLabKeySqlValue(params[i], type));

return fragments;
}
Expand All @@ -981,6 +1014,68 @@ public Pair<SQLFragment, SQLFragment> getSqlFragments(Map<FieldKey, ? extends Co

}

private static class ArrayIsEmptyClause extends ArrayClause
{
public ArrayIsEmptyClause(@NotNull FieldKey fieldKey, CompareType comparison, boolean negated)
{
super(fieldKey, comparison, null, negated);
}

public ArrayIsEmptyClause(@NotNull FieldKey fieldKey)
{
this(fieldKey, CompareType.ARRAY_IS_EMPTY, false);
}

@Override
public SQLFragment toSQLFragment(Map<FieldKey, ? extends ColumnInfo> columnMap, SqlDialect dialect)
{
ColumnInfo colInfo = columnMap != null ? columnMap.get(_fieldKey) : null;
var alias = SimpleFilter.getAliasForColumnFilter(dialect, colInfo, _fieldKey);

SQLFragment columnFragment = new SQLFragment().appendIdentifier(alias);

SQLFragment sql = dialect.array_is_empty(columnFragment);
if (!_negated)
return sql;
return new SQLFragment(" NOT (").append(sql).append(")");
}

@Override
public String getLabKeySQLWhereClause(Map<FieldKey, ? extends ColumnInfo> columnMap)
{
return "array_is_empty(" + getLabKeySQLColName(_fieldKey) + ")";
}

@Override
public void appendFilterText(StringBuilder sb, ColumnNameFormatter formatter)
{
sb.append("is empty");
}

}

private static class ArrayIsNotEmptyClause extends ArrayIsEmptyClause
{

public ArrayIsNotEmptyClause(@NotNull FieldKey fieldKey)
{
super(fieldKey, CompareType.ARRAY_IS_NOT_EMPTY, true);
}

@Override
public String getLabKeySQLWhereClause(Map<FieldKey, ? extends ColumnInfo> columnMap)
{
return "NOT array_is_empty(" + getLabKeySQLColName(_fieldKey) + ")";
}

@Override
public void appendFilterText(StringBuilder sb, ColumnNameFormatter formatter)
{
sb.append("is not empty");
}

}

private static class ArrayContainsAllClause extends ArrayClause
{

Expand Down
Loading