Guest User

Untitled

a guest
May 25th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. ;;;; entry.lisp
  2.  
  3. (in-package #:crud-mcclim/database)
  4.  
  5. (defun string-uuid ()
  6. (write-to-string (make-v1-uuid)))
  7.  
  8.  
  9. (defun list-keywords-parameters (fields)
  10. "Return list for keywords and list for parameters."
  11. (loop with keys = nil
  12. with vals = nil
  13. for (k v) in fields
  14. unless (null v)
  15. do (push k keys)
  16. (push v vals)
  17. finally (return (values (reverse keys)
  18. (reverse vals)))))
  19.  
  20.  
  21. (defun string-insert-fields-values (&rest fields)
  22. "Return string for fields and string for values."
  23. (let ((values (make-list (length fields) :initial-element #\?)))
  24. (values (format nil "(~{~(~a~^, ~)~})" fields)
  25. (format nil "(~{~a~^, ~})" values))))
  26.  
  27. (defun format-insert-fields-values-parameters (list-name-value)
  28. (multiple-value-bind (keywords parameters)
  29. (list-keywords-parameters list-name-value)
  30. (multiple-value-bind (fields values)
  31. (apply #'string-insert-fields-values keywords)
  32. (values fields values parameters))))
  33.  
  34. (defun execute-insert (table fields)
  35. (multiple-value-bind (keys vals parameters)
  36. (format-insert-fields-values-parameters fields)
  37. (let ((sql (format nil "insert into ~a ~a values ~a" table keys vals)))
  38. (with-open-database (db (ensure-db-path) :busy-timeout 5000)
  39. (push sql parameters) (push db parameters)
  40. (apply #'execute-non-query parameters)))))
  41.  
  42.  
  43. (defun string-update-sets (&rest fields)
  44. "Return string for fields."
  45. (format nil "~{~(~a = ?~^, ~)~}" fields))
  46.  
  47. (defun format-update-sets-where-parameters (list-name-value)
  48. (multiple-value-bind (keywords parameters)
  49. (list-keywords-parameters list-name-value)
  50. (let ((sets (apply #'string-update-sets (cdr keywords)))
  51. (where (string-update-sets (car keywords))))
  52. (values sets where (append (cdr parameters) (list (car parameters)))))))
  53.  
  54. (defun execute-update (table fields)
  55. (multiple-value-bind (sets where parameters)
  56. (format-update-sets-where-parameters fields)
  57. (let ((sql (format nil "update ~a set ~a where ~a" table sets where)))
  58. (with-open-database (db (ensure-db-path) :busy-timeout 5000)
  59. (push sql parameters) (push db parameters)
  60. (apply #'execute-non-query parameters)))))
  61.  
  62.  
  63. (defun insert-into-groups (uuid &key name)
  64. (let ((fields `(("uuid" ,uuid) ("name" ,name))))
  65. (execute-insert "groups" fields)))
  66.  
  67. (defun insert-into-criterions (uuid &key group_uuid name code)
  68. (let ((fields `(("uuid" ,uuid)
  69. ("group_uuid" ,group_uuid)
  70. ("name" ,name)
  71. ("code" ,code))))
  72. (execute-insert "criterions" fields)))
  73.  
  74. (defun insert-into-decisions (uuid &key group_uuid name code description)
  75. (let ((fields `(("uuid" ,uuid)
  76. ("group_uuid" ,group_uuid)
  77. ("name" ,name)
  78. ("code" ,code)
  79. ("description" ,description))))
  80. (execute-insert "decisions" fields)))
  81.  
  82. (defun insert-into-relations (uuid &key decision_uuid criteria_uuid)
  83. (let ((fields `(("uuid" ,uuid)
  84. ("decision_uuid" ,decision_uuid)
  85. ("criteria_uuid" ,criteria_uuid))))
  86. (execute-insert "relations" fields)))
  87.  
  88.  
  89. (defun update-groups (uuid &key name)
  90. (let ((fields `(("uuid" ,uuid) ("name" ,name))))
  91. (execute-update "groups" fields)))
  92.  
  93. (defun update-criterions (uuid &key group_uuid name code)
  94. (let ((fields `(("uuid" ,uuid)
  95. ("group_uuid" ,group_uuid)
  96. ("name" ,name)
  97. ("code" ,code))))
  98. (execute-update "criterions" fields)))
  99.  
  100. (defun update-decisions (uuid &key group_uuid name code description)
  101. (let ((fields `(("uuid" ,uuid)
  102. ("group_uuid" ,group_uuid)
  103. ("name" ,name)
  104. ("code" ,code)
  105. ("description" ,description))))
  106. (execute-update "decisions" fields)))
  107.  
  108. (defun update-relations (uuid &key decision_uuid criteria_uuid)
  109. (let ((fields `(("uuid" ,uuid)
  110. ("decision_uuid" ,decision_uuid)
  111. ("criteria_uuid" ,criteria_uuid))))
  112. (execute-update "relations" fields)))
  113.  
  114.  
  115. ;; TODO
Add Comment
Please, Sign In to add comment