-
Notifications
You must be signed in to change notification settings - Fork 57
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
fix: postgres_driver.nim: restrict getMessages prepared stmt to query with 1 content topic #2296
fix: postgres_driver.nim: restrict getMessages prepared stmt to query with 1 content topic #2296
Conversation
… 1 content topic Before this commit, the following execution of a prepared statement returned nothing even though the database had 2 rows to be returned: nwaku-db-1 | 2023-12-14 12:55:17.575 UTC [73] LOG: execute SelectWithoutCursorAsc: SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages nwaku-db-1 | WHERE contentTopic IN ($1) AND nwaku-db-1 | pubsubTopic = $2 AND nwaku-db-1 | storedAt >= $3 AND nwaku-db-1 | storedAt <= $4 nwaku-db-1 | ORDER BY storedAt ASC LIMIT $5; nwaku-db-1 | 2023-12-14 12:55:17.575 UTC [73] DETAIL: parameters: $1 = 'my/ctopic/1,my/ctopic/2', $2 = '/waku/2/default-waku/proto', $3 = '1702552968570786800', $4 = '1702552968585347557', $5 = '101' The reason is that not returning anything is that the 'IN' statement doesn't work when using prepared statements. It only works when the 'IN' content, i.e. $1, contains one single item.
This PR may contain changes to database schema of one of the drivers. If you are introducing any changes to the schema, make sure the upgrade from the latest release to this change passes without any errors/issues. Please make sure the label |
You can find the image built from this PR at
Built from 744dcdb |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yepp, this is good for quick fixing that issue!
Was wondering what way an array of strings could be passed... but seems nim wrapper over libpq does only support passing a string array as for all statement arguments. Sorry for that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks! 🤩
Can we include a unit test for this? |
… 1 content topic (#2296) Before this commit, the following execution of a prepared statement returned nothing even though the database had 2 rows to be returned: nwaku-db-1 | 2023-12-14 12:55:17.575 UTC [73] LOG: execute SelectWithoutCursorAsc: SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages nwaku-db-1 | WHERE contentTopic IN ($1) AND nwaku-db-1 | pubsubTopic = $2 AND nwaku-db-1 | storedAt >= $3 AND nwaku-db-1 | storedAt <= $4 nwaku-db-1 | ORDER BY storedAt ASC LIMIT $5; nwaku-db-1 | 2023-12-14 12:55:17.575 UTC [73] DETAIL: parameters: $1 = 'my/ctopic/1,my/ctopic/2', $2 = '/waku/2/default-waku/proto', $3 = '1702552968570786800', $4 = '1702552968585347557', $5 = '101' The reason why it is not returning anything is that the 'IN' statement doesn't work when using prepared statements with multiple items. It only works when the 'IN' content, i.e. $1, contains one single item.
Description
Before this commit, the following execution of a prepared statement returned nothing even though the database had 2 rows to be returned:
The reason why it is not returning anything is that the 'IN' statement doesn't work when using prepared statements with multiple items. It only works when the 'IN' content, i.e. $1, contains one single item.
Issue
closes #2288