comparison lisp/progmodes/sql.el @ 55241:cebca4e25fae

(sql-product-alist): Rename variable `sql-product-support'. Add Postgres login parameters. (sql-set-product, sql-product-feature): Update with renamed variable. (sql-connect-postgres): Add username prompt. (sql-imenu-generic-expression, sql-mode-font-lock-object-name): Make patterns less product specific. (sql-xemacs-p, sql-emacs19-p): Add flags for emacs variants. (sql-mode-abbrev-table): Modify initialization. (sql-builtin-face): Add variable. (sql-keywords-re): Add macro. (sql-mode-ansi-font-lock-keywords): Update for ANSI-92. (sql-mode-oracle-font-lock-keywords): Update for Oracle 9i. (sql-mode-postgres-font-lock-keywords): Update for Postgres 7.3. (sql-mode-mysql-font-lock-keywords): Update for MySql 4.0. (sql-mode-linter-font-lock-keywords) (sql-mode-ms-font-lock-keywords): Use `sql-keywords-re' macro. (sql-mode-sybase-font-lock-keywords, sql-mode-informix-font-lock-keywords) (sql-mode-interbase-font-lock-keywords, sql-mode-ingres-font-lock-keywords) (sql-mode-solid-font-lock-keywords, sql-mode-sqlite-font-lock-keywords) (sql-mode-db2-font-lock-keywords): Default to nil. (sql-product-font-lock): Always highlight ANSI keywords. (sql-add-product-keywords): Made similar to `font-lock-add-keywords'. (sql-send-string): Add function.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 29 Apr 2004 21:55:28 +0000
parents 702be51912a8
children f714f103b48a
comparison
equal deleted inserted replaced
55240:780b94f913fe 55241:cebca4e25fae
1 ;;; sql.el --- specialized comint.el for SQL interpreters 1 ;;; sql.el --- specialized comint.el for SQL interpreters
2 2
3 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 3 ;; Copyright (C) 1998,99,2000,01,02,03,04 Free Software Foundation, Inc.
4 4
5 ;; Author: Alex Schroeder <alex@gnu.org> 5 ;; Author: Alex Schroeder <alex@gnu.org>
6 ;; Maintainer: Michael Mauger <mmaug@yahoo.com> 6 ;; Maintainer: Michael Mauger <mmaug@yahoo.com>
7 ;; Version: 1.8.0 7 ;; Version: 2.0.0
8 ;; Keywords: comm languages processes 8 ;; Keywords: comm languages processes
9 ;; URL: http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/progmodes/sql.el
9 ;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode 10 ;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode
10 11
11 ;; This file is part of GNU Emacs. 12 ;; This file is part of GNU Emacs.
12 13
13 ;; GNU Emacs is free software; you can redistribute it and/or modify 14 ;; GNU Emacs is free software; you can redistribute it and/or modify
99 100
100 ;; 1) Add the product to `sql-product' choice list. 101 ;; 1) Add the product to `sql-product' choice list.
101 102
102 ;; (const :tag "XyzDB" xyz) 103 ;; (const :tag "XyzDB" xyz)
103 104
104 ;; 2) Add an entry to the `sql-product-support' list. 105 ;; 2) Add an entry to the `sql-product-alist' list.
105 106
106 ;; (xyz 107 ;; (xyz
107 ;; :font-lock sql-mode-xyz-font-lock-keywords 108 ;; :font-lock sql-mode-xyz-font-lock-keywords
108 ;; :sqli-login (user password server database) 109 ;; :sqli-login (user password server database)
109 ;; :sqli-connect sql-connect-xyz 110 ;; :sqli-connect sql-connect-xyz
134 135
135 ;; 5) Add the font-lock specifications. At a minimum, default to 136 ;; 5) Add the font-lock specifications. At a minimum, default to
136 ;; using ANSI keywords. See sql-mode-oracle-font-lock-keywords for 137 ;; using ANSI keywords. See sql-mode-oracle-font-lock-keywords for
137 ;; a more complex example. 138 ;; a more complex example.
138 139
139 ;; (defvar sql-mode-xyz-font-lock-keywords sql-mode-ansi-font-lock-keywords 140 ;; (defvar sql-mode-xyz-font-lock-keywords nil
140 ;; "XyzDB SQL keywords used by font-lock.") 141 ;; "XyzDB SQL keywords used by font-lock.")
141 142
142 ;; 6) Add a product highlighting function. 143 ;; 6) Add a product highlighting function.
143 144
144 ;; (defun sql-highlight-xyz-keywords () 145 ;; (defun sql-highlight-xyz-keywords ()
190 191
191 ;; Add different hilighting levels. 192 ;; Add different hilighting levels.
192 193
193 ;;; Thanks to all the people who helped me out: 194 ;;; Thanks to all the people who helped me out:
194 195
196 ;; Alex Schroeder <alex@gnu.org>
195 ;; Kai Blauberg <kai.blauberg@metla.fi> 197 ;; Kai Blauberg <kai.blauberg@metla.fi>
196 ;; <ibalaban@dalet.com> 198 ;; <ibalaban@dalet.com>
197 ;; Yair Friedman <yfriedma@JohnBryce.Co.Il> 199 ;; Yair Friedman <yfriedma@JohnBryce.Co.Il>
198 ;; Gregor Zych <zych@pool.informatik.rwth-aachen.de> 200 ;; Gregor Zych <zych@pool.informatik.rwth-aachen.de>
199 ;; nino <nino@inform.dk> 201 ;; nino <nino@inform.dk>
200 ;; Berend de Boer <berend@pobox.com> 202 ;; Berend de Boer <berend@pobox.com>
201 ;; Michael Mauger <mmaug@yahoo.com> 203 ;; Michael Mauger <mmaug@yahoo.com>
204 ;; Adam Jenkins <adam@thejenkins.org>
202 205
203 206
204 207
205 ;;; Code: 208 ;;; Code:
206 209
207 (require 'comint) 210 (require 'comint)
208 ;; Need the following to allow GNU Emacs 19 to compile the file. 211 ;; Need the following to allow GNU Emacs 19 to compile the file.
209 (eval-when-compile 212 (eval-when-compile
210 (require 'regexp-opt)) 213 (require 'regexp-opt))
211 (require 'custom) 214 (require 'custom)
215 (eval-when-compile ;; needed in Emacs 19, 20
216 (setq max-specpdl-size 2000))
212 217
213 ;;; Allow customization 218 ;;; Allow customization
214 219
215 (defgroup SQL nil 220 (defgroup SQL nil
216 "Running a SQL interpreter from within Emacs buffers" 221 "Running a SQL interpreter from within Emacs buffers"
262 :group 'SQL) 267 :group 'SQL)
263 268
264 (defvar sql-interactive-product nil 269 (defvar sql-interactive-product nil
265 "Product under `sql-interactive-mode'.") 270 "Product under `sql-interactive-mode'.")
266 271
267 (defvar sql-product-support 272 (defvar sql-product-alist
268 '((ansi 273 '((ansi
269 :font-lock sql-mode-ansi-font-lock-keywords) 274 :font-lock sql-mode-ansi-font-lock-keywords)
270 (db2 275 (db2
271 :font-lock sql-mode-db2-font-lock-keywords 276 :font-lock sql-mode-db2-font-lock-keywords
272 :sqli-login nil 277 :sqli-login nil
317 :sqli-prompt-regexp "^SQL> " 322 :sqli-prompt-regexp "^SQL> "
318 :sqli-prompt-length 5 323 :sqli-prompt-length 5
319 :syntax-alist ((?$ . "w") (?# . "w"))) 324 :syntax-alist ((?$ . "w") (?# . "w")))
320 (postgres 325 (postgres
321 :font-lock sql-mode-postgres-font-lock-keywords 326 :font-lock sql-mode-postgres-font-lock-keywords
322 :sqli-login (database server) 327 :sqli-login (user database server)
323 :sqli-connect sql-connect-postgres 328 :sqli-connect sql-connect-postgres
324 :sqli-prompt-regexp "^.*> *" 329 :sqli-prompt-regexp "^.*[#>] *"
325 :sqli-prompt-length 5) 330 :sqli-prompt-length 5)
326 (solid 331 (solid
327 :font-lock sql-mode-solid-font-lock-keywords 332 :font-lock sql-mode-solid-font-lock-keywords
328 :sqli-login (user password server) 333 :sqli-login (user password server)
329 :sqli-connect sql-connect-solid 334 :sqli-connect sql-connect-solid
370 `sql-database' and `sql-server' to open a 375 `sql-database' and `sql-server' to open a
371 comint buffer and connect to the 376 comint buffer and connect to the
372 database. Do product specific 377 database. Do product specific
373 configuration of comint in this function. 378 configuration of comint in this function.
374 379
375 :sqli-prompt-regexp a regular expression string that matches the 380 :sqli-prompt-regexp a regular expression string that matches
376 prompt issued by the product interpreter. 381 the prompt issued by the product
377 382 interpreter. (Not needed in 21.3+)
378 :sqli-prompt-length the length of the prompt on the line. 383
384 :sqli-prompt-length the length of the prompt on the line.(Not
385 needed in 21.3+)
379 386
380 :syntax-alist an alist of syntax table entries to enable 387 :syntax-alist an alist of syntax table entries to enable
381 special character treatment by font-lock and 388 special character treatment by font-lock and
382 imenu. ") 389 imenu. ")
383 390
410 417
411 ;; imenu support for sql-mode. 418 ;; imenu support for sql-mode.
412 419
413 (defvar sql-imenu-generic-expression 420 (defvar sql-imenu-generic-expression
414 ;; Items are in reverse order because they are rendered in reverse. 421 ;; Items are in reverse order because they are rendered in reverse.
415 '(("Rules/Defaults" "^\\s-*create\\s-+\\(rule\\|default\\)\\s-+\\(\\w+\\)" 2) 422 '(("Rules/Defaults" "^\\s-*create\\s-+\\(\\w+\\s-+\\)*\\(rule\\|default\\)\\s-+\\(\\w+\\)" 3)
416 ("Sequences" "^\\s-*create\\s-+sequence\\s-+\\(\\w+\\)" 1) 423 ("Sequences" "^\\s-*create\\s-+\\(\\w+\\s-+\\)*sequence\\s-+\\(\\w+\\)" 2)
417 ("Triggers" "^\\s-*\\(create\\s-+\\(or\\s-+replace\\s-+\\)?\\)?trigger\\s-+\\(\\w+\\)" 3) 424 ("Triggers" "^\\s-*create\\s-+\\(\\w+\\s-+\\)*trigger\\s-+\\(\\w+\\)" 2)
418 ("Functions" "^\\s-*\\(create\\s-+\\(or\\s-+replace\\s-+\\)?\\)?function\\s-+\\(\\w+\\)" 3) 425 ("Functions" "^\\s-*\\(create\\s-+\\(\\w+\\s-+\\)*\\)?function\\s-+\\(\\w+\\)" 3)
419 ("Procedures" "^\\s-*\\(create\\s-+\\(or\\s-+replace\\s-+\\)?\\)?proc\\(edure\\)?\\s-+\\(\\w+\\)" 4) 426 ("Procedures" "^\\s-*\\(create\\s-+\\(\\w+\\s-+\\)*\\)?proc\\(edure\\)?\\s-+\\(\\w+\\)" 4)
420 ("Packages" "^\\s-*create\\s-+\\(or\\s-+replace\\s-+\\)?package\\s-+\\(body\\s-+\\)?\\(\\w+\\)" 3) 427 ("Packages" "^\\s-*create\\s-+\\(\\w+\\s-+\\)*package\\s-+\\(body\\s-+\\)?\\(\\w+\\)" 3)
421 ("Indexes" "^\\s-*create\\s-+index\\s-+\\(\\w+\\)" 1) 428 ("Indexes" "^\\s-*create\\s-+\\(\\w+\\s-+\\)*index\\s-+\\(\\w+\\)" 2)
422 ("Tables/Views" "^\\s-*create\\s-+\\(\\(global\\s-+\\)?\\(temporary\\s-+\\)?table\\|view\\)\\s-+\\(\\w+\\)" 4)) 429 ("Tables/Views" "^\\s-*create\\s-+\\(\\w+\\s-+\\)*\\(table\\|view\\)\\s-+\\(\\w+\\)" 3))
423 "Define interesting points in the SQL buffer for `imenu'. 430 "Define interesting points in the SQL buffer for `imenu'.
424 431
425 This is used to set `imenu-generic-expression' when SQL mode is 432 This is used to set `imenu-generic-expression' when SQL mode is
426 entered. Subsequent changes to sql-imenu-generic-expression will not 433 entered. Subsequent changes to sql-imenu-generic-expression will not
427 affect existing SQL buffers because imenu-generic-expression is a 434 affect existing SQL buffers because imenu-generic-expression is a
683 :group 'SQL) 690 :group 'SQL)
684 691
685 692
686 693
687 ;;; Variables which do not need customization 694 ;;; Variables which do not need customization
695
696 (defvar sql-xemacs-p
697 (string-match "XEmacs\\|Lucid" emacs-version)
698 "Is this a non-GNU Emacs?")
699
700 (defvar sql-emacs19-p
701 (string-match "GNU Emacs 19" emacs-version)
702 "Is this a GNU Emacs 19?")
703
704 (defvar sql-emacs20-p
705 (string-match "20" emacs-version)
706 "Is this a GNU Emacs 20?")
688 707
689 (defvar sql-user-history nil 708 (defvar sql-user-history nil
690 "History of usernames used.") 709 "History of usernames used.")
691 710
692 (defvar sql-database-history nil 711 (defvar sql-database-history nil
743 762
744 (defvar sql-mode-map 763 (defvar sql-mode-map
745 (let ((map (make-sparse-keymap))) 764 (let ((map (make-sparse-keymap)))
746 (define-key map (kbd "C-c C-c") 'sql-send-paragraph) 765 (define-key map (kbd "C-c C-c") 'sql-send-paragraph)
747 (define-key map (kbd "C-c C-r") 'sql-send-region) 766 (define-key map (kbd "C-c C-r") 'sql-send-region)
767 (define-key map (kbd "C-c C-s") 'sql-send-string)
748 (define-key map (kbd "C-c C-b") 'sql-send-buffer) 768 (define-key map (kbd "C-c C-b") 'sql-send-buffer)
749 map) 769 map)
750 "Mode map used for `sql-mode'.") 770 "Mode map used for `sql-mode'.")
751 771
752 ;; easy menu for sql-mode. 772 ;; easy menu for sql-mode.
762 (mark t)); XEmacs 782 (mark t)); XEmacs
763 (buffer-live-p sql-buffer) 783 (buffer-live-p sql-buffer)
764 (get-buffer-process sql-buffer))] 784 (get-buffer-process sql-buffer))]
765 ["Send Buffer" sql-send-buffer (and (buffer-live-p sql-buffer) 785 ["Send Buffer" sql-send-buffer (and (buffer-live-p sql-buffer)
766 (get-buffer-process sql-buffer))] 786 (get-buffer-process sql-buffer))]
787 ["Send String" sql-send-string t]
767 ["--" nil nil] 788 ["--" nil nil]
768 ["Start SQLi session" sql-product-interactive (sql-product-feature :sqli-connect)] 789 ["Start SQLi session" sql-product-interactive (sql-product-feature :sqli-connect)]
769 ["Show SQLi buffer" sql-show-sqli-buffer t] 790 ["Show SQLi buffer" sql-show-sqli-buffer t]
770 ["Set SQLi buffer" sql-set-sqli-buffer t] 791 ["Set SQLi buffer" sql-set-sqli-buffer t]
771 ["Pop to SQLi buffer after send" 792 ["Pop to SQLi buffer after send"
790 :style radio 811 :style radio
791 :selected (eq sql-product 'interbase)] 812 :selected (eq sql-product 'interbase)]
792 ["Linter" sql-highlight-linter-keywords 813 ["Linter" sql-highlight-linter-keywords
793 :style radio 814 :style radio
794 :selected (eq sql-product 'linter)] 815 :selected (eq sql-product 'linter)]
795 ["Microsoft" sql-highlight-ms-keywords 816 ["MS SQLServer" sql-highlight-ms-keywords
796 :style radio 817 :style radio
797 :selected (eq sql-product 'ms)] 818 :selected (eq sql-product 'ms)]
798 ["MySQL" sql-highlight-mysql-keywords 819 ["MySQL" sql-highlight-mysql-keywords
799 :style radio 820 :style radio
800 :selected (eq sql-product 'mysql)] 821 :selected (eq sql-product 'mysql)]
826 ;; Abbreviations -- if you want more of them, define them in your 847 ;; Abbreviations -- if you want more of them, define them in your
827 ;; ~/.emacs file. Abbrevs have to be enabled in your ~/.emacs, too. 848 ;; ~/.emacs file. Abbrevs have to be enabled in your ~/.emacs, too.
828 849
829 (defvar sql-mode-abbrev-table nil 850 (defvar sql-mode-abbrev-table nil
830 "Abbrev table used in `sql-mode' and `sql-interactive-mode'.") 851 "Abbrev table used in `sql-mode' and `sql-interactive-mode'.")
831 (if sql-mode-abbrev-table 852 (unless sql-mode-abbrev-table
832 () 853 (define-abbrev-table 'sql-mode-abbrev-table nil)
833 (let ((nargs (cdr (subr-arity (symbol-function 'define-abbrev)))) 854 (mapcar
834 d-a)
835 ;; In Emacs 21.3+, provide SYSTEM-FLAG to define-abbrev. 855 ;; In Emacs 21.3+, provide SYSTEM-FLAG to define-abbrev.
836 (setq d-a 856 '(lambda (abbrev)
837 (if (>= nargs 6) 857 (let ((name (car abbrev))
838 '(lambda (name expansion) (define-abbrev sql-mode-abbrev-table name expansion nil 0 t)) 858 (expansion (cdr abbrev)))
839 '(lambda (name expansion) (define-abbrev sql-mode-abbrev-table name expansion)))) 859 (condition-case nil
840 860 (define-abbrev sql-mode-abbrev-table name expansion nil 0 t)
841 (define-abbrev-table 'sql-mode-abbrev-table nil) 861 (error
842 (funcall d-a "ins" "insert") 862 (define-abbrev sql-mode-abbrev-table name expansion)))))
843 (funcall d-a "upd" "update") 863 '(("ins" "insert")
844 (funcall d-a "del" "delete") 864 ("upd" "update")
845 (funcall d-a "sel" "select") 865 ("del" "delete")
846 (funcall d-a "proc" "procedure") 866 ("sel" "select")
847 (funcall d-a "func" "function") 867 ("proc" "procedure")
848 (funcall d-a "cr" "create"))) 868 ("func" "function")
869 ("cr" "create"))))
849 870
850 ;; Syntax Table 871 ;; Syntax Table
851 872
852 (defvar sql-mode-syntax-table 873 (defvar sql-mode-syntax-table
853 (let ((table (make-syntax-table))) 874 (let ((table (make-syntax-table)))
854 ;; C-style comments /**/ (see elisp manual "Syntax Flags")) 875 ;; C-style comments /**/ (see elisp manual "Syntax Flags"))
855 (modify-syntax-entry ?/ ". 14" table) 876 (modify-syntax-entry ?/ ". 14" table)
856 (modify-syntax-entry ?* ". 23" table) 877 (modify-syntax-entry ?* ". 23" table)
857 ;; double-dash starts comment 878 ;; double-dash starts comment
858 (if (string-match "XEmacs\\|Lucid" emacs-version) 879 (if sql-xemacs-p
859 (modify-syntax-entry ?- ". 56" table) 880 (modify-syntax-entry ?- ". 56" table)
860 (modify-syntax-entry ?- ". 12b" table)) 881 (modify-syntax-entry ?- ". 12b" table))
861 ;; newline and formfeed end coments 882 ;; newline and formfeed end coments
862 (modify-syntax-entry ?\n "> b" table) 883 (modify-syntax-entry ?\n "> b" table)
863 (modify-syntax-entry ?\f "> b" table) 884 (modify-syntax-entry ?\f "> b" table)
869 "Syntax table used in `sql-mode' and `sql-interactive-mode'.") 890 "Syntax table used in `sql-mode' and `sql-interactive-mode'.")
870 891
871 ;; Font lock support 892 ;; Font lock support
872 893
873 (defvar sql-mode-font-lock-object-name 894 (defvar sql-mode-font-lock-object-name
874 (list (concat "^\\s-*\\(create\\(\\s-+or\\s-+replace\\)?\\|drop\\|alter\\)?\\s-+" 895 (list (concat "^\\s-*\\(create\\|drop\\|alter\\)\\s-+" ;; lead off with CREATE, DROP or ALTER
875 "\\(\\(global\\s-+\\)?\\(temporary\\s-+\\)?table\\|view\\|package\\(\\s-+body\\)?\\|" 896 "\\(\\w+\\s-+\\)*" ;; optional intervening keywords
876 "proc\\(edure\\)?\\|function\\|trigger\\|sequence\\|rule\\|default\\)\\s-+\\(\\w+\\)") 897 "\\(table\\|view\\|package\\(\\s-+body\\)?\\|proc\\(edure\\)?"
877 8 'font-lock-function-name-face) 898 "\\|function\\|trigger\\|sequence\\|rule\\|default\\)\\s-+"
878 899 "\\(\\w+\\)")
879 "Pattern to match the names of top-level objects in a CREATE, 900 6 'font-lock-function-name-face)
880 DROP or ALTER statement. 901
881 902 "Pattern to match the names of top-level objects.
882 The format of variable should be a valid `font-lock-keywords' 903
883 entry.") 904 The pattern matches the name in a CREATE, DROP or ALTER
905 statement. The format of variable should be a valid
906 `font-lock-keywords' entry.")
907
908 (defvar sql-builtin-face
909 (if sql-xemacs-p
910 ;; XEmacs doesn't have the builtin face
911 'font-lock-preprocessor-face
912 ;; GNU Emacs 19 doesn't either
913 (if sql-emacs19-p
914 'font-lock-keyword-face
915 ;; Emacs 2x
916 'font-lock-builtin-face))
917 "Builtin face for font-lock in SQL mode.")
918
919 (defvar sql-doc-face
920 (if (or sql-xemacs-p
921 sql-emacs19-p
922 sql-emacs20-p)
923 'font-lock-string-face
924 'font-lock-doc-face)
925 "Documentation face for font-lock in SQL mode.")
926
927 (defmacro sql-keywords-re (&rest keywords)
928 "Compile-time generation of regexp matching any one of KEYWORDS."
929 `(eval-when-compile
930 (concat "\\b"
931 (regexp-opt ',keywords t)
932 "\\b")))
884 933
885 (defvar sql-mode-ansi-font-lock-keywords 934 (defvar sql-mode-ansi-font-lock-keywords
886 (let ((ansi-keywords (eval-when-compile 935 (let ((ansi-funcs (sql-keywords-re
887 (concat "\\b" 936 "abs" "avg" "bit_length" "cardinality" "cast" "char_length"
888 (regexp-opt '( 937 "character_length" "coalesce" "convert" "count" "current_date"
889 938 "current_path" "current_role" "current_time" "current_timestamp"
890 "authorization" "avg" "begin" "close" "cobol" "commit" 939 "current_user" "extract" "localtime" "localtimestamp" "lower" "max"
891 "continue" "count" "declare" "double" "end" "escape" 940 "min" "mod" "nullif" "octet_length" "overlay" "placing" "session_user"
892 "exec" "fetch" "foreign" "fortran" "found" "go" "goto" "indicator" 941 "substring" "sum" "system_user" "translate" "treat" "trim" "upper"
893 "key" "language" "max" "min" "module" "numeric" "open" "pascal" "pli" 942 "user"
894 "precision" "primary" "procedure" "references" "rollback" 943 ))
895 "schema" "section" "some" "sqlcode" "sqlerror" "sum" "work" 944
896 945 (ansi-non-reserved (sql-keywords-re
897 ) t) "\\b"))) 946 "ada" "asensitive" "assignment" "asymmetric" "atomic" "between"
898 (ansi-reserved-words (eval-when-compile 947 "bitvar" "called" "catalog_name" "chain" "character_set_catalog"
899 (concat "\\b" 948 "character_set_name" "character_set_schema" "checked" "class_origin"
900 (regexp-opt '( 949 "cobol" "collation_catalog" "collation_name" "collation_schema"
901 950 "column_name" "command_function" "command_function_code" "committed"
902 "all" "and" "any" "as" "asc" "between" "by" "check" "create" 951 "condition_number" "connection_name" "constraint_catalog"
903 "current" "default" "delete" "desc" "distinct" "exists" "float" "for" 952 "constraint_name" "constraint_schema" "contains" "cursor_name"
904 "from" "grant" "group" "having" "in" "insert" "into" "is" 953 "datetime_interval_code" "datetime_interval_precision" "defined"
905 "like" "not" "null" "of" "on" "option" "or" "order" "privileges" 954 "definer" "dispatch" "dynamic_function" "dynamic_function_code"
906 "public" "select" "set" "table" "to" "union" "unique" 955 "existing" "exists" "final" "fortran" "generated" "granted"
907 "update" "user" "values" "view" "where" "with" 956 "hierarchy" "hold" "implementation" "infix" "insensitive" "instance"
908 957 "instantiable" "invoker" "key_member" "key_type" "length" "m"
909 ) t) "\\b"))) 958 "message_length" "message_octet_length" "message_text" "method" "more"
910 (ansi-types (eval-when-compile 959 "mumps" "name" "nullable" "number" "options" "overlaps" "overriding"
911 (concat "\\b" 960 "parameter_mode" "parameter_name" "parameter_ordinal_position"
912 (regexp-opt '( 961 "parameter_specific_catalog" "parameter_specific_name"
913 962 "parameter_specific_schema" "pascal" "pli" "position" "repeatable"
914 ;; ANSI Keywords that look like types 963 "returned_length" "returned_octet_length" "returned_sqlstate"
915 "character" "cursor" "dec" "int" "real" 964 "routine_catalog" "routine_name" "routine_schema" "row_count" "scale"
916 ;; ANSI Reserved Word that look like types 965 "schema_name" "security" "self" "sensitive" "serializable"
917 "char" "integer" "smallint" 966 "server_name" "similar" "simple" "source" "specific_name" "style"
918 967 "subclass_origin" "sublist" "symmetric" "system" "table_name"
919 ) t) "\\b")))) 968 "transaction_active" "transactions_committed"
920 (list (cons ansi-keywords 'font-lock-keyword-face) 969 "transactions_rolled_back" "transform" "transforms" "trigger_catalog"
921 (cons ansi-reserved-words 'font-lock-keyword-face) 970 "trigger_name" "trigger_schema" "type" "uncommitted" "unnamed"
922 (cons ansi-types 'font-lock-type-face))) 971 "user_defined_type_catalog" "user_defined_type_name"
972 "user_defined_type_schema"
973 ))
974
975 (ansi-reserved (sql-keywords-re
976 "absolute" "action" "add" "admin" "after" "aggregate" "alias" "all"
977 "allocate" "alter" "and" "any" "are" "as" "asc" "assertion" "at"
978 "authorization" "before" "begin" "both" "breadth" "by" "call"
979 "cascade" "cascaded" "case" "catalog" "check" "class" "close"
980 "collate" "collation" "column" "commit" "completion" "connect"
981 "connection" "constraint" "constraints" "constructor" "continue"
982 "corresponding" "create" "cross" "cube" "current" "cursor" "cycle"
983 "data" "day" "deallocate" "declare" "default" "deferrable" "deferred"
984 "delete" "depth" "deref" "desc" "describe" "descriptor" "destroy"
985 "destructor" "deterministic" "diagnostics" "dictionary" "disconnect"
986 "distinct" "domain" "drop" "dynamic" "each" "else" "end" "equals"
987 "escape" "every" "except" "exception" "exec" "execute" "external"
988 "false" "fetch" "first" "for" "foreign" "found" "free" "from" "full"
989 "function" "general" "get" "global" "go" "goto" "grant" "group"
990 "grouping" "having" "host" "hour" "identity" "ignore" "immediate" "in"
991 "indicator" "initialize" "initially" "inner" "inout" "input" "insert"
992 "intersect" "into" "is" "isolation" "iterate" "join" "key" "language"
993 "last" "lateral" "leading" "left" "less" "level" "like" "limit"
994 "local" "locator" "map" "match" "minute" "modifies" "modify" "module"
995 "month" "names" "natural" "new" "next" "no" "none" "not" "null" "of"
996 "off" "old" "on" "only" "open" "operation" "option" "or" "order"
997 "ordinality" "out" "outer" "output" "pad" "parameter" "parameters"
998 "partial" "path" "postfix" "prefix" "preorder" "prepare" "preserve"
999 "primary" "prior" "privileges" "procedure" "public" "read" "reads"
1000 "recursive" "references" "referencing" "relative" "restrict" "result"
1001 "return" "returns" "revoke" "right" "role" "rollback" "rollup"
1002 "routine" "rows" "savepoint" "schema" "scroll" "search" "second"
1003 "section" "select" "sequence" "session" "set" "sets" "size" "some"
1004 "space" "specific" "specifictype" "sql" "sqlexception" "sqlstate"
1005 "sqlwarning" "start" "state" "statement" "static" "structure" "table"
1006 "temporary" "terminate" "than" "then" "timezone_hour"
1007 "timezone_minute" "to" "trailing" "transaction" "translation"
1008 "trigger" "true" "under" "union" "unique" "unknown" "unnest" "update"
1009 "usage" "using" "value" "values" "variable" "view" "when" "whenever"
1010 "where" "with" "without" "work" "write" "year"
1011 ))
1012
1013 (ansi-types (sql-keywords-re
1014 "array" "binary" "bit" "blob" "boolean" "char" "character" "clob"
1015 "date" "dec" "decimal" "double" "float" "int" "integer" "interval"
1016 "large" "national" "nchar" "nclob" "numeric" "object" "precision"
1017 "real" "ref" "row" "scope" "smallint" "time" "timestamp" "varchar"
1018 "varying" "zone"
1019 )))
1020
1021 `((,ansi-non-reserved . font-lock-keyword-face)
1022 (,ansi-reserved . font-lock-keyword-face)
1023 (,ansi-funcs . ,sql-builtin-face)
1024 (,ansi-types . font-lock-type-face)))
923 1025
924 "ANSI SQL keywords used by font-lock. 1026 "ANSI SQL keywords used by font-lock.
925 1027
926 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1028 This variable is used by `sql-mode' and `sql-interactive-mode'. The
927 regular expressions are created during compilation by calling the 1029 regular expressions are created during compilation by calling the
928 function `regexp-opt'. Therefore, take a look at the source before 1030 function `regexp-opt'. Therefore, take a look at the source before
929 you define your own sql-mode-ansi-font-lock-keywords. You may want to 1031 you define your own sql-mode-ansi-font-lock-keywords. You may want to
930 add functions and PL/SQL keywords.") 1032 add functions and PL/SQL keywords.")
931 1033
932 (defvar sql-mode-oracle-font-lock-keywords 1034 (defvar sql-mode-oracle-font-lock-keywords
933 (let ((oracle-keywords (eval-when-compile 1035 (let ((oracle-functions (sql-keywords-re
934 (concat "\\b" 1036 "abs" "acos" "add_months" "ascii" "asciistr" "asin" "atan" "atan2"
935 (regexp-opt '( 1037 "avg" "bfilename" "bin_to_num" "bitand" "cast" "ceil" "chartorowid"
936 ;; Oracle (+ANSI) SQL keywords 1038 "chr" "coalesce" "compose" "concat" "convert" "corr" "cos" "cosh"
937 1039 "count" "covar_pop" "covar_samp" "cume_dist" "current_date"
938 ; ANSI keywords 1040 "current_timestamp" "current_user" "dbtimezone" "decode" "decompose"
939 "authorization" "avg" "begin" "close" "cobol" "commit" 1041 "dense_rank" "depth" "deref" "dump" "empty_clob" "existsnode" "exp"
940 "continue" "count" "declare" "double" "end" "escape" 1042 "extract" "extractvalue" "first" "first_value" "floor" "following"
941 "exec" "fetch" "foreign" "fortran" "found" "go" "goto" "indicator" 1043 "from_tz" "greatest" "group_id" "grouping_id" "hextoraw" "initcap"
942 "key" "language" "max" "min" "module" "numeric" "open" "pascal" "pli" 1044 "instr" "lag" "last" "last_day" "last_value" "lead" "least" "length"
943 "precision" "primary" "procedure" "references" "rollback" 1045 "ln" "localtimestamp" "lower" "lpad" "ltrim" "make_ref" "max" "min"
944 "schema" "section" "some" "sqlcode" "sqlerror" "sum" "work" 1046 "mod" "months_between" "new_time" "next_day" "nls_charset_decl_len"
945 1047 "nls_charset_id" "nls_charset_name" "nls_initcap" "nls_lower"
946 ; ANSI reserved words 1048 "nls_upper" "nlssort" "ntile" "nullif" "numtodsinterval"
947 "all" "and" "any" "as" "asc" "between" "by" "check" "create" 1049 "numtoyminterval" "nvl" "nvl2" "over" "path" "percent_rank"
948 "current" "default" "delete" "desc" "distinct" "exists" "float" "for" 1050 "percentile_cont" "percentile_disc" "power" "preceding" "rank"
949 "from" "grant" "group" "having" "in" "insert" "into" "is" 1051 "ratio_to_report" "rawtohex" "rawtonhex" "reftohex" "regr_"
950 "like" "not" "null" "of" "on" "option" "or" "order" "privileges" 1052 "regr_avgx" "regr_avgy" "regr_count" "regr_intercept" "regr_r2"
951 "public" "select" "set" "table" "to" "union" "unique" 1053 "regr_slope" "regr_sxx" "regr_sxy" "regr_syy" "replace" "round"
952 "update" "user" "values" "view" "where" "with" 1054 "row_number" "rowidtochar" "rowidtonchar" "rpad" "rtrim"
953 1055 "sessiontimezone" "sign" "sin" "sinh" "soundex" "sqrt" "stddev"
954 "access" "add" "admin" "after" "allocate" "alter" "analyze" "archive" 1056 "stddev_pop" "stddev_samp" "substr" "sum" "sys_connect_by_path"
955 "archivelog" "audit" "authid" "backup" "become" "before" "block" 1057 "sys_context" "sys_dburigen" "sys_extract_utc" "sys_guid" "sys_typeid"
956 "body" "cache" "cancel" "cascade" "change" "checkpoint" "cluster" 1058 "sys_xmlagg" "sys_xmlgen" "sysdate" "systimestamp" "tan" "tanh"
957 "comment" "compile" "compress" "compute" "connect" "constraint" 1059 "to_char" "to_clob" "to_date" "to_dsinterval" "to_lob" "to_multi_byte"
958 "constraints" "contents" "controlfile" "cross" "currval" "cycle" 1060 "to_nchar" "to_nclob" "to_number" "to_single_byte" "to_timestamp"
959 "database" "datafile" "dba" "deterministic" "disable" "dismount" 1061 "to_timestamp_tz" "to_yminterval" "translate" "treat" "trim" "trunc"
960 "drop" "dump" "each" "else" "else" "elsif" "enable" "events" "except" 1062 "tz_offset" "uid" "unbounded" "unistr" "updatexml" "upper" "user"
961 "exceptions" "exclusive" "execute" "exit" "explain" "extent" 1063 "userenv" "var_pop" "var_samp" "variance" "vsize" "width_bucket" "xml"
962 "externally" "false" "file" "flush" "force" "freelist" "freelists" 1064 "xmlagg" "xmlattribute" "xmlcolattval" "xmlconcat" "xmlelement"
963 "full" "function" "global" "grant" "groups" "identified" "if" 1065 "xmlforest" "xmlsequence" "xmltransform"
964 "immediate" "including" "increment" "index" "initial" "initrans" 1066 ))
965 "inner" "instance" "intersect" "join" "layer" "left" "level" "link" 1067
966 "lists" "lock" "logfile" "long" "loop" "manage" "manual" 1068 (oracle-keywords (sql-keywords-re
967 "maxdatafiles" "maxextents" "maxinistances" "maxlogfiles" 1069 "abort" "access" "accessed" "account" "activate" "add" "admin"
968 "maxloghistory" "maxlogmembers" "maxtrans" "maxvalue" "merge" 1070 "advise" "after" "agent" "aggregate" "all" "allocate" "allow" "alter"
969 "minextents" "minus" "minvalue" "mode" "modify" "mount" "natural" 1071 "always" "analyze" "ancillary" "and" "any" "apply" "archive"
970 "new" "next" "nextval" "noarchivelog" "noaudit" "nocache" "nocompress" 1072 "archivelog" "array" "as" "asc" "associate" "at" "attribute"
971 "nocycle" "nomaxvalue" "nominvalue" "none" "noorder" "noresetlogs" 1073 "attributes" "audit" "authenticated" "authid" "authorization" "auto"
972 "normal" "nosort" "nowait" "off" "offline" "old" "online" "only" 1074 "autoallocate" "automatic" "availability" "backup" "before" "begin"
973 "optimal" "others" "out" "outer" "over" "own" "package" "parallel" 1075 "behalf" "between" "binding" "bitmap" "block" "blocksize" "body"
974 "parallel_enable" "pctfree" "pctincrease" "pctused" "plan" "pragma" 1076 "both" "buffer_pool" "build" "by" "cache" "call" "cancel"
975 "preserve" "prior" "private" "profile" "quota" "raise" "raw" "read" 1077 "cascade" "case" "category" "certificate" "chained" "change" "check"
976 "recover" "referencing" "rename" "replace" "resetlogs" "resource" 1078 "checkpoint" "child" "chunk" "class" "clear" "clone" "close" "cluster"
977 "restrict_references" "restricted" "return" "returning" "reuse" 1079 "column" "column_value" "columns" "comment" "commit" "committed"
978 "revoke" "right" "rnds" "rnps" "role" "roles" "row" "rowlabel" 1080 "compatibility" "compile" "complete" "composite_limit" "compress"
979 "rownum" "rows" "savepoint" "scn" "segment" "sequence" "session" 1081 "compute" "connect" "connect_time" "consider" "consistent"
980 "share" "shared" "size" "snapshot" "sort" "statement_id" "statistics" 1082 "constraint" "constraints" "constructor" "contents" "context"
981 "stop" "storage" "subtype" "successful" "switch" "synonym" "sysdate" 1083 "continue" "controlfile" "corruption" "cost" "cpu_per_call"
982 "system" "tables" "tablespace" "temporary" "then" "thread" "tracing" 1084 "cpu_per_session" "create" "cross" "cube" "current" "currval" "cycle"
983 "transaction" "trigger" "triggers" "true" "truncate" "type" "uid" 1085 "dangling" "data" "database" "datafile" "datafiles" "day" "ddl"
984 "under" "unlimited" "until" "use" "using" "validate" "when" "while" 1086 "deallocate" "debug" "default" "deferrable" "deferred" "definer"
985 "wnds" "wnps" "write" 1087 "delay" "delete" "demand" "desc" "determines" "deterministic"
986 1088 "dictionary" "dimension" "directory" "disable" "disassociate"
987 ) t) "\\b"))) 1089 "disconnect" "distinct" "distinguished" "distributed" "dml" "drop"
988 (oracle-warning-words (eval-when-compile 1090 "each" "element" "else" "enable" "end" "equals_path" "escape"
989 (concat "\\b" 1091 "estimate" "except" "exceptions" "exchange" "excluding" "exists"
990 (regexp-opt '( 1092 "expire" "explain" "extent" "external" "externally"
991 ;; PLSQL defined exceptions 1093 "failed_login_attempts" "fast" "file" "final" "finish" "flush" "for"
992 1094 "force" "foreign" "freelist" "freelists" "freepools" "fresh" "from"
1095 "full" "function" "functions" "generated" "global" "global_name"
1096 "globally" "grant" "group" "grouping" "groups" "guard" "hash"
1097 "hashkeys" "having" "heap" "hierarchy" "id" "identified" "identifier"
1098 "idle_time" "immediate" "in" "including" "increment" "index" "indexed"
1099 "indexes" "indextype" "indextypes" "indicator" "initial" "initialized"
1100 "initially" "initrans" "inner" "insert" "instance" "instantiable"
1101 "instead" "intersect" "into" "invalidate" "is" "isolation" "java"
1102 "join" "keep" "key" "kill" "language" "left" "less" "level"
1103 "levels" "library" "like" "like2" "like4" "likec" "limit" "link"
1104 "list" "lob" "local" "location" "locator" "lock" "log" "logfile"
1105 "logging" "logical" "logical_reads_per_call"
1106 "logical_reads_per_session" "managed" "management" "manual" "map"
1107 "mapping" "master" "matched" "materialized" "maxdatafiles"
1108 "maxextents" "maximize" "maxinstances" "maxlogfiles" "maxloghistory"
1109 "maxlogmembers" "maxsize" "maxtrans" "maxvalue" "member" "memory"
1110 "merge" "migrate" "minextents" "minimize" "minimum" "minus" "minvalue"
1111 "mode" "modify" "monitoring" "month" "mount" "move" "movement" "name"
1112 "named" "natural" "nested" "never" "new" "next" "nextval" "no"
1113 "noarchivelog" "noaudit" "nocache" "nocompress" "nocopy" "nocycle"
1114 "nodelay" "noforce" "nologging" "nomapping" "nomaxvalue" "nominimize"
1115 "nominvalue" "nomonitoring" "none" "noorder" "noparallel" "norely"
1116 "noresetlogs" "noreverse" "normal" "norowdependencies" "nosort"
1117 "noswitch" "not" "nothing" "notimeout" "novalidate" "nowait" "null"
1118 "nulls" "object" "of" "off" "offline" "oidindex" "old" "on" "online"
1119 "only" "open" "operator" "optimal" "option" "or" "order"
1120 "organization" "out" "outer" "outline" "overflow" "overriding"
1121 "package" "packages" "parallel" "parallel_enable" "parameters"
1122 "parent" "partition" "partitions" "password" "password_grace_time"
1123 "password_life_time" "password_lock_time" "password_reuse_max"
1124 "password_reuse_time" "password_verify_function" "pctfree"
1125 "pctincrease" "pctthreshold" "pctused" "pctversion" "percent"
1126 "performance" "permanent" "pfile" "physical" "pipelined" "plan"
1127 "post_transaction" "pragma" "prebuilt" "preserve" "primary" "private"
1128 "private_sga" "privileges" "procedure" "profile" "protection" "public"
1129 "purge" "query" "quiesce" "quota" "range" "read" "reads" "rebuild"
1130 "records_per_block" "recover" "recovery" "recycle" "reduced" "ref"
1131 "references" "referencing" "refresh" "register" "reject" "relational"
1132 "rely" "rename" "reset" "resetlogs" "resize" "resolve" "resolver"
1133 "resource" "restrict" "restrict_references" "restricted" "result"
1134 "resumable" "resume" "retention" "return" "returning" "reuse"
1135 "reverse" "revoke" "rewrite" "right" "rnds" "rnps" "role" "roles"
1136 "rollback" "rollup" "row" "rowdependencies" "rownum" "rows" "sample"
1137 "savepoint" "scan" "schema" "scn" "scope" "segment" "select"
1138 "selectivity" "self" "sequence" "serializable" "session"
1139 "sessions_per_user" "set" "sets" "settings" "shared" "shared_pool"
1140 "shrink" "shutdown" "siblings" "sid" "single" "size" "skip" "some"
1141 "sort" "source" "space" "specification" "spfile" "split" "standby"
1142 "start" "statement_id" "static" "statistics" "stop" "storage" "store"
1143 "structure" "subpartition" "subpartitions" "substitutable"
1144 "successful" "supplemental" "suspend" "switch" "switchover" "synonym"
1145 "sys" "system" "table" "tables" "tablespace" "tempfile" "template"
1146 "temporary" "test" "than" "then" "thread" "through" "time_zone"
1147 "timeout" "to" "trace" "transaction" "trigger" "triggers" "truncate"
1148 "trust" "type" "types" "unarchived" "under" "under_path" "undo"
1149 "uniform" "union" "unique" "unlimited" "unlock" "unquiesce"
1150 "unrecoverable" "until" "unusable" "unused" "update" "upgrade" "usage"
1151 "use" "using" "validate" "validation" "value" "values" "variable"
1152 "varray" "version" "view" "wait" "when" "whenever" "where" "with"
1153 "without" "wnds" "wnps" "work" "write" "xmldata" "xmlschema" "xmltype"
1154 ))
1155
1156 (oracle-types (sql-keywords-re
1157 "bfile" "blob" "byte" "char" "character" "clob" "date" "dec" "decimal"
1158 "double" "float" "int" "integer" "interval" "long" "national" "nchar"
1159 "nclob" "number" "numeric" "nvarchar2" "precision" "raw" "real"
1160 "rowid" "second" "smallint" "time" "timestamp" "urowid" "varchar"
1161 "varchar2" "varying" "year" "zone"
1162 ))
1163
1164 (plsql-functions (sql-keywords-re
1165 "%bulk_rowcount" "%found" "%isopen" "%notfound" "%rowcount" "%rowtype"
1166 "%type" "extend" "prior"
1167 ))
1168
1169 (plsql-keywords (sql-keywords-re
1170 "autonomous_transaction" "bulk" "char_base" "collect" "constant"
1171 "cursor" "declare" "do" "elsif" "exception_init" "execute" "exit"
1172 "extends" "false" "fetch" "forall" "goto" "hour" "if" "interface"
1173 "loop" "minute" "number_base" "ocirowid" "opaque" "others" "rowtype"
1174 "separate" "serially_reusable" "sql" "sqlcode" "sqlerrm" "subtype"
1175 "the" "timezone_abbr" "timezone_hour" "timezone_minute"
1176 "timezone_region" "true" "varrying" "while"
1177 ))
1178
1179 (plsql-type (sql-keywords-re
1180 "binary_integer" "boolean" "naturaln" "pls_integer" "positive"
1181 "positiven" "record" "signtype" "string"
1182 ))
1183
1184 (plsql-warning (sql-keywords-re
993 "access_into_null" "case_not_found" "collection_is_null" 1185 "access_into_null" "case_not_found" "collection_is_null"
994 "cursor_already_open" "dup_val_on_index" "invalid_cursor" 1186 "cursor_already_open" "dup_val_on_index" "invalid_cursor"
995 "invalid_number" "login_denied" "no_data_found" "not_logged_on" 1187 "invalid_number" "login_denied" "no_data_found" "not_logged_on"
996 "program_error" "rowtype_mismatch" "self_is_null" "storage_error" 1188 "program_error" "rowtype_mismatch" "self_is_null" "storage_error"
997 "subscript_beyond_count" "subscript_outside_limit" "sys_invalid_rowid" 1189 "subscript_beyond_count" "subscript_outside_limit" "sys_invalid_rowid"
998 "timeout_on_resource" "too_many_rows" "value_error" "zero_divide" 1190 "timeout_on_resource" "too_many_rows" "value_error" "zero_divide"
999 "exception" "notfound" 1191 "exception" "notfound"
1000 1192 ))
1001 ) t) "\\b"))) 1193
1002 1194 (sqlplus-commands
1003 (oracle-sqlplus-commands 1195 (eval-when-compile (concat "^\\(\\("
1004 (eval-when-compile 1196 (regexp-opt '(
1005 (concat "^\\(\\("
1006 (regexp-opt '(
1007 ;; SQL*Plus commands
1008
1009 "@" "@@" "accept" "append" "archive" "attribute" "break" 1197 "@" "@@" "accept" "append" "archive" "attribute" "break"
1010 "btitle" "change" "clear" "column" "connect" "copy" "define" 1198 "btitle" "change" "clear" "column" "connect" "copy" "define"
1011 "del" "describe" "disconnect" "edit" "execute" "exit" "get" "help" 1199 "del" "describe" "disconnect" "edit" "execute" "exit" "get" "help"
1012 "host" "input" "list" "password" "pause" "print" "prompt" "recover" 1200 "host" "input" "list" "password" "pause" "print" "prompt" "recover"
1013 "remark" "repfooter" "repheader" "run" "save" "show" "shutdown" 1201 "remark" "repfooter" "repheader" "run" "save" "show" "shutdown"
1038 "sqlp\\(rompt\\)?\\|sqlt\\(erminator\\)?\\|" 1226 "sqlp\\(rompt\\)?\\|sqlt\\(erminator\\)?\\|"
1039 "suf\\(fix\\)?\\|tab\\|term\\(out\\)?\\|ti\\(me\\)?\\|" 1227 "suf\\(fix\\)?\\|tab\\|term\\(out\\)?\\|ti\\(me\\)?\\|"
1040 "timi\\(ng\\)?\\|trim\\(out\\)?\\|trims\\(pool\\)?\\|" 1228 "timi\\(ng\\)?\\|trim\\(out\\)?\\|trims\\(pool\\)?\\|"
1041 "und\\(erline\\)?\\|ver\\(ify\\)?\\|wra\\(p\\)?\\)\\)\\)" 1229 "und\\(erline\\)?\\|ver\\(ify\\)?\\|wra\\(p\\)?\\)\\)\\)"
1042 "\\b.*$" 1230 "\\b.*$"
1043 ))) 1231 ))))
1044 1232
1045 (oracle-types 1233 `((,sqlplus-commands . ,sql-doc-face)
1046 (eval-when-compile 1234 (,oracle-functions . ,sql-builtin-face)
1047 (concat "\\b" 1235 (,oracle-keywords . font-lock-keyword-face)
1048 (regexp-opt '( 1236 (,oracle-types . font-lock-type-face)
1049 ;; Oracle Keywords that look like types 1237 (,plsql-functions . ,sql-builtin-face)
1050 ;; Oracle Reserved Words that look like types 1238 (,plsql-keywords . font-lock-keyword-face)
1051 1239 (,plsql-type . font-lock-type-face)
1052 "bfile" "binary_integer" "blob" "boolean" "byte" "char" "character" 1240 (,plsql-warning . font-lock-warning-face)))
1053 "clob" "date" "day" "dec" "decimal" "double" "float" "int" "integer"
1054 "interval" "local" "long" "month" "natural" "naturaln" "nchar" "nclob"
1055 "number" "numeric" "nvarchar2" "pls_integer" "positive" "positiven"
1056 "precision" "raw" "real" "rowid" "second" "signtype" "smallint"
1057 "string" "time" "timestamp" "urowid" "varchar" "varchar2" "year"
1058 "zone"
1059
1060 ) t) "\\b")))
1061 (oracle-builtin-functions (eval-when-compile
1062 (concat "\\b"
1063 (regexp-opt '(
1064 ;; Misc Oracle builtin functions
1065
1066 "abs" "acos" "add_months" "ascii" "asciistr" "asin" "atan" "atan2"
1067 "avg" "bfilename" "bin_to_num" "bitand" "case" "cast" "ceil"
1068 "chartorowid" "chr" "coalesce" "compose" "concat" "convert" "corr"
1069 "cos" "cosh" "count" "covar_pop" "covar_samp" "cume_dist"
1070 "current_date" "current_timestamp" "current_user" "dbtimezone"
1071 "decode" "decompose" "dense_rank" "depth" "deref" "dump" "empty_blob"
1072 "empty_clob" "existsnode" "exp" "extract" "extractvalue" "first"
1073 "first_value" "floor" "from_tz" "greatest" "group_id" "grouping"
1074 "grouping_id" "hextoraw" "initcap" "instr" "lag" "last" "last_day"
1075 "last_value" "lead" "least" "length" "ln" "localtimestamp" "log"
1076 "lower" "lpad" "ltrim" "make_ref" "max" "min" "mod" "months_between"
1077 "nchr" "new_time" "next_day" "nls_charset_decl_len" "nls_charset_id"
1078 "nls_charset_name" "nls_initcap" "nls_lower" "nlssort" "nls_upper"
1079 "ntile" "nullif" "numtodsinterval" "numtoyminterval" "nvl" "nvl2"
1080 "path" "percent_rank" "percentile_cont" "percentile_disc" "power"
1081 "rank" "ratio_to_report" "rawtohex" "rawtonhex" "ref" "reftohex"
1082 "regr_slope" "regr_intercept" "regr_count" "regr_r2" "regr_avgx"
1083 "regr_avgy" "regr_sxx" "regr_syy" "regr_sxy" "round"
1084 "row_number" "rowidtochar" "rowidtonchar" "rpad" "rtrim"
1085 "sessiontimezone" "sign" "sin" "sinh" "soundex" "sqrt" "stddev"
1086 "stddev_pop" "stddev_samp" "substr" "sum" "sys_connect_by_path"
1087 "sys_context" "sys_dburigen" "sys_extract_utc" "sys_guid" "sys_typeid"
1088 "sys_xmlagg" "sys_xmlgen" "sysdate" "systimestamp" "tan" "tanh"
1089 "to_char" "to_clob" "to_date" "to_dsinterval" "to_lob" "to_multi_byte"
1090 "to_nchar" "to_nclob" "to_number" "to_single_byte" "to_timestamp"
1091 "to_timestamp_tz" "to_yminterval" "translate" "treat" "trim" "trunc"
1092 "tz_offset" "uid" "unistr" "updatexml" "upper" "user" "userenv"
1093 "value" "var_pop" "var_samp" "variance" "vsize" "width_bucket"
1094 "xmlagg" "xmlcolattval" "xmlconcat" "xmlelement" "xmlforest"
1095 "xmlsequence" "xmltransform"
1096
1097 ) t) "\\b"))))
1098 (list (cons oracle-sqlplus-commands 'font-lock-doc-face)
1099 (cons oracle-keywords 'font-lock-keyword-face)
1100 (cons oracle-warning-words 'font-lock-warning-face)
1101 ;; XEmacs doesn't have font-lock-builtin-face
1102 (if (string-match "XEmacs\\|Lucid" emacs-version)
1103 (cons oracle-builtin-functions 'font-lock-preprocessor-face)
1104 ;; GNU Emacs 19 doesn't have it either
1105 (if (string-match "GNU Emacs 19" emacs-version)
1106 (cons oracle-builtin-functions 'font-lock-keyword-face)
1107 ;; Emacs
1108 (cons oracle-builtin-functions 'font-lock-builtin-face)))
1109 (cons oracle-types 'font-lock-type-face)))
1110 1241
1111 "Oracle SQL keywords used by font-lock. 1242 "Oracle SQL keywords used by font-lock.
1112 1243
1113 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1244 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1114 regular expressions are created during compilation by calling the 1245 regular expressions are created during compilation by calling the
1115 function `regexp-opt'. Therefore, take a look at the source before 1246 function `regexp-opt'. Therefore, take a look at the source before
1116 you define your own sql-mode-oracle-font-lock-keywords. You may want 1247 you define your own sql-mode-oracle-font-lock-keywords. You may want
1117 to add functions and PL/SQL keywords.") 1248 to add functions and PL/SQL keywords.")
1118 1249
1119 (defvar sql-mode-postgres-font-lock-keywords 1250 (defvar sql-mode-postgres-font-lock-keywords
1120 (let ((postgres-reserved-words (eval-when-compile 1251 (let ((pg-funcs (sql-keywords-re
1121 (concat "\\b" 1252 "abbrev" "abs" "acos" "age" "area" "ascii" "asin" "atab2" "atan"
1122 (regexp-opt '( 1253 "atan2" "avg" "bit_length" "both" "broadcast" "btrim" "cbrt" "ceil"
1123 "language" 1254 "center" "char_length" "chr" "coalesce" "col_description" "convert"
1124 ) t) "\\b"))) 1255 "cos" "cot" "count" "current_database" "current_date" "current_schema"
1125 (postgres-types (eval-when-compile 1256 "current_schemas" "current_setting" "current_time" "current_timestamp"
1126 (concat "\\b" 1257 "current_user" "currval" "date_part" "date_trunc" "decode" "degrees"
1127 (regexp-opt '( 1258 "diameter" "encode" "exp" "extract" "floor" "get_bit" "get_byte"
1128 1259 "has_database_privilege" "has_function_privilege"
1129 "bool" "box" "circle" "char" "char2" "char4" "char8" "char16" "date" 1260 "has_language_privilege" "has_schema_privilege" "has_table_privilege"
1130 "float4" "float8" "int2" "int4" "int8" "line" "lseg" "money" "path" 1261 "height" "host" "initcap" "isclosed" "isfinite" "isopen" "leading"
1131 "point" "polygon" "serial" "text" "time" "timespan" "timestamp" "varchar" 1262 "length" "ln" "localtime" "localtimestamp" "log" "lower" "lpad"
1132 1263 "ltrim" "masklen" "max" "min" "mod" "netmask" "network" "nextval"
1133 ) t)"\\b"))) 1264 "now" "npoints" "nullif" "obj_description" "octet_length" "overlay"
1134 (postgres-builtin-functions (eval-when-compile 1265 "pclose" "pg_client_encoding" "pg_function_is_visible"
1135 (concat "\\b" 1266 "pg_get_constraintdef" "pg_get_indexdef" "pg_get_ruledef"
1136 (regexp-opt '( 1267 "pg_get_userbyid" "pg_get_viewdef" "pg_opclass_is_visible"
1137 ;; Misc Postgres builtin functions 1268 "pg_operator_is_visible" "pg_table_is_visible" "pg_type_is_visible"
1138 1269 "pi" "popen" "position" "pow" "quote_ident" "quote_literal" "radians"
1139 "abstime" "age" "area" "box" "center" "date_part" "date_trunc" 1270 "radius" "random" "repeat" "replace" "round" "rpad" "rtrim"
1140 "datetime" "dexp" "diameter" "dpow" "float" "float4" "height" 1271 "session_user" "set_bit" "set_byte" "set_config" "set_masklen"
1141 "initcap" "integer" "isclosed" "isfinite" "isoldpath" "isopen" 1272 "setval" "sign" "sin" "split_part" "sqrt" "stddev" "strpos" "substr"
1142 "length" "lower" "lpad" "ltrim" "pclose" "point" "points" "popen" 1273 "substring" "sum" "tan" "timeofday" "to_ascii" "to_char" "to_date"
1143 "position" "radius" "reltime" "revertpoly" "rpad" "rtrim" "substr" 1274 "to_hex" "to_number" "to_timestamp" "trailing" "translate" "trim"
1144 "substring" "text" "timespan" "translate" "trim" "upgradepath" 1275 "trunc" "upper" "variance" "version" "width"
1145 "upgradepoly" "upper" "varchar" "width" 1276 ))
1146 1277
1147 ) t) "\\b")))) 1278 (pg-reserved (sql-keywords-re
1148 (append sql-mode-ansi-font-lock-keywords 1279 "abort" "access" "add" "after" "aggregate" "alignment" "all" "alter"
1149 (list (cons postgres-reserved-words 'font-lock-keyword-face) 1280 "analyze" "and" "any" "as" "asc" "assignment" "authorization"
1150 ;; XEmacs doesn't have 'font-lock-builtin-face 1281 "backward" "basetype" "before" "begin" "between" "binary" "by" "cache"
1151 (if (string-match "XEmacs\\|Lucid" emacs-version) 1282 "called" "cascade" "case" "cast" "characteristics" "check"
1152 (cons postgres-builtin-functions 'font-lock-preprocessor-face) 1283 "checkpoint" "class" "close" "cluster" "column" "comment" "commit"
1153 ;; Emacs 1284 "committed" "commutator" "constraint" "constraints" "conversion"
1154 (cons postgres-builtin-functions 'font-lock-builtin-face)) 1285 "copy" "create" "createdb" "createuser" "cursor" "cycle" "database"
1155 (cons postgres-types 'font-lock-type-face)))) 1286 "deallocate" "declare" "default" "deferrable" "deferred" "definer"
1287 "delete" "delimiter" "desc" "distinct" "do" "domain" "drop" "each"
1288 "element" "else" "encoding" "encrypted" "end" "escape" "except"
1289 "exclusive" "execute" "exists" "explain" "extended" "external" "false"
1290 "fetch" "finalfunc" "for" "force" "foreign" "forward" "freeze" "from"
1291 "full" "function" "grant" "group" "gtcmp" "handler" "hashes" "having"
1292 "immediate" "immutable" "implicit" "in" "increment" "index" "inherits"
1293 "initcond" "initially" "input" "insensitive" "insert" "instead"
1294 "internallength" "intersect" "into" "invoker" "is" "isnull"
1295 "isolation" "join" "key" "language" "leftarg" "level" "like" "limit"
1296 "listen" "load" "local" "location" "lock" "ltcmp" "main" "match"
1297 "maxvalue" "merges" "minvalue" "mode" "move" "natural" "negator"
1298 "next" "nocreatedb" "nocreateuser" "none" "not" "nothing" "notify"
1299 "notnull" "null" "of" "offset" "oids" "on" "only" "operator" "or"
1300 "order" "output" "owner" "partial" "passedbyvalue" "password" "plain"
1301 "prepare" "primary" "prior" "privileges" "procedural" "procedure"
1302 "public" "read" "recheck" "references" "reindex" "relative" "rename"
1303 "reset" "restrict" "returns" "revoke" "rightarg" "rollback" "row"
1304 "rule" "schema" "scroll" "security" "select" "sequence" "serializable"
1305 "session" "set" "sfunc" "share" "show" "similar" "some" "sort1"
1306 "sort2" "stable" "start" "statement" "statistics" "storage" "strict"
1307 "stype" "sysid" "table" "temp" "template" "temporary" "then" "to"
1308 "transaction" "trigger" "true" "truncate" "trusted" "type"
1309 "unencrypted" "union" "unique" "unknown" "unlisten" "until" "update"
1310 "usage" "user" "using" "vacuum" "valid" "validator" "values"
1311 "variable" "verbose" "view" "volatile" "when" "where" "with" "without"
1312 "work"
1313 ))
1314
1315 (pg-types (sql-keywords-re
1316 "anyarray" "bigint" "bigserial" "bit" "boolean" "box" "bytea" "char"
1317 "character" "cidr" "circle" "cstring" "date" "decimal" "double"
1318 "float4" "float8" "inet" "int2" "int4" "int8" "integer" "internal"
1319 "interval" "language_handler" "line" "lseg" "macaddr" "money"
1320 "numeric" "oid" "opaque" "path" "point" "polygon" "precision" "real"
1321 "record" "regclass" "regoper" "regoperator" "regproc" "regprocedure"
1322 "regtype" "serial" "serial4" "serial8" "smallint" "text" "time"
1323 "timestamp" "varchar" "varying" "void" "zone"
1324 )))
1325
1326 `((,pg-funcs . ,sql-builtin-face)
1327 (,pg-reserved . font-lock-keyword-face)
1328 (,pg-types . font-lock-type-face)))
1156 1329
1157 "Postgres SQL keywords used by font-lock. 1330 "Postgres SQL keywords used by font-lock.
1158 1331
1159 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1332 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1160 regular expressions are created during compilation by calling the 1333 regular expressions are created during compilation by calling the
1161 function `regexp-opt'. Therefore, take a look at the source before 1334 function `regexp-opt'. Therefore, take a look at the source before
1162 you define your own sql-mode-postgres-font-lock-keywords.") 1335 you define your own sql-mode-postgres-font-lock-keywords.")
1163 1336
1164 (defvar sql-mode-linter-font-lock-keywords 1337 (defvar sql-mode-linter-font-lock-keywords
1165 (let ((linter-keywords (eval-when-compile 1338 (let ((linter-keywords (sql-keywords-re
1166 (concat "\\b"
1167 (regexp-opt '(
1168
1169 "autocommit" "autoinc" "autorowid" "cancel" "cascade" "channel" 1339 "autocommit" "autoinc" "autorowid" "cancel" "cascade" "channel"
1170 "committed" "count" "countblob" "cross" "current" "data" "database" 1340 "committed" "count" "countblob" "cross" "current" "data" "database"
1171 "datafile" "datafiles" "datesplit" "dba" "dbname" "default" "deferred" 1341 "datafile" "datafiles" "datesplit" "dba" "dbname" "default" "deferred"
1172 "denied" "description" "device" "difference" "directory" "error" 1342 "denied" "description" "device" "difference" "directory" "error"
1173 "escape" "euc" "exclusive" "external" "extfile" "false" "file" 1343 "escape" "euc" "exclusive" "external" "extfile" "false" "file"
1188 "startup" "statement" "station" "success" "sys_guid" "tables" "test" 1358 "startup" "statement" "station" "success" "sys_guid" "tables" "test"
1189 "timeout" "trace" "transaction" "translation" "trigger" 1359 "timeout" "trace" "transaction" "translation" "trigger"
1190 "trigger_info_size" "true" "trunc" "uncommitted" "unicode" "unknown" 1360 "trigger_info_size" "true" "trunc" "uncommitted" "unicode" "unknown"
1191 "unlimited" "unlisted" "user" "utf8" "value" "varying" "volumes" 1361 "unlimited" "unlisted" "user" "utf8" "value" "varying" "volumes"
1192 "wait" "windows_code" "workspace" "write" "xml" 1362 "wait" "windows_code" "workspace" "write" "xml"
1193 1363 ))
1194 ) t) "\\b"))) 1364
1195 (linter-reserved-words (eval-when-compile 1365 (linter-reserved (sql-keywords-re
1196 (concat "\\b"
1197 (regexp-opt '(
1198
1199 "access" "action" "add" "address" "after" "all" "alter" "always" "and" 1366 "access" "action" "add" "address" "after" "all" "alter" "always" "and"
1200 "any" "append" "as" "asc" "ascic" "async" "at_begin" "at_end" "audit" 1367 "any" "append" "as" "asc" "ascic" "async" "at_begin" "at_end" "audit"
1201 "aud_obj_name_len" "backup" "base" "before" "between" "blobfile" 1368 "aud_obj_name_len" "backup" "base" "before" "between" "blobfile"
1202 "blobfiles" "blobpct" "brief" "browse" "by" "case" "cast" "check" 1369 "blobfiles" "blobpct" "brief" "browse" "by" "case" "cast" "check"
1203 "clear" "close" "column" "comment" "commit" "connect" "contains" 1370 "clear" "close" "column" "comment" "commit" "connect" "contains"
1211 "purge" "rebuild" "resource" "restrict" "revoke" "right" "role" 1378 "purge" "rebuild" "resource" "restrict" "revoke" "right" "role"
1212 "rollback" "rownum" "select" "session" "set" "share" "shutdown" 1379 "rollback" "rownum" "select" "session" "set" "share" "shutdown"
1213 "start" "stop" "sync" "synchronize" "synonym" "sysdate" "table" "then" 1380 "start" "stop" "sync" "synchronize" "synonym" "sysdate" "table" "then"
1214 "to" "union" "unique" "unlock" "until" "update" "using" "values" 1381 "to" "union" "unique" "unlock" "until" "update" "using" "values"
1215 "view" "when" "where" "with" "without" 1382 "view" "when" "where" "with" "without"
1216 1383 ))
1217 ) t) "\\b"))) 1384
1218 (linter-types (eval-when-compile 1385 (linter-types (sql-keywords-re
1219 (concat "\\b"
1220 (regexp-opt '(
1221
1222 "bigint" "bitmap" "blob" "boolean" "char" "character" "date" 1386 "bigint" "bitmap" "blob" "boolean" "char" "character" "date"
1223 "datetime" "dec" "decimal" "double" "float" "int" "integer" "nchar" 1387 "datetime" "dec" "decimal" "double" "float" "int" "integer" "nchar"
1224 "number" "numeric" "real" "smallint" "varbyte" "varchar" "byte" 1388 "number" "numeric" "real" "smallint" "varbyte" "varchar" "byte"
1225 "cursor" "long" 1389 "cursor" "long"
1226 1390 ))
1227 ) t) "\\b"))) 1391
1228 (linter-builtin-functions (eval-when-compile 1392 (linter-functions (sql-keywords-re
1229 (concat "\\b"
1230 (regexp-opt '(
1231
1232 "abs" "acos" "asin" "atan" "atan2" "avg" "ceil" "cos" "cosh" "divtime" 1393 "abs" "acos" "asin" "atan" "atan2" "avg" "ceil" "cos" "cosh" "divtime"
1233 "exp" "floor" "getbits" "getblob" "getbyte" "getlong" "getraw" 1394 "exp" "floor" "getbits" "getblob" "getbyte" "getlong" "getraw"
1234 "getstr" "gettext" "getword" "hextoraw" "lenblob" "length" "log" 1395 "getstr" "gettext" "getword" "hextoraw" "lenblob" "length" "log"
1235 "lower" "lpad" "ltrim" "max" "min" "mod" "monthname" "nvl" 1396 "lower" "lpad" "ltrim" "max" "min" "mod" "monthname" "nvl"
1236 "octet_length" "power" "rand" "rawtohex" "repeat_string" 1397 "octet_length" "power" "rand" "rawtohex" "repeat_string"
1237 "right_substr" "round" "rpad" "rtrim" "sign" "sin" "sinh" "soundex" 1398 "right_substr" "round" "rpad" "rtrim" "sign" "sin" "sinh" "soundex"
1238 "sqrt" "sum" "tan" "tanh" "timeint_to_days" "to_char" "to_date" 1399 "sqrt" "sum" "tan" "tanh" "timeint_to_days" "to_char" "to_date"
1239 "to_gmtime" "to_localtime" "to_number" "trim" "upper" "decode" 1400 "to_gmtime" "to_localtime" "to_number" "trim" "upper" "decode"
1240 "substr" "substring" "chr" "dayname" "days" "greatest" "hex" "initcap" 1401 "substr" "substring" "chr" "dayname" "days" "greatest" "hex" "initcap"
1241 "instr" "least" "multime" "replace" "width" 1402 "instr" "least" "multime" "replace" "width"
1242 1403 )))
1243 ) t) "\\b")))) 1404
1244 (append sql-mode-ansi-font-lock-keywords 1405 `((,linter-keywords . font-lock-keyword-face)
1245 (list (cons linter-keywords 'font-lock-keywords-face) 1406 (,linter-reserved . font-lock-keyword-face)
1246 (cons linter-reserved-words 'font-lock-keyword-face) 1407 (,linter-functions . ,sql-builtin-face)
1247 ;; XEmacs doesn't have font-lock-builtin-face 1408 (,linter-types . font-lock-type-face)))
1248 (if (string-match "XEmacs\\|Lucid" emacs-version)
1249 (cons linter-builtin-functions 'font-lock-preprocessor-face)
1250 ;; GNU Emacs 19 doesn't have it either
1251 (if (string-match "GNU Emacs 19" emacs-version)
1252 (cons linter-builtin-functions 'font-lock-keywords-face)
1253 ;; Emacs
1254 (cons linter-builtin-functions 'font-lock-builtin-face)))
1255 (cons linter-types 'font-lock-type-face))))
1256 1409
1257 "Linter SQL keywords used by font-lock. 1410 "Linter SQL keywords used by font-lock.
1258 1411
1259 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1412 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1260 regular expressions are created during compilation by calling the 1413 regular expressions are created during compilation by calling the
1261 function `regexp-opt'.") 1414 function `regexp-opt'.")
1262 1415
1263 (defvar sql-mode-ms-font-lock-keywords 1416 (defvar sql-mode-ms-font-lock-keywords
1264 (let ((ms-reserved-words (eval-when-compile 1417 (let ((ms-reserved (sql-keywords-re
1265 (concat "\\b"
1266 (regexp-opt '(
1267
1268 "absolute" "add" "all" "alter" "and" "any" "as" "asc" "authorization" 1418 "absolute" "add" "all" "alter" "and" "any" "as" "asc" "authorization"
1269 "avg" "backup" "begin" "between" "break" "browse" "bulk" "by" 1419 "avg" "backup" "begin" "between" "break" "browse" "bulk" "by"
1270 "cascade" "case" "check" "checkpoint" "close" "clustered" "coalesce" 1420 "cascade" "case" "check" "checkpoint" "close" "clustered" "coalesce"
1271 "column" "commit" "committed" "compute" "confirm" "constraint" 1421 "column" "commit" "committed" "compute" "confirm" "constraint"
1272 "contains" "containstable" "continue" "controlrow" "convert" "count" 1422 "contains" "containstable" "continue" "controlrow" "convert" "count"
1273 "create" "cross" "current" "current_date" "current_time" 1423 "create" "cross" "current" "current_date" "current_time"
1274 "current_timestamp" "current_user" "database" "deallocate" 1424 "current_timestamp" "current_user" "database" "deallocate" "declare"
1275 "declare" "default" "delete" "deny" "desc" "disk" "distinct" 1425 "default" "delete" "deny" "desc" "disk" "distinct" "distributed"
1276 "distributed" "double" "drop" "dummy" "dump" "else" "end" "errlvl" 1426 "double" "drop" "dummy" "dump" "else" "end" "errlvl" "errorexit"
1277 "errorexit" "escape" "except" "exec" "execute" "exists" "exit" "fetch" 1427 "escape" "except" "exec" "execute" "exists" "exit" "fetch" "file"
1278 "file" "fillfactor" "first" "floppy" "for" "foreign" "freetext" 1428 "fillfactor" "first" "floppy" "for" "foreign" "freetext"
1279 "freetexttable" "from" "full" "goto" "grant" "group" "having" 1429 "freetexttable" "from" "full" "goto" "grant" "group" "having"
1280 "holdlock" "identity" "identity_insert" "identitycol" "if" "in" 1430 "holdlock" "identity" "identity_insert" "identitycol" "if" "in"
1281 "index" "inner" "insert" "intersect" "into" "is" "isolation" "join" 1431 "index" "inner" "insert" "intersect" "into" "is" "isolation" "join"
1282 "key" "kill" "last" "left" "level" "like" "lineno" "load" "max" "min" 1432 "key" "kill" "last" "left" "level" "like" "lineno" "load" "max" "min"
1283 "mirrorexit" "national" "next" "nocheck" "nolock" "nonclustered" "not" 1433 "mirrorexit" "national" "next" "nocheck" "nolock" "nonclustered" "not"
1293 "session_user" "set" "shutdown" "some" "statistics" "sum" 1443 "session_user" "set" "shutdown" "some" "statistics" "sum"
1294 "system_user" "table" "tablock" "tablockx" "tape" "temp" "temporary" 1444 "system_user" "table" "tablock" "tablockx" "tape" "temp" "temporary"
1295 "textsize" "then" "to" "top" "tran" "transaction" "trigger" "truncate" 1445 "textsize" "then" "to" "top" "tran" "transaction" "trigger" "truncate"
1296 "tsequal" "uncommitted" "union" "unique" "update" "updatetext" 1446 "tsequal" "uncommitted" "union" "unique" "update" "updatetext"
1297 "updlock" "use" "user" "values" "view" "waitfor" "when" "where" 1447 "updlock" "use" "user" "values" "view" "waitfor" "when" "where"
1298 "while" "with" "work" "writetext" 1448 "while" "with" "work" "writetext" "collate" "function" "openxml"
1299 "collate" "function" "openxml" "returns" 1449 "returns"
1300 1450 ))
1301 ) t) "\\b"))) 1451
1302 (ms-types (eval-when-compile 1452 (ms-types (sql-keywords-re
1303 (concat "\\b"
1304 (regexp-opt '(
1305
1306 "binary" "bit" "char" "character" "cursor" "datetime" "dec" "decimal" 1453 "binary" "bit" "char" "character" "cursor" "datetime" "dec" "decimal"
1307 "double" "float" "image" "int" "integer" "money" "national" "nchar" 1454 "double" "float" "image" "int" "integer" "money" "national" "nchar"
1308 "ntext" "numeric" "numeric" "nvarchar" "precision" "real" 1455 "ntext" "numeric" "numeric" "nvarchar" "precision" "real"
1309 "smalldatetime" "smallint" "smallmoney" "text" "timestamp" "tinyint" 1456 "smalldatetime" "smallint" "smallmoney" "text" "timestamp" "tinyint"
1310 "uniqueidentifier" "varbinary" "varchar" "varying" 1457 "uniqueidentifier" "varbinary" "varchar" "varying"
1311 1458 ))
1312 ) t) "\\b")))
1313 1459
1314 (ms-vars "\\b@[a-zA-Z0-9_]*\\b") 1460 (ms-vars "\\b@[a-zA-Z0-9_]*\\b")
1315 1461
1316 (ms-builtin-functions (eval-when-compile 1462 (ms-functions (sql-keywords-re
1317 (concat "\\b"
1318 (regexp-opt '(
1319 ;; Misc MS builtin functions
1320
1321 "@@connections" "@@cpu_busy" "@@cursor_rows" "@@datefirst" "@@dbts" 1463 "@@connections" "@@cpu_busy" "@@cursor_rows" "@@datefirst" "@@dbts"
1322 "@@error" "@@fetch_status" "@@identity" "@@idle" "@@io_busy" 1464 "@@error" "@@fetch_status" "@@identity" "@@idle" "@@io_busy"
1323 "@@langid" "@@language" "@@lock_timeout" "@@max_connections" 1465 "@@langid" "@@language" "@@lock_timeout" "@@max_connections"
1324 "@@max_precision" "@@nestlevel" "@@options" "@@pack_received" 1466 "@@max_precision" "@@nestlevel" "@@options" "@@pack_received"
1325 "@@pack_sent" "@@packet_errors" "@@procid" "@@remserver" "@@rowcount" 1467 "@@pack_sent" "@@packet_errors" "@@procid" "@@remserver" "@@rowcount"
1344 "round" "rtrim" "session_user" "sign" "sin" "soundex" "space" "sqrt" 1486 "round" "rtrim" "session_user" "sign" "sin" "soundex" "space" "sqrt"
1345 "square" "stats_date" "stdev" "stdevp" "str" "stuff" "substring" "sum" 1487 "square" "stats_date" "stdev" "stdevp" "str" "stuff" "substring" "sum"
1346 "suser_id" "suser_name" "suser_sid" "suser_sname" "system_user" "tan" 1488 "suser_id" "suser_name" "suser_sid" "suser_sname" "system_user" "tan"
1347 "textptr" "textvalid" "typeproperty" "unicode" "upper" "user" 1489 "textptr" "textvalid" "typeproperty" "unicode" "upper" "user"
1348 "user_id" "user_name" "var" "varp" "year" 1490 "user_id" "user_name" "var" "varp" "year"
1349 1491 ))
1350 ) t) "\\b"))) 1492
1351 1493 (ms-commands
1352 (ms-config-commands
1353 (eval-when-compile 1494 (eval-when-compile
1354 (concat "^\\(\\(set\\s-+\\(" 1495 (concat "^\\(\\(set\\s-+\\("
1355 (regexp-opt '( 1496 (regexp-opt '(
1356
1357 "datefirst" "dateformat" "deadlock_priority" "lock_timeout" 1497 "datefirst" "dateformat" "deadlock_priority" "lock_timeout"
1358 "concat_null_yields_null" "cursor_close_on_commit" 1498 "concat_null_yields_null" "cursor_close_on_commit"
1359 "disable_def_cnst_chk" "fips_flagger" "identity_insert" "language" 1499 "disable_def_cnst_chk" "fips_flagger" "identity_insert" "language"
1360 "offsets" "quoted_identifier" "arithabort" "arithignore" "fmtonly" 1500 "offsets" "quoted_identifier" "arithabort" "arithignore" "fmtonly"
1361 "nocount" "noexec" "numeric_roundabort" "parseonly" 1501 "nocount" "noexec" "numeric_roundabort" "parseonly"
1362 "query_governor_cost_limit" "rowcount" "textsize" "ansi_defaults" 1502 "query_governor_cost_limit" "rowcount" "textsize" "ansi_defaults"
1363 "ansi_null_dflt_off" "ansi_null_dflt_on" "ansi_nulls" "ansi_padding" 1503 "ansi_null_dflt_off" "ansi_null_dflt_on" "ansi_nulls" "ansi_padding"
1364 "ansi_warnings" "forceplan" "showplan_all" "showplan_text" 1504 "ansi_warnings" "forceplan" "showplan_all" "showplan_text"
1365 "statistics" "implicit_transactions" "remote_proc_transactions" 1505 "statistics" "implicit_transactions" "remote_proc_transactions"
1366 "transaction" "xact_abort" 1506 "transaction" "xact_abort"
1367
1368 ) t) 1507 ) t)
1369 "\\)\\)\\|go\\s-*\\|use\\s-+\\|setuser\\s-+\\|dbcc\\s-+\\).*$")))) 1508 "\\)\\)\\|go\\s-*\\|use\\s-+\\|setuser\\s-+\\|dbcc\\s-+\\).*$"))))
1370 1509
1371 (list (cons ms-config-commands 'font-lock-doc-face) 1510 `((,ms-commands . ,sql-doc-face)
1372 (cons ms-reserved-words 'font-lock-keyword-face) 1511 (,ms-reserved . font-lock-keyword-face)
1373 ;; XEmacs doesn't have 'font-lock-builtin-face 1512 (,ms-functions . ,sql-builtin-face)
1374 (if (string-match "XEmacs\\|Lucid" emacs-version) 1513 (,ms-vars . font-lock-variable-name-face)
1375 (cons ms-builtin-functions 'font-lock-preprocessor-face) 1514 (,ms-types . font-lock-type-face)))
1376 ;; Emacs
1377 (cons ms-builtin-functions 'font-lock-builtin-face))
1378 (cons ms-vars 'font-lock-variable-name-face)
1379 (cons ms-types 'font-lock-type-face)))
1380 1515
1381 "Microsoft SQLServer SQL keywords used by font-lock. 1516 "Microsoft SQLServer SQL keywords used by font-lock.
1382 1517
1383 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1518 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1384 regular expressions are created during compilation by calling the 1519 regular expressions are created during compilation by calling the
1385 function `regexp-opt'. Therefore, take a look at the source before 1520 function `regexp-opt'. Therefore, take a look at the source before
1386 you define your own sql-mode-ms-font-lock-keywords.") 1521 you define your own sql-mode-ms-font-lock-keywords.")
1387 1522
1388 (defvar sql-mode-sybase-font-lock-keywords sql-mode-ansi-font-lock-keywords 1523 (defvar sql-mode-sybase-font-lock-keywords nil
1389 "Sybase SQL keywords used by font-lock. 1524 "Sybase SQL keywords used by font-lock.
1390 1525
1391 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1526 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1392 regular expressions are created during compilation by calling the 1527 regular expressions are created during compilation by calling the
1393 function `regexp-opt'. Therefore, take a look at the source before 1528 function `regexp-opt'. Therefore, take a look at the source before
1394 you define your own sql-mode-sybase-font-lock-keywords.") 1529 you define your own sql-mode-sybase-font-lock-keywords.")
1395 1530
1396 (defvar sql-mode-informix-font-lock-keywords sql-mode-ansi-font-lock-keywords 1531 (defvar sql-mode-informix-font-lock-keywords nil
1397 "Informix SQL keywords used by font-lock. 1532 "Informix SQL keywords used by font-lock.
1398 1533
1399 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1534 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1400 regular expressions are created during compilation by calling the 1535 regular expressions are created during compilation by calling the
1401 function `regexp-opt'. Therefore, take a look at the source before 1536 function `regexp-opt'. Therefore, take a look at the source before
1402 you define your own sql-mode-informix-font-lock-keywords.") 1537 you define your own sql-mode-informix-font-lock-keywords.")
1403 1538
1404 (defvar sql-mode-interbase-font-lock-keywords sql-mode-ansi-font-lock-keywords 1539 (defvar sql-mode-interbase-font-lock-keywords nil
1405 "Interbase SQL keywords used by font-lock. 1540 "Interbase SQL keywords used by font-lock.
1406 1541
1407 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1542 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1408 regular expressions are created during compilation by calling the 1543 regular expressions are created during compilation by calling the
1409 function `regexp-opt'. Therefore, take a look at the source before 1544 function `regexp-opt'. Therefore, take a look at the source before
1410 you define your own sql-mode-interbase-font-lock-keywords.") 1545 you define your own sql-mode-interbase-font-lock-keywords.")
1411 1546
1412 (defvar sql-mode-ingres-font-lock-keywords sql-mode-ansi-font-lock-keywords 1547 (defvar sql-mode-ingres-font-lock-keywords nil
1413 "Ingres SQL keywords used by font-lock. 1548 "Ingres SQL keywords used by font-lock.
1414 1549
1415 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1550 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1416 regular expressions are created during compilation by calling the 1551 regular expressions are created during compilation by calling the
1417 function `regexp-opt'. Therefore, take a look at the source before 1552 function `regexp-opt'. Therefore, take a look at the source before
1418 you define your own sql-mode-interbase-font-lock-keywords.") 1553 you define your own sql-mode-interbase-font-lock-keywords.")
1419 1554
1420 (defvar sql-mode-solid-font-lock-keywords sql-mode-ansi-font-lock-keywords 1555 (defvar sql-mode-solid-font-lock-keywords nil
1421 "Solid SQL keywords used by font-lock. 1556 "Solid SQL keywords used by font-lock.
1422 1557
1423 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1558 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1424 regular expressions are created during compilation by calling the 1559 regular expressions are created during compilation by calling the
1425 function `regexp-opt'. Therefore, take a look at the source before 1560 function `regexp-opt'. Therefore, take a look at the source before
1426 you define your own sql-mode-solid-font-lock-keywords.") 1561 you define your own sql-mode-solid-font-lock-keywords.")
1427 1562
1428 (defvar sql-mode-mysql-font-lock-keywords sql-mode-ansi-font-lock-keywords 1563 (defvar sql-mode-mysql-font-lock-keywords
1564 (let ((mysql-funcs (sql-keywords-re
1565 "ascii" "avg" "bdmpolyfromtext" "bdmpolyfromwkb" "bdpolyfromtext"
1566 "bdpolyfromwkb" "benchmark" "bin" "bit_and" "bit_length" "bit_or"
1567 "bit_xor" "both" "cast" "char_length" "character_length" "coalesce"
1568 "concat" "concat_ws" "connection_id" "conv" "convert" "count"
1569 "curdate" "current_date" "current_time" "current_timestamp" "curtime"
1570 "elt" "encrypt" "export_set" "field" "find_in_set" "found_rows" "from"
1571 "geomcollfromtext" "geomcollfromwkb" "geometrycollectionfromtext"
1572 "geometrycollectionfromwkb" "geometryfromtext" "geometryfromwkb"
1573 "geomfromtext" "geomfromwkb" "get_lock" "group_concat" "hex" "ifnull"
1574 "instr" "interval" "isnull" "last_insert_id" "lcase" "leading"
1575 "length" "linefromtext" "linefromwkb" "linestringfromtext"
1576 "linestringfromwkb" "load_file" "locate" "lower" "lpad" "ltrim"
1577 "make_set" "master_pos_wait" "max" "mid" "min" "mlinefromtext"
1578 "mlinefromwkb" "mpointfromtext" "mpointfromwkb" "mpolyfromtext"
1579 "mpolyfromwkb" "multilinestringfromtext" "multilinestringfromwkb"
1580 "multipointfromtext" "multipointfromwkb" "multipolygonfromtext"
1581 "multipolygonfromwkb" "now" "nullif" "oct" "octet_length" "ord"
1582 "pointfromtext" "pointfromwkb" "polyfromtext" "polyfromwkb"
1583 "polygonfromtext" "polygonfromwkb" "position" "quote" "rand"
1584 "release_lock" "repeat" "replace" "reverse" "rpad" "rtrim" "soundex"
1585 "space" "std" "stddev" "substring" "substring_index" "sum" "sysdate"
1586 "trailing" "trim" "ucase" "unix_timestamp" "upper" "user" "variance"
1587 ))
1588
1589 (mysql-keywords (sql-keywords-re
1590 "action" "add" "after" "against" "all" "alter" "and" "as" "asc"
1591 "auto_increment" "avg_row_length" "bdb" "between" "by" "cascade"
1592 "case" "change" "character" "check" "checksum" "close" "collate"
1593 "collation" "column" "columns" "comment" "committed" "concurrent"
1594 "constraint" "create" "cross" "data" "database" "default"
1595 "delay_key_write" "delayed" "delete" "desc" "directory" "disable"
1596 "distinct" "distinctrow" "do" "drop" "dumpfile" "duplicate" "else"
1597 "enable" "enclosed" "end" "escaped" "exists" "fields" "first" "for"
1598 "force" "foreign" "from" "full" "fulltext" "global" "group" "handler"
1599 "having" "heap" "high_priority" "if" "ignore" "in" "index" "infile"
1600 "inner" "insert" "insert_method" "into" "is" "isam" "isolation" "join"
1601 "key" "keys" "last" "left" "level" "like" "limit" "lines" "load"
1602 "local" "lock" "low_priority" "match" "max_rows" "merge" "min_rows"
1603 "mode" "modify" "mrg_myisam" "myisam" "natural" "next" "no" "not"
1604 "null" "offset" "oj" "on" "open" "optionally" "or" "order" "outer"
1605 "outfile" "pack_keys" "partial" "password" "prev" "primary"
1606 "procedure" "quick" "raid0" "raid_type" "read" "references" "rename"
1607 "repeatable" "restrict" "right" "rollback" "rollup" "row_format"
1608 "savepoint" "select" "separator" "serializable" "session" "set"
1609 "share" "show" "sql_big_result" "sql_buffer_result" "sql_cache"
1610 "sql_calc_found_rows" "sql_no_cache" "sql_small_result" "starting"
1611 "straight_join" "striped" "table" "tables" "temporary" "terminated"
1612 "then" "to" "transaction" "truncate" "type" "uncommitted" "union"
1613 "unique" "unlock" "update" "use" "using" "values" "when" "where"
1614 "with" "write" "xor"
1615 ))
1616
1617 (mysql-types (sql-keywords-re
1618 "bigint" "binary" "bit" "blob" "bool" "boolean" "char" "curve" "date"
1619 "datetime" "dec" "decimal" "double" "enum" "fixed" "float" "geometry"
1620 "geometrycollection" "int" "integer" "line" "linearring" "linestring"
1621 "longblob" "longtext" "mediumblob" "mediumint" "mediumtext"
1622 "multicurve" "multilinestring" "multipoint" "multipolygon"
1623 "multisurface" "national" "numeric" "point" "polygon" "precision"
1624 "real" "smallint" "surface" "text" "time" "timestamp" "tinyblob"
1625 "tinyint" "tinytext" "unsigned" "varchar" "year" "year2" "year4"
1626 "zerofill"
1627 )))
1628
1629 `((,mysql-funcs . ,sql-builtin-face)
1630 (,mysql-keywords . font-lock-keyword-face)
1631 (,mysql-types . font-lock-type-face)))
1632
1429 "MySQL SQL keywords used by font-lock. 1633 "MySQL SQL keywords used by font-lock.
1430 1634
1431 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1635 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1432 regular expressions are created during compilation by calling the 1636 regular expressions are created during compilation by calling the
1433 function `regexp-opt'. Therefore, take a look at the source before 1637 function `regexp-opt'. Therefore, take a look at the source before
1434 you define your own sql-mode-mysql-font-lock-keywords.") 1638 you define your own sql-mode-mysql-font-lock-keywords.")
1435 1639
1436 (defvar sql-mode-sqlite-font-lock-keywords sql-mode-ansi-font-lock-keywords 1640 (defvar sql-mode-sqlite-font-lock-keywords nil
1437 "SQLite SQL keywords used by font-lock. 1641 "SQLite SQL keywords used by font-lock.
1438 1642
1439 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1643 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1440 regular expressions are created during compilation by calling the 1644 regular expressions are created during compilation by calling the
1441 function `regexp-opt'. Therefore, take a look at the source before 1645 function `regexp-opt'. Therefore, take a look at the source before
1442 you define your own sql-mode-sqlite-font-lock-keywords.") 1646 you define your own sql-mode-sqlite-font-lock-keywords.")
1443 1647
1444 (defvar sql-mode-db2-font-lock-keywords sql-mode-ansi-font-lock-keywords 1648 (defvar sql-mode-db2-font-lock-keywords nil
1445 "DB2 SQL keywords used by font-lock. 1649 "DB2 SQL keywords used by font-lock.
1446 1650
1447 This variable is used by `sql-mode' and `sql-interactive-mode'. The 1651 This variable is used by `sql-mode' and `sql-interactive-mode'. The
1448 regular expressions are created during compilation by calling the 1652 regular expressions are created during compilation by calling the
1449 function `regexp-opt'. Therefore, take a look at the source before 1653 function `regexp-opt'. Therefore, take a look at the source before
1461 ;;; SQL Product support functions 1665 ;;; SQL Product support functions
1462 1666
1463 (defun sql-product-feature (feature &optional product) 1667 (defun sql-product-feature (feature &optional product)
1464 "Lookup `feature' needed to support the current SQL product. 1668 "Lookup `feature' needed to support the current SQL product.
1465 1669
1466 See \[sql-product-support] for a list of products and supported features." 1670 See \[sql-product-alist] for a list of products and supported features."
1467 (cadr 1671 (plist-get
1468 (memq feature 1672 (cdr (assoc (or product sql-product)
1469 (assoc (or product sql-product) 1673 sql-product-alist))
1470 sql-product-support)))) 1674 feature))
1471 1675
1472 (defun sql-product-font-lock (keywords-only imenu) 1676 (defun sql-product-font-lock (keywords-only imenu)
1473 "Sets `font-lock-defaults' and `font-lock-keywords' based on 1677 "Sets `font-lock-defaults' and `font-lock-keywords' based on
1474 the product-specific keywords and syntax-alists defined in 1678 the product-specific keywords and syntax-alists defined in
1475 `sql-product-support'." 1679 `sql-product-alist'."
1476 (let 1680 (let
1477 ;; Get the product-specific syntax-alist. 1681 ;; Get the product-specific syntax-alist.
1478 ((syntax-alist 1682 ((syntax-alist
1479 (append 1683 (append
1480 (sql-product-feature :syntax-alist) 1684 (sql-product-feature :syntax-alist)
1482 1686
1483 ;; Get the product-specific keywords. 1687 ;; Get the product-specific keywords.
1484 (setq sql-mode-font-lock-keywords 1688 (setq sql-mode-font-lock-keywords
1485 (append 1689 (append
1486 (eval (sql-product-feature :font-lock)) 1690 (eval (sql-product-feature :font-lock))
1691 (eval (sql-product-feature :font-lock 'ansi))
1487 (list sql-mode-font-lock-object-name))) 1692 (list sql-mode-font-lock-object-name)))
1488 1693
1489 ;; Setup font-lock. (What is the minimum we should have to do 1694 ;; Setup font-lock. (What is the minimum we should have to do
1490 ;; here?) 1695 ;; here?)
1491 (setq font-lock-set-defaults nil 1696 (setq font-lock-set-defaults nil
1496 ;; Setup imenu; it needs the same syntax-alist. 1701 ;; Setup imenu; it needs the same syntax-alist.
1497 (when imenu 1702 (when imenu
1498 (setq imenu-syntax-alist syntax-alist)))) 1703 (setq imenu-syntax-alist syntax-alist))))
1499 1704
1500 ;;;###autoload 1705 ;;;###autoload
1501 (defun sql-add-product-keywords (product keywords) 1706 (defun sql-add-product-keywords (product keywords &optional append)
1502 "Append a `font-lock-keywords' entry to the existing entries defined 1707 "Add highlighting KEYWORDS for SQL PRODUCT.
1503 for the specified `product'." 1708
1504 1709 PRODUCT should be a symbol, the name of a sql product, such as
1505 (let ((font-lock (sql-product-feature :font-lock product))) 1710 `oracle'. KEYWORDS should be a list; see the variable
1506 (set font-lock (append (eval font-lock) (list keywords))))) 1711 `font-lock-keywords'. By default they are added at the beginning
1712 of the current highlighting list. If optional argument APPEND is
1713 `set', they are used to replace the current highlighting list.
1714 If APPEND is any other non-nil value, they are added at the end
1715 of the current highlighting list.
1716
1717 For example:
1718
1719 (sql-add-product-keywords 'ms
1720 '((\"\\\\b\\\\w+_t\\\\b\" . font-lock-type-face)))
1721
1722 adds a fontification pattern to fontify identifiers ending in
1723 `_t' as data types."
1724
1725 (let ((font-lock (sql-product-feature :font-lock product))
1726 old)
1727 (setq old (eval font-lock))
1728 (set font-lock
1729 (if (eq append 'set)
1730 keywords
1731 (if append
1732 (append old keywords)
1733 (append keywords old))))))
1507 1734
1508 1735
1509 1736
1510 ;;; Functions to switch highlighting 1737 ;;; Functions to switch highlighting
1511 1738
1516 (when (eq major-mode 'sql-mode) 1743 (when (eq major-mode 'sql-mode)
1517 ;; Setup font-lock 1744 ;; Setup font-lock
1518 (sql-product-font-lock nil t) 1745 (sql-product-font-lock nil t)
1519 1746
1520 ;; Force fontification, if its enabled. 1747 ;; Force fontification, if its enabled.
1521 (if font-lock-mode 1748 (if (and (boundp 'font-lock-mode)
1749 font-lock-mode)
1522 (font-lock-fontify-buffer)) 1750 (font-lock-fontify-buffer))
1523 1751
1524 ;; Set the mode name to include the product. 1752 ;; Set the mode name to include the product.
1525 (setq mode-name (concat "SQL[" (prin1-to-string sql-product) "]")))) 1753 (setq mode-name (concat "SQL[" (prin1-to-string sql-product) "]"))))
1526 1754
1527 (defun sql-set-product (product) 1755 (defun sql-set-product (product)
1528 "Set `sql-product' to product and enable appropriate 1756 "Set `sql-product' to product and enable appropriate
1529 highlighting." 1757 highlighting."
1530 (interactive "SEnter SQL product: ") 1758 (interactive "SEnter SQL product: ")
1531 (when (not (assoc product sql-product-support)) 1759 (when (not (assoc product sql-product-alist))
1532 (error "SQL product %s is not supported; treated as ANSI" product) 1760 (error "SQL product %s is not supported; treated as ANSI" product)
1533 (setq product 'ansi)) 1761 (setq product 'ansi))
1534 1762
1535 ;; Save product setting and fontify. 1763 ;; Save product setting and fontify.
1536 (setq sql-product product) 1764 (setq sql-product product)
1949 2177
1950 (defun sql-send-buffer () 2178 (defun sql-send-buffer ()
1951 "Send the buffer contents to the SQL process." 2179 "Send the buffer contents to the SQL process."
1952 (interactive) 2180 (interactive)
1953 (sql-send-region (point-min) (point-max))) 2181 (sql-send-region (point-min) (point-max)))
2182
2183 (defun sql-send-string (str)
2184 "Send a string to the SQL process."
2185 (interactive "sSQL Text: ")
2186 (if (buffer-live-p sql-buffer)
2187 (save-excursion
2188 (comint-send-string sql-buffer str)
2189 (comint-send-string sql-buffer "\n")
2190 (message "Sent string to buffer %s." (buffer-name sql-buffer))
2191 (if sql-pop-to-buffer-after-send-region
2192 (pop-to-buffer sql-buffer)
2193 (display-buffer sql-buffer)))
2194 (message "No SQL process started.")))
1954 2195
1955 (defun sql-toggle-pop-to-buffer-after-send-region (&optional value) 2196 (defun sql-toggle-pop-to-buffer-after-send-region (&optional value)
1956 "Toggle `sql-pop-to-buffer-after-send-region'. 2197 "Toggle `sql-pop-to-buffer-after-send-region'.
1957 2198
1958 If given the optional parameter VALUE, sets 2199 If given the optional parameter VALUE, sets
2609 (let ((params sql-postgres-options)) 2850 (let ((params sql-postgres-options))
2610 (if (not (string= "" sql-database)) 2851 (if (not (string= "" sql-database))
2611 (setq params (append params (list sql-database)))) 2852 (setq params (append params (list sql-database))))
2612 (if (not (string= "" sql-server)) 2853 (if (not (string= "" sql-server))
2613 (setq params (append (list "-h" sql-server) params))) 2854 (setq params (append (list "-h" sql-server) params)))
2855 (if (not (string= "" sql-user))
2856 (setq params (append (list "-U" sql-user) params)))
2614 (set-buffer (apply 'make-comint "SQL" sql-postgres-program 2857 (set-buffer (apply 'make-comint "SQL" sql-postgres-program
2615 nil params)))) 2858 nil params))))
2616 2859
2617 2860
2618 2861