diff options
Diffstat (limited to 'lisp/progmodes/sql.el')
| -rw-r--r-- | lisp/progmodes/sql.el | 98 |
1 files changed, 58 insertions, 40 deletions
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el index ff5493de364..afc0f35f26c 100644 --- a/lisp/progmodes/sql.el +++ b/lisp/progmodes/sql.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | ;; Author: Alex Schroeder <alex@gnu.org> | 6 | ;; Author: Alex Schroeder <alex@gnu.org> |
| 7 | ;; Maintainer: Michael Mauger <mmaug@yahoo.com> | 7 | ;; Maintainer: Michael Mauger <mmaug@yahoo.com> |
| 8 | ;; Version: 2.0.1 | 8 | ;; Version: 2.0.2 |
| 9 | ;; Keywords: comm languages processes | 9 | ;; Keywords: comm languages processes |
| 10 | ;; URL: http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/progmodes/sql.el | 10 | ;; URL: http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/progmodes/sql.el |
| 11 | ;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode | 11 | ;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode |
| @@ -30,26 +30,40 @@ | |||
| 30 | ;;; Commentary: | 30 | ;;; Commentary: |
| 31 | 31 | ||
| 32 | ;; Please send bug reports and bug fixes to the mailing list at | 32 | ;; Please send bug reports and bug fixes to the mailing list at |
| 33 | ;; sql.el@gnu.org. If you want to subscribe to the mailing list, send | 33 | ;; help-gnu-emacs@gnu.org. If you want to subscribe to the mailing |
| 34 | ;; mail to sql.el-request@gnu.org with `subscribe sql.el FIRSTNAME | 34 | ;; list, see the web page at |
| 35 | ;; LASTNAME' in the mail body. | 35 | ;; http://lists.gnu.org/mailman/listinfo/help-gnu-emacs for |
| 36 | 36 | ;; instructions. I monitor this list actively. If you send an e-mail | |
| 37 | ;; This file provides a sql-mode and a sql-interactive-mode. My goals | 37 | ;; to Alex Schroeder it usually makes it to me when Alex has a chance |
| 38 | ;; were two simple modes providing syntactic hilighting. The | 38 | ;; to forward them along (Thanks, Alex). |
| 39 | ;; interactive mode had to provide a command-line history; the other | 39 | |
| 40 | ;; mode had to provide "send region/buffer to SQL interpreter" | 40 | ;; This file provides a sql-mode and a sql-interactive-mode. The |
| 41 | ;; functions. "simple" in this context means easy to use, easy to | 41 | ;; original goals were two simple modes providing syntactic |
| 42 | ;; maintain and little or no bells and whistles. | 42 | ;; highlighting. The interactive mode had to provide a command-line |
| 43 | ;; history; the other mode had to provide "send region/buffer to SQL | ||
| 44 | ;; interpreter" functions. "simple" in this context means easy to | ||
| 45 | ;; use, easy to maintain and little or no bells and whistles. This | ||
| 46 | ;; has changed somewhat as experience with the mode has accumulated. | ||
| 47 | |||
| 48 | ;; Support for different flavors of SQL and command interpreters was | ||
| 49 | ;; available in early versions of sql.el. This support has been | ||
| 50 | ;; extended and formalized in later versions. Part of the impetus for | ||
| 51 | ;; the improved support of SQL flavors was borne out of the current | ||
| 52 | ;; maintainer's consulting experience. In the past fifteen years, I | ||
| 53 | ;; have used Oracle, Sybase, Informix, MySQL, Postgres, and SQLServer. | ||
| 54 | ;; On some assignments, I have used two or more of these concurrently. | ||
| 43 | 55 | ||
| 44 | ;; If anybody feels like extending this sql mode, take a look at the | 56 | ;; If anybody feels like extending this sql mode, take a look at the |
| 45 | ;; above mentioned modes and write a sqlx-mode on top of this one. If | 57 | ;; above mentioned modes and write a sqlx-mode on top of this one. If |
| 46 | ;; this proves to be difficult, please suggest changes that will | 58 | ;; this proves to be difficult, please suggest changes that will |
| 47 | ;; facilitate your plans. | 59 | ;; facilitate your plans. Facilities have been provided to add |
| 60 | ;; products and product-specific configuration. | ||
| 48 | 61 | ||
| 49 | ;; sql-interactive-mode is used to interact with a SQL interpreter | 62 | ;; sql-interactive-mode is used to interact with a SQL interpreter |
| 50 | ;; process in a SQLi buffer (usually called `*SQL*'). The SQLi buffer | 63 | ;; process in a SQLi buffer (usually called `*SQL*'). The SQLi buffer |
| 51 | ;; is created by calling a SQL interpreter-specific entry function. Do | 64 | ;; is created by calling a SQL interpreter-specific entry function or |
| 52 | ;; *not* call sql-interactive-mode by itself. | 65 | ;; sql-product-interactive. Do *not* call sql-interactive-mode by |
| 66 | ;; itself. | ||
| 53 | 67 | ||
| 54 | ;; The list of currently supported interpreters and the corresponding | 68 | ;; The list of currently supported interpreters and the corresponding |
| 55 | ;; entry function used to create the SQLi buffers is shown with | 69 | ;; entry function used to create the SQLi buffers is shown with |
| @@ -847,23 +861,24 @@ Based on `comint-mode-map'.") | |||
| 847 | (defvar sql-mode-abbrev-table nil | 861 | (defvar sql-mode-abbrev-table nil |
| 848 | "Abbrev table used in `sql-mode' and `sql-interactive-mode'.") | 862 | "Abbrev table used in `sql-mode' and `sql-interactive-mode'.") |
| 849 | (unless sql-mode-abbrev-table | 863 | (unless sql-mode-abbrev-table |
| 850 | (define-abbrev-table 'sql-mode-abbrev-table nil) | 864 | (define-abbrev-table 'sql-mode-abbrev-table nil)) |
| 851 | (mapcar | 865 | |
| 852 | ;; In Emacs 21.3+, provide SYSTEM-FLAG to define-abbrev. | 866 | (mapcar |
| 853 | '(lambda (abbrev) | 867 | ;; In Emacs 22+, provide SYSTEM-FLAG to define-abbrev. |
| 854 | (let ((name (car abbrev)) | 868 | '(lambda (abbrev) |
| 855 | (expansion (cdr abbrev))) | 869 | (let ((name (car abbrev)) |
| 856 | (condition-case nil | 870 | (expansion (cdr abbrev))) |
| 857 | (define-abbrev sql-mode-abbrev-table name expansion nil 0 t) | 871 | (condition-case nil |
| 858 | (error | 872 | (define-abbrev sql-mode-abbrev-table name expansion nil 0 t) |
| 859 | (define-abbrev sql-mode-abbrev-table name expansion))))) | 873 | (error |
| 860 | '(("ins" "insert") | 874 | (define-abbrev sql-mode-abbrev-table name expansion))))) |
| 861 | ("upd" "update") | 875 | '(("ins" . "insert") |
| 862 | ("del" "delete") | 876 | ("upd" . "update") |
| 863 | ("sel" "select") | 877 | ("del" . "delete") |
| 864 | ("proc" "procedure") | 878 | ("sel" . "select") |
| 865 | ("func" "function") | 879 | ("proc" . "procedure") |
| 866 | ("cr" "create")))) | 880 | ("func" . "function") |
| 881 | ("cr" . "create"))) | ||
| 867 | 882 | ||
| 868 | ;; Syntax Table | 883 | ;; Syntax Table |
| 869 | 884 | ||
| @@ -872,13 +887,15 @@ Based on `comint-mode-map'.") | |||
| 872 | ;; C-style comments /**/ (see elisp manual "Syntax Flags")) | 887 | ;; C-style comments /**/ (see elisp manual "Syntax Flags")) |
| 873 | (modify-syntax-entry ?/ ". 14" table) | 888 | (modify-syntax-entry ?/ ". 14" table) |
| 874 | (modify-syntax-entry ?* ". 23" table) | 889 | (modify-syntax-entry ?* ". 23" table) |
| 875 | ;; double-dash starts comment | 890 | ;; double-dash starts comments |
| 876 | (modify-syntax-entry ?- ". 12b" table) | 891 | (modify-syntax-entry ?- ". 12b" table) |
| 877 | ;; newline and formfeed end coments | 892 | ;; newline and formfeed end comments |
| 878 | (modify-syntax-entry ?\n "> b" table) | 893 | (modify-syntax-entry ?\n "> b" table) |
| 879 | (modify-syntax-entry ?\f "> b" table) | 894 | (modify-syntax-entry ?\f "> b" table) |
| 880 | ;; single quotes (') quotes delimit strings | 895 | ;; single quotes (') delimit strings |
| 881 | (modify-syntax-entry ?' "\"" table) | 896 | (modify-syntax-entry ?' "\"" table) |
| 897 | ;; double quotes (") don't delimit strings | ||
| 898 | (modify-syntax-entry ?\" "." table) | ||
| 882 | ;; backslash is no escape character | 899 | ;; backslash is no escape character |
| 883 | (modify-syntax-entry ?\\ "." table) | 900 | (modify-syntax-entry ?\\ "." table) |
| 884 | table) | 901 | table) |
| @@ -887,12 +904,13 @@ Based on `comint-mode-map'.") | |||
| 887 | ;; Font lock support | 904 | ;; Font lock support |
| 888 | 905 | ||
| 889 | (defvar sql-mode-font-lock-object-name | 906 | (defvar sql-mode-font-lock-object-name |
| 890 | (list (concat "^\\s-*\\(create\\|drop\\|alter\\)\\s-+" ;; lead off with CREATE, DROP or ALTER | 907 | (eval-when-compile |
| 891 | "\\(\\w+\\s-+\\)*" ;; optional intervening keywords | 908 | (list (concat "^\\s-*\\(?:create\\|drop\\|alter\\)\\s-+" ;; lead off with CREATE, DROP or ALTER |
| 892 | "\\(table\\|view\\|package\\(\\s-+body\\)?\\|proc\\(edure\\)?" | 909 | "\\(?:\\w+\\s-+\\)*" ;; optional intervening keywords |
| 893 | "\\|function\\|trigger\\|sequence\\|rule\\|default\\)\\s-+" | 910 | "\\(?:table\\|view\\|\\(?:package\\|type\\)\\(?:\\s-+body\\)?\\|proc\\(?:edure\\)?" |
| 894 | "\\(\\w+\\)") | 911 | "\\|function\\|trigger\\|sequence\\|rule\\|default\\)\\s-+" |
| 895 | 6 'font-lock-function-name-face) | 912 | "\\(\\w+\\)") |
| 913 | 1 'font-lock-function-name-face)) | ||
| 896 | 914 | ||
| 897 | "Pattern to match the names of top-level objects. | 915 | "Pattern to match the names of top-level objects. |
| 898 | 916 | ||