Fixes to generated routes, views and queries

List views now work; edit views don't yet.
This commit is contained in:
Simon Brooke 2018-06-15 10:51:31 +01:00
parent 8ee91b5372
commit e879b8b628
3 changed files with 37 additions and 20 deletions

View file

@ -54,7 +54,9 @@
(defn order-by-clause (defn order-by-clause
"Generate an appropriate `order by` clause for queries on this `entity`" "Generate an appropriate `order by` clause for queries on this `entity`"
[entity] ([entity]
(order-by-clause entity ""))
([entity prefix]
(let (let
[entity-name (:name (:attrs entity)) [entity-name (:name (:attrs entity))
preferred (map preferred (map
@ -65,10 +67,10 @@
(empty? preferred) (empty? preferred)
"" ""
(str (str
"ORDER BY " entity-name "." "ORDER BY " prefix entity-name "."
(s/join (s/join
(str ",\n\t" entity-name ".") (str ",\n\t" prefix entity-name ".")
(flatten (cons preferred (key-names entity)))))))) (flatten (cons preferred (key-names entity)))))))))
(defn insert-query (defn insert-query
@ -152,8 +154,8 @@
(str (str
"-- :doc selects existing " "-- :doc selects existing "
pretty-name pretty-name
" records having any string field matching `:pattern` by substring match") " records having any string field matching the parameter of the same name by substring match")
(str "SELECT * FROM " entity-name) (str "SELECT * FROM lv_" entity-name)
"WHERE " "WHERE "
(s/join (s/join
"\n\tOR " "\n\tOR "
@ -162,9 +164,9 @@
(map (map
#(if #(if
(#{"string" "date" "text"} (:type (:attrs %))) (#{"string" "date" "text"} (:type (:attrs %)))
(str (-> % :attrs :name) " LIKE '%:pattern%'")) (str (-> % :attrs :name) " LIKE '%params." (-> % :attrs :name) "%'"))
properties))) properties)))
(order-by-clause entity) (order-by-clause entity "lv_")
"--~ (if (:offset params) \"OFFSET :offset \")" "--~ (if (:offset params) \"OFFSET :offset \")"
"--~ (if (:limit params) \"LIMIT :limit\" \"LIMIT 100\")")))}))) "--~ (if (:limit params) \"LIMIT :limit\" \"LIMIT 100\")")))})))
@ -232,8 +234,8 @@
(list (list
(str "-- :name " query-name " " signature) (str "-- :name " query-name " " signature)
(str "-- :doc lists all existing " pretty-name " records") (str "-- :doc lists all existing " pretty-name " records")
(str "SELECT * FROM " entity-name) (str "SELECT * FROM lv_" entity-name)
(order-by-clause entity) (order-by-clause entity "lv_")
"--~ (if (:offset params) \"OFFSET :offset \")" "--~ (if (:offset params) \"OFFSET :offset \")"
"--~ (if (:limit params) \"LIMIT :limit\" \"LIMIT 100\")")))}))) "--~ (if (:limit params) \"LIMIT :limit\" \"LIMIT 100\")")))})))
@ -276,9 +278,11 @@
"entity" (list "entity" (list
(str "-- :name " query-name " " signature) (str "-- :name " query-name " " signature)
(str "-- :doc lists all existing " pretty-name " records related to a given " pretty-far) (str "-- :doc lists all existing " pretty-name " records related to a given " pretty-far)
(str "SELECT * \nFROM " entity-name) (str "SELECT * \nFROM lv_" entity-name ", " entity-name)
(str "WHERE " entity-name "." link-field " = :id") (str "WHERE lv_" entity-name "." (first (key-names entity)) " = "
(order-by-clause entity)) entity-name "." (first (key-names entity))
"\n\tAND " entity-name "." link-field " = :id")
(order-by-clause entity "lv_"))
"link" (let [link-table-name "link" (let [link-table-name
(link-table-name entity far-entity)] (link-table-name entity far-entity)]
(list (list

View file

@ -78,11 +78,25 @@
:list :list
{:records {:records
(list (list
(symbol 'if
(str (list
"db/search-strings-" 'not
(singularise (:name (:attrs e))))) (list
'p)}))))))) 'empty?
(list 'remove 'nil? (list 'vals 'p))))
(list
(symbol
(str
"db/search-strings-"
(singularise (:name (:attrs e)))))
(symbol "db/*db*")
'p)
(list
(symbol
(str
"db/list-"
(:name (:attrs e))))
(symbol "db/*db*") {}))})))))))
(defn make-route (defn make-route
"Make a route for method `m` to request the resource with name `n`." "Make a route for method `m` to request the resource with name `n`."

View file

@ -422,7 +422,7 @@
[list-spec entity application] [list-spec entity application]
{:tag :tbody {:tag :tbody
:content :content
["{% for record in %records% %}" ["{% for record in records %}"
{:tag :tr {:tag :tr
:content :content
(apply (apply
@ -438,7 +438,6 @@
:attrs :attrs
{:href {:href
(str (str
"{{servlet-context}}/"
(editor-name entity application) (editor-name entity application)
"?" "?"
(s/join (s/join