This commit is contained in:
2025-07-09 15:39:10 +02:00
parent 11c173b5f7
commit 466ba16d31

View File

@@ -57,6 +57,8 @@ Methods and fields are always virtual. Superclass definitions are resolved based
@item{@racket[(roos-id! obj id)] — set object's ID (used in persistence).}
]
@subsection{Provided procedures}
@defproc[(-> [obj any/c] [name symbol?] ...) any/c]{
Invoke a getter, setter, or method on ROOS object @racket[obj] using name and arguments.
}
@@ -119,7 +121,6 @@ Registers the storage backend for persistent attributes. This must be set before
Globally disables or enables deletion via the registered deleter procedure. Useful when shutting down.
}
@section{Persistence and Storage Backend}
ROOS lets you persist selected attributes by tagging them with @racket[persist]. Persistence is handled by user-provided backends through:
@@ -147,9 +148,9 @@ Below is an example SQLite backend implementation that stores fields in a table:
(require db)
(require racket/vector)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Conversion of field values
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
@;{;; Conversion of field values}
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
(define (value->string s-expr)
(let ((o (open-output-string)))
@@ -160,9 +161,9 @@ Below is an example SQLite backend implementation that stores fields in a table:
(let ((o (open-input-string str)))
(read o)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Database storage backend
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
@;{;; Database storage backend}
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
(define conn (sqlite3-connect #:database "roos.db" #:mode 'create))
(query-exec conn "CREATE TABLE IF NOT EXISTS store (class TEXT, id TEXT, field TEXT, val TEXT)")
@@ -253,7 +254,7 @@ This example builds an address book with persistent reference to persons, using
)
;; Create sample data
@;{;; Create sample data}
(define b (-! book))
(define (adder n t)
@@ -269,7 +270,7 @@ This example builds an address book with persistent reference to persons, using
(-> b (for-each (lambda (p) (displayln (-> p name)))))
;; Reopen addressbook later from persistent storage
@{;; Reopen addressbook later from persistent storage}
(define a (-! book))
(-> b (for-each (lambda (p) (displayln (-> p name)))))