From 8d32850b8fb30ad633f70bc17b2cd63930c9f1ee Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Sun, 15 Jul 2018 21:03:13 +0100 Subject: [PATCH] Searching lists works; paging lists still doesn't, but is closer. --- src/adl/to_hugsql_queries.clj | 12 ++--- src/adl/to_selmer_routes.clj | 88 +++++++++++++++++---------------- src/adl/to_selmer_templates.clj | 51 +++++++++---------- 3 files changed, 74 insertions(+), 77 deletions(-) diff --git a/src/adl/to_hugsql_queries.clj b/src/adl/to_hugsql_queries.clj index 2387610..f45dcc2 100644 --- a/src/adl/to_hugsql_queries.clj +++ b/src/adl/to_hugsql_queries.clj @@ -140,7 +140,7 @@ (let [entity-name (safe-name (:name (:attrs entity)) :sql) pretty-name (singularise entity-name) query-name (str "search-strings-" entity-name) - signature ":? :1" + signature ":? :*" properties (remove #(#{"link"}(:type (:attrs %))) (all-properties entity))] (hash-map (keyword query-name) @@ -168,12 +168,12 @@ string? (map #(str - "(if (:" (-> % :attrs :name) " params) \"OR " - (case (base-type % application) + "(if (:" (-> % :attrs :name) " params) (str \"OR " + (case (-> % :attrs :type) ("string" "text") (str (safe-name (-> % :attrs :name) :sql) - " LIKE '%:" (-> % :attrs :name) "%'") + " LIKE '%\" (:" (-> % :attrs :name) " params) \"%'") ("date" "time" "timestamp") (str (safe-name (-> % :attrs :name) :sql) @@ -181,12 +181,12 @@ "entity" (str (safe-name (-> % :attrs :name) :sql) - "_expanded LIKE '%:" (-> % :attrs :name) "%'") + "_expanded LIKE '%\" (:" (-> % :attrs :name) " params) \"%'") (str (safe-name (-> % :attrs :name) :sql) " = :" (-> % :attrs :name))) - "\")") + "\"))") properties)))) (order-by-clause entity "lv_") "--~ (if (:offset params) \"OFFSET :offset \")" diff --git a/src/adl/to_selmer_routes.clj b/src/adl/to_selmer_routes.clj index 272c007..6f7b5e7 100644 --- a/src/adl/to_selmer_routes.clj +++ b/src/adl/to_selmer_routes.clj @@ -140,49 +140,53 @@ (defn make-list-handler-content [f e a n] (list - 'let - (vector - 'records - (list - 'if - (list - 'some - (set (map #(keyword (-> % :attrs :name)) (all-properties e))) - (list 'keys 'params)) - (list - 'support/do-or-log-error + 'let + (vector + 'records (list - (symbol (str "db/search-strings-" (:name (:attrs e)))) - (symbol "db/*db*") - 'params) - :message (str - "Error while searching " - (singularise (:name (:attrs e))) - " records") - :error-return {:warnings [(str - "Error while searching " - (singularise (:name (:attrs e))) - " records")]}) - (list - 'support/do-or-log-error - (list - (symbol - (str - "db/list-" - (:name (:attrs e)))) - (symbol "db/*db*") {}) - :message (str - "Error while fetching " - (singularise (:name (:attrs e))) - " records") - :error-return {:warnings [(str - "Error while fetching " - (singularise (:name (:attrs e))) - " records")]}))) - (list 'if - (list :warnings 'records) - 'records - {:records 'records}))) + 'if + (list + 'some + (set (map #(keyword (-> % :attrs :name)) (all-properties e))) + (list 'keys 'params)) + (list 'do + (list (symbol "log/debug") (list (symbol (str "db/search-strings-" (:name (:attrs e)) "-sqlvec")) 'params)) + (list + 'support/do-or-log-error + (list + (symbol (str "db/search-strings-" (:name (:attrs e)))) + (symbol "db/*db*") + 'params) + :message (str + "Error while searching " + (singularise (:name (:attrs e))) + " records") + :error-return {:warnings [(str + "Error while searching " + (singularise (:name (:attrs e))) + " records")]})) + (list 'do + (list (symbol "log/debug") (list (symbol (str "db/list-" (:name (:attrs e)) "-sqlvec")) 'params)) + (list + 'support/do-or-log-error + (list + (symbol + (str + "db/list-" + (:name (:attrs e)))) + (symbol "db/*db*") {}) + :message (str + "Error while fetching " + (singularise (:name (:attrs e))) + " records") + :error-return {:warnings [(str + "Error while fetching " + (singularise (:name (:attrs e))) + " records")]})))) + (list 'if + (list :warnings 'records) + 'records + {:records 'records}))) (defn make-handler diff --git a/src/adl/to_selmer_templates.clj b/src/adl/to_selmer_templates.clj index 443b3a0..76cb484 100644 --- a/src/adl/to_selmer_templates.clj +++ b/src/adl/to_selmer_templates.clj @@ -665,11 +665,7 @@ "time" "time" "text") base-name (:property (:attrs field)) - search-name (safe-name - (if - (= (:type (:attrs property)) "entity") - (str base-name "_expanded") base-name) - :sql)] + search-name (safe-name base-name :sql)] (hash-map :tag :th :content @@ -728,18 +724,10 @@ {:back-links {:tag :div :content - [ - {:tag :div :attrs {:class "back-link-container"} + [{:tag :div :attrs {:class "back-link-container"} :content - ["{% ifequal params.offset \"0\" %}" - {:tag :a - :attrs {:id "back-link" :class "back-link" :href "{{servlet-context}}/admin"} - :content ["Back"]} - "{% else %}" - {:tag :a :attrs {:id "prev-selector" :class "back-link"} - :content ["Previous"]} - "{% endifunequal %}"]} - ]} + [{:tag :a :attrs {:id "prev-selector" :class "back-link"} + :content ["Previous"]}]}]} :big-links {:tag :div :content @@ -765,8 +753,8 @@ :method "POST"} :content [(csrf-widget) - {:tag :input :attrs {:id "offset" :type "hidden" :value "{{params.offset|default:0}}"}} - {:tag :input :attrs {:id "limit" :type "hidden" :value "{{params.limit|default:50}}"}} + {:tag :input :attrs {:id "offset" :name "offset" :type "hidden" :value "{{params.offset|default:0}}"}} + {:tag :input :attrs {:id "limit" :name "limit" :type "hidden" :value "{{params.limit|default:50}}"}} {:tag :table :attrs {:caption (:name (:attrs entity))} :content @@ -779,21 +767,26 @@ var ow = document.getElementById('offset'); var lw = document.getElementById('limit'); form.addEventListener('submit', function() { - ow.value='0'; + ow.value='0'; }); - {% ifunequal params.offset \"0\" %} - document.getElementById('prev-selector').addEventListener('click', function () { - ow.value=(parseInt(ow.value)-parseInt(lw.value)); - console.log('Updated offset to ' + ow.value); - form.submit(); - }); - {% endifunequal %} + var prevSelector = document.getElementById('prev-selector'); + if (prevSelector != null) { + prevSelector.addEventListener('click', function () { + if (parseInt(ow.value)===0) { + window.location = '{{servlet-context}}/admin'; + } else { + ow.value=(parseInt(ow.value)-parseInt(lw.value)); + console.log('Updated offset to ' + ow.value); + form.submit(); + } + }); + } document.getElementById('next-selector').addEventListener('click', function () { - ow.value=(parseInt(ow.value)+parseInt(lw.value)); - console.log('Updated offset to ' + ow.value); - form.submit(); + ow.value=(parseInt(ow.value)+parseInt(lw.value)); + console.log('Updated offset to ' + ow.value); + form.submit(); });")}))