blob: 37e22af421c66215fde6057f12beb7f4de12266d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
;;; ~/.doom.d/sql-strings.el -*- lexical-binding: t; -*-
;;; https://www.emacswiki.org/emacs/StringAtPoint
(defun ourcomments-string-or-comment-bounds-1 (what)
(save-restriction
(widen)
(let* ((here (point))
;; Fix-me: when on end-point, how to handle that and which should be last hit point?
(state (parse-partial-sexp (point-min) (1+ here)))
(type (if (nth 3 state)
'string
(if (nth 4 state)
'comment)))
(start (when type (nth 8 state)))
end)
(unless start
(setq state (parse-partial-sexp (point-min) here))
(setq type (if (nth 3 state)
'string
(if (nth 4 state)
'comment)))
(setq start (when type (nth 8 state))))
(unless (or (not what)
(eq what type))
(setq start nil))
(if (not start)
(progn
(goto-char here)
nil)
(setq state (parse-partial-sexp (1+ start) (point-max)
nil nil state 'syntax-table))
(setq end (point))
(goto-char here)
(cons start end)))))
(defun ourcomments-bounds-of-string-at-point ()
"Return bounds of string at point if any."
(ourcomments-string-or-comment-bounds-1 'string))
(put 'string 'bounds-of-thing-at-point 'ourcomments-bounds-of-string-at-point)
(defun -sanitize-sql-string (str)
(->> str
(downcase)
(s-trim)
(replace-regexp-in-string
(rx (or (and string-start (or "\"\"\""
"\""))
(and (or "\"\"\""
"\"")
string-end)))
"")
(s-trim)))
(defun sql-string-p (str)
"Returns 't if STR looks like a string literal for a SQL statement"
(setq str (-sanitize-sql-string str))
(or (s-starts-with? "select" str)))
;;; tests
(require 'ert)
(ert-deftest sanitize-sql-string-test ()
(should (string-equal "select * from foo;"
(-sanitize-sql-string
"\"\"\"SELECT * FROM foo;\n\n\"\"\""))))
(ert-deftest test-sql-string-p ()
(dolist (str '("SELECT * FROM foo;"
"select * from foo;"))
(should (sql-string-p str)))
(dolist (str '("not a QUERY"))
(should-not (sql-string-p str))))
|