]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle '' in strings in SQL Mode
authorFlorian v. Savigny <f.savigny@mailbox.org>
Sat, 8 Aug 2020 13:33:58 +0000 (15:33 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 8 Aug 2020 13:33:58 +0000 (15:33 +0200)
* lisp/progmodes/sql.el
(sql--syntax-propertize-escaped-apostrophe): Handle '' in strings
(bug#40231).
(sql-mode): Use it.

lisp/progmodes/sql.el

index c86fc59ac165409b70defab82b3280eae54506fb..8e3191c9b41686aec4626c6e76e53ffdb634e084 100644 (file)
@@ -1508,6 +1508,22 @@ Based on `comint-mode-map'.")
     table)
   "Syntax table used in `sql-mode' and `sql-interactive-mode'.")
 
+;;; Syntax Properties
+
+;; `sql--syntax-propertize-escaped-apostrophe', as follows, was
+;; (analysed and) adapted from `pascal--syntax-propertize' in
+;; pascal.el because basic syntax parsing cannot handle the SQL ''
+;; construct within strings.
+
+(defconst sql--syntax-propertize-escaped-apostrophe
+  (syntax-propertize-rules
+   ("''"
+    (0
+     (if (save-excursion (nth 3 (syntax-ppss (match-beginning 0))))
+        (string-to-syntax ".")
+       (forward-char -1)
+       nil)))))
+
 ;; Font lock support
 
 (defvar sql-mode-font-lock-object-name
@@ -4210,6 +4226,11 @@ must tell Emacs.  Here's how to do that in your init file:
   (setq-local abbrev-all-caps 1)
   ;; Contains the name of database objects
   (set (make-local-variable 'sql-contains-names) t)
+  ;; Activate punctuation syntax table property for
+  ;; escaped apostrophes within strings:
+  (setq-local syntax-propertize-function
+              sql--syntax-propertize-escaped-apostrophe)
+  (setq-local parse-sexp-lookup-properties t) ; just to make sure it is used
   ;; Set syntax and font-face highlighting
   ;; Catch changes to sql-product and highlight accordingly
   (sql-set-product (or sql-product 'ansi)) ; Fixes bug#13591