Update model entity persistency (creation) logic.

This greatly reduces the amount of SQL INSERT queries.

Commit
a23660b2edb802bdf0fcc65a40d3294fc235cb4e
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
models/crop-requirement.rkt
index 256305e1..96d94cfc 100644..100644
@@ -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
index f7a5e9c8..7c0a2671 100644..100644
@@ -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
index 88177daa..a9904d76 100644..100644
@@ -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