Forge
csharp72c0d4fb
1using System.Globalization;
2using Microsoft.Data.Sqlite;
3
4namespace HybridCodebaseIndex.Core;
5
6internal static partial class SqliteFtsIndex
7{
8 // Bump when on-disk schema changes in a non-backward-compatible way.
9 internal const int FormatVersion = 2;
10
11 private static void InitEmptyIndex(SqliteConnection conn, string workspaceRoot)
12 {
13 void Exec(string sql)
14 {
15 using var c = conn.CreateCommand();
16 c.CommandText = sql;
17 c.ExecuteNonQuery();
18 }
19
20 Exec("PRAGMA journal_mode=WAL;");
21 Exec("""
22 CREATE TABLE meta(
23 key TEXT PRIMARY KEY,
24 value TEXT
25 );
26 """);
27 Exec("""
28 CREATE VIRTUAL TABLE chunks USING fts5(
29 path,
30 extension UNINDEXED,
31 line_start UNINDEXED,
32 line_end UNINDEXED,
33 body,
34 tokenize='unicode61 remove_diacritics 1'
35 );
36 """);
37
38 using (var ins = conn.CreateCommand())
39 {
40 ins.CommandText = """
41 INSERT INTO meta(key,value) VALUES('format_version', $v);
42 """;
43 ins.Parameters.AddWithValue("$v", FormatVersion.ToString(CultureInfo.InvariantCulture));
44 ins.ExecuteNonQuery();
45 }
46
47 using (var ins = conn.CreateCommand())
48 {
49 ins.CommandText = """
50 INSERT INTO meta(key,value) VALUES('indexed_at', $ts);
51 """;
52 ins.Parameters.AddWithValue("$ts", DateTime.UtcNow.ToString("O", CultureInfo.InvariantCulture));
53 ins.ExecuteNonQuery();
54 }
55
56 using (var ins = conn.CreateCommand())
57 {
58 ins.CommandText = """
59 INSERT INTO meta(key,value) VALUES('workspace_root', $wr);
60 """;
61 ins.Parameters.AddWithValue("$wr", workspaceRoot);
62 ins.ExecuteNonQuery();
63 }
64 }
65
66 // (moved) SearchAsync/Search/ExplainHitAsync/ExplainHit/BuildMatchQuery live in SqliteFtsIndex.Query.cs
67}
68
View only · write via MCP/CIDE