MCPcopy Index your code
hub / github.com/docker/docker-agent / migrateMessagesToSessionItems

Function migrateMessagesToSessionItems

pkg/session/migrations.go:407–455  ·  view source on GitHub ↗

migrateMessagesToSessionItems migrates data from the messages JSON column to the session_items table

(ctx context.Context, db *sql.DB)

Source from the content-addressed store, hash-verified

405
406// migrateMessagesToSessionItems migrates data from the messages JSON column to the session_items table
407func migrateMessagesToSessionItems(ctx context.Context, db *sql.DB) error {
408 slog.InfoContext(ctx, "Starting migration of messages to session_items")
409
410 // Get all sessions that have messages but no items yet
411 rows, err := db.QueryContext(ctx, `
412 SELECT s.id, s.messages
413 FROM sessions s
414 WHERE s.messages IS NOT NULL
415 AND s.messages != ''
416 AND s.messages != '[]'
417 AND NOT EXISTS (SELECT 1 FROM session_items si WHERE si.session_id = s.id)
418 `)
419 if err != nil {
420 return fmt.Errorf("querying sessions: %w", err)
421 }
422 defer rows.Close()
423
424 var sessionsToMigrate []struct {
425 id string
426 messages string
427 }
428
429 for rows.Next() {
430 var id, messages string
431 if err := rows.Scan(&id, &messages); err != nil {
432 return fmt.Errorf("scanning session: %w", err)
433 }
434 sessionsToMigrate = append(sessionsToMigrate, struct {
435 id string
436 messages string
437 }{id, messages})
438 }
439 if err := rows.Err(); err != nil {
440 return fmt.Errorf("iterating sessions: %w", err)
441 }
442
443 slog.InfoContext(ctx, "Found sessions to migrate", "count", len(sessionsToMigrate))
444
445 // Migrate each session
446 for _, sess := range sessionsToMigrate {
447 if err := migrateSessionMessages(ctx, db, sess.id, sess.messages, ""); err != nil {
448 slog.WarnContext(ctx, "Failed to migrate session, skipping", "session_id", sess.id, "error", err)
449 continue
450 }
451 }
452
453 slog.InfoContext(ctx, "Completed migration of messages to session_items")
454 return nil
455}
456
457// migrateSessionMessages migrates a single session's messages to session_items
458func migrateSessionMessages(ctx context.Context, db *sql.DB, sessionID, messagesJSON, parentID string) error {

Callers

nothing calls this directly

Calls 5

migrateSessionMessagesFunction · 0.85
QueryContextMethod · 0.80
CloseMethod · 0.65
NextMethod · 0.65
ErrMethod · 0.65

Tested by

no test coverage detected