pub mod admin;
pub mod error;
pub mod extension;
pub mod lifecycle;
pub mod models;
pub mod projection;
#[macro_use]
pub mod repository;
pub mod resilience;
pub mod services;
pub use extension::DatabaseExtension;
pub use models::{
ColumnInfo, DatabaseInfo, DatabaseQuery, DatabaseTransaction, DbValue, FromDbValue, IndexInfo,
JsonRow, QueryResult, QueryRow, QuerySelector, TableInfo, ToDbValue, parse_database_datetime,
};
pub use services::{
BoxFuture, Database, DatabaseCliDisplay, DatabaseExt, DatabaseProvider, DbPool, PoolConfig,
PostgresProvider, SqlExecutor, mark_schema_changed, with_transaction_retry,
};
pub use error::DatabaseResult;
pub use lifecycle::{
AppliedMigration, BOOTSTRAP_ADVISORY_LOCK_KEY, BackfillStatement, BaselineStamp,
BootstrapLockGuard, ChecksumDrift, DeferredForeignKey, ExpensiveStatement,
ExtensionMigrationStatus, FkDeferralError, ForeignKeyDrift, FreshnessCheck, HOT_TABLES,
MarkAppliedOutcome, MigrationConfig, MigrationCost, MigrationResult, MigrationService,
MigrationStatus, OrphanMigrationLedger, OrphanedMigration, PROJECTION_BACKLOG,
PendingMigration, RepairResult, ReplicaStatus, SchemaCurrency, SchemaInstallReport,
SchemaResidue, SlotCollision, SplitCreateTable, TombstonedSlot, UndeclaredTable,
audit_migration_cost, audit_one, audit_schema_residue, backfill_statements,
check_migration_references, check_trigger_routines, install_extension_schemas_full,
is_retirement, replica_status, schema_currency, split_create_table_foreign_keys,
validate_column_exists, validate_database_connection, validate_table_exists,
validate_write_pool_is_primary,
};
pub use repository::{
CreateServiceInput, INSTANCE_CLAIM_CLASS, InstanceClaim, InstanceClaimError, PgDbPool,
ServiceConfig, ServiceModule, ServiceRepository, ServiceStatus, UpsertServiceProcessInput,
};
pub use admin::{
AdminSql, AdminSqlError, DEFAULT_READONLY_ROW_LIMIT, DatabaseAdminService, IdentifierError,
QueryExecutor, QueryExecutorError, SafeIdentifier,
};
use systemprompt_traits::DatabaseHandle;
impl DatabaseHandle for Database {
fn is_connected(&self) -> bool {
!self.pool().is_closed() && !self.write_pool().is_closed()
}
fn as_any(&self) -> &dyn std::any::Any {
self
}
}