Add delete and remove operations for entry management

This commit is contained in:
2026-02-21 21:44:28 +01:00
parent 662d47ac21
commit 4a04bf50c4
4 changed files with 156 additions and 3 deletions

View File

@@ -43,6 +43,9 @@ engine.init("tenant_1")
engine.save("tenant_1", "user_1", "config", {"theme": "dark", "lang": "en"})
data = engine.load("tenant_1", "config")
print(data) # {"theme": "dark", "lang": "en"}
# Delete an entry
engine.delete("tenant_1", "user_1", "config")
```
## Core Concepts
@@ -135,6 +138,32 @@ if engine.exists("tenant_1", "config"):
print("Entry exists")
```
### Deletion Operations
```python
# Delete an entire entry (removes from head, keeps history)
deleted = engine.delete("tenant_1", "user_1", "config")
# Returns True if entry existed, False otherwise
# Historical snapshots remain accessible by digest
old_config = engine.load("tenant_1", "config", digest=history[0])
# Remove a specific key from an entry (Pattern 2)
engine.put("tenant_1", "user_1", "users", "alice", {"name": "Alice", "role": "admin"})
engine.put("tenant_1", "user_1", "users", "bob", {"name": "Bob", "role": "user"})
removed = engine.remove("tenant_1", "user_1", "users", "alice")
# Returns True if key existed, False otherwise
# Entry still exists, only "alice" was removed
all_users = engine.get("tenant_1", "users") # Returns only bob
```
**Key differences:**
- `delete()`: Removes entire entry from `head` file (works with both Pattern 1 and Pattern 2)
- `remove()`: Removes a specific key from an entry, creates new snapshot (Pattern 2 only)
- Both operations preserve historical snapshots in `objects/` directory
## Custom Serialization
MyDbEngine supports three approaches for custom serialization:
@@ -271,6 +300,8 @@ engine.save("tenant_1", "user_1", "my_data", obj)
| `put(tenant_id, user_id, entry, key, value) -> bool` | Add/update single record |
| `put_many(tenant_id, user_id, entry, items) -> bool` | Add/update multiple records |
| `get(tenant_id, entry, key=None, digest=None) -> object` | Get record(s) |
| `delete(tenant_id, user_id, entry) -> bool` | Delete entire entry from head (keeps history) |
| `remove(tenant_id, user_id, entry, key) -> bool` | Remove specific key from entry (Pattern 2) |
| `exists(tenant_id, entry) -> bool` | Check if entry exists |
### History
@@ -350,4 +381,5 @@ See LICENSE file for details.
## Version History
* 0.1.0 - Initial release
* 0.2.0 - Added custom reference handlers
* 0.2.1 - A handler can only be registered once
* 0.2.1 - A handler can only be registered once
* 0.3.0 - Added delete() and remove()