2020/05/11 - Changes in GraphQL filtering

To make the API more consistent and prevent ambiguous results we have changed how filtering works in some edge cases.

This is a big changeset, but should only affect edge cases and the minority of usages, following all the details.

Changes to item fields

Boolean field
Filtering fields with {eq: null} will return an error message in response payload. Before this change, the filter would have returned always an empty array. You can still retrieve fields with null value using {eq: false}

Color field
Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. You can use {exists: false} from now on.

DateTime field
Filtering fields with, for instance {neq: "2020-04-09T00:00:00+02:00"} will return also items with null values. Before this change, the filter would have returned only for not null values different from 2020-04-09T00:00:00+02:00.

Date field
Filtering fields with, for instance {neq: "2020-04-09"} will return also items with null values. Before this change, the filter would have returned only for not null values different from 2020-04-09.

Upload field

Filtering fields with {eq: null} now has the same effect of using {exists: false}. Before this change, the filter would have returned always an empty array.

Filtering fields with {neq: null} now has the same effect of using {exists: true}. Before this change, the filter would have returned always an empty array.

Filtering fields with, for instance {neq: "123456"} will return also items with null values. Before this change, the filter would have returned only for items with not null uploads ids different from 123456.

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Important: Filtering fields with {in: []} will return an empty collection. Before this change, the request would have returned all items.

Important: Filtering fields with {notIn: []} will return all items. Before this change, the request would have returned an empty collection.

Important: Filtering fields with, for instance {notIn: ["123456"]} will return all items having values different from 123456OR equal to null. Before this change, the request would have returned only items having not nullvalues different from 123456.

Float fields

Filtering fields with, for instance, {neq: "2.42"} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from 2.42.

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Gallery
Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Integer

Filtering fields with, for instance, {neq: "5"} now will return also items with null values. Before this change, the filter would have returned only for items with not null values different from 5.

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

JSON
Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Position (geo points)
Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Link

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Filtering fields with {eq: null} now has the same effect of using {exists: false}. Before this change, the filter would have returned always an empty array.

Filtering fields with {neq: null} now has the same effect of using {exists: true}. Before this change, the filter would have returned always an empty array.

Filtering fields with, for instance, {neq: "123456"} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from 123456.

Important: Filtering fields with {in: []} will return an empty collection. Before this change, the request would have returned all items.

Important: Filtering fields with {notIn: []} will return all items. Before this change, the request would have returned an empty collection.

Filtering fields with, for instance {notIn: ["123456"]} will return all items having values different from 123456OR equal to null. Before this change, the request would have returned only items having not nullvalues different from 123456.

Links
Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Seo
Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Slug

Filtering fields with, for instance, {neq: "foobar"} now will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with, for instance {notIn: ["foobar"]} will return all items having values different from foobarOR equal to null. Before this change, the request would have returned only items having not nullvalues different from foobar.

String

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Filtering fields with {eq: null} now has the same effect of using {exists: false}. Before this change, the filter would have returned always an empty array.

Filtering fields with {neq: null} now has the same effect of using {exists: true}. Before this change, the filter would have returned always an empty array.

Filtering fields with, for instance, {neq: "foobar"} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with, for instance, {notMatches: { pattern: "foobar"}} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with, for instance {notIn: ["foobar"]} will return all items having values different from foobarOR equal to null. Before this change, the request would have returned only items having not nullvalues different from foobar.

Text

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Filtering fields with, for instance, {notMatches: { pattern: "foobar"}} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Video
Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Changes to item metas

ID

Filtering fields with {eq: null} will return an error message in response payload. Before this change, the filter would have returned an empty result.

Filtering fields with {neq: null} will return an error message in response payload. Before this change, the filter would have returned an empty result.

Parent

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Filtering fields with {eq: null} now has the same effect of using {exists: false}. Before this change, the filter would have returned always an empty array.

Position
Filtering fields with, for instance, {neq: 3} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from 3.

Status

Filtering fields with {eq: null} will return an error message in response payload. Before this change, the filter would have returned an empty result.

Filtering fields with {neq: null} will return an error message in response payload. Before this change, the filter would have returned an empty result.

Changes to Upload fields

Alt, Title

Added exist filter.

Filtering fields with {eq: null} now has the same effect of using {exists: false}. Before this change, the filter would have returned always an empty array.

Filtering fields with {neq: null} now has the same effect of using {exists: true}. Before this change, the filter would have returned always an empty array.

Filtering fields with, for instance, {neq: "foobar"} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with, for instance, {notMatches: { pattern: "foobar"}} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with, for instance {notIn: ["foobar"]} will return all items having values different from foobarOR equal to null. Before this change, the request would have returned only items having not null values different from foobar.

Author

Filtering fields with, for instance, {notMatches: { pattern: "foobar"}} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Copyright

Filtering fields with, for instance, {notMatches: { pattern: "foobar"}} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Format
Filtering fields with {eq: null}, {neq: null}, will now return an error message in response payload. Before this change, the request would have return an empy collection.

Height, Width
Filtering fields with, for instance, {neq: "500"} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from 500.

ID
Filtering fields with {eq: null}, {neq: null}, will now return an error message in response payload. Before this change, the request would have return an empy collection.

InUse
Filtering fields with {eq: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {eq: false}. You can use {eq: false} from now on.

MimeType
Filtering fields with {eq: null}, {neq: null}, will now return an error message in response payload. Before this change, the request would have return an empy collection.

Notes

Filtering fields with, for instance, {notMatches: { pattern: "foobar"}} will return also items with null values. Before this change, the filter would have returned only for items with not null values different from foobar.

Filtering fields with {exists: null} will return an error message in response payload. Before this change, the filter would have returned the same result as {exists: false}. Please, use {exists: false} instead.

Size
Filtering fields with {eq: null}, {neq: null}, will now return an error message in response payload. Before this change, the request would have return an empy collection.

SmartTags, Tags
Filtering fields with {contains: null}, will now return an error message in response payload. Before this change, the request would have return an empy collection.