Skip to content
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

Support for overlaps json operator #570

Open
3 tasks
arnaud16571542 opened this issue Jun 23, 2023 · 0 comments
Open
3 tasks

Support for overlaps json operator #570

arnaud16571542 opened this issue Jun 23, 2023 · 0 comments
Labels

Comments

@arnaud16571542
Copy link

arnaud16571542 commented Jun 23, 2023

Suggestion

The connector support the "contains" json/array operator. This operator select rows which contain ALL value in the array.
I propose the support the "overlaps" json/array operator. This operator select rown which contain ANY value in the array.

Use Cases

With this feature, you will be able to use the JSON Array [array operator &&] operator from PostgreSQL(https://www.postgresql.org/docs/current/functions-array.html).

Examples

Row 1: [ A, B]
Row 2: [C, D]
Row 3: [E, A, B ]
Look for any row which overlaps with [C, F] => Should return Row 2

Acceptance criteria

  • Doc
  • Test
  • Code

It is very easy to implement. Unfortunately, I don't know how to use correctly GitHub for PR. So, I can provide code, and i hope someone will be able to PR it.

/test/postgresql.test.js line 294 -------------

 it('should support the "overlaps" where filter for array type field', async () => {
    await Post.create({
      title: 'Overlaps: LoopBack Participates in Hacktoberfest',
      categories: ['OL_LoopBack', 'OL_Announcements'],
    });
    await Post.create({
      title: 'Overlaps: Growing LoopBack Community',
      categories: ['OL_LoopBack', 'OL_Community'],
    });

    const found = await Post.find({where: {and: [
      {
        categories: {'overlaps': ['OL_Super', 'OL_Community']},
      },
    ]}});
    found.map(p => p.title).should.deepEqual(['Overlaps: Growing LoopBack Community']);
  });

/lib/postgresql.js, line 553 ------------------------------------------------------

case 'overlaps':
  return new ParameterizedSQL(columnName + ' && array[' + operatorValue.map(() => '?') + ']::'
    + propertyDefinition.postgresql.dataType,
  operatorValue);
case 'contains':
  return new ParameterizedSQL(columnName + ' @> array[' + operatorValue.map(() => '?') + ']::'
    + propertyDefin

README.md line 601---------------------------------------------------

Operator overlaps
The overlaps operator allow you to query array properties and pick only
rows where the stored value contains any of the items specified by the query.
The operator is implemented using PostgreSQL array operator &&.
Note The fields you are querying must be setup to use the postgresql array data type - see Defining models above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant