rubydb 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/PULL_REQUEST_TEMPLATE.md +15 -15
- data/.github/workflows/benchmark.yml +26 -26
- data/.github/workflows/compatibility.yml +63 -63
- data/.github/workflows/fuzz.yml +33 -33
- data/.github/workflows/lint.yml +21 -21
- data/.github/workflows/operations.yml +24 -24
- data/.github/workflows/production-validation.yml +111 -111
- data/.github/workflows/release.yml +77 -77
- data/.github/workflows/security.yml +39 -37
- data/.github/workflows/test.yml +26 -26
- data/.github/workflows/workload.yml +58 -58
- data/.gitignore +12 -5
- data/.rubocop.yml +50 -44
- data/.standard.yml +9 -14
- data/ARCHITECTURE.md +21 -21
- data/CHANGELOG.md +49 -27
- data/CODE_OF_CONDUCT.md +13 -13
- data/CONTRIBUTING.md +29 -29
- data/GOVERNANCE.md +16 -16
- data/Gemfile +18 -17
- data/Gemfile.lock +125 -71
- data/README.md +249 -162
- data/ROADMAP.md +27 -27
- data/Rakefile +71 -71
- data/SECURITY.md +54 -54
- data/SUPPORT.md +14 -14
- data/adapters/activerecord/Gemfile +11 -11
- data/adapters/activerecord/lib/active_record/connection_adapters/rubydb_adapter.rb +877 -880
- data/adapters/activerecord/rubydb-activerecord.gemspec +21 -21
- data/adapters/activerecord/spec/rubydb_adapter_integration_spec.rb +155 -143
- data/adapters/ruby/README.md +18 -18
- data/adapters/sequel/README.md +11 -11
- data/config/monitoring/prometheus-alerts.yml +39 -39
- data/config/production.yml +36 -36
- data/docs/README.md +75 -71
- data/docs/architecture/concurrency.md +14 -14
- data/docs/architecture/current-state.md +125 -125
- data/docs/architecture/execution-engine.md +25 -25
- data/docs/architecture/indexes.md +19 -19
- data/docs/architecture/mvcc.md +19 -19
- data/docs/architecture/overview.md +13 -13
- data/docs/architecture/pages.md +11 -11
- data/docs/architecture/production-roadmap.md +82 -82
- data/docs/architecture/query-planner.md +20 -20
- data/docs/architecture/recovery.md +18 -18
- data/docs/architecture/sql-engine.md +12 -12
- data/docs/architecture/storage-engine.md +14 -14
- data/docs/architecture/transactions.md +10 -10
- data/docs/architecture/wal.md +28 -28
- data/docs/cli-cheatsheet.md +98 -98
- data/docs/cli.md +275 -275
- data/docs/contributing/architecture.md +9 -9
- data/docs/contributing/benchmarking.md +14 -14
- data/docs/contributing/development.md +16 -16
- data/docs/contributing/release-process.md +49 -49
- data/docs/contributing/testing.md +16 -16
- data/docs/debugging.md +229 -229
- data/docs/developer/branching.md +10 -10
- data/docs/developer/database-diff.md +10 -10
- data/docs/developer/local-development.md +17 -17
- data/docs/developer/snapshots.md +9 -9
- data/docs/developer/temporal-data.md +10 -10
- data/docs/developer-guide.md +297 -297
- data/docs/getting-started/first-database.md +16 -16
- data/docs/getting-started/first-query.md +13 -13
- data/docs/getting-started/installation.md +19 -19
- data/docs/getting-started/local-to-production.md +300 -300
- data/docs/getting-started/quickstart.md +17 -17
- data/docs/getting-started/rails.md +16 -16
- data/docs/hardening_backlog.md +93 -93
- data/docs/lessons-learned.md +112 -112
- data/docs/operations/backups.md +33 -33
- data/docs/operations/disaster-recovery.md +31 -31
- data/docs/operations/failover.md +30 -30
- data/docs/operations/monitoring.md +25 -25
- data/docs/operations/production-guide.md +295 -295
- data/docs/operations/production-runbook.md +45 -45
- data/docs/operations/replication.md +33 -33
- data/docs/operations/restore.md +6 -6
- data/docs/operations/runbook.md +34 -34
- data/docs/operations/upgrades.md +14 -14
- data/docs/operations/workload-testing.md +17 -17
- data/docs/production-readiness.md +118 -118
- data/docs/production_validation.md +150 -150
- data/docs/rails/active-record.md +11 -11
- data/docs/rails/compatibility-guide.md +90 -90
- data/docs/rails/database-yml.md +92 -92
- data/docs/rails/installation.md +17 -17
- data/docs/rails/migrations.md +17 -17
- data/docs/rails/production.md +82 -82
- data/docs/rails/troubleshooting.md +18 -18
- data/docs/release.md +25 -25
- data/docs/server/architecture.md +10 -10
- data/docs/server/authentication.md +10 -10
- data/docs/server/configuration.md +16 -16
- data/docs/server/connection-pooling.md +10 -10
- data/docs/server/deployment.md +10 -10
- data/docs/server/protocol.md +12 -12
- data/docs/sql/compatibility-guide.md +82 -82
- data/docs/sql/compatibility.md +39 -39
- data/docs/sql/data-types.md +10 -10
- data/docs/sql/functions.md +9 -9
- data/docs/sql/joins.md +9 -9
- data/docs/sql/operators.md +9 -9
- data/docs/sql/sqlite-compatibility.md +21 -21
- data/docs/sql/syntax.md +10 -10
- data/docs/sql/transactions.md +10 -10
- data/docs/troubleshooting.md +244 -244
- data/lessons/01-foundations.md +73 -0
- data/lessons/02-local-development.md +121 -0
- data/lessons/03-embedded-rubydb.md +99 -0
- data/lessons/04-rails-complex-apps.md +138 -0
- data/lessons/05-rubydb-production-server.md +237 -0
- data/lessons/06-postgresql-massive-apps.md +96 -0
- data/lessons/07-hybrid-microservices.md +94 -0
- data/lessons/08-migrations-backups-recovery.md +86 -0
- data/lessons/09-observability-security-scale.md +87 -0
- data/lessons/10-release-readiness.md +125 -0
- data/lib/rubydb/backup/archive.rb +332 -334
- data/lib/rubydb/backup/backup.rb +400 -401
- data/lib/rubydb/backup/incremental.rb +349 -353
- data/lib/rubydb/backup/restore.rb +289 -290
- data/lib/rubydb/backup/snapshot.rb +265 -267
- data/lib/rubydb/backup/verification.rb +276 -279
- data/lib/rubydb/branching/branch.rb +181 -181
- data/lib/rubydb/branching/branch_manager.rb +307 -311
- data/lib/rubydb/branching/branch_metadata.rb +140 -140
- data/lib/rubydb/branching/checkout.rb +165 -166
- data/lib/rubydb/branching/copy_on_write.rb +272 -272
- data/lib/rubydb/branching/diff.rb +137 -138
- data/lib/rubydb/branching/merge.rb +282 -285
- data/lib/rubydb/build_info.rb +15 -15
- data/lib/rubydb/catalog/catalog.rb +391 -391
- data/lib/rubydb/catalog/column.rb +112 -112
- data/lib/rubydb/catalog/constraint.rb +180 -180
- data/lib/rubydb/catalog/database.rb +184 -184
- data/lib/rubydb/catalog/index.rb +97 -97
- data/lib/rubydb/catalog/schema.rb +103 -103
- data/lib/rubydb/catalog/sequence.rb +90 -90
- data/lib/rubydb/catalog/system_catalog.rb +698 -698
- data/lib/rubydb/catalog/table.rb +178 -178
- data/lib/rubydb/catalog/trigger.rb +102 -102
- data/lib/rubydb/catalog/view.rb +66 -66
- data/lib/rubydb/cli/application.rb +163 -163
- data/lib/rubydb/cli/commands/backup.rb +80 -81
- data/lib/rubydb/cli/commands/branch.rb +72 -72
- data/lib/rubydb/cli/commands/checkout.rb +54 -54
- data/lib/rubydb/cli/commands/create.rb +58 -58
- data/lib/rubydb/cli/commands/diff.rb +76 -77
- data/lib/rubydb/cli/commands/doctor.rb +74 -74
- data/lib/rubydb/cli/commands/drop.rb +57 -57
- data/lib/rubydb/cli/commands/init.rb +101 -102
- data/lib/rubydb/cli/commands/inspect.rb +95 -95
- data/lib/rubydb/cli/commands/merge.rb +63 -63
- data/lib/rubydb/cli/commands/migrate.rb +62 -62
- data/lib/rubydb/cli/commands/restart.rb +42 -39
- data/lib/rubydb/cli/commands/restore.rb +121 -121
- data/lib/rubydb/cli/commands/shell.rb +365 -365
- data/lib/rubydb/cli/commands/snapshot.rb +79 -79
- data/lib/rubydb/cli/commands/start.rb +88 -82
- data/lib/rubydb/cli/commands/status.rb +96 -92
- data/lib/rubydb/cli/commands/stop.rb +47 -47
- data/lib/rubydb/cli/commands/vacuum.rb +58 -58
- data/lib/rubydb/cli/formatter.rb +221 -221
- data/lib/rubydb/cli/output.rb +168 -168
- data/lib/rubydb/client/client.rb +302 -304
- data/lib/rubydb/client/connection.rb +414 -415
- data/lib/rubydb/client/connection_pool.rb +168 -168
- data/lib/rubydb/client/connection_url.rb +96 -96
- data/lib/rubydb/client/prepared_statement.rb +60 -60
- data/lib/rubydb/client/result.rb +123 -123
- data/lib/rubydb/client/statement.rb +52 -52
- data/lib/rubydb/client/transaction.rb +130 -130
- data/lib/rubydb/concurrency/concurrency.rb +19 -19
- data/lib/rubydb/concurrency/deadlock_detector.rb +148 -150
- data/lib/rubydb/concurrency/latch.rb +101 -101
- data/lib/rubydb/concurrency/lock_graph.rb +163 -165
- data/lib/rubydb/concurrency/mutex.rb +181 -183
- data/lib/rubydb/concurrency/rw_lock.rb +180 -180
- data/lib/rubydb/concurrency/scheduler.rb +248 -250
- data/lib/rubydb/concurrency/worker_pool.rb +145 -143
- data/lib/rubydb/configuration/config.rb +170 -170
- data/lib/rubydb/configuration/defaults.rb +179 -179
- data/lib/rubydb/configuration/environment.rb +152 -152
- data/lib/rubydb/configuration/parser.rb +185 -185
- data/lib/rubydb/configuration/validation.rb +221 -221
- data/lib/rubydb/constants.rb +74 -74
- data/lib/rubydb/constraints/check.rb +181 -181
- data/lib/rubydb/constraints/constraint.rb +101 -101
- data/lib/rubydb/constraints/foreign_key.rb +130 -130
- data/lib/rubydb/constraints/not_null.rb +64 -64
- data/lib/rubydb/constraints/primary_key.rb +99 -99
- data/lib/rubydb/constraints/unique.rb +106 -108
- data/lib/rubydb/constraints/validator.rb +349 -350
- data/lib/rubydb/errors/authentication_error.rb +10 -10
- data/lib/rubydb/errors/authorization_error.rb +23 -23
- data/lib/rubydb/errors/client_error.rb +10 -10
- data/lib/rubydb/errors/configuration_error.rb +10 -10
- data/lib/rubydb/errors/connection_error.rb +10 -10
- data/lib/rubydb/errors/constraint_error.rb +23 -23
- data/lib/rubydb/errors/corruption_error.rb +10 -10
- data/lib/rubydb/errors/database_error.rb +10 -10
- data/lib/rubydb/errors/error.rb +20 -20
- data/lib/rubydb/errors/execution_error.rb +10 -10
- data/lib/rubydb/errors/parser_error.rb +10 -10
- data/lib/rubydb/errors/recovery_error.rb +10 -10
- data/lib/rubydb/errors/replication_error.rb +10 -10
- data/lib/rubydb/errors/server_error.rb +6 -6
- data/lib/rubydb/errors/storage_error.rb +10 -10
- data/lib/rubydb/errors/transaction_error.rb +10 -10
- data/lib/rubydb/execution/aggregate_executor.rb +134 -138
- data/lib/rubydb/execution/delete_executor.rb +110 -112
- data/lib/rubydb/execution/distinct_executor.rb +131 -135
- data/lib/rubydb/execution/executor.rb +1195 -1192
- data/lib/rubydb/execution/expression.rb +191 -193
- data/lib/rubydb/execution/index_scan.rb +142 -142
- data/lib/rubydb/execution/insert_executor.rb +215 -217
- data/lib/rubydb/execution/join_executor.rb +243 -249
- data/lib/rubydb/execution/limit_executor.rb +83 -85
- data/lib/rubydb/execution/optimizer.rb +227 -215
- data/lib/rubydb/execution/plan.rb +355 -353
- data/lib/rubydb/execution/planner.rb +542 -536
- data/lib/rubydb/execution/predicate.rb +235 -235
- data/lib/rubydb/execution/scan.rb +49 -49
- data/lib/rubydb/execution/sequential_scan.rb +63 -63
- data/lib/rubydb/execution/sort_executor.rb +180 -185
- data/lib/rubydb/execution/update_executor.rb +160 -162
- data/lib/rubydb/functions/aggregate.rb +70 -70
- data/lib/rubydb/functions/date_functions.rb +274 -278
- data/lib/rubydb/functions/function.rb +85 -85
- data/lib/rubydb/functions/json_functions.rb +231 -215
- data/lib/rubydb/functions/numeric_functions.rb +346 -346
- data/lib/rubydb/functions/scalar.rb +52 -52
- data/lib/rubydb/functions/string_functions.rb +383 -383
- data/lib/rubydb/functions/system_functions.rb +258 -246
- data/lib/rubydb/history/as_of.rb +238 -238
- data/lib/rubydb/history/change.rb +105 -105
- data/lib/rubydb/history/history.rb +131 -131
- data/lib/rubydb/history/history_manager.rb +228 -229
- data/lib/rubydb/history/temporal_query.rb +202 -202
- data/lib/rubydb/history/timeline.rb +144 -144
- data/lib/rubydb/indexes/btree.rb +186 -186
- data/lib/rubydb/indexes/btree_cursor.rb +258 -258
- data/lib/rubydb/indexes/btree_node.rb +384 -385
- data/lib/rubydb/indexes/hash_index.rb +150 -150
- data/lib/rubydb/indexes/index.rb +71 -71
- data/lib/rubydb/indexes/index_manager.rb +408 -406
- data/lib/rubydb/indexes/index_scan.rb +466 -470
- data/lib/rubydb/migrations/migration.rb +253 -254
- data/lib/rubydb/migrations/migration_lock.rb +146 -146
- data/lib/rubydb/migrations/migration_manager.rb +187 -176
- data/lib/rubydb/migrations/migration_version.rb +71 -71
- data/lib/rubydb/migrations/schema_diff.rb +211 -211
- data/lib/rubydb/migrations/schema_version.rb +64 -64
- data/lib/rubydb/monitoring/events.rb +155 -160
- data/lib/rubydb/monitoring/health.rb +216 -222
- data/lib/rubydb/monitoring/logger.rb +188 -193
- data/lib/rubydb/monitoring/metrics.rb +363 -359
- data/lib/rubydb/monitoring/performance.rb +176 -176
- data/lib/rubydb/monitoring/statistics.rb +168 -170
- data/lib/rubydb/mvcc/garbage_collector.rb +199 -199
- data/lib/rubydb/mvcc/mvcc.rb +16 -16
- data/lib/rubydb/mvcc/snapshot.rb +146 -147
- data/lib/rubydb/mvcc/vacuum.rb +180 -180
- data/lib/rubydb/mvcc/version.rb +106 -106
- data/lib/rubydb/mvcc/version_store.rb +396 -398
- data/lib/rubydb/mvcc/visibility.rb +107 -109
- data/lib/rubydb/protocol/capabilities.rb +125 -125
- data/lib/rubydb/protocol/decoder.rb +142 -145
- data/lib/rubydb/protocol/encoder.rb +131 -136
- data/lib/rubydb/protocol/handshake.rb +306 -305
- data/lib/rubydb/protocol/message.rb +121 -121
- data/lib/rubydb/protocol/parameter_binder.rb +101 -0
- data/lib/rubydb/protocol/protocol.rb +276 -277
- data/lib/rubydb/protocol/version.rb +54 -54
- data/lib/rubydb/rails/adapter.rb +245 -239
- data/lib/rubydb/rails/connection.rb +312 -314
- data/lib/rubydb/rails/database_statements.rb +122 -122
- data/lib/rubydb/rails/migration.rb +131 -131
- data/lib/rubydb/rails/quoting.rb +109 -109
- data/lib/rubydb/rails/result.rb +123 -120
- data/lib/rubydb/rails/schema_statements.rb +339 -339
- data/lib/rubydb/rails/transaction.rb +105 -105
- data/lib/rubydb/rails/type.rb +126 -126
- data/lib/rubydb/recovery/checkpoint.rb +261 -257
- data/lib/rubydb/recovery/consistency.rb +457 -467
- data/lib/rubydb/recovery/corruption_detector.rb +5 -5
- data/lib/rubydb/recovery/crash_recovery.rb +381 -387
- data/lib/rubydb/recovery/recovery_manager.rb +204 -206
- data/lib/rubydb/recovery/redo.rb +235 -237
- data/lib/rubydb/recovery/undo.rb +204 -206
- data/lib/rubydb/replication/failover.rb +5 -5
- data/lib/rubydb/replication/fencing.rb +63 -63
- data/lib/rubydb/replication/primary.rb +461 -450
- data/lib/rubydb/replication/replica.rb +382 -384
- data/lib/rubydb/replication/replication_log.rb +194 -200
- data/lib/rubydb/replication/replication_manager.rb +307 -308
- data/lib/rubydb/replication/replication_slot.rb +293 -295
- data/lib/rubydb/replication/replication_stream.rb +198 -201
- data/lib/rubydb/rubydb.rb +564 -560
- data/lib/rubydb/security/access_control.rb +252 -254
- data/lib/rubydb/security/audit_log.rb +209 -213
- data/lib/rubydb/security/authentication.rb +302 -302
- data/lib/rubydb/security/authorization.rb +282 -282
- data/lib/rubydb/security/credentials.rb +192 -196
- data/lib/rubydb/security/password.rb +205 -215
- data/lib/rubydb/security/permissions.rb +74 -74
- data/lib/rubydb/security/role.rb +99 -101
- data/lib/rubydb/security/user.rb +86 -86
- data/lib/rubydb/server/connection.rb +383 -366
- data/lib/rubydb/server/connection_pool.rb +193 -193
- data/lib/rubydb/server/lifecycle.rb +227 -228
- data/lib/rubydb/server/listener.rb +139 -136
- data/lib/rubydb/server/request_handler.rb +277 -276
- data/lib/rubydb/server/server.rb +363 -364
- data/lib/rubydb/server/session.rb +371 -369
- data/lib/rubydb/server/worker.rb +206 -210
- data/lib/rubydb/server/worker_pool.rb +168 -168
- data/lib/rubydb/sql/ast/alter_table.rb +169 -169
- data/lib/rubydb/sql/ast/begin_transaction.rb +47 -47
- data/lib/rubydb/sql/ast/commit.rb +37 -37
- data/lib/rubydb/sql/ast/constraint.rb +92 -83
- data/lib/rubydb/sql/ast/create_database.rb +41 -41
- data/lib/rubydb/sql/ast/create_index.rb +61 -61
- data/lib/rubydb/sql/ast/create_schema.rb +52 -52
- data/lib/rubydb/sql/ast/create_table.rb +187 -187
- data/lib/rubydb/sql/ast/delete.rb +54 -54
- data/lib/rubydb/sql/ast/drop_database.rb +41 -41
- data/lib/rubydb/sql/ast/drop_index.rb +41 -41
- data/lib/rubydb/sql/ast/drop_schema.rb +49 -49
- data/lib/rubydb/sql/ast/drop_table.rb +49 -49
- data/lib/rubydb/sql/ast/explain.rb +64 -64
- data/lib/rubydb/sql/ast/expression.rb +617 -604
- data/lib/rubydb/sql/ast/insert.rb +66 -66
- data/lib/rubydb/sql/ast/node.rb +42 -42
- data/lib/rubydb/sql/ast/rollback.rb +63 -63
- data/lib/rubydb/sql/ast/savepoint.rb +59 -59
- data/lib/rubydb/sql/ast/select.rb +88 -88
- data/lib/rubydb/sql/ast/set_operation.rb +22 -20
- data/lib/rubydb/sql/ast/trigger.rb +35 -29
- data/lib/rubydb/sql/ast/update.rb +88 -88
- data/lib/rubydb/sql/ast/vacuum.rb +19 -19
- data/lib/rubydb/sql/ast/view.rb +38 -32
- data/lib/rubydb/sql/ast/with.rb +32 -32
- data/lib/rubydb/sql/grammar.rb +86 -86
- data/lib/rubydb/sql/keywords.rb +156 -156
- data/lib/rubydb/sql/lexer.rb +209 -214
- data/lib/rubydb/sql/operators.rb +100 -100
- data/lib/rubydb/sql/parser.rb +1167 -1170
- data/lib/rubydb/sql/planner/analyzer.rb +283 -302
- data/lib/rubydb/sql/planner/binder.rb +537 -550
- data/lib/rubydb/sql/planner/type_checker.rb +427 -431
- data/lib/rubydb/sql/token.rb +210 -210
- data/lib/rubydb/storage/buffer_frame.rb +44 -44
- data/lib/rubydb/storage/buffer_pool.rb +155 -155
- data/lib/rubydb/storage/database_lock.rb +74 -74
- data/lib/rubydb/storage/deserializer.rb +332 -342
- data/lib/rubydb/storage/engine.rb +2347 -2330
- data/lib/rubydb/storage/file_manager.rb +191 -187
- data/lib/rubydb/storage/free_space_map.rb +79 -81
- data/lib/rubydb/storage/page.rb +92 -94
- data/lib/rubydb/storage/page_allocator.rb +852 -855
- data/lib/rubydb/storage/page_header.rb +63 -67
- data/lib/rubydb/storage/page_manager.rb +127 -131
- data/lib/rubydb/storage/record.rb +58 -58
- data/lib/rubydb/storage/row.rb +78 -78
- data/lib/rubydb/storage/serializer.rb +51 -51
- data/lib/rubydb/storage/storage_layout.rb +151 -151
- data/lib/rubydb/storage/storage_manager.rb +114 -114
- data/lib/rubydb/storage/tuple.rb +458 -461
- data/lib/rubydb/storage/visibility_map.rb +964 -973
- data/lib/rubydb/transactions/commit_manager.rb +219 -220
- data/lib/rubydb/transactions/isolation.rb +98 -98
- data/lib/rubydb/transactions/lock.rb +76 -76
- data/lib/rubydb/transactions/lock_manager.rb +359 -362
- data/lib/rubydb/transactions/savepoint.rb +142 -143
- data/lib/rubydb/transactions/transaction.rb +214 -215
- data/lib/rubydb/transactions/transaction_id.rb +84 -84
- data/lib/rubydb/transactions/transaction_log.rb +256 -257
- data/lib/rubydb/transactions/transaction_manager.rb +434 -435
- data/lib/rubydb/types/bigint.rb +36 -36
- data/lib/rubydb/types/blob.rb +37 -37
- data/lib/rubydb/types/boolean.rb +34 -34
- data/lib/rubydb/types/date.rb +39 -39
- data/lib/rubydb/types/decimal.rb +48 -48
- data/lib/rubydb/types/float.rb +34 -34
- data/lib/rubydb/types/integer.rb +36 -36
- data/lib/rubydb/types/json.rb +41 -41
- data/lib/rubydb/types/null.rb +34 -34
- data/lib/rubydb/types/smallint.rb +36 -36
- data/lib/rubydb/types/text.rb +37 -37
- data/lib/rubydb/types/time.rb +46 -46
- data/lib/rubydb/types/timestamp.rb +39 -39
- data/lib/rubydb/types/type.rb +119 -119
- data/lib/rubydb/types/uuid.rb +47 -47
- data/lib/rubydb/types/varchar.rb +37 -37
- data/lib/rubydb/version.rb +32 -32
- data/lib/rubydb/wal/archive.rb +190 -193
- data/lib/rubydb/wal/checkpoint.rb +181 -183
- data/lib/rubydb/wal/lsn.rb +94 -94
- data/lib/rubydb/wal/reader.rb +259 -260
- data/lib/rubydb/wal/record.rb +105 -105
- data/lib/rubydb/wal/segment.rb +193 -193
- data/lib/rubydb/wal/wal.rb +480 -452
- data/lib/rubydb/wal/writer.rb +236 -236
- data/lib/rubydb.rb +7 -7
- data/packaging/docker/docker-compose.failover.yml +43 -43
- data/packaging/homebrew/rubydb.rb +19 -19
- data/rubydb.gemspec +60 -57
- data/scripts/benchmark +7 -7
- data/scripts/durability_drill +37 -37
- data/scripts/fuzz +63 -63
- data/scripts/release +45 -40
- data/scripts/release_check +43 -43
- data/scripts/replication_failover_drill +268 -250
- data/scripts/replication_network_failover_drill +287 -255
- data/scripts/restore_drill +45 -45
- data/scripts/security +45 -0
- metadata +54 -1
data/CHANGELOG.md
CHANGED
|
@@ -1,28 +1,50 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to RubyDB are documented here. Versions follow
|
|
4
|
-
[Semantic Versioning](https://semver.org/).
|
|
5
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to RubyDB are documented here. Versions follow
|
|
4
|
+
[Semantic Versioning](https://semver.org/).
|
|
5
|
+
|
|
6
6
|
## Unreleased
|
|
7
|
-
|
|
8
|
-
- Added full developer, troubleshooting, debugging, production operations,
|
|
9
|
-
Rails compatibility, and SQL compatibility guides with repository maps,
|
|
10
|
-
incident evidence procedures, safe recovery guidance, and deployment
|
|
11
|
-
checklists.
|
|
12
|
-
- Added RubyDB connection URLs (`rubydb://` and TLS-enabled `rubydbs://`) for
|
|
13
|
-
regular Ruby clients and Rails `database.yml`, including percent-encoded
|
|
14
|
-
credentials and documented TLS/query options.
|
|
15
|
-
- Added a beginner-friendly local-to-production guide covering local RubyDB,
|
|
16
|
-
PostgreSQL migration, RubyDB server deployment, environment URLs, Render-style
|
|
17
|
-
hosting, data transfer, smoke tests, and production checklists.
|
|
18
|
-
- Added a documentation index and lessons-learned guide covering durability,
|
|
19
|
-
ownership, replication fencing, cancellation, deadlocks, Rails adapters,
|
|
20
|
-
operations, evidence, and security review boundaries.
|
|
21
|
-
- Added a full CLI guide and cheat sheet covering lifecycle, server operation,
|
|
22
|
-
shell, migrations, backup/restore, snapshots, branches, inspection, doctor,
|
|
23
|
-
vacuum, maintenance, and release workflows.
|
|
7
|
+
|
|
8
|
+
- Added full developer, troubleshooting, debugging, production operations,
|
|
9
|
+
Rails compatibility, and SQL compatibility guides with repository maps,
|
|
10
|
+
incident evidence procedures, safe recovery guidance, and deployment
|
|
11
|
+
checklists.
|
|
12
|
+
- Added RubyDB connection URLs (`rubydb://` and TLS-enabled `rubydbs://`) for
|
|
13
|
+
regular Ruby clients and Rails `database.yml`, including percent-encoded
|
|
14
|
+
credentials and documented TLS/query options.
|
|
15
|
+
- Added a beginner-friendly local-to-production guide covering local RubyDB,
|
|
16
|
+
PostgreSQL migration, RubyDB server deployment, environment URLs, Render-style
|
|
17
|
+
hosting, data transfer, smoke tests, and production checklists.
|
|
18
|
+
- Added a documentation index and lessons-learned guide covering durability,
|
|
19
|
+
ownership, replication fencing, cancellation, deadlocks, Rails adapters,
|
|
20
|
+
operations, evidence, and security review boundaries.
|
|
21
|
+
- Added a full CLI guide and cheat sheet covering lifecycle, server operation,
|
|
22
|
+
shell, migrations, backup/restore, snapshots, branches, inspection, doctor,
|
|
23
|
+
vacuum, maintenance, and release workflows.
|
|
24
24
|
- Clarified the tested common SQLite-style profile and production limits.
|
|
25
25
|
|
|
26
|
+
## 0.1.5 - 2026-09-10
|
|
27
|
+
|
|
28
|
+
- Applied network query and prepared-statement parameters through the server
|
|
29
|
+
protocol before SQL parsing, using shared safe literal binding rules.
|
|
30
|
+
- Added the initial Python DB-API adapter and live protocol validation under
|
|
31
|
+
`adapters/python`.
|
|
32
|
+
- Added a ten-lesson guided journey with copy-and-paste development,
|
|
33
|
+
PostgreSQL, RubyDB server, Rails, microservice, recovery, security, and
|
|
34
|
+
release examples.
|
|
35
|
+
- Expanded the lesson journey with a direct RubyDB-to-production deployment
|
|
36
|
+
path covering persistent storage, TLS, secrets, migrations, smoke tests,
|
|
37
|
+
backup/restore, canary traffic, and rollback evidence.
|
|
38
|
+
- Added the initial `rubydb-python` DB-API 2.0 adapter under
|
|
39
|
+
`adapters/python`, including TLS URLs, prepared statements, transactions,
|
|
40
|
+
pooling, timeouts, cancellation, tests, and PyPI build instructions.
|
|
41
|
+
|
|
42
|
+
## 0.1.4 - 2026-09-09
|
|
43
|
+
|
|
44
|
+
- Returned logical generated primary-key values to ActiveRecord separately
|
|
45
|
+
from physical storage row identifiers, including after deletes.
|
|
46
|
+
- Preserved generated insert identifiers through the RubyDB result boundary.
|
|
47
|
+
|
|
26
48
|
## 0.1.3 - 2026-09-09
|
|
27
49
|
|
|
28
50
|
- Normalized numeric MVCC visibility-map keys after restart to prevent mixed
|
|
@@ -47,8 +69,8 @@ All notable changes to RubyDB are documented here. Versions follow
|
|
|
47
69
|
range.
|
|
48
70
|
|
|
49
71
|
## 0.1.0 - 2026-09-07
|
|
50
|
-
|
|
51
|
-
- Initial public release candidate.
|
|
52
|
-
- Includes the embedded engine, ActiveRecord adapter, backup/recovery, WAL,
|
|
53
|
-
TLS, authentication, and validated production-hardening checkpoints.
|
|
54
|
-
- See `docs/production_validation.md` for tested scope and operational limits.
|
|
72
|
+
|
|
73
|
+
- Initial public release candidate.
|
|
74
|
+
- Includes the embedded engine, ActiveRecord adapter, backup/recovery, WAL,
|
|
75
|
+
TLS, authentication, and validated production-hardening checkpoints.
|
|
76
|
+
- See `docs/production_validation.md` for tested scope and operational limits.
|
data/CODE_OF_CONDUCT.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# Contributor Code of Conduct
|
|
2
|
-
|
|
3
|
-
RubyDB contributors are expected to make participation respectful, practical,
|
|
4
|
-
and safe. Harassment, discrimination, threats, personal attacks, doxxing,
|
|
5
|
-
deliberate disruption, and unwanted sexual attention are not acceptable.
|
|
6
|
-
|
|
7
|
-
Project maintainers may moderate comments, discussions, issues, and pull
|
|
8
|
-
requests when conduct violates this standard. They should explain the reason,
|
|
9
|
-
apply the rule consistently, and protect people who report concerns.
|
|
10
|
-
|
|
11
|
-
Report a conduct concern privately to the repository maintainers through a
|
|
12
|
-
GitHub private security/contact channel. Do not include production secrets or
|
|
13
|
-
customer data. Reports are handled confidentially as far as practical.
|
|
1
|
+
# Contributor Code of Conduct
|
|
2
|
+
|
|
3
|
+
RubyDB contributors are expected to make participation respectful, practical,
|
|
4
|
+
and safe. Harassment, discrimination, threats, personal attacks, doxxing,
|
|
5
|
+
deliberate disruption, and unwanted sexual attention are not acceptable.
|
|
6
|
+
|
|
7
|
+
Project maintainers may moderate comments, discussions, issues, and pull
|
|
8
|
+
requests when conduct violates this standard. They should explain the reason,
|
|
9
|
+
apply the rule consistently, and protect people who report concerns.
|
|
10
|
+
|
|
11
|
+
Report a conduct concern privately to the repository maintainers through a
|
|
12
|
+
GitHub private security/contact channel. Do not include production secrets or
|
|
13
|
+
customer data. Reports are handled confidentially as far as practical.
|
data/CONTRIBUTING.md
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
# Contributing to RubyDB
|
|
2
|
-
|
|
3
|
-
RubyDB is a correctness-first database project. Small, reviewable changes with
|
|
4
|
-
tests and documentation are preferred over broad changes with unverified
|
|
5
|
-
claims.
|
|
6
|
-
|
|
7
|
-
## Development
|
|
8
|
-
|
|
9
|
-
```sh
|
|
10
|
-
bundle install
|
|
11
|
-
bundle exec rspec
|
|
12
|
-
bundle exec rubocop
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Use a temporary database for tests. Do not commit database files, credentials,
|
|
16
|
-
generated private keys, coverage output, or release artifacts. Follow the
|
|
17
|
-
architecture and testing guides in `docs/`.
|
|
18
|
-
|
|
19
|
-
## Pull requests
|
|
20
|
-
|
|
21
|
-
Explain the invariant being changed, the failure mode it prevents, and the
|
|
22
|
-
rollback or compatibility impact. Add regression coverage for parser,
|
|
23
|
-
execution, storage, transaction, protocol, adapter, or operational changes.
|
|
24
|
-
Run the relevant workload, crash, backup/restore, and security checks. Update
|
|
25
|
-
the compatibility contract when behavior changes.
|
|
26
|
-
|
|
27
|
-
Never describe a simulated fault test as proof of physical power-loss,
|
|
28
|
-
multi-host, or independent security-review results. See the
|
|
29
|
-
[lessons learned](docs/lessons-learned.md) guide.
|
|
1
|
+
# Contributing to RubyDB
|
|
2
|
+
|
|
3
|
+
RubyDB is a correctness-first database project. Small, reviewable changes with
|
|
4
|
+
tests and documentation are preferred over broad changes with unverified
|
|
5
|
+
claims.
|
|
6
|
+
|
|
7
|
+
## Development
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
bundle install
|
|
11
|
+
bundle exec rspec
|
|
12
|
+
bundle exec rubocop
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Use a temporary database for tests. Do not commit database files, credentials,
|
|
16
|
+
generated private keys, coverage output, or release artifacts. Follow the
|
|
17
|
+
architecture and testing guides in `docs/`.
|
|
18
|
+
|
|
19
|
+
## Pull requests
|
|
20
|
+
|
|
21
|
+
Explain the invariant being changed, the failure mode it prevents, and the
|
|
22
|
+
rollback or compatibility impact. Add regression coverage for parser,
|
|
23
|
+
execution, storage, transaction, protocol, adapter, or operational changes.
|
|
24
|
+
Run the relevant workload, crash, backup/restore, and security checks. Update
|
|
25
|
+
the compatibility contract when behavior changes.
|
|
26
|
+
|
|
27
|
+
Never describe a simulated fault test as proof of physical power-loss,
|
|
28
|
+
multi-host, or independent security-review results. See the
|
|
29
|
+
[lessons learned](docs/lessons-learned.md) guide.
|
data/GOVERNANCE.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# RubyDB governance
|
|
2
|
-
|
|
3
|
-
RubyDB is maintained through reviewed changes in the public repository. The
|
|
4
|
-
maintainers are responsible for release decisions, security coordination,
|
|
5
|
-
compatibility claims, and accepting changes that affect data safety.
|
|
6
|
-
|
|
7
|
-
Changes to storage format, WAL, recovery, transaction isolation, replication,
|
|
8
|
-
authentication, protocol framing, or release automation require focused tests,
|
|
9
|
-
documentation, and an explicit operational-impact review.
|
|
10
|
-
|
|
11
|
-
Security vulnerabilities should be reported privately as described in
|
|
12
|
-
`SECURITY.md`. Public issues are appropriate for reproducible bugs that do not
|
|
13
|
-
expose an unpatched vulnerability.
|
|
14
|
-
|
|
15
|
-
The project follows semantic versioning while compatibility is still evolving.
|
|
16
|
-
Release tags must pass the protected CI and RubyGems release checks.
|
|
1
|
+
# RubyDB governance
|
|
2
|
+
|
|
3
|
+
RubyDB is maintained through reviewed changes in the public repository. The
|
|
4
|
+
maintainers are responsible for release decisions, security coordination,
|
|
5
|
+
compatibility claims, and accepting changes that affect data safety.
|
|
6
|
+
|
|
7
|
+
Changes to storage format, WAL, recovery, transaction isolation, replication,
|
|
8
|
+
authentication, protocol framing, or release automation require focused tests,
|
|
9
|
+
documentation, and an explicit operational-impact review.
|
|
10
|
+
|
|
11
|
+
Security vulnerabilities should be reported privately as described in
|
|
12
|
+
`SECURITY.md`. Public issues are appropriate for reproducible bugs that do not
|
|
13
|
+
expose an unpatched vulnerability.
|
|
14
|
+
|
|
15
|
+
The project follows semantic versioning while compatibility is still evolving.
|
|
16
|
+
Release tags must pass the protected CI and RubyGems release checks.
|
data/Gemfile
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
source
|
|
4
|
-
|
|
5
|
-
gemspec
|
|
6
|
-
|
|
7
|
-
gem
|
|
8
|
-
gem
|
|
9
|
-
gem
|
|
10
|
-
gem
|
|
11
|
-
gem
|
|
12
|
-
gem
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
gem
|
|
17
|
-
gem
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gemspec
|
|
6
|
+
|
|
7
|
+
gem "rake", "~> 13.2"
|
|
8
|
+
gem "rspec", "~> 3.13"
|
|
9
|
+
gem "rubocop", "~> 1.64", require: false
|
|
10
|
+
gem "rubocop-performance", "~> 1.21", require: false
|
|
11
|
+
gem "standard", "~> 1.39.0", require: false
|
|
12
|
+
gem "simplecov", "~> 0.22", require: false
|
|
13
|
+
gem "benchmark", "~> 0.4", require: false
|
|
14
|
+
|
|
15
|
+
# Optional development dependencies
|
|
16
|
+
gem "pry", "~> 0.14", group: :development
|
|
17
|
+
gem "pry-byebug", "~> 3.10", group: :development
|
|
18
|
+
gem "memory_profiler", "~> 1.0", group: :development
|
data/Gemfile.lock
CHANGED
|
@@ -1,71 +1,125 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: .
|
|
3
|
-
specs:
|
|
4
|
-
rubydb (0.1.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
rubydb (0.1.5)
|
|
5
|
+
base64 (>= 0.2)
|
|
6
|
+
bigdecimal (>= 3.1)
|
|
7
|
+
concurrent-ruby (>= 1.2)
|
|
8
|
+
date (~> 3.3)
|
|
9
|
+
digest (~> 3.1)
|
|
10
|
+
json (~> 2.7)
|
|
11
|
+
time (~> 0.4)
|
|
12
|
+
|
|
13
|
+
GEM
|
|
14
|
+
remote: https://rubygems.org/
|
|
15
|
+
specs:
|
|
16
|
+
ast (2.4.3)
|
|
17
|
+
base64 (0.3.0)
|
|
18
|
+
benchmark (0.5.0)
|
|
19
|
+
bigdecimal (4.1.2)
|
|
20
|
+
byebug (13.0.0)
|
|
21
|
+
reline (>= 0.6.0)
|
|
22
|
+
coderay (1.1.3)
|
|
23
|
+
concurrent-ruby (1.3.8)
|
|
24
|
+
date (3.5.1)
|
|
25
|
+
diff-lcs (1.6.2)
|
|
26
|
+
digest (3.2.1)
|
|
27
|
+
docile (1.4.1)
|
|
28
|
+
io-console (0.9.2)
|
|
29
|
+
json (2.21.2)
|
|
30
|
+
language_server-protocol (3.17.0.6)
|
|
31
|
+
lint_roller (1.1.0)
|
|
32
|
+
memory_profiler (1.1.0)
|
|
33
|
+
method_source (1.1.0)
|
|
34
|
+
parallel (1.28.0)
|
|
35
|
+
parser (3.3.12.0)
|
|
36
|
+
ast (~> 2.4.1)
|
|
37
|
+
racc
|
|
38
|
+
prism (1.9.0)
|
|
39
|
+
pry (0.16.0)
|
|
40
|
+
coderay (~> 1.1)
|
|
41
|
+
method_source (~> 1.0)
|
|
42
|
+
reline (>= 0.6.0)
|
|
43
|
+
pry-byebug (3.12.0)
|
|
44
|
+
byebug (~> 13.0)
|
|
45
|
+
pry (>= 0.13, < 0.17)
|
|
46
|
+
racc (1.8.1)
|
|
47
|
+
rainbow (3.1.1)
|
|
48
|
+
rake (13.2.1)
|
|
49
|
+
regexp_parser (2.12.0)
|
|
50
|
+
reline (0.7.0)
|
|
51
|
+
io-console (~> 0.5)
|
|
52
|
+
rexml (3.4.4)
|
|
53
|
+
rspec (3.13.0)
|
|
54
|
+
rspec-core (~> 3.13.0)
|
|
55
|
+
rspec-expectations (~> 3.13.0)
|
|
56
|
+
rspec-mocks (~> 3.13.0)
|
|
57
|
+
rspec-core (3.13.0)
|
|
58
|
+
rspec-support (~> 3.13.0)
|
|
59
|
+
rspec-expectations (3.13.5)
|
|
60
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
61
|
+
rspec-support (~> 3.13.0)
|
|
62
|
+
rspec-mocks (3.13.8)
|
|
63
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
64
|
+
rspec-support (~> 3.13.0)
|
|
65
|
+
rspec-support (3.13.1)
|
|
66
|
+
rubocop (1.64.1)
|
|
67
|
+
json (~> 2.3)
|
|
68
|
+
language_server-protocol (>= 3.17.0)
|
|
69
|
+
parallel (~> 1.10)
|
|
70
|
+
parser (>= 3.3.0.2)
|
|
71
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
72
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
73
|
+
rexml (>= 3.2.5, < 4.0)
|
|
74
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
75
|
+
ruby-progressbar (~> 1.7)
|
|
76
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
77
|
+
rubocop-ast (1.50.0)
|
|
78
|
+
parser (>= 3.3.7.2)
|
|
79
|
+
prism (~> 1.7)
|
|
80
|
+
rubocop-performance (1.23.1)
|
|
81
|
+
rubocop (>= 1.48.1, < 2.0)
|
|
82
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
83
|
+
ruby-progressbar (1.13.0)
|
|
84
|
+
simplecov (0.22.0)
|
|
85
|
+
docile (~> 1.1)
|
|
86
|
+
simplecov-html (~> 0.11)
|
|
87
|
+
simplecov_json_formatter (~> 0.1)
|
|
88
|
+
simplecov-html (0.13.2)
|
|
89
|
+
simplecov_json_formatter (0.1.4)
|
|
90
|
+
standard (1.39.2)
|
|
91
|
+
language_server-protocol (~> 3.17.0.2)
|
|
92
|
+
lint_roller (~> 1.0)
|
|
93
|
+
rubocop (~> 1.64.0)
|
|
94
|
+
standard-custom (~> 1.0.0)
|
|
95
|
+
standard-performance (~> 1.4)
|
|
96
|
+
standard-custom (1.0.2)
|
|
97
|
+
lint_roller (~> 1.0)
|
|
98
|
+
rubocop (~> 1.50)
|
|
99
|
+
standard-performance (1.6.0)
|
|
100
|
+
lint_roller (~> 1.1)
|
|
101
|
+
rubocop-performance (~> 1.23.0)
|
|
102
|
+
time (0.4.2)
|
|
103
|
+
date
|
|
104
|
+
unicode-display_width (2.6.0)
|
|
105
|
+
|
|
106
|
+
PLATFORMS
|
|
107
|
+
arm64-darwin-23
|
|
108
|
+
ruby
|
|
109
|
+
x64-mingw-ucrt
|
|
110
|
+
|
|
111
|
+
DEPENDENCIES
|
|
112
|
+
benchmark (~> 0.4)
|
|
113
|
+
memory_profiler (~> 1.0)
|
|
114
|
+
pry (~> 0.14)
|
|
115
|
+
pry-byebug (~> 3.10)
|
|
116
|
+
rake (~> 13.2)
|
|
117
|
+
rspec (~> 3.13)
|
|
118
|
+
rubocop (~> 1.64)
|
|
119
|
+
rubocop-performance (~> 1.21)
|
|
120
|
+
rubydb!
|
|
121
|
+
simplecov (~> 0.22)
|
|
122
|
+
standard (~> 1.39.0)
|
|
123
|
+
|
|
124
|
+
BUNDLED WITH
|
|
125
|
+
2.5.9
|