dup sqlite-#columns [ sqlite-column ] with map ;
: sqlite-step-has-more-rows? ( prepared -- bool )
- dup SQLITE_ROW = [
- drop t
- ] [
- dup SQLITE_DONE =
- [ drop ] [ sqlite-check-result ] if f
- ] if ;
+ {
+ { SQLITE_ROW [ t ] }
+ { SQLITE_DONE [ f ] }
+ [ sqlite-check-result f ]
+ } case ;
: sqlite-next ( prepared -- ? )
sqlite3_step sqlite-step-has-more-rows? ;
swap >>path ;
M: sqlite-db db-open ( db -- db )
- [ path>> sqlite-open ] [ swap >>handle ] bi ;
+ dup path>> sqlite-open >>handle ;
M: sqlite-db db-close ( handle -- ) sqlite-close ;
M: sqlite-db dispose ( db -- ) dispose-db ;
{ "default" [ first number>string join-space ] }
[ 2drop ]
} case ;
-
[ regenerate-params bind-statement* f ] cleanup
] curry 10 retry drop ;
-: resulting-tuple ( row out-params -- tuple )
- dup peek class>> new [
+: resulting-tuple ( class row out-params -- tuple )
+ rot class new [
[
>r slot-name>> r> set-slot-named
] curry 2each
] keep ;
-: query-tuples ( statement -- seq )
+: query-tuples ( exemplar-tuple statement -- seq )
[ out-params>> ] keep query-results [
- [ sql-row-typed swap resulting-tuple ] with query-map
+ [ sql-row-typed swap resulting-tuple ] with with query-map
] with-disposal ;
: query-modify-tuple ( tuple statement -- )
: select-tuples ( tuple -- tuples )
dup dup class <select-by-slots-statement> [
- [ bind-tuple ] keep query-tuples
+ [ bind-tuple ] [ query-tuples ] 2bi
] with-disposal ;
: select-tuple ( tuple -- tuple/f ) select-tuples ?first ;