Phase 2: Write metadata tables (projects, file_hashes, summaries, sqlite_sequence). */
| 1770 | |
| 1771 | /* Phase 2: Write metadata tables (projects, file_hashes, summaries, sqlite_sequence). */ |
| 1772 | static void write_metadata_tables(write_db_ctx_t *w, uint32_t *projects_root, |
| 1773 | uint32_t *file_hashes_root, uint32_t *summaries_root, |
| 1774 | uint32_t *sqlite_seq_root) { |
| 1775 | int proj_rec_len; |
| 1776 | uint8_t *proj_rec = |
| 1777 | build_project_record(w->project, w->indexed_at, w->root_path, &proj_rec_len); |
| 1778 | const uint8_t *proj_recs[] = {proj_rec}; |
| 1779 | int proj_lens[] = {proj_rec_len}; |
| 1780 | int64_t proj_rowids[] = {FIRST_ROWID}; |
| 1781 | *projects_root = |
| 1782 | write_table_btree(w->fp, &w->next_page, proj_recs, proj_lens, proj_rowids, SKIP_ONE, false); |
| 1783 | free(proj_rec); |
| 1784 | |
| 1785 | *file_hashes_root = write_table_btree(w->fp, &w->next_page, NULL, NULL, NULL, 0, false); |
| 1786 | *summaries_root = write_table_btree(w->fp, &w->next_page, NULL, NULL, NULL, 0, false); |
| 1787 | |
| 1788 | RecordBuilder r1; |
| 1789 | RecordBuilder r2; |
| 1790 | rec_init(&r1); |
| 1791 | rec_add_text(&r1, "nodes"); |
| 1792 | rec_add_int(&r1, w->node_count > 0 ? w->nodes[w->node_count - SKIP_ONE].id : 0); |
| 1793 | int seq1_len; |
| 1794 | uint8_t *seq1 = rec_finalize(&r1, &seq1_len); |
| 1795 | rec_free(&r1); |
| 1796 | |
| 1797 | rec_init(&r2); |
| 1798 | rec_add_text(&r2, "edges"); |
| 1799 | rec_add_int(&r2, w->edge_count > 0 ? w->edges[w->edge_count - SKIP_ONE].id : 0); |
| 1800 | int seq2_len; |
| 1801 | uint8_t *seq2 = rec_finalize(&r2, &seq2_len); |
| 1802 | rec_free(&r2); |
| 1803 | |
| 1804 | const uint8_t *seq_recs[] = {seq1, seq2}; |
| 1805 | int seq_lens[] = {seq1_len, seq2_len}; |
| 1806 | int64_t seq_rowids[] = {FIRST_ROWID, FIRST_DATA_PAGE}; |
| 1807 | *sqlite_seq_root = |
| 1808 | write_table_btree(w->fp, &w->next_page, seq_recs, seq_lens, seq_rowids, PAIR_LEN, false); |
| 1809 | free(seq1); |
| 1810 | free(seq2); |
| 1811 | } |
| 1812 | |
| 1813 | /* Write the SQLite file header on page 1 with master entries. */ |
| 1814 | static void write_sqlite_file_header(uint8_t *page1, uint32_t total_pages) { |
no test coverage detected