branch: elpa/emacsql
commit f030b9952db9236585232685ef57919bd70a7a9d
Author: Christopher Wellons <[email protected]>
Commit: Christopher Wellons <[email protected]>
Fix up psql-connection.
---
emacsql-psql.el | 33 +++++++++++++++++++++++++++++++++
emacsql.el | 2 +-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/emacsql-psql.el b/emacsql-psql.el
index aefaa98f3b..d873ff128b 100644
--- a/emacsql-psql.el
+++ b/emacsql-psql.el
@@ -78,6 +78,39 @@
(when (process-live-p process)
(process-send-string process "\\q\n"))))
+(defmethod emacsql-send-message ((connection emacsql-psql-connection) message)
+ (let ((process (emacsql-process connection)))
+ (process-send-string process message)
+ (process-send-string process "\n")))
+
+(defmethod emacsql-waiting-p ((connection emacsql-psql-connection))
+ (with-current-buffer (emacsql-buffer connection)
+ (cond ((= (buffer-size) 1) (string= "]" (buffer-string)))
+ ((> (buffer-size) 1) (string= "\n]"
+ (buffer-substring
+ (- (point-max) 2) (point-max)))))))
+
+(defmethod emacsql-check-error ((connection emacsql-psql-connection))
+ (with-current-buffer (emacsql-buffer connection)
+ (let ((case-fold-search t))
+ (setf (point) (point-min))
+ (when (looking-at "error:")
+ (let* ((beg (line-beginning-position))
+ (end (line-end-position)))
+ (signal 'emacsql-error (list (buffer-substring beg end))))))))
+
+(defmethod emacsql-parse ((connection emacsql-psql-connection))
+ (emacsql-check-error connection)
+ (with-current-buffer (emacsql-buffer connection)
+ (let ((standard-input (current-buffer)))
+ (setf (point) (point-min))
+ (cl-loop until (looking-at "]")
+ collect (read) into row
+ when (looking-at "\n")
+ collect row into rows
+ and do (progn (forward-char 1) (setf row ()))
+ finally (cl-return rows)))))
+
(provide 'emacsql-psql)
;;; emacsql-psql.el ends here
diff --git a/emacsql.el b/emacsql.el
index c1148e5d6a..39212614ff 100644
--- a/emacsql.el
+++ b/emacsql.el
@@ -171,7 +171,7 @@ must display as \"nil\".")
"Signal a specific condition for CODE from CONNECTION.
Subclasses should override this method in order to provide more
specific error conditions."
- (signal 'emacsql-syntax (list code message)))
+ (signal 'emacsql-error (list code message)))
(defmethod emacsql-parse ((connection emacsql-protocol-mixin))
"Parse well-formed output into an s-expression."