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

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

[elpa] externals/sql-indent ca2fa754dc 2/2: Add support for the postgres


From: Stefan Monnier
Subject: [elpa] externals/sql-indent ca2fa754dc 2/2: Add support for the postgres support keyword (#101)
Date: Wed, 5 Jan 2022 18:35:02 -0500 (EST)

branch: externals/sql-indent
commit ca2fa754dc32810402765621105a5f392feeed21
Author: Alex Harsányi <AlexHarsanyi@gmail.com>
Commit: Alex Harsányi <AlexHarsanyi@gmail.com>

    Add support for the postgres support keyword (#101)
---
 sql-indent-test.el      |  5 +++++
 sql-indent.el           | 10 ++++++++--
 test-data/pr101-syn.eld | 30 ++++++++++++++++++++++++++++++
 test-data/pr101.sql     | 14 ++++++++++++++
 4 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/sql-indent-test.el b/sql-indent-test.el
index 3fefe94b4e..7c092405ab 100644
--- a/sql-indent-test.el
+++ b/sql-indent-test.el
@@ -483,6 +483,11 @@ information read from DATA-FILE (as generated by
    "test-data/pr99.sql"
    "test-data/pr99-syn.eld"))
 
+(ert-deftest sqlind-ert-pr101 ()
+  (sqlind-ert-check-file-syntax
+   "test-data/pr101.sql"
+   "test-data/pr101-syn.eld"))
+
 (ert-deftest sqlind-ert-pr102 ()
   (sqlind-ert-check-file-syntax
    "test-data/pr102.sql"
diff --git a/sql-indent.el b/sql-indent.el
index cfd0e4a0ab..b2c9bbee7e 100644
--- a/sql-indent.el
+++ b/sql-indent.el
@@ -1048,6 +1048,7 @@ reverse order (a stack) and is used to skip over nested 
blocks."
    "\\_<\\("
    "\\(\\(union\\(\\s-+all\\)?\\)\\|intersect\\|minus\\|except\\)?[ 
\t\r\n\f]*select\\|"
    "\\(bulk[ \t\r\n\f]+collect[ \t\r\n\f]+\\)?into\\|"
+   "perform\\|"
    "from\\|"
    "where\\|"
    "order[ \t\r\n\f]+by\\|"
@@ -1110,7 +1111,8 @@ statement is found."
          (setq clause (replace-regexp-in-string "[ \t\r\n\f]" " " clause))
          (when (sqlind-same-level-statement (point) start)
            (cond
-             ((looking-at "select\\(\\s *\\_<\\(top\\s 
+[0-9]+\\|distinct\\|unique\\)\\_>\\)?")
+             ((or (looking-at "select\\(\\s *\\_<\\(top\\s 
+[0-9]+\\|distinct\\|unique\\)\\_>\\)?")
+                   (and (eq sql-product 'postgres) (looking-at "perform\\_>")))
               ;; we are in the column selection section.
               (goto-char pos)
                (if (looking-at ",")
@@ -1563,6 +1565,9 @@ not a statement-continuation POS is the same as the
               (push (sqlind-syntax-in-with pos (point)) context))
              ((looking-at "select")
               (push (sqlind-syntax-in-select pos (point)) context))
+             ((and (eq sql-product 'postgres)
+                   (looking-at "perform"))
+              (push (sqlind-syntax-in-select pos (point)) context))
              ((looking-at "insert")
               (push (sqlind-syntax-in-insert pos (point)) context))
              ((looking-at "delete")
@@ -2184,7 +2189,8 @@ first column after the SELECT clause we simply add
 `sqlind-basic-offset'."
   (save-excursion
     (goto-char (sqlind-anchor-point syntax))
-    (when (looking-at "select\\s *\\(top\\s +[0-9]+\\|distinct\\|unique\\)?")
+    (when (or (looking-at "select\\s *\\(top\\s 
+[0-9]+\\|distinct\\|unique\\)?")
+              (and (eq sql-product 'postgres) (looking-at "perform\\_>")))
       (goto-char (match-end 0)))
     (skip-syntax-forward " ")
     (if (or (looking-at sqlind-comment-start-skip)
diff --git a/test-data/pr101-syn.eld b/test-data/pr101-syn.eld
new file mode 100644
index 0000000000..e6b7f87d6f
--- /dev/null
+++ b/test-data/pr101-syn.eld
@@ -0,0 +1,30 @@
+(((comment-start . 1)
+  (toplevel . 1))
+ ((toplevel . 1))
+ ((toplevel . 1))
+ ((select-column . 47)
+  (statement-continuation . 47))
+ ((select-column . 47)
+  (statement-continuation . 47))
+ ((select-clause . 47)
+  (statement-continuation . 47))
+ ((select-table . 81)
+  (statement-continuation . 47))
+ ((select-clause . 47)
+  (statement-continuation . 47))
+ (((in-select-clause "where")
+   . 101)
+  (statement-continuation . 47))
+ (((in-select-clause "where")
+   . 101)
+  (statement-continuation . 47))
+ (((in-select-clause "where")
+   . 101)
+  (statement-continuation . 47))
+ ((select-clause . 47)
+  (statement-continuation . 47))
+ ((select-clause . 47)
+  (statement-continuation . 47))
+ ((select-clause . 47)
+  (statement-continuation . 47))
+ ((toplevel . 1)))
\ No newline at end of file
diff --git a/test-data/pr101.sql b/test-data/pr101.sql
new file mode 100644
index 0000000000..7eadebffb4
--- /dev/null
+++ b/test-data/pr101.sql
@@ -0,0 +1,14 @@
+-- -*- mode: sql; sql-product: postgres; -*-
+
+perform
+  column_a,
+  column_b
+   from
+     table_1
+  where
+ column_a = 1
+    and column_b = 2
+
+perform foo(t.column)
+   from mytable t
+  where t.column = 1;



reply via email to

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