Allow queries to send parameters inside the body. #258
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Some services don't allow large URLs (e.g. AWS when using ALBs has an 8k limit on the URL path), and since Ch always encodes params in the path, sending a large params payload causes them to reject the request.
This PR addresses this by accepting a new option
:interpolate_params
inCh.query/4
which replaces the Clickhouse param placeholders with the properly encoded parameters. This is done by switching the placeholder for a casting expression using::
, so the return types are kept. Map types are a strange case so they are handled slightly differently. I also added a test for nested maps to ensure it works as intended.To test this implementation, the best way to do it right now is to alter the conditions where the option is checked and run the tests. They all pass. If preferred, I can add a setting to optionally add this option to all queries or extra tests for this implementation, though for this to be worth it all queries should be tried with and without the option in my opinion.