MCPcopy
hub / github.com/docker/docker-agent / ensureDB

Method ensureDB

pkg/memory/database/sqlite/sqlite.go:56–90  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

54}
55
56func (m *MemoryDatabase) ensureDB(ctx context.Context) (*sql.DB, error) {
57 m.mu.Lock()
58 defer m.mu.Unlock()
59 if m.db != nil {
60 return m.db, nil
61 }
62
63 db, err := sqliteutil.OpenDB(ctx, m.path)
64 if err != nil {
65 return nil, err
66 }
67
68 lock := database.NewFileLock(m.lockPath)
69 if err := lock.Lock(ctx); err != nil {
70 db.Close()
71 return nil, err
72 }
73 defer func() { _ = lock.Unlock() }()
74
75 if _, err = db.ExecContext(ctx, "CREATE TABLE IF NOT EXISTS memories (id TEXT PRIMARY KEY, created_at TEXT, memory TEXT)"); err != nil {
76 db.Close()
77 return nil, err
78 }
79
80 // Add category column if it doesn't exist (transparent migration)
81 if _, err := db.ExecContext(ctx, "ALTER TABLE memories ADD COLUMN category TEXT DEFAULT ''"); err != nil {
82 if !strings.Contains(err.Error(), "duplicate column name") {
83 db.Close()
84 return nil, fmt.Errorf("memory database migration failed: %w", err)
85 }
86 }
87
88 m.db = db
89 return db, nil
90}
91
92func (m *MemoryDatabase) Close() error {
93 m.mu.Lock()

Callers 4

withWriteLockMethod · 0.95
GetMemoriesMethod · 0.95
SearchMemoriesMethod · 0.95

Calls 7

LockMethod · 0.95
UnlockMethod · 0.95
OpenDBFunction · 0.92
NewFileLockFunction · 0.92
ExecContextMethod · 0.80
CloseMethod · 0.65
ErrorMethod · 0.45

Tested by 1