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/strategy_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/experience_run_repository.rb,
lib/aidp/database/repositories/prompt_archive_repository.rb,
lib/aidp/database/repositories/experience_task_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/experience_artifact_repository.rb,
lib/aidp/database/repositories/provider_info_cache_repository.rb,
lib/aidp/database/repositories/experience_evaluation_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.
-
.migrate_once!(project_dir = Dir.pwd) ⇒ Array<Integer>
Run pending migrations at most once per process for each project directory.
-
.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
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/aidp/database.rb', line 104 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
117 118 119 120 121 122 123 124 125 |
# File 'lib/aidp/database.rb', line 117 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
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/aidp/database.rb', line 28 def connection(project_dir = Dir.pwd) db_path = ConfigPaths.database_file(project_dir) @mutex.synchronize do invalidate_missing_connection!(db_path) # 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
82 83 84 |
# File 'lib/aidp/database.rb', line 82 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
56 57 58 59 |
# File 'lib/aidp/database.rb', line 56 def migrate!(project_dir = Dir.pwd) require_relative "database/migrations" Migrations.run!(project_dir) end |
.migrate_once!(project_dir = Dir.pwd) ⇒ Array<Integer>
Run pending migrations at most once per process for each project directory.
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/aidp/database.rb', line 65 def migrate_once!(project_dir = Dir.pwd) = File.(project_dir) require_relative "database/migrations" @migration_mutex.synchronize do return [] if migration_current?() migrate!().tap do @migrated_projects << end end end |
.schema_version(project_dir = Dir.pwd) ⇒ Integer
Get current schema version
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/aidp/database.rb', line 90 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
132 133 134 135 136 137 |
# File 'lib/aidp/database.rb', line 132 def transaction(project_dir = Dir.pwd) db = connection(project_dir) db.transaction do yield db end end |