diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/generics.lisp | 1 | ||||
| -rw-r--r-- | src/record-pkg.lisp | 3 | ||||
| -rw-r--r-- | src/record.lisp | 12 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/generics.lisp b/src/generics.lisp index 59dbc12..feda1ea 100644 --- a/src/generics.lisp +++ b/src/generics.lisp @@ -14,6 +14,7 @@ :get-records :insert-record :update-record + :update-record-no-nulls :delete-record :call-pg-function :intersect-slots diff --git a/src/record-pkg.lisp b/src/record-pkg.lisp index 7a5ceb2..38bb77d 100644 --- a/src/record-pkg.lisp +++ b/src/record-pkg.lisp @@ -13,6 +13,9 @@ (defmethod update-record ((record-pkg record-pkg) (record record)) (update-record* record)) +(defmethod update-record-no-nulls ((record-pkg record-pkg) (record record)) + (update-record-no-nulls* record)) + (defmethod delete-record ((record-pkg record-pkg) (record record)) (delete-record* record)) diff --git a/src/record.lisp b/src/record.lisp index 9502899..cbd79e2 100644 --- a/src/record.lisp +++ b/src/record.lisp @@ -160,6 +160,15 @@ on those slots." (field-value-pairs record) (expand-where-expression record (*where-expression record))))) +(defmethod update-query-no-nulls ((record record)) + (if (null (*where-expression record)) + (error 'org-ckons-condition::handled-error (format nil "Attempting to update a record of type ~a, but it has no *WHERE-EXPRESSION" (type-of record))) + (format nil + "UPDATE ~a SET ~a~a" + (org-ckons-core::format-list (if (slot-exists-p record '*write-table) (slot-value record '*write-table) (slot-value record '*table)) `(,(*project record))) + (field-value-pairs-no-nulls record) + (expand-where-expression record (*where-expression record))))) + (defmethod select-query ((record record)) (format nil "SELECT ~a FROM ~a" @@ -180,6 +189,9 @@ on those slots." (defmethod update-record* ((record record)) (execute-command (update-query record))) +(defmethod update-record-no-nulls* ((record record)) + (execute-command (update-query-no-nulls record))) + (defmethod select-records-impl* ((record record) where-expression order-by-clause) (let* ((where-string (expand-where-expression record where-expression)) (order-by-string (if (org-ckons-core::null-or-empty-p order-by-clause) |
