[Racket] Ferti hydroponic nutrient solver, redux.
Use the 'joined' table expression throughout.
No more string-based SQL queries! Only DSL!
models/nutrient-measurement.rkt
@@ -144,38 +144,25 @@
144
144
(define (get-nutrient-measurement-values nutrient-measurement)
145
145
(for/list ([(nutrient-id name formula value_ppm)
146
146
(in-query (current-conn)
147
Removed:
(string-join
148
Removed:
'("SELECT n.id, n.canonical_name, n.formula, nv.value_ppm"
149
Removed:
"FROM nutrient_values nv"
150
Removed:
"JOIN nutrient_value_sets nvs ON nvs.id = nv.value_set_id"
151
Removed:
"JOIN nutrient_measurements nm ON nm.id = nvs.nutrient_measurement_id"
152
Removed:
"JOIN nutrients n ON n.id = nv.nutrient_id"
153
Removed:
"WHERE nm.id = $1"))
154
Removed:
(nutrient-measurement-id nutrient-measurement))])
147
Added:
(select n.id n.canonical_name n.formula nv.value_ppm
148
Added:
#:from (TableExpr:AST ,joined)
149
Added:
#:where (= nm.id ,(nutrient-measurement-id nutrient-measurement))))])
155
150
(cons (nutrient nutrient-id name formula) value_ppm)))
156
151
157
152
(define (get-nutrient-measurement-value nutrient-measurement nutrient)
158
153
(query-maybe-value (current-conn)
159
Removed:
(string-join
160
Removed:
'("SELECT value_ppm"
161
Removed:
"FROM nutrient_values nv"
162
Removed:
"JOIN nutrient_value_sets nvs ON nvs.id = nv.value_set_id"
163
Removed:
"JOIN nutrient_measurements nm ON nm.id = nvs.nutrient_measurement_id"
164
Removed:
"WHERE nm.id = $1 AND nv.nutrient_id = $2"))
165
Removed:
(nutrient-measurement-id nutrient-measurement)
166
Removed:
(nutrient-id nutrient)))
154
Added:
(select value_ppm
155
Added:
#:from (TableExpr:AST ,joined)
156
Added:
#:where (and (= nm.id ,(nutrient-measurement-id nutrient-measurement))
157
Added:
(= nv.nutrient_id ,(nutrient-id nutrient))))))
167
158
168
159
(define (get-latest-nutrient-measurement-value nutrient)
169
160
(query-maybe-value (current-conn)
170
Removed:
(string-join
171
Removed:
'("SELECT value_ppm"
172
Removed:
"FROM nutrient_values nv"
173
Removed:
"JOIN nutrient_value_sets nvs ON nvs.id = nv.value_set_id"
174
Removed:
"JOIN nutrient_measurements nm ON nm.id = nvs.nutrient_measurement_id"
175
Removed:
"WHERE nv.nutrient_id = $1"
176
Removed:
"ORDER BY nm.measured_on DESC"
177
Removed:
"LIMIT 1"))
178
Removed:
(nutrient-id nutrient)))
161
Added:
(select value_ppm
162
Added:
#:from (TableExpr:AST ,joined)
163
Added:
#:where (= nv.nutrient_id ,(nutrient-id nutrient))
164
Added:
#:order-by nm.measured_on #:desc
165
Added:
#:limit 1)))
179
166
180
167
181
168
;; UPDATE