.
This commit is contained in:
@@ -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).}
|
@item{@racket[(roos-id! obj id)] — set object's ID (used in persistence).}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@subsection{Provided procedures}
|
||||||
|
|
||||||
@defproc[(-> [obj any/c] [name symbol?] ...) any/c]{
|
@defproc[(-> [obj any/c] [name symbol?] ...) any/c]{
|
||||||
Invoke a getter, setter, or method on ROOS object @racket[obj] using name and arguments.
|
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.
|
Globally disables or enables deletion via the registered deleter procedure. Useful when shutting down.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@section{Persistence and Storage Backend}
|
@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:
|
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 db)
|
||||||
(require racket/vector)
|
(require racket/vector)
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
|
||||||
;; Conversion of field values
|
@;{;; Conversion of field values}
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
|
||||||
|
|
||||||
(define (value->string s-expr)
|
(define (value->string s-expr)
|
||||||
(let ((o (open-output-string)))
|
(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)))
|
(let ((o (open-input-string str)))
|
||||||
(read o)))
|
(read o)))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
|
||||||
;; Database storage backend
|
@;{;; Database storage backend}
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
@;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
|
||||||
|
|
||||||
(define conn (sqlite3-connect #:database "roos.db" #:mode 'create))
|
(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)")
|
(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 b (-! book))
|
||||||
|
|
||||||
(define (adder n t)
|
(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)))))
|
(-> b (for-each (lambda (p) (displayln (-> p name)))))
|
||||||
|
|
||||||
;; Reopen addressbook later from persistent storage
|
@{;; Reopen addressbook later from persistent storage}
|
||||||
(define a (-! book))
|
(define a (-! book))
|
||||||
(-> b (for-each (lambda (p) (displayln (-> p name)))))
|
(-> b (for-each (lambda (p) (displayln (-> p name)))))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user