array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

array_type_field_filter: Add new contains filter to search on Array type field - #460

Merged
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter
Oct 6, 2020
Merged

array_type_field_filter: Add new contains filter to search on Array type field#460
bajtos merged 4 commits into
loopbackio:masterfrom
shubhisood:array_type_field_filter

Conversation

@shubhisood

@shubhisoodshubhisood commented Sep 4, 2020

Copy link
Copy Markdown
Contributor
  • Adds new filter named as contains.
  • This filter will search on Array type fields in Postgres DB.

Include references to all related GitHub issues and other pull requests, for example:

Fixes#342

Checklist

  • DCO (Developer Certificate of Origin) signed in all commits
  • npm test passes on your machine
  • New tests added or existing tests modified to cover all changes
  • Code conforms with the style guide
  • Commit messages are following our guidelines

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from 5a5d62f to 7566064CompareSeptember 5, 2020 04:26
@bajtosbajtos added community-contribution Patches contributed by community feature labels Sep 7, 2020
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch 2 times, most recently from c3f9a69 to 1fcf79aCompareSeptember 14, 2020 16:37
Comment threadtest/postgresql.test.js Outdated
});

it('should support where filter for array type field', function(done) {
Post.dataSource.settings.allowExtendedOperators = true;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After adding this we do not need juggler related PR.
PFB PR Link:
loopbackio/loopback-datasource-juggler#1865

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 1fcf79a to 17f56b7CompareSeptember 14, 2020 17:46

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how it's possible to implement your desired feature inside the connector only 👍

I have few comments on implementation details, PTAL above.

Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings).

Comment threadtest/postgresql.test.js Outdated
Comment threadtest/postgresql.test.js Outdated
categories: {'@>': ['AA']},
},
]}}, function(err, post) {
should.not.exist(err);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
should.not.exist(err);
if(err)returndone(err);

That way the original error details and the stack trace is preserved.

@shubhisoodshubhisoodSep 15, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How we would be handling this with async await type test case? @bajtos
I was thinking to write test case this way for handling failure of testcase with proper details.

it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;try{constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);}catch(err){should.not.exist(err);}});

Please tell me if it is correct, I will update current test case in this way only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a rule of thumb, the tests should pass any unexpected error to the test runner:

  • Use done(err) when using callback
  • Use regular error propagation when using async functions
it('should support where filter for array type field',async()=>{Post.dataSource.settings.allowExtendedOperators=true;constpost=awaitPost.find({where: {categories: {'contains': ['AA']},}});should.exist(post);post.length.should.equal(1);});

Comment threadtest/postgresql.test.js Outdated
Comment threadlib/postgresql.js Outdated
@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from 17f56b7 to ecf676cCompareSeptember 15, 2020 17:53

@bajtosbajtos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new version looks pretty good.

  1. Please change the commit message to use the new operator name

  2. Please add a new section to README to explain what extended operators are supported (e.g. @>) and what is needed to allow the app to use them (set allowExtendedOperators in model and/or datasource settings). Put yourself in the shoes of other LoopBack users - where would you look for information about contains operator and what info would you want to see to help you understand how to use this feature in your app?

@shubhisood
shubhisoodforce-pushed the array_type_field_filter branch from ecf676c to 5fc5d1eCompareSeptember 21, 2020 09:09
@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

@bajtos Thanks for review..

For Point#1 I have done the update.
For Point#2, I have following queries:

  • In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

@bajtos

Copy link
Copy Markdown
Member

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@shubhisood

shubhisood commented Sep 21, 2020

Copy link
Copy Markdown
ContributorAuthor

In which section of readme should I add this operator, As in current readme I couldn't find currently supported operators of postgres in this connector.

That's a good question. I believe the postgres connector so far supports only built-in LoopBack operators supported by all (or most?) connectors, so there was no need to explicitly list extended operators.

Now that you are implementing the first extended operator, I think you should simply add a new section. You can draw inspiration from MongoDB connector README:

  • The section Additional properties mentions the configuration setting allowExtendedOperators and the extended operators unlocked by this option
  • The section Update operators adds more details

In the case of PostgreSQL and your new contains operator, we can either call the section something like Query operators or perhaps a more generic Extended operators.

@bajtos Added the readme section for the new contains operator, Can you review it...

Implement support for an extended operator `contains` that can
be used to filter records that have an array property containing
the selected items.
Signed-off-by: shubhisood <shubhi.sood@sourcefuse.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from d8be8fc to 55c1003CompareOctober 6, 2020 09:35
@bajtos

Copy link
Copy Markdown
Member

Thank you @shubhisood for the update. I pushed few more commits to fix the failing builds and improve README content. Let's wait for CI results before landing.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Array properties are represented as juggler `List` instance, we need
to modify test assertions to convert them via `toArray()` before
applying `.should.eql` check.
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
@bajtos
bajtosforce-pushed the array_type_field_filter branch from 55c1003 to 8f2da81CompareOctober 6, 2020 09:44
@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos

Copy link
Copy Markdown
Member

@slnode test please

@bajtos
bajtos merged commit dfb394b into loopbackio:masterOct 6, 2020
@bajtos

Copy link
Copy Markdown
Member

Landed, thank you @shubhisood for the contribution ❤️

@shubhisood

Copy link
Copy Markdown
ContributorAuthor

Landed, thank you @shubhisood for the contribution

Thanks for merging @bajtos

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contributionPatches contributed by communityfeature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Malformed Array Literal

2 participants

@shubhisood@bajtos