@@ -3,6 +3,7 @@ package repository
33import (
44 "database/sql"
55 "fmt"
6+ "runtime"
67 "strings"
78 "time"
89
@@ -11,6 +12,28 @@ import (
1112 "codebase-indexer/pkg/logger"
1213)
1314
15+ // getCallerInfo 获取调用者信息(跳过指定层数的调用栈)
16+ func getCallerInfo (skip int ) string {
17+ pc , file , line , ok := runtime .Caller (skip )
18+ if ! ok {
19+ return "unknown"
20+ }
21+ fn := runtime .FuncForPC (pc )
22+ funcName := "unknown"
23+ if fn != nil {
24+ funcName = fn .Name ()
25+ // 只保留函数名,去掉包路径
26+ if idx := strings .LastIndex (funcName , "/" ); idx != - 1 {
27+ funcName = funcName [idx + 1 :]
28+ }
29+ }
30+ // 只保留文件名,去掉路径
31+ if idx := strings .LastIndex (file , "/" ); idx != - 1 {
32+ file = file [idx + 1 :]
33+ }
34+ return fmt .Sprintf ("%s:%d %s" , file , line , funcName )
35+ }
36+
1437// EventRepository 事件数据访问层
1538type EventRepository interface {
1639 // CreateEvent 创建事件
@@ -49,6 +72,8 @@ type EventRepository interface {
4972 BatchCreateEvents (events []* model.Event ) error
5073 // BatchDeleteEvents 批量删除事件
5174 BatchDeleteEvents (ids []int64 ) error
75+ // BatchUpdateEvents 批量更新事件(用于文件变更检测时的批量状态更新)
76+ BatchUpdateEvents (events []* model.Event ) error
5277 // UpdateEvents 批量更新事件嵌入信息
5378 UpdateEventsEmbedding (events []* model.Event ) error
5479 // UpdateEventsEmbeddingStatus 批量更新事件嵌入状态
@@ -83,6 +108,11 @@ func (r *eventRepository) CreateEvent(event *model.Event) error {
83108 `
84109
85110 nowTime := time .Now ()
111+
112+ // 写数据库前打印调用者信息
113+ caller := getCallerInfo (2 )
114+ r .logger .Info ("[DB] CreateEvent called by: %s, path: %s" , caller , event .SourceFilePath )
115+
86116 result , err := r .db .GetDB ().Exec (query ,
87117 event .WorkspacePath ,
88118 event .EventType ,
@@ -847,6 +877,10 @@ func (r *eventRepository) UpdateEvent(event *model.Event) error {
847877 query := fmt .Sprintf ("UPDATE events SET %s WHERE id = ?" , strings .Join (setClauses , ", " ))
848878 args = append (args , event .ID )
849879
880+ // 写数据库前打印调用者信息
881+ caller := getCallerInfo (2 )
882+ r .logger .Info ("[DB] UpdateEvent called by: %s, eventID: %d" , caller , event .ID )
883+
850884 result , err := r .db .GetDB ().Exec (query , args ... )
851885 if err != nil {
852886 return fmt .Errorf ("[DB] failed to update event: %w" , err )
@@ -1227,6 +1261,9 @@ func (r *eventRepository) BatchCreateEvents(events []*model.Event) error {
12271261 return nil
12281262 }
12291263
1264+ // 获取调用者信息
1265+ caller := getCallerInfo (2 )
1266+
12301267 const batchSize = 1000
12311268 nowTime := time .Now ()
12321269 totalCreated := int64 (0 )
@@ -1260,6 +1297,9 @@ func (r *eventRepository) BatchCreateEvents(events []*model.Event) error {
12601297 query := fmt .Sprintf ("INSERT INTO events (workspace_path, event_type, source_file_path, target_file_path, embedding_status, codegraph_status, created_at, updated_at) VALUES %s" ,
12611298 strings .Join (valueStrings , "," ))
12621299
1300+ // 写数据库前打印调用者信息
1301+ r .logger .Info ("[DB] BatchCreateEvents called by: %s, batch: %d-%d, count: %d" , caller , i + 1 , end , len (batch ))
1302+
12631303 result , err := r .db .GetDB ().Exec (query , valueArgs ... )
12641304 if err != nil {
12651305 return fmt .Errorf ("[DB] failed to batch create events (batch %d-%d): %w" , i + 1 , end , err )
@@ -1296,6 +1336,9 @@ func (r *eventRepository) BatchDeleteEvents(ids []int64) error {
12961336 return nil
12971337 }
12981338
1339+ // 获取调用者信息
1340+ caller := getCallerInfo (2 )
1341+
12991342 const batchSize = 1000
13001343 totalDeleted := int64 (0 )
13011344
@@ -1319,6 +1362,9 @@ func (r *eventRepository) BatchDeleteEvents(ids []int64) error {
13191362 args [j ] = id
13201363 }
13211364
1365+ // 写数据库前打印调用者信息
1366+ r .logger .Info ("[DB] BatchDeleteEvents called by: %s, batch: %d-%d, count: %d" , caller , i + 1 , end , len (batch ))
1367+
13221368 result , err := r .db .GetDB ().Exec (query , args ... )
13231369 if err != nil {
13241370 return fmt .Errorf ("[DB] failed to batch delete events (batch %d-%d): %w" , i + 1 , end , err )
@@ -1337,12 +1383,89 @@ func (r *eventRepository) BatchDeleteEvents(ids []int64) error {
13371383 return nil
13381384}
13391385
1386+ // BatchUpdateEvents 批量更新事件(用于文件变更检测时的批量状态更新)
1387+ func (r * eventRepository ) BatchUpdateEvents (events []* model.Event ) error {
1388+ if len (events ) == 0 {
1389+ return nil
1390+ }
1391+
1392+ // 获取调用者信息
1393+ caller := getCallerInfo (2 )
1394+
1395+ const batchSize = 1000
1396+ nowTime := time .Now ()
1397+ totalUpdated := int64 (0 )
1398+
1399+ query := `
1400+ UPDATE events
1401+ SET event_type = ?, target_file_path = ?, embedding_status = ?, codegraph_status = ?, updated_at = ?
1402+ WHERE id = ?
1403+ `
1404+
1405+ // 分批处理
1406+ for i := 0 ; i < len (events ); i += batchSize {
1407+ end := i + batchSize
1408+ if end > len (events ) {
1409+ end = len (events )
1410+ }
1411+ batch := events [i :end ]
1412+
1413+ // 写数据库前打印调用者信息
1414+ r .logger .Info ("[DB] BatchUpdateEvents called by: %s, batch: %d-%d, count: %d" , caller , i + 1 , end , len (batch ))
1415+
1416+ // 每个批次一个事务
1417+ tx , err := r .db .GetDB ().Begin ()
1418+ if err != nil {
1419+ return fmt .Errorf ("[DB] failed to begin transaction (batch %d-%d): %w" , i + 1 , end , err )
1420+ }
1421+
1422+ stmt , err := tx .Prepare (query )
1423+ if err != nil {
1424+ tx .Rollback ()
1425+ return fmt .Errorf ("[DB] failed to prepare statement (batch %d-%d): %w" , i + 1 , end , err )
1426+ }
1427+
1428+ for _ , event := range batch {
1429+ _ , err = stmt .Exec (
1430+ event .EventType ,
1431+ event .TargetFilePath ,
1432+ event .EmbeddingStatus ,
1433+ event .CodegraphStatus ,
1434+ nowTime ,
1435+ event .ID ,
1436+ )
1437+ if err != nil {
1438+ stmt .Close ()
1439+ tx .Rollback ()
1440+ return fmt .Errorf ("[DB] failed to update event %d: %w" , event .ID , err )
1441+ }
1442+ }
1443+ stmt .Close ()
1444+
1445+ if err = tx .Commit (); err != nil {
1446+ return fmt .Errorf ("[DB] failed to commit transaction (batch %d-%d): %w" , i + 1 , end , err )
1447+ }
1448+
1449+ totalUpdated += int64 (len (batch ))
1450+ r .logger .Info ("[DB] Successfully updated batch %d-%d: %d events" , i + 1 , end , len (batch ))
1451+ }
1452+
1453+ r .logger .Info ("[DB] Successfully batch updated total %d events" , totalUpdated )
1454+ return nil
1455+ }
1456+
13401457// UpdateEvents 批量更新事件嵌入信息
13411458func (r * eventRepository ) UpdateEventsEmbedding (events []* model.Event ) error {
13421459 if len (events ) == 0 {
13431460 return nil
13441461 }
13451462
1463+ // 获取调用者信息
1464+ caller := getCallerInfo (2 )
1465+
1466+ // 写数据库前打印调用者信息
1467+ r .logger .Info ("[DB] UpdateEventsEmbedding called by: %s, count: %d" , caller , len (events ))
1468+
13461469 tx , err := r .db .GetDB ().Begin ()
13471470 if err != nil {
13481471 return fmt .Errorf ("[DB] failed to begin transaction: %w" , err )
@@ -1393,6 +1516,12 @@ func (r *eventRepository) UpdateEventsEmbeddingStatus(eventIDs []int64, status i
13931516 return nil
13941517 }
13951518
1519+ // 获取调用者信息
1520+ caller := getCallerInfo (2 )
1521+
1522+ // 写数据库前打印调用者信息
1523+ r .logger .Info ("[DB] UpdateEventsEmbeddingStatus called by: %s, count: %d, status: %d" , caller , len (eventIDs ), status )
1524+
13961525 tx , err := r .db .GetDB ().Begin ()
13971526 if err != nil {
13981527 return fmt .Errorf ("[DB] failed to begin transaction: %w" , err )
0 commit comments