All tests pass. Is this the end of the link table naming issue?

This commit is contained in:
Simon Brooke 2018-08-02 21:36:28 +01:00
parent 37d56321b3
commit e93368c675
2 changed files with 36 additions and 19 deletions

View file

@ -309,22 +309,22 @@
(= (max n1 n2) 1))) (= (max n1 n2) 1)))
(defn link-related-property-name (defn link-related-query-name
"link is tricky. If there's exactly than one link between the two "link is tricky. If there's exactly than one link between the two
entities, we need to generate the same name from both entities, we need to generate the same name from both
ends of the link" ends of the link"
[property nearside farside] [property nearside farside]
(if (unique-link? nearside farside) (if (unique-link? nearside farside)
(let [ordered (sort-by (-> % :attrs :name) (list nearside farside)) (let [ordered (sort-by #(-> % :attrs :name) (list nearside farside))
e1 (first ordered) e1 (first ordered)
e2 (nth ordered 1)] e2 (nth ordered 1)]
(str "list-" (str "list-"
(safe-name e1 :sql) (safe-name e1 :sql)
"-by-" "-by-"
(safe-name e2 :sql)) (safe-name e2 :sql)))
(str "list-" (str "list-"
(safe-name ~property :sql) "-by-" (safe-name property :sql) "-by-"
(singularise (safe-name ~nearside :sql)))))) (singularise (safe-name nearside :sql)))))
(defn link-table-name (defn link-table-name
@ -352,22 +352,19 @@
`farside` which match a given record on `nearside`, where `nearide` and `farside` which match a given record on `nearside`, where `nearide` and
`farside` are both entities." `farside` are both entities."
[property nearside farside] [property nearside farside]
`(if (if
(and (and
(property? ~property) (property? property)
(entity? ~nearside) (entity? nearside)
(entity? ~farside)) (entity? farside))
(case (-> ~property :attrs :type) (case (-> property :attrs :type)
;; link is tricky. If there's exactly than one link between the two "link" (link-related-query-name property nearside farside)
;; entities, we need to generate the same name from both
;; ends of the link
"link" (link-related-query-name)
"list" (str "list-" "list" (str "list-"
(safe-name ~farside :sql) "-by-" (safe-name farside :sql) "-by-"
(singularise (safe-name ~nearside :sql))) (singularise (safe-name nearside :sql)))
"entity" (str "list-" "entity" (str "list-"
(safe-name ~farside :sql) "-by-" (safe-name nearside :sql) "-by-"
(singularise (safe-name ~nearside :sql))) (singularise (safe-name farside :sql)))
;; default ;; default
(str "ERROR-bad-property-type-" (str "ERROR-bad-property-type-"
(-> ~property :attrs :type) "-of-" (-> ~property :attrs :type) "-of-"

View file

@ -366,7 +366,7 @@
[{:tag :prompt, [{:tag :prompt,
:attrs {:locale "en_GB.UTF-8", :prompt "Gender"}, :attrs {:locale "en_GB.UTF-8", :prompt "Gender"},
:content nil}]}]} :content nil}]}]}
property (child e1 #(= (-> % :attrs :name) "gender")) property (child e2 #(= (-> % :attrs :name) "gender"))
expected "list-electors-by-gender" expected "list-electors-by-gender"
actual (list-related-query-name property e2 e1)] actual (list-related-query-name property e2 e1)]
(is (= expected actual) "just checking...")) (is (= expected actual) "just checking..."))
@ -426,4 +426,24 @@
actual (list-related-query-name property e2 e1)] actual (list-related-query-name property e2 e1)]
(is (= actual expected) "Link property - membersips"))))) (is (= actual expected) "Link property - membersips")))))
;; (def e1 {:tag :entity
;; :attrs {:name "teams"}
;; :content [{:tag :key
;; :content [{:tag :property
;; :attrs {:name "id" :type "integer" :distinct "system"}}]}
;; {:tag :property
;; :attrs {:name "members" :type "link" :entity "canvassers"}}
;; {:tag :property
;; :attrs {:name "organisers" :type "link" :entity "canvassers"}}]})
;; (def e2 {:tag :entity
;; :attrs {:name "canvassers"}
;; :content [{:tag :key
;; :content [{:tag :property
;; :attrs {:name "id" :type "integer" :distinct "system"}}]}
;; {:tag :property
;; :attrs {:name "memberships" :type "link" :entity "teams"}}]})
;; (def property {:tag :property
;; :attrs {:name "members" :type "link" :entity "canvassers"}})
;; (list-related-query-name property e1 e2)