Repository navigation
perf(editor): linear line counting and no per-dollar allocations in SqlStatementSplitter - #1399
Merged
Merged
Conversation
…Splitter Statement lines are counted incrementally from the previous statement start instead of rescanning from the top of the script, and dollar quote tags are matched with one static RegExp at the current offset instead of copying the rest of the script into a substring on every dollar sign. Part of #1350.
3 tasks
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.
Part of #1350
Problem
SqlStatementSplitter.spansrecounted newlines from offset 0 for every statement (O(N*M)) and, on every$, copied the rest of the script withsql.substring(i)and compiled a newRegExp.Change
(offset, line)pair and counts newlines from the previous start. One pass in total;SqlStatementSpan.lineis unchanged.static final RegExp, matched withmatchAsPrefix(sql, i)(no^, no substring).Tests
Added to
sql_statement_splitter_test.dart: exact line numbers over 5000 statements, newline counting with blank lines, a dollar quote far into the script, and$1/$2parameters not taken for quotes. Existing tests cover the rest.Not in this PR
Point 3 of the issue (moving the split to an isolate above 64 KB) changes the call sites in
GenericSqlWorkspaceand is left for a separate PR; with the two fixes above the split is a single linear pass.Not run locally; CI is the check.