perf: optimize SQL editor for large files and fix tab switching bugs#35
Merged
perf: optimize SQL editor for large files and fix tab switching bugs#35
Conversation
Performance: - Rewrite SQLContextAnalyzer to use NSString UTF-16 ops (fixes 100% CPU on 40MB files) - Add local window extraction in CompletionEngine for large docs (>500K chars) - Early-exit in extractQueryAtCursor — stop scanning once cursor's statement found - Batch @published tab mutations to reduce SwiftUI update cycles - Replace O(n) Swift String ops with O(1) NSString in auto-pairing, import, export - Skip persistence for queries >500KB to prevent UserDefaults freeze - Add SyntaxHighlighter reentrancy guard to prevent didProcessEditing loop - LineNumberView draw() uses layout manager fragments instead of line cache Bug fixes: - Fix queryTextBinding writing to wrong tab during tab switch (use tab ID lookup) - Fix SQL file open showing old tab content (desync version counter on tab switch) - Fix current line highlight ghost on persisted tabs (clip to dirty rect, init tracking) - Open SQL files from Finder while connected
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2c81008e69
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… string/comment overlap - EditorCoordinator: capture self.textView (weak) in debounced Task instead of strongly capturing the local textView from the notification, avoiding stale reference and stale selectedRange after 100ms delay - SyntaxHighlighter: check full range intersection against stringOrCommentIndices instead of only the start position, correctly detecting keywords that partially overlap string/comment regions
15 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.
Summary
Performance Optimizations
SQLContextAnalyzerto use NSString UTF-16 character-at-index ops instead of O(n²) Swift String index operationsCompletionEnginefor documents >500K UTF-16 unitsextractQueryAtCursor— stop scanning once the cursor's statement is found instead of parsing the entire file@Publishedtab array mutations (isExecuting, executionTime, errorMessage) into single writes to reduce SwiftUI update cyclesSyntaxHighlighterreentrancy guard to preventdidProcessEditingloopLineNumberViewdraw() enumerates layout manager line fragments (O(visible lines)) instead of iterating full line cacheBug Fixes
queryTextBindingwriting to wrong tab during tab switch by using tab ID lookup instead ofselectedTabIndexhandleTabSwitchto force text view syncTest plan