Detect which tables are needed from a SQL query. Returns a 3-tuple: (claude_tables, git_tables, code_tables).
(query: &str)
| 762 | /// |
| 763 | /// Returns a 3-tuple: (claude_tables, git_tables, code_tables). |
| 764 | pub fn detect_tables(query: &str) -> (Vec<String>, Vec<String>, Vec<String>) { |
| 765 | let query_upper = query.to_uppercase(); |
| 766 | |
| 767 | let claude_tables = [ |
| 768 | "history", |
| 769 | "jhistory", |
| 770 | "codex_history", |
| 771 | "transcripts", |
| 772 | "sessions", |
| 773 | "todos", |
| 774 | "stats", |
| 775 | ]; |
| 776 | let git_tables = [ |
| 777 | "commits", |
| 778 | "commit_parents", |
| 779 | "branches", |
| 780 | "tags", |
| 781 | "refs", |
| 782 | "stashes", |
| 783 | "reflog", |
| 784 | "diffs", |
| 785 | "diff_files", |
| 786 | "blame", |
| 787 | "config", |
| 788 | "remotes", |
| 789 | "submodules", |
| 790 | "status", |
| 791 | "worktrees", |
| 792 | "hooks", |
| 793 | "notes", |
| 794 | ]; |
| 795 | let code_tables = [ |
| 796 | "source_files", |
| 797 | "source_lines", |
| 798 | "symbols", |
| 799 | "imports", |
| 800 | "ast_nodes", |
| 801 | ]; |
| 802 | |
| 803 | let needed_claude: Vec<String> = claude_tables |
| 804 | .iter() |
| 805 | .filter(|t| query_mentions_table(&query_upper, t)) |
| 806 | .map(|s| s.to_string()) |
| 807 | .collect(); |
| 808 | |
| 809 | let needed_git: Vec<String> = git_tables |
| 810 | .iter() |
| 811 | .filter(|t| query_mentions_table(&query_upper, t)) |
| 812 | .map(|s| s.to_string()) |
| 813 | .collect(); |
| 814 | |
| 815 | let needed_code: Vec<String> = code_tables |
| 816 | .iter() |
| 817 | .filter(|t| query_mentions_table(&query_upper, t)) |
| 818 | .map(|s| s.to_string()) |
| 819 | .collect(); |
| 820 | |
| 821 | (needed_claude, needed_git, needed_code) |