[Racket] Ferti hydroponic nutrient solver, redux.
Replace string query with DSL query.
models/crop.rkt
@@ -49,20 +49,20 @@
49
49
50
50
(define (get-crop #:id [id #f]
51
51
#:name [name #f])
52
Removed:
(define (where-expr)
53
Removed:
(define clauses
54
Removed:
(filter values
55
Removed:
(list (and id (format "id = ~e" id))
56
Removed:
(and name (format "canonical_name = ~e" name)))))
52
Added:
(define where
57
53
(cond
58
Removed:
[(null? clauses) ""]
59
Removed:
[else (format "WHERE ~a" (string-join clauses " AND "))]))
60
Removed:
(define query (string-join
61
Removed:
`("SELECT id, canonical_name"
62
Removed:
"FROM crops"
63
Removed:
,(where-expr)
64
Removed:
"ORDER BY id ASC"
65
Removed:
"LIMIT 1")))
54
Added:
[(and id name)
55
Added:
(scalar-expr-qq (and (= id ,id)
56
Added:
(= canonical_name ,name)))]
57
Added:
[id
58
Added:
(scalar-expr-qq (= id ,id))]
59
Added:
[name
60
Added:
(scalar-expr-qq (= canonical_name ,name))]))
61
Added:
(define query (select id canonical_name
62
Added:
#:from crops
63
Added:
#:where (ScalarExpr:AST ,where)
64
Added:
#:order-by id #:asc
65
Added:
#:limit 1))
66
66
(match (query-maybe-row (current-conn) query)
67
67
[(vector id* name*)
68
68
(crop id* name*)]