[Racket] Ferti hydroponic nutrient solver, redux.
Update model entity persistency (creation) logic.
This greatly reduces the amount of SQL INSERT queries.
Changed files
models/crop-requirement.rkt
@@ -40,27 +40,23 @@
40
40
;; CREATE
41
41
42
42
(define (create-crop-requirement! profile nutrient-values [crop #f])
43
Removed:
(or
44
Removed:
(get-crop-requirement #:profile profile)
45
Removed:
(with-tx
46
Removed:
(query-exec
47
Removed:
(current-conn)
48
Removed:
(if crop
49
Removed:
(insert #:into crop_requirements #:set [crop_id ,(crop-id crop)] [profile ,profile])
50
Removed:
(insert #:into crop_requirements #:set [profile ,profile])))
51
Removed:
(define cr-id
52
Removed:
(query-value (current-conn) (select id #:from crop_requirements #:where (= profile ,profile))))
53
Removed:
(query-exec (current-conn) (insert #:into nutrient_value_sets #:set [crop_requirement_id ,cr-id]))
54
Removed:
(define nvs-id
55
Removed:
(query-value (current-conn)
56
Removed:
(select id #:from nutrient_value_sets #:where (= crop_requirement_id ,cr-id))))
57
Removed:
(for ([(n v) (in-hash nutrient-values)])
58
Removed:
(query-exec (current-conn)
59
Removed:
(insert #:into nutrient_values
60
Removed:
#:set [value_set_id ,nvs-id]
61
Removed:
[nutrient_id ,(nutrient-id n)]
62
Removed:
[value_ppm ,v])))
63
Removed:
(get-crop-requirement #:profile profile))))
43
Added:
(with-tx
44
Added:
(define cr-id
45
Added:
(insert-id
46
Added:
(query (current-conn)
47
Added:
(if crop
48
Added:
(insert #:into crop_requirements #:set [crop_id ,(crop-id crop)] [profile ,profile])
49
Added:
(insert #:into crop_requirements #:set [profile ,profile])))))
50
Added:
(define nvs-id
51
Added:
(insert-id (query (current-conn)
52
Added:
(insert #:into nutrient_value_sets #:set [crop_requirement_id ,cr-id]))))
53
Added:
(insert-nutrient-values (current-conn) nvs-id nutrient-values)
54
Added:
(crop-requirement cr-id
55
Added:
profile
56
Added:
(if crop
57
Added:
(crop-id crop)
58
Added:
#f)
59
Added:
nutrient-values)))
64
60
65
61
;; READ
66
62
models/fertilizer-product.rkt
@@ -24,13 +24,13 @@
24
24
"nutrient-value.rkt"
25
25
"utils.rkt")
26
26
27
Removed:
(struct fertilizer-product (id canonical-name nutrient-values brand-name)
27
Added:
(struct fertilizer-product (id canonical-name brand-name nutrient-values)
28
28
#:transparent
29
Removed:
#:guard (λ (id canonical-name nutrient-values brand-name _)
29
Added:
#:guard (λ (id canonical-name brand-name nutrient-values _)
30
30
(values id
31
31
canonical-name
32
Removed:
nutrient-values
33
Removed:
(if (or (sql-null? brand-name) (= (string-length brand-name) 0)) #f brand-name)))
32
Added:
(if (or (sql-null? brand-name) (= (string-length brand-name) 0)) #f brand-name)
33
Added:
nutrient-values))
34
34
#:property prop:custom-write
35
35
(λ (v out _mode)
36
36
(fprintf out "Fertilizer #~a\n" (fertilizer-product-id v))
@@ -56,28 +56,17 @@
56
56
;; CREATE
57
57
58
58
(define (create-fertilizer-product! canonical-name brand-name nutrient-values)
59
Removed:
(or
60
Removed:
(get-fertilizer-product #:canonical-name canonical-name)
61
Removed:
(with-tx
62
Removed:
(query-exec (current-conn)
63
Removed:
(insert #:into fertilizer_products
64
Removed:
#:set [canonical_name ,canonical-name]
65
Removed:
[brand_name ,brand-name]))
66
Removed:
(define fp-id
67
Removed:
(query-value (current-conn)
68
Removed:
(select id #:from fertilizer_products #:where (= canonical_name ,canonical-name))))
69
Removed:
(query-exec (current-conn)
70
Removed:
(insert #:into nutrient_value_sets #:set [fertilizer_product_id ,fp-id]))
71
Removed:
(define nvs-id
72
Removed:
(query-value (current-conn)
73
Removed:
(select id #:from nutrient_value_sets #:where (= fertilizer_product_id ,fp-id))))
74
Removed:
(for ([(n v) (in-hash nutrient-values)])
75
Removed:
(query-exec (current-conn)
76
Removed:
(insert #:into nutrient_values
77
Removed:
#:set [value_set_id ,nvs-id]
78
Removed:
[nutrient_id ,(nutrient-id n)]
79
Removed:
[value_ppm ,v])))
80
Removed:
(get-fertilizer-product #:canonical-name canonical-name))))
59
Added:
(with-tx (define fp-id
60
Added:
(insert-id (query (current-conn)
61
Added:
(insert #:into fertilizer_products
62
Added:
#:set [canonical_name ,canonical-name]
63
Added:
[brand_name ,brand-name]))))
64
Added:
(define nvs-id
65
Added:
(insert-id (query (current-conn)
66
Added:
(insert #:into nutrient_value_sets
67
Added:
#:set [fertilizer_product_id ,fp-id]))))
68
Added:
(insert-nutrient-values (current-conn) nvs-id nutrient-values)
69
Added:
(fertilizer-product nvs-id canonical-name brand-name nutrient-values)))
81
70
82
71
;; READ
83
72
@@ -92,7 +81,7 @@
92
81
93
82
(define (grouped-row->fertilizer-product grouped-row)
94
83
(match-define (vector fp-id canonical-name brand-name residuals) grouped-row)
95
Removed:
(fertilizer-product fp-id canonical-name (residuals->nutrient-value-hash residuals) brand-name))
84
Added:
(fertilizer-product fp-id canonical-name brand-name (residuals->nutrient-value-hash residuals)))
96
85
97
86
(define (get-fertilizer-products)
98
87
(define grouped-rows
models/nutrient-measurement.rkt
@@ -50,27 +50,16 @@
50
50
;; CREATE
51
51
52
52
(define (create-nutrient-measurement! measurement-date nutrient-values)
53
Removed:
(or
54
Removed:
(get-nutrient-measurement #:date measurement-date)
55
Removed:
(with-tx
56
Removed:
(query-exec (current-conn)
57
Removed:
(insert #:into nutrient_measurements #:set [measurement_date ,measurement-date]))
58
Removed:
(define nm-id
59
Removed:
(query-value
60
Removed:
(current-conn)
61
Removed:
(select id #:from nutrient_measurements #:where (= measurement_date ,measurement-date))))
62
Removed:
(query-exec (current-conn)
63
Removed:
(insert #:into nutrient_value_sets #:set [nutrient_measurement_id ,nm-id]))
64
Removed:
(define nvs-id
65
Removed:
(query-value (current-conn)
66
Removed:
(select id #:from nutrient_value_sets #:where (= nutrient_measurement_id ,nm-id))))
67
Removed:
(for ([(n v) (in-hash nutrient-values)])
68
Removed:
(query-exec (current-conn)
69
Removed:
(insert #:into nutrient_values
70
Removed:
#:set [value_set_id ,nvs-id]
71
Removed:
[nutrient_id ,(nutrient-id n)]
72
Removed:
[value_ppm ,v])))
73
Removed:
(get-nutrient-measurement #:date measurement-date))))
53
Added:
(with-tx (define nm-id
54
Added:
(insert-id (query (current-conn)
55
Added:
(insert #:into nutrient_measurements
56
Added:
#:set [measurement_date ,measurement-date]))))
57
Added:
(define nvs-id
58
Added:
(insert-id (query (current-conn)
59
Added:
(insert #:into nutrient_value_sets
60
Added:
#:set [nutrient_measurement_id ,nm-id]))))
61
Added:
(insert-nutrient-values (current-conn) nvs-id nutrient-values)
62
Added:
(nutrient-measurement nm-id measurement-date nutrient-values)))
74
63
75
64
;; READ
76
65