From 63f3c5dedd01569366e5209a79d79ec6c940d020 Mon Sep 17 00:00:00 2001 From: Sam Anklesaria Date: Tue, 16 Jun 2009 14:36:01 -0500 Subject: [PATCH] persistency allows sql types for slots --- basis/db/queries/queries.factor | 6 +++- extra/persistency/persistency.factor | 9 ++++-- extra/recipes/recipes.factor | 41 ++++++++++++++++++---------- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/basis/db/queries/queries.factor b/basis/db/queries/queries.factor index c4aa47d383..d2674205b1 100755 --- a/basis/db/queries/queries.factor +++ b/basis/db/queries/queries.factor @@ -4,7 +4,7 @@ USING: accessors kernel math namespaces make sequences random strings math.parser math.intervals combinators math.bitwise nmake db db.tuples db.types classes words shuffle arrays destructors continuations db.tuples.private prettyprint -db.private byte-arrays ; +db.private byte-arrays strings.parser parser ; IN: db.queries GENERIC: where ( specs obj -- ) @@ -130,6 +130,10 @@ M: integer where ( spec obj -- ) object-where ; M: string where ( spec obj -- ) object-where ; +TUPLE: pattern value ; C: pattern +SYNTAX: %" parse-string parsed ; +M: pattern where value>> over column-name>> 0% " LIKE " 0% bind# ; + : filter-slots ( tuple specs -- specs' ) [ slot-name>> swap get-slot-named diff --git a/extra/persistency/persistency.factor b/extra/persistency/persistency.factor index e56a81fd7c..479d39a2b7 100644 --- a/extra/persistency/persistency.factor +++ b/extra/persistency/persistency.factor @@ -6,10 +6,13 @@ IN: persistency TUPLE: persistent id ; -: add-types ( table -- table' ) [ dup array? [ first ] when dup >upper FACTOR-BLOB 3array ] map - { "id" "ID" +db-assigned-id+ } prefix ; +: add-types ( table -- table' ) [ dup array? [ [ first dup >upper ] [ second ] bi 3array ] + [ dup >upper FACTOR-BLOB 3array ] if + ] map { "id" "ID" +db-assigned-id+ } prefix ; -SYNTAX: STORED-TUPLE: parse-tuple-definition [ drop persistent ] dip [ define-tuple-class ] +: remove-types ( table -- table' ) [ dup array? [ first ] when ] map ; + +SYNTAX: STORED-TUPLE: parse-tuple-definition [ drop persistent ] dip [ remove-types define-tuple-class ] [ nip [ dup unparse >upper ] [ add-types ] bi* define-persistent ] 3bi ; : define-db ( database class -- ) swap [ [ ensure-table ] with-db ] [ "database" set-word-prop ] 2bi ; diff --git a/extra/recipes/recipes.factor b/extra/recipes/recipes.factor index 788dfb1a51..f9663403f5 100644 --- a/extra/recipes/recipes.factor +++ b/extra/recipes/recipes.factor @@ -1,18 +1,23 @@ -USING: accessors arrays db.tuples db.sqlite persistency +USING: accessors arrays db.tuples db.sqlite persistency db.queries io.files.temp kernel monads sequences ui ui.frp.gadgets ui.frp.layout ui.frp.signals ui.gadgets.scrollers ui.gadgets.labels -colors.constants ui.pens.solid combinators math locals strings -ui.tools.inspector ; +colors.constants ui.pens.solid combinators math locals strings fries +ui.images db.types ; FROM: sets => prune ; IN: recipes -STORED-TUPLE: recipe title votes txt genre ; -: ( title genre text -- recipe ) recipe new swap >>txt swap >>genre swap >>title ; +STORED-TUPLE: recipe { title { VARCHAR 100 } } { votes INTEGER } { txt TEXT } { genre { VARCHAR 100 } } ; +: ( title genre text -- recipe ) recipe new swap >>txt swap >>genre swap >>title 0 >>votes ; "recipes.db" temp-file recipe define-db -: top-recipes ( -- recipes ) T{ recipe } >>tuple "votes" >>order get-tuples ; -: top-genres ( -- genres ) top-recipes [ genre>> ] map prune 5 (head-slice) ; +: top-recipes ( offset search -- recipes ) T{ recipe } rot >>title >>tuple + "votes" >>order 30 >>limit swap >>offset get-tuples ; +: top-genres ( -- genres ) f f top-recipes [ genre>> ] map prune 4 (head-slice) ; +: ( str -- button ) i" vocab:recipes/icons/_.tiff" ; + : interface ( -- book ) [ [ - [ $ TOOLBAR $ $ GENRES $ ] { 5 0 } >>gap COLOR: gray >>interior , + [ $ TOOLBAR $ $ SEARCH $ ] COLOR: AliceBlue >>interior , + [ "Genres:"