Phase 2: Write metadata tables (projects, file_hashes, summaries, sqlite_sequence). */
| 1847 | |
| 1848 | /* Phase 2: Write metadata tables (projects, file_hashes, summaries, sqlite_sequence). */ |
| 1849 | static void write_metadata_tables(write_db_ctx_t *w, uint32_t *projects_root, |
| 1850 | uint32_t *file_hashes_root, uint32_t *summaries_root, |
| 1851 | uint32_t *sqlite_seq_root) { |
| 1852 | int proj_rec_len; |
| 1853 | uint8_t *proj_rec = |
| 1854 | build_project_record(w->project, w->indexed_at, w->root_path, &proj_rec_len); |
| 1855 | const uint8_t *proj_recs[] = {proj_rec}; |
| 1856 | int proj_lens[] = {proj_rec_len}; |
| 1857 | int64_t proj_rowids[] = {FIRST_ROWID}; |
| 1858 | *projects_root = |
| 1859 | write_table_btree(w->fp, &w->next_page, proj_recs, proj_lens, proj_rowids, SKIP_ONE, false); |
| 1860 | free(proj_rec); |
| 1861 | |
| 1862 | *file_hashes_root = write_table_btree(w->fp, &w->next_page, NULL, NULL, NULL, 0, false); |
| 1863 | *summaries_root = write_table_btree(w->fp, &w->next_page, NULL, NULL, NULL, 0, false); |
| 1864 | |
| 1865 | RecordBuilder r1; |
| 1866 | RecordBuilder r2; |
| 1867 | rec_init(&r1); |
| 1868 | rec_add_text(&r1, "nodes"); |
| 1869 | rec_add_int(&r1, w->node_count > 0 ? w->nodes[w->node_count - SKIP_ONE].id : 0); |
| 1870 | int seq1_len; |
| 1871 | uint8_t *seq1 = rec_finalize(&r1, &seq1_len); |
| 1872 | rec_free(&r1); |
| 1873 | |
| 1874 | rec_init(&r2); |
| 1875 | rec_add_text(&r2, "edges"); |
| 1876 | rec_add_int(&r2, w->edge_count > 0 ? w->edges[w->edge_count - SKIP_ONE].id : 0); |
| 1877 | int seq2_len; |
| 1878 | uint8_t *seq2 = rec_finalize(&r2, &seq2_len); |
| 1879 | rec_free(&r2); |
| 1880 | |
| 1881 | const uint8_t *seq_recs[] = {seq1, seq2}; |
| 1882 | int seq_lens[] = {seq1_len, seq2_len}; |
| 1883 | int64_t seq_rowids[] = {FIRST_ROWID, FIRST_DATA_PAGE}; |
| 1884 | *sqlite_seq_root = |
| 1885 | write_table_btree(w->fp, &w->next_page, seq_recs, seq_lens, seq_rowids, PAIR_LEN, false); |
| 1886 | free(seq1); |
| 1887 | free(seq2); |
| 1888 | } |
| 1889 | |
| 1890 | /* Write the SQLite file header on page 1 with master entries. */ |
| 1891 | static void write_sqlite_file_header(uint8_t *page1, uint32_t total_pages) { |
no test coverage detected