emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/emacsql 963f221b82 049/427: Add expr expansion function.


From: ELPA Syncer
Subject: [nongnu] elpa/emacsql 963f221b82 049/427: Add expr expansion function.
Date: Tue, 13 Dec 2022 02:59:27 -0500 (EST)

branch: elpa/emacsql
commit 963f221b826254906c97e97235c3ca708fcbec38
Author: Christopher Wellons <wellons@nullprogram.com>
Commit: Christopher Wellons <wellons@nullprogram.com>

    Add expr expansion function.
---
 emacsql.el | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/emacsql.el b/emacsql.el
index faa727a17d..9a0d7521f6 100644
--- a/emacsql.el
+++ b/emacsql.el
@@ -393,6 +393,27 @@ definitions for return from a `emacsql-defexpander'."
                 (symbol-function 'emacsql--vars-combine)))
        (cons (concat ,prefix (progn ,@body)) emacsql--vars))))
 
+(defun emacsql--expr (expr)
+  "Expand EXPR recursively."
+  (emacsql-with-vars ""
+    (if (atom expr)
+        (var expr :auto)
+      (cl-destructuring-bind (op . args) expr
+        (cl-flet ((recur (n) (combine (emacsql--expr (nth n args)))))
+          (cl-ecase op
+            ((<= >=)
+             (cl-ecase (length args)
+               (2 (format "%s %s %s" (recur 0) op (recur 1)))
+               (3 (format "%s BETWEEN %s AND %s"
+                          (recur 1)
+                          (recur (if (eq op '<=) 2 0))
+                          (recur (if (eq op '<=) 0 2))))))
+            ((< > = != like glob is and or * / % << >> + - & |)
+             (format "%s %s %s"
+                     (recur 0)
+                     (upcase (symbol-name op))
+                     (recur 1)))))))))
+
 ;; SQL Expansion Functions:
 
 (emacsql-defexpander :select (arg)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]