Fix whitespace normalization to preserve SQL quoted strings in ERB templates#21
Closed
Fix whitespace normalization to preserve SQL quoted strings in ERB templates#21
Conversation
…mplates The previous implementation of prepare_query used a simple regex to normalize whitespace, which incorrectly modified content inside SQL quoted strings when preparing queries for logs. This caused issues with multiline ERB templates where string literals could be corrupted. Changes: - Refactored prepare_query to render ERB first, then normalize whitespace - Added regex pattern to match quoted strings and preserve their content - Only whitespace outside of quotes is normalized to single spaces - Simplified test database configuration to use consistent postgres setup - Added test coverage for multiline ERB templates with quoted strings This fix ensures that SQL string literals remain intact while still providing clean, single-line output for logging purposes.
- Replace Perl-style backreference $1 with ::Regexp.last_match(1) - Remove extra spacing before inline comment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Problem
The
prepared_for_logsmethod (used for logging SQL queries) was incorrectly normalizing whitespace inside SQL quoted strings. The previous implementation inprepare_queryused a simple regex patterngsub(/(\n|\s)+/, ' ')that would:<% ... %>)This caused issues with complex ERB templates that use multiline Ruby code blocks or contain SQL string literals with intentional whitespace.
Solution
This PR refactors the
prepare_querymethod to:'...'"..."The new pattern
/'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|(\s+)/properly handles:Changes
prepare_querymethod with improved whitespace handlingWhy This Matters
This fix is critical because:
Testing
All existing tests pass, plus new tests verify: