Module: Aidp::Database
- Defined in:
- lib/aidp/database.rb,
lib/aidp/database/schema.rb,
lib/aidp/database/migrations.rb,
lib/aidp/database/repository.rb,
lib/aidp/database/storage_migrator.rb,
lib/aidp/database/repositories/job_repository.rb,
lib/aidp/database/repositories/task_repository.rb,
lib/aidp/database/repositories/secrets_repository.rb,
lib/aidp/database/repositories/progress_repository.rb,
lib/aidp/database/repositories/worktree_repository.rb,
lib/aidp/database/repositories/checkpoint_repository.rb,
lib/aidp/database/repositories/evaluation_repository.rb,
lib/aidp/database/repositories/workstream_repository.rb,
lib/aidp/database/repositories/model_cache_repository.rb,
lib/aidp/database/repositories/watch_state_repository.rb,
lib/aidp/database/repositories/harness_state_repository.rb,
lib/aidp/database/repositories/prompt_archive_repository.rb,
lib/aidp/database/repositories/prompt_feedback_repository.rb,
lib/aidp/database/repositories/provider_metrics_repository.rb,
lib/aidp/database/repositories/template_version_repository.rb,
lib/aidp/database/repositories/deprecated_models_repository.rb,
lib/aidp/database/repositories/provider_info_cache_repository.rb
Overview
Database module for SQLite-based storage Provides connection management, schema migrations, and base repository functionality
Defined Under Namespace
Modules: Migrations, Repositories, Schema Classes: ConnectionError, Error, MigrationError, Repository, StorageMigrator
Class Method Summary collapse
-
.close(project_dir = Dir.pwd) ⇒ Object
Close connection for a specific project.
-
.close_all ⇒ Object
Close all open connections.
-
.connection(project_dir = Dir.pwd) ⇒ SQLite3::Database
Get or create a database connection for the given project directory Connections are cached per project_dir and are thread-safe.
-
.exists?(project_dir = Dir.pwd) ⇒ Boolean
Check if database exists and is initialized.
-
.migrate!(project_dir = Dir.pwd) ⇒ Array<Integer>
Run pending migrations for the given project.
-
.schema_version(project_dir = Dir.pwd) ⇒ Integer
Get current schema version.
-
.transaction(project_dir = Dir.pwd) {|db| ... } ⇒ Object
Execute a block within a transaction.
Class Method Details
.close(project_dir = Dir.pwd) ⇒ Object
Close connection for a specific project
82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/aidp/database.rb', line 82 def close(project_dir = Dir.pwd) db_path = ConfigPaths.database_file(project_dir) @mutex.synchronize do if @connections[db_path] && !@connections[db_path].closed? @connections[db_path].close Aidp.log_debug("database", "connection_closed", path: db_path) end @connections.delete(db_path) end end |
.close_all ⇒ Object
Close all open connections
95 96 97 98 99 100 101 102 103 |
# File 'lib/aidp/database.rb', line 95 def close_all @mutex.synchronize do @connections.each do |path, db| db.close unless db.closed? Aidp.log_debug("database", "connection_closed", path: path) end @connections.clear end end |
.connection(project_dir = Dir.pwd) ⇒ SQLite3::Database
Get or create a database connection for the given project directory Connections are cached per project_dir and are thread-safe
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/aidp/database.rb', line 25 def connection(project_dir = Dir.pwd) db_path = ConfigPaths.database_file(project_dir) @mutex.synchronize do # Return cached connection if valid if @connections[db_path]&.closed? == false return @connections[db_path] end # Ensure directory exists FileUtils.mkdir_p(File.dirname(db_path)) # Create new connection with optimal settings db = SQLite3::Database.new(db_path) configure_connection(db) @connections[db_path] = db Aidp.log_debug("database", "connection_opened", path: db_path) db end end |
.exists?(project_dir = Dir.pwd) ⇒ Boolean
Check if database exists and is initialized
60 61 62 |
# File 'lib/aidp/database.rb', line 60 def exists?(project_dir = Dir.pwd) File.exist?(ConfigPaths.database_file(project_dir)) end |
.migrate!(project_dir = Dir.pwd) ⇒ Array<Integer>
Run pending migrations for the given project
51 52 53 54 |
# File 'lib/aidp/database.rb', line 51 def migrate!(project_dir = Dir.pwd) require_relative "database/migrations" Migrations.run!(project_dir) end |
.schema_version(project_dir = Dir.pwd) ⇒ Integer
Get current schema version
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/aidp/database.rb', line 68 def schema_version(project_dir = Dir.pwd) return 0 unless exists?(project_dir) db = connection(project_dir) result = db.get_first_value("SELECT MAX(version) FROM schema_migrations") result || 0 rescue SQLite3::SQLException # Table doesn't exist yet 0 end |
.transaction(project_dir = Dir.pwd) {|db| ... } ⇒ Object
Execute a block within a transaction
110 111 112 113 114 115 |
# File 'lib/aidp/database.rb', line 110 def transaction(project_dir = Dir.pwd) db = connection(project_dir) db.transaction do yield db end end |