Mercurial > emacs
comparison lisp/progmodes/sql.el @ 52242:f5ada28bb9f0
Patch by Michael Mauger <mmaug@yahoo.com>
Version 1.8.0 of sql-mode.
Simplify selection of SQL products to define highlighting and
interactive mode. Includes detailed instructions on adding
support for new products.
* sql.el (sql-product): New variable. Identifies SQL product for
use in highlighting and interactive mode.
(sql-interactive-product): New variable. SQL product for
sql-interactive-mode.
(sql-product-support): New variable. Specifies product-specific
parameters to drive highlighting and interactive mode.
(sql-imenu-generic-expression): Add more object types.
(sql-sqlite-options): Correct comment.
(sql-ms-program): Use "osql" rather than "isql".
(sql-prompt-regexp, sql-prompt-length): Update comment.
(sql-mode-menu): Add "Start SQLi session" entry. Replace
Highlighting submenu with Product menu. Fix Send Region entry.
(sql-mode-abbrev-table): Add abbreviations. Support of
SYSTEM-FLAG on define-abbrev. Support was removed with last
check-in; it now handles older Emacsen without the SYSTEM-FLAG.
(sql-mode-font-lock-object-name): Add font-lock pattern for object
names.
(sql-mode-ansi-font-lock-keywords): Set as default value.
(sql-mode-oracle-font-lock-keywords): Set as default value.
Support Oracle 9i keywords.
(sql-mode-postgres-font-lock-keywords): Set as default value.
(sql-mode-linter-font-lock-keywords): Set as default value.
(sql-mode-ms-font-lock-keywords): New variable. Support Microsoft
SQLServer 2000.
(sql-mode-sybase-font-lock-keywords)
(sql-mode-interbase-font-lock-keywords)
(sql-mode-sqlite-font-lock-keywords)
(sql-mode-strong-font-lock-keywords)
(sql-mode-mysql-font-lock-keywords)
(sql-mode-db2-font-lock-keywords): New variables. Default to ANSI
keywords.
(sql-mode-font-lock-defaults): Update comment.
(sql-product-feature): New function. Returns feature associated
with a product from `sql-product-support' alist.
(sql-product-font-lock): New function. Set font-lock support
based on `sql-product'.
(sql-add-product-keywords): New function. Add font-lock rules to
product-specific keyword variables.
(sql-set-product): New function. Set `sql-product' and apply
appropriate font-lock highlighting.
(sql-highlight-product): New function. Set font-lock support
based on a product. Also set mode name to include product name.
(sql-highlight-ansi-keywords, sql-highlight-oracle-keywords)
(sql-highlight-postgres-keywords, sql-highlight-linter-keywords):
Use `sql-set-product'.
(sql-highlight-ms-keywords)
(sql-highlight-sybase-keywords)
(sql-highlight-interbase-keywords)
(sql-highlight-strong-keywords)
(sql-highlight-mysql-keywords)
(sql-highlight-sqlite-keywords)
(sql-highlight-db2-keywords): New functions. Use
`sql-set-product'.
(sql-get-login): Prompt in the same order as the tokens.
(sql-mode): Uses `sql-product-highlight' and
`sql-product-font-lock'.
(sql-product-interactive): New function. Common portions of
product-specific interactive mode wrappers.
(sql-interactive-mode): Rewritten to use product features.
(sql-oracle, sql-sybase, sql-informix, sql-sqlite, sql-mysql)
(sql-solid, sql-ingres, sql-ms, sql-postgres, sql-interbase)
(sql-db2, sql-linter): Use `sql-product-interactive'.
(sql-connect-oracle, sql-connect-sybase, sql-connect-informix)
(sql-connect-sqlite, sql-connect-mysql, sql-connect-solid)
(sql-connect-ingres, sql-connect-postgres)
(sql-connect-interbase, sql-connect-db2, sql-connect-linter): New
functions. Format command line parameters and invoke comint on
the appropriate interpreter. Code was in the corresponding
`sql-xyz' function before.
(sql-connect-ms): New function. Support -E argument to use
operating system credentials for authentication.
| author | Alex Schroeder <alex@gnu.org> |
|---|---|
| date | Mon, 18 Aug 2003 17:29:23 +0000 |
| parents | 3da2cf447bf9 |
| children | 695cf19ef79e |
comparison
equal
deleted
inserted
replaced
| 52241:0b4e04022bd6 | 52242:f5ada28bb9f0 |
|---|---|
| 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 Free Software Foundation, Inc. | 3 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. |
| 4 | 4 |
| 5 ;; Author: Alex Schroeder <alex@gnu.org> | 5 ;; Author: Alex Schroeder <alex@gnu.org> |
| 6 ;; Maintainer: Alex Schroeder <alex@gnu.org> | 6 ;; Maintainer: Alex Schroeder <alex@gnu.org> |
| 7 ;; Version: 1.7.0 | 7 ;; Version: 1.8.0 |
| 8 ;; Keywords: comm languages processes | 8 ;; Keywords: comm languages processes |
| 9 ;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode | 9 ;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode |
| 10 | 10 |
| 11 ;; This file is part of GNU Emacs. | 11 ;; This file is part of GNU Emacs. |
| 12 | 12 |
| 76 ;; and the custom package | 76 ;; and the custom package |
| 77 ;; <URL:http://www.dina.kvl.dk/~abraham/custom/>. | 77 ;; <URL:http://www.dina.kvl.dk/~abraham/custom/>. |
| 78 | 78 |
| 79 ;;; Bugs: | 79 ;;; Bugs: |
| 80 | 80 |
| 81 ;; Using sql-ms (isql by Microsoft): When commands with syntax errors | 81 ;; sql-ms now uses osql instead of isql. Osql flushes its error |
| 82 ;; or execution errors are executed, there is no server feedback. | 82 ;; stream more frequently than isql so that error messages are |
| 83 ;; This happens in stored procedures for example. The server messages | 83 ;; available. There is no prompt and some output still is buffered. |
| 84 ;; only appear after the process is exited. This makes things | 84 ;; This improves the interaction under Emacs but it still is somewhat |
| 85 ;; somewhat unreliable. | 85 ;; awkward. |
| 86 | |
| 87 ;; Quoted identifiers are not supported for hilighting. Most | |
| 88 ;; databases support the use of double quoted strings in place of | |
| 89 ;; identifiers; ms (Microsoft SQLServer) also supports identifiers | |
| 90 ;; enclosed within brackets []. | |
| 86 | 91 |
| 87 ;; ChangeLog available on request. | 92 ;; ChangeLog available on request. |
| 93 | |
| 94 ;;; Product Support: | |
| 95 | |
| 96 ;; To add support for additional SQL products the following steps | |
| 97 ;; must be followed ("xyz" is the name of the product in the examples | |
| 98 ;; below): | |
| 99 | |
| 100 ;; 1) Add the product to `sql-product' choice list. | |
| 101 | |
| 102 ;; (const :tag "XyzDB" xyz) | |
| 103 | |
| 104 ;; 2) Add an entry to the `sql-product-support' list. | |
| 105 | |
| 106 ;; (xyz | |
| 107 ;; :font-lock sql-mode-xyz-font-lock-keywords | |
| 108 ;; :sqli-login (user password server database) | |
| 109 ;; :sqli-connect sql-connect-xyz | |
| 110 ;; :sqli-prompt-regexp "^xyzdb> " | |
| 111 ;; :sqli-prompt-length 7 | |
| 112 ;; :sqli-input-sender nil | |
| 113 ;; :syntax-alist ((?# . "w"))) | |
| 114 | |
| 115 ;; 3) Add customizable values for the product interpreter and options. | |
| 116 | |
| 117 ;; ;; Customization for XyzDB | |
| 118 ;; | |
| 119 ;; (defcustom sql-xyz-program "ixyz" | |
| 120 ;; "*Command to start ixyz by XyzDB." | |
| 121 ;; :type 'file | |
| 122 ;; :group 'SQL) | |
| 123 ;; | |
| 124 ;; (defcustom sql-xyz-options '("-X" "-Y" "-Z") | |
| 125 ;; "*List of additional options for `sql-xyz-program'." | |
| 126 ;; :type '(repeat string) | |
| 127 ;; :group 'SQL) | |
| 128 | |
| 129 ;; 4) Add an entry to SQL->Product submenu. | |
| 130 | |
| 131 ;; ["XyzDB" sql-highlight-xyz-keywords | |
| 132 ;; :style radio | |
| 133 ;; :selected (eq sql-product 'xyz)] | |
| 134 | |
| 135 ;; 5) Add the font-lock specifications. At a minimum, default to | |
| 136 ;; using ANSI keywords. See sql-mode-oracle-font-lock-keywords for | |
| 137 ;; a more complex example. | |
| 138 | |
| 139 ;; (defvar sql-mode-xyz-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 140 ;; "XyzDB SQL keywords used by font-lock.") | |
| 141 | |
| 142 ;; 6) Add a product highlighting function. | |
| 143 | |
| 144 ;; (defun sql-highlight-xyz-keywords () | |
| 145 ;; "Highlight XyzDB keywords." | |
| 146 ;; (interactive) | |
| 147 ;; (sql-set-product 'xyz)) | |
| 148 | |
| 149 ;; 7) Add an autoloaded SQLi function. | |
| 150 | |
| 151 ;; ;;;###autoload | |
| 152 ;; (defun sql-xyz () | |
| 153 ;; "Run ixyz by XyzDB as an inferior process." | |
| 154 ;; (interactive) | |
| 155 ;; (sql-product-interactive 'xyz)) | |
| 156 | |
| 157 ;; 8) Add a connect function which formats the command line arguments | |
| 158 ;; and starts the product interpreter in a comint buffer. See the | |
| 159 ;; existing connect functions for examples of the types of | |
| 160 ;; processing available. | |
| 161 | |
| 162 ;; (defun sql-connect-xyz () | |
| 163 ;; "Create comint buffer and connect to XyzDB using the login | |
| 164 ;; parameters and command options." | |
| 165 ;; | |
| 166 ;; ;; Do something with `sql-user', `sql-password', | |
| 167 ;; ;; `sql-database', and `sql-server'. | |
| 168 ;; (let ((params sql-xyz-options)) | |
| 169 ;; (if (not (string= "" sql-server)) | |
| 170 ;; (setq params (append (list "-S" sql-server) params))) | |
| 171 ;; (if (not (string= "" sql-database)) | |
| 172 ;; (setq params (append (list "-D" sql-database) params))) | |
| 173 ;; (if (not (string= "" sql-password)) | |
| 174 ;; (setq params (append (list "-P" sql-password) params))) | |
| 175 ;; (if (not (string= "" sql-user)) | |
| 176 ;; (setq params (append (list "-U" sql-user) params))) | |
| 177 ;; (set-buffer (apply 'make-comint "SQL" sql-xyz-program | |
| 178 ;; nil params)))) | |
| 179 | |
| 180 ;; 9) Save and compile sql.el. | |
| 88 | 181 |
| 89 ;;; To Do: | 182 ;;; To Do: |
| 90 | 183 |
| 91 ;; Add better hilight support for other brands; there is a bias towards | 184 ;; Add better hilight support for other brands; there is a bias towards |
| 92 ;; Oracle because that's what I use at work. Anybody else just send in | 185 ;; Oracle because that's what I use at work. Anybody else just send in |
| 103 ;; <ibalaban@dalet.com> | 196 ;; <ibalaban@dalet.com> |
| 104 ;; Yair Friedman <yfriedma@JohnBryce.Co.Il> | 197 ;; Yair Friedman <yfriedma@JohnBryce.Co.Il> |
| 105 ;; Gregor Zych <zych@pool.informatik.rwth-aachen.de> | 198 ;; Gregor Zych <zych@pool.informatik.rwth-aachen.de> |
| 106 ;; nino <nino@inform.dk> | 199 ;; nino <nino@inform.dk> |
| 107 ;; Berend de Boer <berend@pobox.com> | 200 ;; Berend de Boer <berend@pobox.com> |
| 201 ;; Michael Mauger <mmaug@yahoo.com> | |
| 108 | 202 |
| 109 | 203 |
| 110 | 204 |
| 111 ;;; Code: | 205 ;;; Code: |
| 112 | 206 |
| 113 (require 'comint) | 207 (require 'comint) |
| 114 ;; Need the following to allow GNU Emacs 19 to compile the file. | 208 ;; Need the following to allow GNU Emacs 19 to compile the file. |
| 115 (require 'regexp-opt) | 209 (eval-when-compile |
| 210 (require 'regexp-opt)) | |
| 116 (require 'custom) | 211 (require 'custom) |
| 117 | 212 |
| 118 ;;; Allow customization | 213 ;;; Allow customization |
| 119 | 214 |
| 120 (defgroup SQL nil | 215 (defgroup SQL nil |
| 121 "Running a SQL interpreter from within Emacs buffers" | 216 "Running a SQL interpreter from within Emacs buffers" |
| 122 :version "20.4" | 217 :version "20.4" |
| 123 :group 'processes) | 218 :group 'processes) |
| 124 | 219 |
| 125 ;; These three variables will be used as defaults, if set. | 220 ;; These four variables will be used as defaults, if set. |
| 126 | 221 |
| 127 (defcustom sql-user "" | 222 (defcustom sql-user "" |
| 128 "*Default username." | 223 "*Default username." |
| 129 :type 'string | 224 :type 'string |
| 130 :group 'SQL) | 225 :group 'SQL) |
| 144 | 239 |
| 145 (defcustom sql-server "" | 240 (defcustom sql-server "" |
| 146 "*Default server or host." | 241 "*Default server or host." |
| 147 :type 'string | 242 :type 'string |
| 148 :group 'SQL) | 243 :group 'SQL) |
| 244 | |
| 245 ;; SQL Product support | |
| 246 (defcustom sql-product 'ansi | |
| 247 "*Select the SQL database product used so that buffers can be | |
| 248 highlighted properly when you open them." | |
| 249 :type '(choice (const :tag "ANSI" ansi) | |
| 250 (const :tag "DB2" db2) | |
| 251 (const :tag "Informix" informix) | |
| 252 (const :tag "Ingres" ingres) | |
| 253 (const :tag "Interbase" interbase) | |
| 254 (const :tag "Linter" linter) | |
| 255 (const :tag "Microsoft" ms) | |
| 256 (const :tag "MySQL" mysql) | |
| 257 (const :tag "Oracle" oracle) | |
| 258 (const :tag "PostGres" postgres) | |
| 259 (const :tag "Solid" solid) | |
| 260 (const :tag "SQLite" sqlite) | |
| 261 (const :tag "Sybase" sybase)) | |
| 262 :group 'SQL) | |
| 263 | |
| 264 (defvar sql-interactive-product nil | |
| 265 "Product under `sql-interactive-mode'.") | |
| 266 | |
| 267 (defvar sql-product-support | |
| 268 '((ansi | |
| 269 :font-lock sql-mode-ansi-font-lock-keywords) | |
| 270 (db2 | |
| 271 :font-lock sql-mode-db2-font-lock-keywords | |
| 272 :sqli-login nil | |
| 273 :sqli-connect sql-connect-db2 | |
| 274 :sqli-prompt-regexp "^db2 => " | |
| 275 :sqli-prompt-length 7) | |
| 276 (informix | |
| 277 :font-lock sql-mode-informix-font-lock-keywords | |
| 278 :sqli-login (database) | |
| 279 :sqli-connect sql-connect-informix | |
| 280 :sqli-prompt-regexp "^SQL> " | |
| 281 :sqli-prompt-length 5) | |
| 282 (ingres | |
| 283 :font-lock sql-mode-ingres-font-lock-keywords | |
| 284 :sqli-login (database) | |
| 285 :sqli-connect sql-connect-ingres | |
| 286 :sqli-prompt-regexp "^\* " | |
| 287 :sqli-prompt-length 2) | |
| 288 (interbase | |
| 289 :font-lock sql-mode-interbase-font-lock-keywords | |
| 290 :sqli-login (user password database) | |
| 291 :sqli-connect sql-connect-interbase | |
| 292 :sqli-prompt-regexp "^SQL> " | |
| 293 :sqli-prompt-length 5) | |
| 294 (linter | |
| 295 :font-lock sql-mode-linter-font-lock-keywords | |
| 296 :sqli-login (user password database server) | |
| 297 :sqli-connect sql-connect-linter | |
| 298 :sqli-prompt-regexp "^SQL>" | |
| 299 :sqli-prompt-length 4) | |
| 300 (ms | |
| 301 :font-lock sql-mode-ms-font-lock-keywords | |
| 302 :sqli-login (user password server database) | |
| 303 :sqli-connect sql-connect-ms | |
| 304 :sqli-prompt-regexp "^[0-9]*>" | |
| 305 :sqli-prompt-length 5 | |
| 306 :syntax-alist ((?@ . "w"))) | |
| 307 (mysql | |
| 308 :font-lock sql-mode-mysql-font-lock-keywords | |
| 309 :sqli-login (user password database server) | |
| 310 :sqli-connect sql-connect-mysql | |
| 311 :sqli-prompt-regexp "^mysql> " | |
| 312 :sqli-prompt-length 6) | |
| 313 (oracle | |
| 314 :font-lock sql-mode-oracle-font-lock-keywords | |
| 315 :sqli-login (user password database) | |
| 316 :sqli-connect sql-connect-oracle | |
| 317 :sqli-prompt-regexp "^SQL> " | |
| 318 :sqli-prompt-length 5 | |
| 319 :syntax-alist ((?$ . "w") (?# . "w"))) | |
| 320 (postgres | |
| 321 :font-lock sql-mode-postgres-font-lock-keywords | |
| 322 :sqli-login (database server) | |
| 323 :sqli-connect sql-connect-postgres | |
| 324 :sqli-prompt-regexp "^.*> *" | |
| 325 :sqli-prompt-length 5) | |
| 326 (solid | |
| 327 :font-lock sql-mode-solid-font-lock-keywords | |
| 328 :sqli-login (user password server) | |
| 329 :sqli-connect sql-connect-solid | |
| 330 :sqli-prompt-regexp "^" | |
| 331 :sqli-prompt-length 0) | |
| 332 (sqlite | |
| 333 :font-lock sql-mode-sqlite-font-lock-keywords | |
| 334 :sqli-login (user password server database) | |
| 335 :sqli-connect sql-connect-sqlite | |
| 336 :sqli-prompt-regexp "^sqlite> " | |
| 337 :sqli-prompt-length 8) | |
| 338 (sybase | |
| 339 :font-lock sql-mode-sybase-font-lock-keywords | |
| 340 :sqli-login (server user password database) | |
| 341 :sqli-connect sql-connect-sybase | |
| 342 :sqli-prompt-regexp "^SQL> " | |
| 343 :sqli-prompt-length 5 | |
| 344 :syntax-alist ((?@ . "w"))) | |
| 345 ) | |
| 346 "This variable contains a list of product features for each of the | |
| 347 SQL products handled by `sql-mode'. Without an entry in this list a | |
| 348 product will not be properly highlighted and will not support | |
| 349 `sql-interactive-mode'. | |
| 350 | |
| 351 Each element in the list is in the following format: | |
| 352 | |
| 353 \(PRODUCT FEATURE VALUE ...) | |
| 354 | |
| 355 where PRODUCT is the appropriate value of `sql-product'. The product | |
| 356 name is then followed by FEATURE-VALUE pairs. If a FEATURE is not | |
| 357 specified, its VALUE is treated as nil. FEATURE must be one of the | |
| 358 following: | |
| 359 | |
| 360 :font-lock name of the variable containing the product | |
| 361 specific font lock highlighting patterns. | |
| 362 | |
| 363 :sqli-login a list of login parameters (i.e., user, | |
| 364 password, database and server) needed to | |
| 365 connect to the database. | |
| 366 | |
| 367 :sqli-connect the name of a function which accepts no | |
| 368 parameters that will use the values of | |
| 369 `sql-user', `sql-password', | |
| 370 `sql-database' and `sql-server' to open a | |
| 371 comint buffer and connect to the | |
| 372 database. Do product specific | |
| 373 configuration of comint in this function. | |
| 374 | |
| 375 :sqli-prompt-regexp a regular expression string that matches the | |
| 376 prompt issued by the product interpreter. | |
| 377 | |
| 378 :sqli-prompt-length the length of the prompt on the line. | |
| 379 | |
| 380 :syntax-alist an alist of syntax table entries to enable | |
| 381 special character treatment by font-lock and | |
| 382 imenu. ") | |
| 149 | 383 |
| 150 ;; misc customization of sql.el behaviour | 384 ;; misc customization of sql.el behaviour |
| 151 | 385 |
| 152 (defcustom sql-electric-stuff nil | 386 (defcustom sql-electric-stuff nil |
| 153 "Treat some input as electric. | 387 "Treat some input as electric. |
| 175 :group 'SQL) | 409 :group 'SQL) |
| 176 | 410 |
| 177 ;; imenu support for sql-mode. | 411 ;; imenu support for sql-mode. |
| 178 | 412 |
| 179 (defvar sql-imenu-generic-expression | 413 (defvar sql-imenu-generic-expression |
| 180 '(("Tables" "^\\s-*create\\s-+table\\s-+\\(\\w+\\)" 1) | 414 ;; Items are in reverse order because they are rendered in reverse. |
| 181 ("Indexes" "^\\s-*create\\s-+index\\s-+\\(\\w+\\)" 1)) | 415 '(("Rules/Defaults" "^\\s-*create\\s-+\\(rule\\|default\\)\\s-+\\(\\w+\\)" 2) |
| 416 ("Sequences" "^\\s-*create\\s-+sequence\\s-+\\(\\w+\\)" 1) | |
| 417 ("Triggers" "^\\s-*\\(create\\s-+\\(or\\s-+replace\\s-+\\)?\\)?trigger\\s-+\\(\\w+\\)" 3) | |
| 418 ("Functions" "^\\s-*\\(create\\s-+\\(or\\s-+replace\\s-+\\)?\\)?function\\s-+\\(\\w+\\)" 3) | |
| 419 ("Procedures" "^\\s-*\\(create\\s-+\\(or\\s-+replace\\s-+\\)?\\)?proc\\(edure\\)?\\s-+\\(\\w+\\)" 4) | |
| 420 ("Packages" "^\\s-*create\\s-+\\(or\\s-+replace\\s-+\\)?package\\s-+\\(body\\s-+\\)?\\(\\w+\\)" 3) | |
| 421 ("Indexes" "^\\s-*create\\s-+index\\s-+\\(\\w+\\)" 1) | |
| 422 ("Tables/Views" "^\\s-*create\\s-+\\(\\(global\\s-+\\)?\\(temporary\\s-+\\)?table\\|view\\)\\s-+\\(\\w+\\)" 4)) | |
| 182 "Define interesting points in the SQL buffer for `imenu'. | 423 "Define interesting points in the SQL buffer for `imenu'. |
| 183 | 424 |
| 184 This is used to set `imenu-generic-expression' when SQL mode is | 425 This is used to set `imenu-generic-expression' when SQL mode is |
| 185 entered. Subsequent changes to sql-imenu-generic-expression will not | 426 entered. Subsequent changes to sql-imenu-generic-expression will not |
| 186 affect existing SQL buffers because imenu-generic-expression is a | 427 affect existing SQL buffers because imenu-generic-expression is a |
| 272 The program can also specify a TCP connection. See `make-comint'." | 513 The program can also specify a TCP connection. See `make-comint'." |
| 273 :type 'file | 514 :type 'file |
| 274 :group 'SQL) | 515 :group 'SQL) |
| 275 | 516 |
| 276 (defcustom sql-sqlite-options nil | 517 (defcustom sql-sqlite-options nil |
| 277 "*List of additional options for `sql-mysql-program'. | 518 "*List of additional options for `sql-sqlite-program'. |
| 278 The following list of options is reported to make things work | 519 The following list of options is reported to make things work |
| 279 on Windows: \"-C\" \"-t\" \"-f\" \"-n\"." | 520 on Windows: \"-C\" \"-t\" \"-f\" \"-n\"." |
| 280 :type '(repeat string) | 521 :type '(repeat string) |
| 281 :version "20.8" | 522 :version "20.8" |
| 282 :group 'SQL) | 523 :group 'SQL) |
| 351 :type 'file | 592 :type 'file |
| 352 :group 'SQL) | 593 :group 'SQL) |
| 353 | 594 |
| 354 ;; Customization for Microsoft | 595 ;; Customization for Microsoft |
| 355 | 596 |
| 356 (defcustom sql-ms-program "isql" | 597 (defcustom sql-ms-program "osql" |
| 357 "*Command to start isql by Microsoft. | 598 "*Command to start osql by Microsoft. |
| 358 | 599 |
| 359 Starts `sql-interactive-mode' after doing some setup. | 600 Starts `sql-interactive-mode' after doing some setup. |
| 360 | 601 |
| 361 The program can also specify a TCP connection. See `make-comint'." | 602 The program can also specify a TCP connection. See `make-comint'." |
| 362 :type 'file | 603 :type 'file |
| 466 the local value of `sql-buffer' using \\[sql-set-sqli-buffer].") | 707 the local value of `sql-buffer' using \\[sql-set-sqli-buffer].") |
| 467 | 708 |
| 468 (defvar sql-prompt-regexp nil | 709 (defvar sql-prompt-regexp nil |
| 469 "Prompt used to initialize `comint-prompt-regexp'. | 710 "Prompt used to initialize `comint-prompt-regexp'. |
| 470 | 711 |
| 471 You can change `comint-prompt-regexp' on `sql-interactive-mode-hook'.") | 712 You can change `sql-prompt-regexp' on `sql-interactive-mode-hook'.") |
| 472 | 713 |
| 473 (defvar sql-prompt-length 0 | 714 (defvar sql-prompt-length 0 |
| 474 "Prompt used to set `left-margin' in `sql-interactive-mode'. | 715 "Prompt used to set `left-margin' in `sql-interactive-mode'. |
| 475 | 716 |
| 476 You can change it on `sql-interactive-mode-hook'.") | 717 You can change `sql-prompt-length' on `sql-interactive-mode-hook'.") |
| 477 | 718 |
| 478 (defvar sql-alternate-buffer-name nil | 719 (defvar sql-alternate-buffer-name nil |
| 479 "Buffer-local string used to possibly rename the SQLi buffer. | 720 "Buffer-local string used to possibly rename the SQLi buffer. |
| 480 | 721 |
| 481 Used by `sql-rename-buffer'.") | 722 Used by `sql-rename-buffer'.") |
| 516 '("SQL" | 757 '("SQL" |
| 517 ["Send Paragraph" sql-send-paragraph (and (buffer-live-p sql-buffer) | 758 ["Send Paragraph" sql-send-paragraph (and (buffer-live-p sql-buffer) |
| 518 (get-buffer-process sql-buffer))] | 759 (get-buffer-process sql-buffer))] |
| 519 ["Send Region" sql-send-region (and (or (and (boundp 'mark-active); Emacs | 760 ["Send Region" sql-send-region (and (or (and (boundp 'mark-active); Emacs |
| 520 mark-active) | 761 mark-active) |
| 521 (mark)); XEmacs | 762 (mark t)); XEmacs |
| 522 (buffer-live-p sql-buffer) | 763 (buffer-live-p sql-buffer) |
| 523 (get-buffer-process sql-buffer))] | 764 (get-buffer-process sql-buffer))] |
| 524 ["Send Buffer" sql-send-buffer (and (buffer-live-p sql-buffer) | 765 ["Send Buffer" sql-send-buffer (and (buffer-live-p sql-buffer) |
| 525 (get-buffer-process sql-buffer))] | 766 (get-buffer-process sql-buffer))] |
| 767 ["--" nil nil] | |
| 768 ["Start SQLi session" sql-product-interactive (sql-product-feature :sqli-connect)] | |
| 526 ["Show SQLi buffer" sql-show-sqli-buffer t] | 769 ["Show SQLi buffer" sql-show-sqli-buffer t] |
| 527 ["Set SQLi buffer" sql-set-sqli-buffer t] | 770 ["Set SQLi buffer" sql-set-sqli-buffer t] |
| 528 ["Pop to SQLi buffer after send" | 771 ["Pop to SQLi buffer after send" |
| 529 sql-toggle-pop-to-buffer-after-send-region | 772 sql-toggle-pop-to-buffer-after-send-region |
| 530 :style toggle | 773 :style toggle |
| 531 :selected sql-pop-to-buffer-after-send-region] | 774 :selected sql-pop-to-buffer-after-send-region] |
| 532 ("Highlighting" | 775 ["--" nil nil] |
| 533 ["ANSI SQL keywords" sql-highlight-ansi-keywords t] | 776 ("Product" |
| 534 ["Oracle keywords" sql-highlight-oracle-keywords t] | 777 ["ANSI" sql-highlight-ansi-keywords |
| 535 ["Postgres keywords" sql-highlight-postgres-keywords t] | 778 :style radio |
| 536 ["Linter keywords" sql-highlight-linter-keywords t] | 779 :selected (eq sql-product 'ansi)] |
| 780 ["DB2" sql-highlight-db2-keywords | |
| 781 :style radio | |
| 782 :selected (eq sql-product 'db2)] | |
| 783 ["Informix" sql-highlight-informix-keywords | |
| 784 :style radio | |
| 785 :selected (eq sql-product 'informix)] | |
| 786 ["Ingres" sql-highlight-ingres-keywords | |
| 787 :style radio | |
| 788 :selected (eq sql-product 'ingres)] | |
| 789 ["Interbase" sql-highlight-interbase-keywords | |
| 790 :style radio | |
| 791 :selected (eq sql-product 'interbase)] | |
| 792 ["Linter" sql-highlight-linter-keywords | |
| 793 :style radio | |
| 794 :selected (eq sql-product 'linter)] | |
| 795 ["Microsoft" sql-highlight-ms-keywords | |
| 796 :style radio | |
| 797 :selected (eq sql-product 'ms)] | |
| 798 ["MySQL" sql-highlight-mysql-keywords | |
| 799 :style radio | |
| 800 :selected (eq sql-product 'mysql)] | |
| 801 ["Oracle" sql-highlight-oracle-keywords | |
| 802 :style radio | |
| 803 :selected (eq sql-product 'oracle)] | |
| 804 ["Postgres" sql-highlight-postgres-keywords | |
| 805 :style radio | |
| 806 :selected (eq sql-product 'postgres)] | |
| 807 ["Solid" sql-highlight-solid-keywords | |
| 808 :style radio | |
| 809 :selected (eq sql-product 'solid)] | |
| 810 ["SQLite" sql-highlight-sqlite-keywords | |
| 811 :style radio | |
| 812 :selected (eq sql-product 'sqlite)] | |
| 813 ["Sybase" sql-highlight-sybase-keywords | |
| 814 :style radio | |
| 815 :selected (eq sql-product 'sybase)] | |
| 537 ))) | 816 ))) |
| 538 | 817 |
| 539 ;; easy menu for sql-interactive-mode. | 818 ;; easy menu for sql-interactive-mode. |
| 540 | 819 |
| 541 (easy-menu-define | 820 (easy-menu-define |
| 549 | 828 |
| 550 (defvar sql-mode-abbrev-table nil | 829 (defvar sql-mode-abbrev-table nil |
| 551 "Abbrev table used in `sql-mode' and `sql-interactive-mode'.") | 830 "Abbrev table used in `sql-mode' and `sql-interactive-mode'.") |
| 552 (if sql-mode-abbrev-table | 831 (if sql-mode-abbrev-table |
| 553 () | 832 () |
| 554 (let ((wrapper)) | 833 (let ((nargs (cdr (subr-arity (symbol-function 'define-abbrev)))) |
| 555 (define-abbrev-table 'sql-mode-abbrev-table ()) | 834 d-a) |
| 556 (define-abbrev sql-mode-abbrev-table "ins" "insert") | 835 ;; In Emacs 21.3+, provide SYSTEM-FLAG to define-abbrev. |
| 557 (define-abbrev sql-mode-abbrev-table "upd" "update") | 836 (setq d-a |
| 558 (define-abbrev sql-mode-abbrev-table "del" "delete") | 837 (if (>= nargs 6) |
| 559 (define-abbrev sql-mode-abbrev-table "sel" "select"))) | 838 '(lambda (name expansion) (define-abbrev sql-mode-abbrev-table name expansion nil 0 t)) |
| 839 '(lambda (name expansion) (define-abbrev sql-mode-abbrev-table name expansion)))) | |
| 840 | |
| 841 (define-abbrev-table 'sql-mode-abbrev-table nil) | |
| 842 (funcall d-a "ins" "insert") | |
| 843 (funcall d-a "upd" "update") | |
| 844 (funcall d-a "del" "delete") | |
| 845 (funcall d-a "sel" "select") | |
| 846 (funcall d-a "proc" "procedure") | |
| 847 (funcall d-a "func" "function") | |
| 848 (funcall d-a "cr" "create"))) | |
| 560 | 849 |
| 561 ;; Syntax Table | 850 ;; Syntax Table |
| 562 | 851 |
| 563 (defvar sql-mode-syntax-table | 852 (defvar sql-mode-syntax-table |
| 564 (let ((table (make-syntax-table))) | 853 (let ((table (make-syntax-table))) |
| 579 table) | 868 table) |
| 580 "Syntax table used in `sql-mode' and `sql-interactive-mode'.") | 869 "Syntax table used in `sql-mode' and `sql-interactive-mode'.") |
| 581 | 870 |
| 582 ;; Font lock support | 871 ;; Font lock support |
| 583 | 872 |
| 584 (defvar sql-mode-ansi-font-lock-keywords nil | 873 (defvar sql-mode-font-lock-object-name |
| 874 (list (concat "^\\s-*\\(create\\(\\s-+or\\s-+replace\\)?\\|drop\\|alter\\)?\\s-+" | |
| 875 "\\(\\(global\\s-+\\)?\\(temporary\\s-+\\)?table\\|view\\|package\\(\\s-+body\\)?\\|" | |
| 876 "proc\\(edure\\)?\\|function\\|trigger\\|sequence\\|rule\\|default\\)\\s-+\\(\\w+\\)") | |
| 877 8 'font-lock-function-name-face) | |
| 878 | |
| 879 "Pattern to match the names of top-level objects in a CREATE, | |
| 880 DROP or ALTER statement. | |
| 881 | |
| 882 The format of variable should be a valid `font-lock-keywords' | |
| 883 entry.") | |
| 884 | |
| 885 (defvar sql-mode-ansi-font-lock-keywords | |
| 886 (let ((ansi-keywords (eval-when-compile | |
| 887 (concat "\\b" | |
| 888 (regexp-opt '( | |
| 889 | |
| 890 "authorization" "avg" "begin" "close" "cobol" "commit" | |
| 891 "continue" "count" "declare" "double" "end" "escape" | |
| 892 "exec" "fetch" "foreign" "fortran" "found" "go" "goto" "indicator" | |
| 893 "key" "language" "max" "min" "module" "numeric" "open" "pascal" "pli" | |
| 894 "precision" "primary" "procedure" "references" "rollback" | |
| 895 "schema" "section" "some" "sqlcode" "sqlerror" "sum" "work" | |
| 896 | |
| 897 ) t) "\\b"))) | |
| 898 (ansi-reserved-words (eval-when-compile | |
| 899 (concat "\\b" | |
| 900 (regexp-opt '( | |
| 901 | |
| 902 "all" "and" "any" "as" "asc" "between" "by" "check" "create" | |
| 903 "current" "default" "delete" "desc" "distinct" "exists" "float" "for" | |
| 904 "from" "grant" "group" "having" "in" "insert" "into" "is" | |
| 905 "like" "not" "null" "of" "on" "option" "or" "order" "privileges" | |
| 906 "public" "select" "set" "table" "to" "union" "unique" | |
| 907 "update" "user" "values" "view" "where" "with" | |
| 908 | |
| 909 ) t) "\\b"))) | |
| 910 (ansi-types (eval-when-compile | |
| 911 (concat "\\b" | |
| 912 (regexp-opt '( | |
| 913 | |
| 914 ;; ANSI Keywords that look like types | |
| 915 "character" "cursor" "dec" "int" "real" | |
| 916 ;; ANSI Reserved Word that look like types | |
| 917 "char" "integer" "smallint" | |
| 918 | |
| 919 ) t) "\\b")))) | |
| 920 (list (cons ansi-keywords 'font-lock-keyword-face) | |
| 921 (cons ansi-reserved-words 'font-lock-keyword-face) | |
| 922 (cons ansi-types 'font-lock-type-face))) | |
| 923 | |
| 585 "ANSI SQL keywords used by font-lock. | 924 "ANSI SQL keywords used by font-lock. |
| 586 | 925 |
| 587 This variable is used by `sql-mode' and `sql-interactive-mode'. The | 926 This variable is used by `sql-mode' and `sql-interactive-mode'. The |
| 588 regular expressions are created during compilation by calling the | 927 regular expressions are created during compilation by calling the |
| 589 function `regexp-opt'. Therefore, take a look at the source before | 928 function `regexp-opt'. Therefore, take a look at the source before |
| 590 you define your own sql-mode-ansi-font-lock-keywords. You may want to | 929 you define your own sql-mode-ansi-font-lock-keywords. You may want to |
| 591 add functions and PL/SQL keywords.") | 930 add functions and PL/SQL keywords.") |
| 592 (if sql-mode-ansi-font-lock-keywords | 931 |
| 593 () | 932 (defvar sql-mode-oracle-font-lock-keywords |
| 594 (let ((ansi-keywords (eval-when-compile | 933 (let ((oracle-keywords (eval-when-compile |
| 595 (concat "\\b" | 934 (concat "\\b" |
| 596 (regexp-opt '( | 935 (regexp-opt '( |
| 936 ;; Oracle (+ANSI) SQL keywords | |
| 937 | |
| 938 ; ANSI keywords | |
| 597 "authorization" "avg" "begin" "close" "cobol" "commit" | 939 "authorization" "avg" "begin" "close" "cobol" "commit" |
| 598 "continue" "count" "declare" "double" "end" "escape" | 940 "continue" "count" "declare" "double" "end" "escape" |
| 599 "exec" "fetch" "foreign" "fortran" "found" "go" "goto" "indicator" | 941 "exec" "fetch" "foreign" "fortran" "found" "go" "goto" "indicator" |
| 600 "key" "language" "max" "min" "module" "numeric" "open" "pascal" "pli" | 942 "key" "language" "max" "min" "module" "numeric" "open" "pascal" "pli" |
| 601 "precision" "primary" "procedure" "references" "rollback" | 943 "precision" "primary" "procedure" "references" "rollback" |
| 602 "schema" "section" "some" "sqlcode" "sqlerror" "sum" "work") t) "\\b"))) | 944 "schema" "section" "some" "sqlcode" "sqlerror" "sum" "work" |
| 603 (ansi-reserved-words (eval-when-compile | 945 |
| 604 (concat "\\b" | 946 ; ANSI reserved words |
| 605 (regexp-opt '( | |
| 606 "all" "and" "any" "as" "asc" "between" "by" "check" "create" | 947 "all" "and" "any" "as" "asc" "between" "by" "check" "create" |
| 607 "current" "default" "delete" "desc" "distinct" "exists" "float" "for" | 948 "current" "default" "delete" "desc" "distinct" "exists" "float" "for" |
| 608 "from" "grant" "group" "having" "in" "insert" "into" "is" | 949 "from" "grant" "group" "having" "in" "insert" "into" "is" |
| 609 "like" "not" "null" "of" "on" "option" "or" "order" "privileges" | 950 "like" "not" "null" "of" "on" "option" "or" "order" "privileges" |
| 610 "public" "select" "set" "table" "to" "union" "unique" | 951 "public" "select" "set" "table" "to" "union" "unique" |
| 611 "update" "user" "values" "view" "where" "with") t) "\\b"))) | 952 "update" "user" "values" "view" "where" "with" |
| 612 (ansi-types (eval-when-compile | 953 |
| 613 (concat "\\b" | 954 "access" "add" "admin" "after" "allocate" "alter" "analyze" "archive" |
| 614 (regexp-opt '( | 955 "archivelog" "audit" "authid" "backup" "become" "before" "block" |
| 615 ;; ANSI Keywords that look like types | 956 "body" "cache" "cancel" "cascade" "change" "checkpoint" "cluster" |
| 616 "character" "cursor" "dec" "int" "real" | 957 "comment" "compile" "compress" "compute" "connect" "constraint" |
| 617 ;; ANSI Reserved Word that look like types | 958 "constraints" "contents" "controlfile" "cross" "currval" "cycle" |
| 618 "char" "integer" "smallint" ) t) "\\b")))) | 959 "database" "datafile" "dba" "deterministic" "disable" "dismount" |
| 619 (setq sql-mode-ansi-font-lock-keywords | 960 "drop" "dump" "each" "else" "else" "elsif" "enable" "events" "except" |
| 620 (list (cons ansi-keywords 'font-lock-function-name-face) | 961 "exceptions" "exclusive" "execute" "exit" "explain" "extent" |
| 621 (cons ansi-reserved-words 'font-lock-keyword-face) | 962 "externally" "false" "file" "flush" "force" "freelist" "freelists" |
| 622 (cons ansi-types 'font-lock-type-face))))) | 963 "full" "function" "global" "grant" "groups" "identified" "if" |
| 623 | 964 "immediate" "including" "increment" "index" "initial" "initrans" |
| 624 (defvar sql-mode-oracle-font-lock-keywords nil | 965 "inner" "instance" "intersect" "join" "layer" "left" "level" "link" |
| 966 "lists" "lock" "logfile" "long" "loop" "manage" "manual" | |
| 967 "maxdatafiles" "maxextents" "maxinistances" "maxlogfiles" | |
| 968 "maxloghistory" "maxlogmembers" "maxtrans" "maxvalue" "merge" | |
| 969 "minextents" "minus" "minvalue" "mode" "modify" "mount" "natural" | |
| 970 "new" "next" "nextval" "noarchivelog" "noaudit" "nocache" "nocompress" | |
| 971 "nocycle" "nomaxvalue" "nominvalue" "none" "noorder" "noresetlogs" | |
| 972 "normal" "nosort" "nowait" "off" "offline" "old" "online" "only" | |
| 973 "optimal" "others" "out" "outer" "over" "own" "package" "parallel" | |
| 974 "parallel_enable" "pctfree" "pctincrease" "pctused" "plan" "pragma" | |
| 975 "preserve" "prior" "private" "profile" "quota" "raise" "raw" "read" | |
| 976 "recover" "referencing" "rename" "replace" "resetlogs" "resource" | |
| 977 "restrict_references" "restricted" "return" "returning" "reuse" | |
| 978 "revoke" "right" "rnds" "rnps" "role" "roles" "row" "rowlabel" | |
| 979 "rownum" "rows" "savepoint" "scn" "segment" "sequence" "session" | |
| 980 "share" "shared" "size" "snapshot" "sort" "statement_id" "statistics" | |
| 981 "stop" "storage" "subtype" "successful" "switch" "synonym" "sysdate" | |
| 982 "system" "tables" "tablespace" "temporary" "then" "thread" "tracing" | |
| 983 "transaction" "trigger" "triggers" "true" "truncate" "type" "uid" | |
| 984 "under" "unlimited" "until" "use" "using" "validate" "when" "while" | |
| 985 "wnds" "wnps" "write" | |
| 986 | |
| 987 ) t) "\\b"))) | |
| 988 (oracle-warning-words (eval-when-compile | |
| 989 (concat "\\b" | |
| 990 (regexp-opt '( | |
| 991 ;; PLSQL defined exceptions | |
| 992 | |
| 993 "access_into_null" "case_not_found" "collection_is_null" | |
| 994 "cursor_already_open" "dup_val_on_index" "invalid_cursor" | |
| 995 "invalid_number" "login_denied" "no_data_found" "not_logged_on" | |
| 996 "program_error" "rowtype_mismatch" "self_is_null" "storage_error" | |
| 997 "subscript_beyond_count" "subscript_outside_limit" "sys_invalid_rowid" | |
| 998 "timeout_on_resource" "too_many_rows" "value_error" "zero_divide" | |
| 999 "exception" "notfound" | |
| 1000 | |
| 1001 ) t) "\\b"))) | |
| 1002 | |
| 1003 (oracle-sqlplus-commands | |
| 1004 (eval-when-compile | |
| 1005 (concat "^\\(\\(" | |
| 1006 (regexp-opt '( | |
| 1007 ;; SQL*Plus commands | |
| 1008 | |
| 1009 "@" "@@" "accept" "append" "archive" "attribute" "break" | |
| 1010 "btitle" "change" "clear" "column" "connect" "copy" "define" | |
| 1011 "del" "describe" "disconnect" "edit" "execute" "exit" "get" "help" | |
| 1012 "host" "input" "list" "password" "pause" "print" "prompt" "recover" | |
| 1013 "remark" "repfooter" "repheader" "run" "save" "show" "shutdown" | |
| 1014 "spool" "start" "startup" "store" "timing" "ttitle" "undefine" | |
| 1015 "variable" "whenever" | |
| 1016 | |
| 1017 ) t) | |
| 1018 | |
| 1019 "\\)\\|" | |
| 1020 "\\(compute\\s-+\\(avg\\|cou\\|min\\|max\\|num\\|sum\\|std\\|var\\)\\)\\|" | |
| 1021 "\\(set\\s-+\\(appi\\(nfo\\)?\\|array\\(size\\)?\\|" | |
| 1022 "auto\\(commit\\)?\\|autop\\(rint\\)?\\|autorecovery\\|" | |
| 1023 "autot\\(race\\)?\\|blo\\(ckterminator\\)?\\|cmds\\(ep\\)?\\|" | |
| 1024 "colsep\\|com\\(patibility\\)?\\|con\\(cat\\)?\\|" | |
| 1025 "copyc\\(ommit\\)?\\|copytypecheck\\|def\\(ine\\)?\\|" | |
| 1026 "describe\\|echo\\|editf\\(ile\\)?\\|emb\\(edded\\)?\\|" | |
| 1027 "esc\\(ape\\)?\\|feed\\(back\\)?\\|flagger\\|" | |
| 1028 "flu\\(sh\\)?\\|hea\\(ding\\)?\\|heads\\(ep\\)?\\|" | |
| 1029 "instance\\|lin\\(esize\\)?\\|lobof\\(fset\\)?\\|" | |
| 1030 "logsource\\|long\\|longc\\(hunksize\\)?\\|mark\\(up\\)?\\|" | |
| 1031 "newp\\(age\\)?\\|null\\|numf\\(ormat\\)?\\|" | |
| 1032 "num\\(width\\)?\\|pages\\(ize\\)?\\|pau\\(se\\)?\\|" | |
| 1033 "recsep\\|recsepchar\\|serverout\\(put\\)?\\|" | |
| 1034 "shift\\(inout\\)?\\|show\\(mode\\)?\\|" | |
| 1035 "sqlbl\\(anklines\\)?\\|sqlc\\(ase\\)?\\|" | |
| 1036 "sqlco\\(ntinue\\)?\\|sqln\\(umber\\)?\\|" | |
| 1037 "sqlpluscompat\\(ibility\\)?\\|sqlpre\\(fix\\)?\\|" | |
| 1038 "sqlp\\(rompt\\)?\\|sqlt\\(erminator\\)?\\|" | |
| 1039 "suf\\(fix\\)?\\|tab\\|term\\(out\\)?\\|ti\\(me\\)?\\|" | |
| 1040 "timi\\(ng\\)?\\|trim\\(out\\)?\\|trims\\(pool\\)?\\|" | |
| 1041 "und\\(erline\\)?\\|ver\\(ify\\)?\\|wra\\(p\\)?\\)\\)\\)" | |
| 1042 "\\b.*$" | |
| 1043 ))) | |
| 1044 | |
| 1045 (oracle-types | |
| 1046 (eval-when-compile | |
| 1047 (concat "\\b" | |
| 1048 (regexp-opt '( | |
| 1049 ;; Oracle Keywords that look like types | |
| 1050 ;; Oracle Reserved Words that look like types | |
| 1051 | |
| 1052 "bfile" "binary_integer" "blob" "boolean" "byte" "char" "character" | |
| 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 | |
| 625 "Oracle SQL keywords used by font-lock. | 1111 "Oracle SQL keywords used by font-lock. |
| 626 | 1112 |
| 627 This variable is used by `sql-mode' and `sql-interactive-mode'. The | 1113 This variable is used by `sql-mode' and `sql-interactive-mode'. The |
| 628 regular expressions are created during compilation by calling the | 1114 regular expressions are created during compilation by calling the |
| 629 function `regexp-opt'. Therefore, take a look at the source before | 1115 function `regexp-opt'. Therefore, take a look at the source before |
| 630 you define your own sql-mode-oracle-font-lock-keywords. You may want | 1116 you define your own sql-mode-oracle-font-lock-keywords. You may want |
| 631 to add functions and PL/SQL keywords.") | 1117 to add functions and PL/SQL keywords.") |
| 632 (if sql-mode-oracle-font-lock-keywords | 1118 |
| 633 () | 1119 (defvar sql-mode-postgres-font-lock-keywords |
| 634 (let ((oracle-keywords (eval-when-compile | |
| 635 (concat "\\b" | |
| 636 (regexp-opt '( | |
| 637 "admin" "after" "allocate" "analyze" "archive" "archivelog" "backup" | |
| 638 "become" "before" "block" "body" "cache" "cancel" "cascade" "change" | |
| 639 "checkpoint" "compile" "constraint" "constraints" "contents" | |
| 640 "controlfile" "cycle" "database" "datafile" "dba" "disable" "dismount" | |
| 641 "dump" "each" "else" "elsif" "enable" "events" "except" "exceptions" | |
| 642 "execute" "exit" "explain" "extent" "externally" "false" "flush" "force" | |
| 643 "freelist" "freelists" "function" "groups" "if" "including" "initrans" | |
| 644 "instance" "layer" "link" "lists" "logfile" "loop" "manage" "manual" | |
| 645 "maxdatafiles" "maxinistances" "maxlogfiles" "maxloghistory" | |
| 646 "maxlogmembers" "maxtrans" "maxvalue" "minextents" "minvalue" "mount" | |
| 647 "new" "next" "noarchivelog" "nocache" "nocycle" "nomaxvalue" | |
| 648 "nominvalue" "none" "noorder" "noresetlogs" "normal" "nosort" "off" | |
| 649 "old" "only" "optimal" "others" "out" "own" "package" "parallel" | |
| 650 "pctincrease" "pctused" "plan" "pragma" "private" "profile" "quota" | |
| 651 "raise" "read" "recover" "referencing" "resetlogs" "restrict_references" | |
| 652 "restricted" "return" "returning" "reuse" "rnds" "rnps" "role" "roles" | |
| 653 "savepoint" "scn" "segment" "sequence" "shared" "snapshot" "sort" | |
| 654 "statement_id" "statistics" "stop" "storage" "subtype" "switch" "system" | |
| 655 "tables" "tablespace" "temporary" "thread" "time" "tracing" | |
| 656 "transaction" "triggers" "true" "truncate" "type" "under" "unlimited" | |
| 657 "until" "use" "using" "when" "while" "wnds" "wnps" "write") t) "\\b"))) | |
| 658 (oracle-warning-words (eval-when-compile | |
| 659 (concat "\\b" | |
| 660 (regexp-opt '( | |
| 661 "cursor_already_open" "dup_val_on_index" "exception" "invalid_cursor" | |
| 662 "invalid_number" "login_denied" "no_data_found" "not_logged_on" | |
| 663 "notfound" "others" "pragma" "program_error" "storage_error" | |
| 664 "timeout_on_resource" "too_many_rows" "transaction_backed_out" | |
| 665 "value_error" "zero_divide") t) "\\b"))) | |
| 666 (oracle-reserved-words (eval-when-compile | |
| 667 (concat "\\b" | |
| 668 (regexp-opt '( | |
| 669 "access" "add" "alter" "audit" "cluster" "column" "comment" "compress" | |
| 670 "connect" "drop" "else" "exclusive" "file" "grant" | |
| 671 "identified" "immediate" "increment" "index" "initial" "intersect" | |
| 672 "level" "lock" "long" "maxextents" "minus" "mode" "modify" "noaudit" | |
| 673 "nocompress" "nowait" "number" "offline" "online" "pctfree" "prior" | |
| 674 "raw" "rename" "resource" "revoke" "row" "rowlabel" "rownum" | |
| 675 "rows" "session" "share" "size" "start" "successful" "synonym" "sysdate" | |
| 676 "then" "trigger" "uid" "validate" "whenever") t) "\\b"))) | |
| 677 (oracle-types (eval-when-compile | |
| 678 (concat "\\b" | |
| 679 (regexp-opt '( | |
| 680 ;; Oracle Keywords that look like types | |
| 681 ;; Oracle Reserved Words that look like types | |
| 682 "binary_integer" "blob" "boolean" "constant" "date" "decimal" "rowid" | |
| 683 "varchar" "varchar2") t) "\\b"))) | |
| 684 (oracle-builtin-functions (eval-when-compile | |
| 685 (concat "\\b" | |
| 686 (regexp-opt '( | |
| 687 ;; Misc Oracle builtin functions | |
| 688 "abs" "add_months" "ascii" "avg" "ceil" "chartorowid" "chr" "concat" | |
| 689 "convert" "cos" "cosh" "count" "currval" "decode" "dump" "exp" "floor" | |
| 690 "glb" "greatest" "greatest_lb" "hextoraw" "initcap" "instr" "instrb" | |
| 691 "last_day" "least" "least_ub" "length" "lengthb" "ln" "log" "lower" | |
| 692 "lpad" "ltrim" "lub" "max" "min" "mod" "months_between" "new_time" | |
| 693 "next_day" "nextval" "nls_initcap" "nls_lower" "nls_upper" "nlssort" | |
| 694 "nvl" "power" "rawtohex" "replace" "round" "rowidtochar" "rpad" | |
| 695 "rtrim" "sign" "sin" "sinh" "soundex" "sqlcode" "sqlerrm" "sqrt" | |
| 696 "stddev" "sum" "substr" "substrb" "tan" "tanh" "to_char" | |
| 697 "to_date" "to_label" "to_multi_byte" "to_number" "to_single_byte" | |
| 698 "translate" "trim" "trunc" "uid" "upper" "userenv" "variance" "vsize") t) "\\b")))) | |
| 699 (setq sql-mode-oracle-font-lock-keywords | |
| 700 (append sql-mode-ansi-font-lock-keywords | |
| 701 (list (cons oracle-keywords 'font-lock-function-name-face) | |
| 702 (cons oracle-warning-words 'font-lock-warning-face) | |
| 703 (cons oracle-reserved-words 'font-lock-keyword-face) | |
| 704 ;; XEmacs doesn't have font-lock-builtin-face | |
| 705 (if (string-match "XEmacs\\|Lucid" emacs-version) | |
| 706 (cons oracle-builtin-functions 'font-lock-preprocessor-face) | |
| 707 ;; GNU Emacs 19 doesn't have it either | |
| 708 (if (string-match "GNU Emacs 19" emacs-version) | |
| 709 (cons oracle-builtin-functions 'font-lock-function-name-face) | |
| 710 ;; Emacs | |
| 711 (cons oracle-builtin-functions 'font-lock-builtin-face))) | |
| 712 (cons oracle-types 'font-lock-type-face)))))) | |
| 713 | |
| 714 (defvar sql-mode-postgres-font-lock-keywords nil | |
| 715 "Postgres SQL keywords used by font-lock. | |
| 716 | |
| 717 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 718 regular expressions are created during compilation by calling the | |
| 719 function `regexp-opt'. Therefore, take a look at the source before | |
| 720 you define your own sql-mode-postgres-font-lock-keywords.") | |
| 721 | |
| 722 (if sql-mode-postgres-font-lock-keywords | |
| 723 () | |
| 724 (let ((postgres-reserved-words (eval-when-compile | 1120 (let ((postgres-reserved-words (eval-when-compile |
| 725 (concat "\\b" | 1121 (concat "\\b" |
| 726 (regexp-opt '( | 1122 (regexp-opt '( |
| 727 "language" | 1123 "language" |
| 728 ) t) "\\b"))) | 1124 ) t) "\\b"))) |
| 729 (postgres-types (eval-when-compile | 1125 (postgres-types (eval-when-compile |
| 730 (concat "\\b" | 1126 (concat "\\b" |
| 731 (regexp-opt '( | 1127 (regexp-opt '( |
| 1128 | |
| 732 "bool" "box" "circle" "char" "char2" "char4" "char8" "char16" "date" | 1129 "bool" "box" "circle" "char" "char2" "char4" "char8" "char16" "date" |
| 733 "float4" "float8" "int2" "int4" "int8" "line" "lseg" "money" "path" | 1130 "float4" "float8" "int2" "int4" "int8" "line" "lseg" "money" "path" |
| 734 "point" "polygon" "serial" "text" "time" "timespan" "timestamp" "varchar" | 1131 "point" "polygon" "serial" "text" "time" "timespan" "timestamp" "varchar" |
| 1132 | |
| 735 ) t)"\\b"))) | 1133 ) t)"\\b"))) |
| 736 (postgres-builtin-functions (eval-when-compile | 1134 (postgres-builtin-functions (eval-when-compile |
| 737 (concat "\\b" | 1135 (concat "\\b" |
| 738 (regexp-opt '( | 1136 (regexp-opt '( |
| 739 ;; Misc Postgres builtin functions | 1137 ;; Misc Postgres builtin functions |
| 1138 | |
| 740 "abstime" "age" "area" "box" "center" "date_part" "date_trunc" | 1139 "abstime" "age" "area" "box" "center" "date_part" "date_trunc" |
| 741 "datetime" "dexp" "diameter" "dpow" "float" "float4" "height" | 1140 "datetime" "dexp" "diameter" "dpow" "float" "float4" "height" |
| 742 "initcap" "integer" "isclosed" "isfinite" "isoldpath" "isopen" | 1141 "initcap" "integer" "isclosed" "isfinite" "isoldpath" "isopen" |
| 743 "length" "lower" "lpad" "ltrim" "pclose" "point" "points" "popen" | 1142 "length" "lower" "lpad" "ltrim" "pclose" "point" "points" "popen" |
| 744 "position" "radius" "reltime" "revertpoly" "rpad" "rtrim" "substr" | 1143 "position" "radius" "reltime" "revertpoly" "rpad" "rtrim" "substr" |
| 745 "substring" "text" "timespan" "translate" "trim" "upgradepath" | 1144 "substring" "text" "timespan" "translate" "trim" "upgradepath" |
| 746 "upgradepoly" "upper" "varchar" "width" | 1145 "upgradepoly" "upper" "varchar" "width" |
| 1146 | |
| 747 ) t) "\\b")))) | 1147 ) t) "\\b")))) |
| 748 (setq sql-mode-postgres-font-lock-keywords | |
| 749 (append sql-mode-ansi-font-lock-keywords | 1148 (append sql-mode-ansi-font-lock-keywords |
| 750 (list (cons postgres-reserved-words 'font-lock-keyword-face) | 1149 (list (cons postgres-reserved-words 'font-lock-keyword-face) |
| 751 ;; XEmacs doesn't have 'font-lock-builtin-face | 1150 ;; XEmacs doesn't have 'font-lock-builtin-face |
| 752 (if (string-match "XEmacs\\|Lucid" emacs-version) | 1151 (if (string-match "XEmacs\\|Lucid" emacs-version) |
| 753 (cons postgres-builtin-functions 'font-lock-preprocessor-face) | 1152 (cons postgres-builtin-functions 'font-lock-preprocessor-face) |
| 754 ;; Emacs | 1153 ;; Emacs |
| 755 (cons postgres-builtin-functions 'font-lock-builtin-face)) | 1154 (cons postgres-builtin-functions 'font-lock-builtin-face)) |
| 756 (cons postgres-types 'font-lock-type-face)))))) | 1155 (cons postgres-types 'font-lock-type-face)))) |
| 757 | 1156 |
| 758 | 1157 "Postgres SQL keywords used by font-lock. |
| 759 (defvar sql-mode-linter-font-lock-keywords nil | |
| 760 "Linter SQL keywords used by font-lock. | |
| 761 | 1158 |
| 762 This variable is used by `sql-mode' and `sql-interactive-mode'. The | 1159 This variable is used by `sql-mode' and `sql-interactive-mode'. The |
| 763 regular expressions are created during compilation by calling the | 1160 regular expressions are created during compilation by calling the |
| 764 function `regexp-opt'.") | 1161 function `regexp-opt'. Therefore, take a look at the source before |
| 765 | 1162 you define your own sql-mode-postgres-font-lock-keywords.") |
| 766 (if sql-mode-linter-font-lock-keywords | 1163 |
| 767 () | 1164 (defvar sql-mode-linter-font-lock-keywords |
| 768 (let ((linter-keywords (eval-when-compile | 1165 (let ((linter-keywords (eval-when-compile |
| 769 (concat "\\b" | 1166 (concat "\\b" |
| 770 (regexp-opt '( | 1167 (regexp-opt '( |
| 1168 | |
| 771 "autocommit" "autoinc" "autorowid" "cancel" "cascade" "channel" | 1169 "autocommit" "autoinc" "autorowid" "cancel" "cascade" "channel" |
| 772 "committed" "count" "countblob" "cross" "current" "data" "database" | 1170 "committed" "count" "countblob" "cross" "current" "data" "database" |
| 773 "datafile" "datafiles" "datesplit" "dba" "dbname" "default" "deferred" | 1171 "datafile" "datafiles" "datesplit" "dba" "dbname" "default" "deferred" |
| 774 "denied" "description" "device" "difference" "directory" "error" | 1172 "denied" "description" "device" "difference" "directory" "error" |
| 775 "escape" "euc" "exclusive" "external" "extfile" "false" "file" | 1173 "escape" "euc" "exclusive" "external" "extfile" "false" "file" |
| 790 "startup" "statement" "station" "success" "sys_guid" "tables" "test" | 1188 "startup" "statement" "station" "success" "sys_guid" "tables" "test" |
| 791 "timeout" "trace" "transaction" "translation" "trigger" | 1189 "timeout" "trace" "transaction" "translation" "trigger" |
| 792 "trigger_info_size" "true" "trunc" "uncommitted" "unicode" "unknown" | 1190 "trigger_info_size" "true" "trunc" "uncommitted" "unicode" "unknown" |
| 793 "unlimited" "unlisted" "user" "utf8" "value" "varying" "volumes" | 1191 "unlimited" "unlisted" "user" "utf8" "value" "varying" "volumes" |
| 794 "wait" "windows_code" "workspace" "write" "xml" | 1192 "wait" "windows_code" "workspace" "write" "xml" |
| 1193 | |
| 795 ) t) "\\b"))) | 1194 ) t) "\\b"))) |
| 796 (linter-reserved-words (eval-when-compile | 1195 (linter-reserved-words (eval-when-compile |
| 797 (concat "\\b" | 1196 (concat "\\b" |
| 798 (regexp-opt '( | 1197 (regexp-opt '( |
| 1198 | |
| 799 "access" "action" "add" "address" "after" "all" "alter" "always" "and" | 1199 "access" "action" "add" "address" "after" "all" "alter" "always" "and" |
| 800 "any" "append" "as" "asc" "ascic" "async" "at_begin" "at_end" "audit" | 1200 "any" "append" "as" "asc" "ascic" "async" "at_begin" "at_end" "audit" |
| 801 "aud_obj_name_len" "backup" "base" "before" "between" "blobfile" | 1201 "aud_obj_name_len" "backup" "base" "before" "between" "blobfile" |
| 802 "blobfiles" "blobpct" "brief" "browse" "by" "case" "cast" "check" | 1202 "blobfiles" "blobpct" "brief" "browse" "by" "case" "cast" "check" |
| 803 "clear" "close" "column" "comment" "commit" "connect" "contains" | 1203 "clear" "close" "column" "comment" "commit" "connect" "contains" |
| 811 "purge" "rebuild" "resource" "restrict" "revoke" "right" "role" | 1211 "purge" "rebuild" "resource" "restrict" "revoke" "right" "role" |
| 812 "rollback" "rownum" "select" "session" "set" "share" "shutdown" | 1212 "rollback" "rownum" "select" "session" "set" "share" "shutdown" |
| 813 "start" "stop" "sync" "synchronize" "synonym" "sysdate" "table" "then" | 1213 "start" "stop" "sync" "synchronize" "synonym" "sysdate" "table" "then" |
| 814 "to" "union" "unique" "unlock" "until" "update" "using" "values" | 1214 "to" "union" "unique" "unlock" "until" "update" "using" "values" |
| 815 "view" "when" "where" "with" "without" | 1215 "view" "when" "where" "with" "without" |
| 1216 | |
| 816 ) t) "\\b"))) | 1217 ) t) "\\b"))) |
| 817 (linter-types (eval-when-compile | 1218 (linter-types (eval-when-compile |
| 818 (concat "\\b" | 1219 (concat "\\b" |
| 819 (regexp-opt '( | 1220 (regexp-opt '( |
| 1221 | |
| 820 "bigint" "bitmap" "blob" "boolean" "char" "character" "date" | 1222 "bigint" "bitmap" "blob" "boolean" "char" "character" "date" |
| 821 "datetime" "dec" "decimal" "double" "float" "int" "integer" "nchar" | 1223 "datetime" "dec" "decimal" "double" "float" "int" "integer" "nchar" |
| 822 "number" "numeric" "real" "smallint" "varbyte" "varchar" "byte" | 1224 "number" "numeric" "real" "smallint" "varbyte" "varchar" "byte" |
| 823 "cursor" "long" | 1225 "cursor" "long" |
| 1226 | |
| 824 ) t) "\\b"))) | 1227 ) t) "\\b"))) |
| 825 (linter-builtin-functions (eval-when-compile | 1228 (linter-builtin-functions (eval-when-compile |
| 826 (concat "\\b" | 1229 (concat "\\b" |
| 827 (regexp-opt '( | 1230 (regexp-opt '( |
| 1231 | |
| 828 "abs" "acos" "asin" "atan" "atan2" "avg" "ceil" "cos" "cosh" "divtime" | 1232 "abs" "acos" "asin" "atan" "atan2" "avg" "ceil" "cos" "cosh" "divtime" |
| 829 "exp" "floor" "getbits" "getblob" "getbyte" "getlong" "getraw" | 1233 "exp" "floor" "getbits" "getblob" "getbyte" "getlong" "getraw" |
| 830 "getstr" "gettext" "getword" "hextoraw" "lenblob" "length" "log" | 1234 "getstr" "gettext" "getword" "hextoraw" "lenblob" "length" "log" |
| 831 "lower" "lpad" "ltrim" "max" "min" "mod" "monthname" "nvl" | 1235 "lower" "lpad" "ltrim" "max" "min" "mod" "monthname" "nvl" |
| 832 "octet_length" "power" "rand" "rawtohex" "repeat_string" | 1236 "octet_length" "power" "rand" "rawtohex" "repeat_string" |
| 833 "right_substr" "round" "rpad" "rtrim" "sign" "sin" "sinh" "soundex" | 1237 "right_substr" "round" "rpad" "rtrim" "sign" "sin" "sinh" "soundex" |
| 834 "sqrt" "sum" "tan" "tanh" "timeint_to_days" "to_char" "to_date" | 1238 "sqrt" "sum" "tan" "tanh" "timeint_to_days" "to_char" "to_date" |
| 835 "to_gmtime" "to_localtime" "to_number" "trim" "upper" "decode" | 1239 "to_gmtime" "to_localtime" "to_number" "trim" "upper" "decode" |
| 836 "substr" "substring" "chr" "dayname" "days" "greatest" "hex" "initcap" | 1240 "substr" "substring" "chr" "dayname" "days" "greatest" "hex" "initcap" |
| 837 "instr" "least" "multime" "replace" "width" | 1241 "instr" "least" "multime" "replace" "width" |
| 1242 | |
| 838 ) t) "\\b")))) | 1243 ) t) "\\b")))) |
| 839 (setq sql-mode-linter-font-lock-keywords | |
| 840 (append sql-mode-ansi-font-lock-keywords | 1244 (append sql-mode-ansi-font-lock-keywords |
| 841 (list (cons linter-keywords 'font-lock-function-name-face) | 1245 (list (cons linter-keywords 'font-lock-keywords-face) |
| 842 (cons linter-reserved-words 'font-lock-keyword-face) | 1246 (cons linter-reserved-words 'font-lock-keyword-face) |
| 843 ;; XEmacs doesn't have font-lock-builtin-face | 1247 ;; XEmacs doesn't have font-lock-builtin-face |
| 844 (if (string-match "XEmacs\\|Lucid" emacs-version) | 1248 (if (string-match "XEmacs\\|Lucid" emacs-version) |
| 845 (cons linter-builtin-functions 'font-lock-preprocessor-face) | 1249 (cons linter-builtin-functions 'font-lock-preprocessor-face) |
| 846 ;; GNU Emacs 19 doesn't have it either | 1250 ;; GNU Emacs 19 doesn't have it either |
| 847 (if (string-match "GNU Emacs 19" emacs-version) | 1251 (if (string-match "GNU Emacs 19" emacs-version) |
| 848 (cons linter-builtin-functions 'font-lock-function-name-face) | 1252 (cons linter-builtin-functions 'font-lock-keywords-face) |
| 849 ;; Emacs | 1253 ;; Emacs |
| 850 (cons linter-builtin-functions 'font-lock-builtin-face))) | 1254 (cons linter-builtin-functions 'font-lock-builtin-face))) |
| 851 (cons linter-types 'font-lock-type-face)))))) | 1255 (cons linter-types 'font-lock-type-face)))) |
| 852 | 1256 |
| 853 (defvar sql-mode-font-lock-keywords sql-mode-ansi-font-lock-keywords | 1257 "Linter SQL keywords used by font-lock. |
| 1258 | |
| 1259 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1260 regular expressions are created during compilation by calling the | |
| 1261 function `regexp-opt'.") | |
| 1262 | |
| 1263 (defvar sql-mode-ms-font-lock-keywords | |
| 1264 (let ((ms-reserved-words (eval-when-compile | |
| 1265 (concat "\\b" | |
| 1266 (regexp-opt '( | |
| 1267 | |
| 1268 "absolute" "add" "all" "alter" "and" "any" "as" "asc" "authorization" | |
| 1269 "avg" "backup" "begin" "between" "break" "browse" "bulk" "by" | |
| 1270 "cascade" "case" "check" "checkpoint" "close" "clustered" "coalesce" | |
| 1271 "column" "commit" "committed" "compute" "confirm" "constraint" | |
| 1272 "contains" "containstable" "continue" "controlrow" "convert" "count" | |
| 1273 "create" "cross" "current" "current_date" "current_time" | |
| 1274 "current_timestamp" "current_user" "database" "deallocate" | |
| 1275 "declare" "default" "delete" "deny" "desc" "disk" "distinct" | |
| 1276 "distributed" "double" "drop" "dummy" "dump" "else" "end" "errlvl" | |
| 1277 "errorexit" "escape" "except" "exec" "execute" "exists" "exit" "fetch" | |
| 1278 "file" "fillfactor" "first" "floppy" "for" "foreign" "freetext" | |
| 1279 "freetexttable" "from" "full" "goto" "grant" "group" "having" | |
| 1280 "holdlock" "identity" "identity_insert" "identitycol" "if" "in" | |
| 1281 "index" "inner" "insert" "intersect" "into" "is" "isolation" "join" | |
| 1282 "key" "kill" "last" "left" "level" "like" "lineno" "load" "max" "min" | |
| 1283 "mirrorexit" "national" "next" "nocheck" "nolock" "nonclustered" "not" | |
| 1284 "null" "nullif" "of" "off" "offsets" "on" "once" "only" "open" | |
| 1285 "opendatasource" "openquery" "openrowset" "option" "or" "order" | |
| 1286 "outer" "output" "over" "paglock" "percent" "perm" "permanent" "pipe" | |
| 1287 "plan" "precision" "prepare" "primary" "print" "prior" "privileges" | |
| 1288 "proc" "procedure" "processexit" "public" "raiserror" "read" | |
| 1289 "readcommitted" "readpast" "readtext" "readuncommitted" "reconfigure" | |
| 1290 "references" "relative" "repeatable" "repeatableread" "replication" | |
| 1291 "restore" "restrict" "return" "revoke" "right" "rollback" "rowcount" | |
| 1292 "rowguidcol" "rowlock" "rule" "save" "schema" "select" "serializable" | |
| 1293 "session_user" "set" "shutdown" "some" "statistics" "sum" | |
| 1294 "system_user" "table" "tablock" "tablockx" "tape" "temp" "temporary" | |
| 1295 "textsize" "then" "to" "top" "tran" "transaction" "trigger" "truncate" | |
| 1296 "tsequal" "uncommitted" "union" "unique" "update" "updatetext" | |
| 1297 "updlock" "use" "user" "values" "view" "waitfor" "when" "where" | |
| 1298 "while" "with" "work" "writetext" | |
| 1299 "collate" "function" "openxml" "returns" | |
| 1300 | |
| 1301 ) t) "\\b"))) | |
| 1302 (ms-types (eval-when-compile | |
| 1303 (concat "\\b" | |
| 1304 (regexp-opt '( | |
| 1305 | |
| 1306 "binary" "bit" "char" "character" "cursor" "datetime" "dec" "decimal" | |
| 1307 "double" "float" "image" "int" "integer" "money" "national" "nchar" | |
| 1308 "ntext" "numeric" "numeric" "nvarchar" "precision" "real" | |
| 1309 "smalldatetime" "smallint" "smallmoney" "text" "timestamp" "tinyint" | |
| 1310 "uniqueidentifier" "varbinary" "varchar" "varying" | |
| 1311 | |
| 1312 ) t) "\\b"))) | |
| 1313 | |
| 1314 (ms-vars "\\b@[a-zA-Z0-9_]*\\b") | |
| 1315 | |
| 1316 (ms-builtin-functions (eval-when-compile | |
| 1317 (concat "\\b" | |
| 1318 (regexp-opt '( | |
| 1319 ;; Misc MS builtin functions | |
| 1320 | |
| 1321 "@@connections" "@@cpu_busy" "@@cursor_rows" "@@datefirst" "@@dbts" | |
| 1322 "@@error" "@@fetch_status" "@@identity" "@@idle" "@@io_busy" | |
| 1323 "@@langid" "@@language" "@@lock_timeout" "@@max_connections" | |
| 1324 "@@max_precision" "@@nestlevel" "@@options" "@@pack_received" | |
| 1325 "@@pack_sent" "@@packet_errors" "@@procid" "@@remserver" "@@rowcount" | |
| 1326 "@@servername" "@@servicename" "@@spid" "@@textsize" "@@timeticks" | |
| 1327 "@@total_errors" "@@total_read" "@@total_write" "@@trancount" | |
| 1328 "@@version" "abs" "acos" "and" "app_name" "ascii" "asin" "atan" "atn2" | |
| 1329 "avg" "case" "cast" "ceiling" "char" "charindex" "coalesce" | |
| 1330 "col_length" "col_name" "columnproperty" "containstable" "convert" | |
| 1331 "cos" "cot" "count" "current_timestamp" "current_user" "cursor_status" | |
| 1332 "databaseproperty" "datalength" "dateadd" "datediff" "datename" | |
| 1333 "datepart" "day" "db_id" "db_name" "degrees" "difference" "exp" | |
| 1334 "file_id" "file_name" "filegroup_id" "filegroup_name" | |
| 1335 "filegroupproperty" "fileproperty" "floor" "formatmessage" | |
| 1336 "freetexttable" "fulltextcatalogproperty" "fulltextserviceproperty" | |
| 1337 "getansinull" "getdate" "grouping" "host_id" "host_name" "ident_incr" | |
| 1338 "ident_seed" "identity" "index_col" "indexproperty" "is_member" | |
| 1339 "is_srvrolemember" "isdate" "isnull" "isnumeric" "left" "len" "log" | |
| 1340 "log10" "lower" "ltrim" "max" "min" "month" "nchar" "newid" "nullif" | |
| 1341 "object_id" "object_name" "objectproperty" "openquery" "openrowset" | |
| 1342 "parsename" "patindex" "patindex" "permissions" "pi" "power" | |
| 1343 "quotename" "radians" "rand" "replace" "replicate" "reverse" "right" | |
| 1344 "round" "rtrim" "session_user" "sign" "sin" "soundex" "space" "sqrt" | |
| 1345 "square" "stats_date" "stdev" "stdevp" "str" "stuff" "substring" "sum" | |
| 1346 "suser_id" "suser_name" "suser_sid" "suser_sname" "system_user" "tan" | |
| 1347 "textptr" "textvalid" "typeproperty" "unicode" "upper" "user" | |
| 1348 "user_id" "user_name" "var" "varp" "year" | |
| 1349 | |
| 1350 ) t) "\\b"))) | |
| 1351 | |
| 1352 (ms-config-commands | |
| 1353 (eval-when-compile | |
| 1354 (concat "^\\(\\(set\\s-+\\(" | |
| 1355 (regexp-opt '( | |
| 1356 | |
| 1357 "datefirst" "dateformat" "deadlock_priority" "lock_timeout" | |
| 1358 "concat_null_yields_null" "cursor_close_on_commit" | |
| 1359 "disable_def_cnst_chk" "fips_flagger" "identity_insert" "language" | |
| 1360 "offsets" "quoted_identifier" "arithabort" "arithignore" "fmtonly" | |
| 1361 "nocount" "noexec" "numeric_roundabort" "parseonly" | |
| 1362 "query_governor_cost_limit" "rowcount" "textsize" "ansi_defaults" | |
| 1363 "ansi_null_dflt_off" "ansi_null_dflt_on" "ansi_nulls" "ansi_padding" | |
| 1364 "ansi_warnings" "forceplan" "showplan_all" "showplan_text" | |
| 1365 "statistics" "implicit_transactions" "remote_proc_transactions" | |
| 1366 "transaction" "xact_abort" | |
| 1367 | |
| 1368 ) t) | |
| 1369 "\\)\\)\\|go\\s-*\\|use\\s-+\\|setuser\\s-+\\|dbcc\\s-+\\).*$")))) | |
| 1370 | |
| 1371 (list (cons ms-config-commands 'font-lock-doc-face) | |
| 1372 (cons ms-reserved-words 'font-lock-keyword-face) | |
| 1373 ;; XEmacs doesn't have 'font-lock-builtin-face | |
| 1374 (if (string-match "XEmacs\\|Lucid" emacs-version) | |
| 1375 (cons ms-builtin-functions 'font-lock-preprocessor-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 | |
| 1381 "Microsoft SQLServer SQL keywords used by font-lock. | |
| 1382 | |
| 1383 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1384 regular expressions are created during compilation by calling the | |
| 1385 function `regexp-opt'. Therefore, take a look at the source before | |
| 1386 you define your own sql-mode-ms-font-lock-keywords.") | |
| 1387 | |
| 1388 (defvar sql-mode-sybase-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1389 "Sybase SQL keywords used by font-lock. | |
| 1390 | |
| 1391 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1392 regular expressions are created during compilation by calling the | |
| 1393 function `regexp-opt'. Therefore, take a look at the source before | |
| 1394 you define your own sql-mode-sybase-font-lock-keywords.") | |
| 1395 | |
| 1396 (defvar sql-mode-informix-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1397 "Informix SQL keywords used by font-lock. | |
| 1398 | |
| 1399 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1400 regular expressions are created during compilation by calling the | |
| 1401 function `regexp-opt'. Therefore, take a look at the source before | |
| 1402 you define your own sql-mode-informix-font-lock-keywords.") | |
| 1403 | |
| 1404 (defvar sql-mode-interbase-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1405 "Interbase SQL keywords used by font-lock. | |
| 1406 | |
| 1407 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1408 regular expressions are created during compilation by calling the | |
| 1409 function `regexp-opt'. Therefore, take a look at the source before | |
| 1410 you define your own sql-mode-interbase-font-lock-keywords.") | |
| 1411 | |
| 1412 (defvar sql-mode-ingres-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1413 "Ingres SQL keywords used by font-lock. | |
| 1414 | |
| 1415 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1416 regular expressions are created during compilation by calling the | |
| 1417 function `regexp-opt'. Therefore, take a look at the source before | |
| 1418 you define your own sql-mode-interbase-font-lock-keywords.") | |
| 1419 | |
| 1420 (defvar sql-mode-solid-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1421 "Solid SQL keywords used by font-lock. | |
| 1422 | |
| 1423 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1424 regular expressions are created during compilation by calling the | |
| 1425 function `regexp-opt'. Therefore, take a look at the source before | |
| 1426 you define your own sql-mode-solid-font-lock-keywords.") | |
| 1427 | |
| 1428 (defvar sql-mode-mysql-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1429 "MySQL SQL keywords used by font-lock. | |
| 1430 | |
| 1431 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1432 regular expressions are created during compilation by calling the | |
| 1433 function `regexp-opt'. Therefore, take a look at the source before | |
| 1434 you define your own sql-mode-mysql-font-lock-keywords.") | |
| 1435 | |
| 1436 (defvar sql-mode-sqlite-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1437 "SQLite SQL keywords used by font-lock. | |
| 1438 | |
| 1439 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1440 regular expressions are created during compilation by calling the | |
| 1441 function `regexp-opt'. Therefore, take a look at the source before | |
| 1442 you define your own sql-mode-sqlite-font-lock-keywords.") | |
| 1443 | |
| 1444 (defvar sql-mode-db2-font-lock-keywords sql-mode-ansi-font-lock-keywords | |
| 1445 "DB2 SQL keywords used by font-lock. | |
| 1446 | |
| 1447 This variable is used by `sql-mode' and `sql-interactive-mode'. The | |
| 1448 regular expressions are created during compilation by calling the | |
| 1449 function `regexp-opt'. Therefore, take a look at the source before | |
| 1450 you define your own sql-mode-db2-font-lock-keywords.") | |
| 1451 | |
| 1452 (defvar sql-mode-font-lock-keywords nil | |
| 854 "SQL keywords used by font-lock. | 1453 "SQL keywords used by font-lock. |
| 855 | 1454 |
| 856 This variable defaults to `sql-mode-ansi-font-lock-keywords'. This is | 1455 Setting this variable directly no longer has any affect. Use |
| 857 used for the default `font-lock-defaults' value in `sql-mode'. This | 1456 `sql-product' and `sql-add-product-keywords' to control the |
| 858 can be changed by some entry functions to provide more hilighting.") | 1457 highlighting rules in sql-mode.") |
| 859 | 1458 |
| 860 | 1459 |
| 861 | 1460 |
| 1461 ;;; SQL Product support functions | |
| 1462 | |
| 1463 (defun sql-product-feature (feature &optional product) | |
| 1464 "Lookup `feature' needed to support the current SQL product. | |
| 1465 | |
| 1466 See \[sql-product-support] for a list of products and supported features." | |
| 1467 (cadr | |
| 1468 (memq feature | |
| 1469 (assoc (or product sql-product) | |
| 1470 sql-product-support)))) | |
| 1471 | |
| 1472 (defun sql-product-font-lock (keywords-only imenu) | |
| 1473 "Sets `font-lock-defaults' and `font-lock-keywords' based on | |
| 1474 the product-specific keywords and syntax-alists defined in | |
| 1475 `sql-product-support'." | |
| 1476 (let | |
| 1477 ;; Get the product-specific syntax-alist. | |
| 1478 ((syntax-alist | |
| 1479 (append | |
| 1480 (sql-product-feature :syntax-alist) | |
| 1481 '((?_ . "w") (?. . "w"))))) | |
| 1482 | |
| 1483 ;; Get the product-specific keywords. | |
| 1484 (setq sql-mode-font-lock-keywords | |
| 1485 (append | |
| 1486 (eval (sql-product-feature :font-lock)) | |
| 1487 (list sql-mode-font-lock-object-name))) | |
| 1488 | |
| 1489 ;; Setup font-lock. (What is the minimum we should have to do | |
| 1490 ;; here?) | |
| 1491 (setq font-lock-set-defaults nil | |
| 1492 font-lock-keywords sql-mode-font-lock-keywords | |
| 1493 font-lock-defaults (list 'sql-mode-font-lock-keywords | |
| 1494 keywords-only t syntax-alist)) | |
| 1495 | |
| 1496 ;; Setup imenu; it needs the same syntax-alist. | |
| 1497 (when imenu | |
| 1498 (setq imenu-syntax-alist syntax-alist)))) | |
| 1499 | |
| 1500 ;;;###autoload | |
| 1501 (defun sql-add-product-keywords (product keywords) | |
| 1502 "Append a `font-lock-keywords' entry to the existing entries defined | |
| 1503 for the specified `product'." | |
| 1504 | |
| 1505 (let ((font-lock (sql-product-feature :font-lock product))) | |
| 1506 (set font-lock (append (eval font-lock) (list keywords))))) | |
| 1507 | |
| 1508 | |
| 1509 | |
| 862 ;;; Functions to switch highlighting | 1510 ;;; Functions to switch highlighting |
| 863 | 1511 |
| 1512 (defun sql-highlight-product () | |
| 1513 "Turns on the appropriate font highlighting for the SQL product | |
| 1514 selected." | |
| 1515 | |
| 1516 (when (eq major-mode 'sql-mode) | |
| 1517 ;; Setup font-lock | |
| 1518 (sql-product-font-lock nil t) | |
| 1519 | |
| 1520 ;; Force fontification, if its enabled. | |
| 1521 (if font-lock-mode | |
| 1522 (font-lock-fontify-buffer)) | |
| 1523 | |
| 1524 ;; Set the mode name to include the product. | |
| 1525 (setq mode-name (concat "SQL[" (prin1-to-string sql-product) "]")))) | |
| 1526 | |
| 1527 (defun sql-set-product (product) | |
| 1528 "Set `sql-product' to product and enable appropriate | |
| 1529 highlighting." | |
| 1530 (interactive "SEnter SQL product: ") | |
| 1531 (when (not (assoc product sql-product-support)) | |
| 1532 (error "SQL product %s is not supported; treated as ANSI" product) | |
| 1533 (setq product 'ansi)) | |
| 1534 | |
| 1535 ;; Save product setting and fontify. | |
| 1536 (setq sql-product product) | |
| 1537 (sql-highlight-product)) | |
| 1538 | |
| 864 (defun sql-highlight-oracle-keywords () | 1539 (defun sql-highlight-oracle-keywords () |
| 865 "Highlight Oracle keywords. | 1540 "Highlight Oracle keywords." |
| 866 Basically, this just sets `font-lock-keywords' appropriately." | 1541 (interactive) |
| 867 (interactive) | 1542 (sql-set-product 'oracle)) |
| 868 (setq font-lock-keywords sql-mode-oracle-font-lock-keywords) | |
| 869 (font-lock-fontify-buffer)) | |
| 870 | 1543 |
| 871 (defun sql-highlight-postgres-keywords () | 1544 (defun sql-highlight-postgres-keywords () |
| 872 "Highlight Postgres keywords. | 1545 "Highlight Postgres keywords." |
| 873 Basically, this just sets `font-lock-keywords' appropriately." | 1546 (interactive) |
| 874 (interactive) | 1547 (sql-set-product 'postgres)) |
| 875 (setq font-lock-keywords sql-mode-postgres-font-lock-keywords) | |
| 876 (font-lock-fontify-buffer)) | |
| 877 | 1548 |
| 878 (defun sql-highlight-linter-keywords () | 1549 (defun sql-highlight-linter-keywords () |
| 879 "Highlight LINTER keywords. | 1550 "Highlight LINTER keywords." |
| 880 Basically, this just sets `font-lock-keywords' appropriately." | 1551 (interactive) |
| 881 (interactive) | 1552 (sql-set-product 'linter)) |
| 882 (setq font-lock-keywords sql-mode-linter-font-lock-keywords) | 1553 |
| 883 (font-lock-fontify-buffer)) | 1554 (defun sql-highlight-ms-keywords () |
| 1555 "Highlight Microsoft SQLServer keywords." | |
| 1556 (interactive) | |
| 1557 (sql-set-product 'ms)) | |
| 884 | 1558 |
| 885 (defun sql-highlight-ansi-keywords () | 1559 (defun sql-highlight-ansi-keywords () |
| 886 "Highlight ANSI SQL keywords. | 1560 "Highlight ANSI SQL keywords." |
| 887 Basically, this just sets `font-lock-keywords' appropriately." | 1561 (interactive) |
| 888 (interactive) | 1562 (sql-set-product 'ansi)) |
| 889 (setq font-lock-keywords sql-mode-ansi-font-lock-keywords) | 1563 |
| 890 (font-lock-fontify-buffer)) | 1564 (defun sql-highlight-sybase-keywords () |
| 1565 "Highlight Sybase SQL keywords." | |
| 1566 (interactive) | |
| 1567 (sql-set-product 'sybase)) | |
| 1568 | |
| 1569 (defun sql-highlight-informix-keywords () | |
| 1570 "Highlight Informix SQL keywords." | |
| 1571 (interactive) | |
| 1572 (sql-set-product 'informix)) | |
| 1573 | |
| 1574 (defun sql-highlight-interbase-keywords () | |
| 1575 "Highlight Interbase SQL keywords." | |
| 1576 (interactive) | |
| 1577 (sql-set-product 'interbase)) | |
| 1578 | |
| 1579 (defun sql-highlight-ingres-keywords () | |
| 1580 "Highlight Ingres SQL keywords." | |
| 1581 (interactive) | |
| 1582 (sql-set-product 'ingres)) | |
| 1583 | |
| 1584 (defun sql-highlight-solid-keywords () | |
| 1585 "Highlight Solid SQL keywords." | |
| 1586 (interactive) | |
| 1587 (sql-set-product 'solid)) | |
| 1588 | |
| 1589 (defun sql-highlight-mysql-keywords () | |
| 1590 "Highlight MySQL SQL keywords." | |
| 1591 (interactive) | |
| 1592 (sql-set-product 'mysql)) | |
| 1593 | |
| 1594 (defun sql-highlight-sqlite-keywords () | |
| 1595 "Highlight SQLite SQL keywords." | |
| 1596 (interactive) | |
| 1597 (sql-set-product 'sqlite)) | |
| 1598 | |
| 1599 (defun sql-highlight-db2-keywords () | |
| 1600 "Highlight DB2 SQL keywords." | |
| 1601 (interactive) | |
| 1602 (sql-set-product 'db2)) | |
| 891 | 1603 |
| 892 | 1604 |
| 893 | 1605 |
| 894 ;;; Compatibility functions | 1606 ;;; Compatibility functions |
| 895 | 1607 |
| 951 Oracle: \\[sql-oracle] | 1663 Oracle: \\[sql-oracle] |
| 952 Informix: \\[sql-informix] | 1664 Informix: \\[sql-informix] |
| 953 Sybase: \\[sql-sybase] | 1665 Sybase: \\[sql-sybase] |
| 954 Ingres: \\[sql-ingres] | 1666 Ingres: \\[sql-ingres] |
| 955 Microsoft: \\[sql-ms] | 1667 Microsoft: \\[sql-ms] |
| 1668 DB2: \\[sql-db2] | |
| 956 Interbase: \\[sql-interbase] | 1669 Interbase: \\[sql-interbase] |
| 957 Linter: \\[sql-linter] | 1670 Linter: \\[sql-linter] |
| 958 | 1671 |
| 959 But we urge you to choose a free implementation instead of these. | 1672 But we urge you to choose a free implementation instead of these. |
| 960 | 1673 |
| 997 | 1710 |
| 998 Parameter WHAT is a list of the arguments passed to this function. | 1711 Parameter WHAT is a list of the arguments passed to this function. |
| 999 The function asks for the username if WHAT contains symbol `user', for | 1712 The function asks for the username if WHAT contains symbol `user', for |
| 1000 the password if it contains symbol `password', for the server if it | 1713 the password if it contains symbol `password', for the server if it |
| 1001 contains symbol `server', and for the database if it contains symbol | 1714 contains symbol `server', and for the database if it contains symbol |
| 1002 `database'. | 1715 `database'. The members of WHAT are processed in the order in which |
| 1716 they are provided. | |
| 1003 | 1717 |
| 1004 In order to ask the user for username, password and database, call the | 1718 In order to ask the user for username, password and database, call the |
| 1005 function like this: (sql-get-login 'user 'password 'database)." | 1719 function like this: (sql-get-login 'user 'password 'database)." |
| 1006 (interactive) | 1720 (interactive) |
| 1007 (if (memq 'user what) | 1721 (while what |
| 1722 (cond | |
| 1723 ((eq (car what) 'user) ; user | |
| 1008 (setq sql-user | 1724 (setq sql-user |
| 1009 (read-from-minibuffer "User: " sql-user nil nil | 1725 (read-from-minibuffer "User: " sql-user nil nil |
| 1010 sql-user-history))) | 1726 sql-user-history))) |
| 1011 (if (memq 'password what) | 1727 ((eq (car what) 'password) ; password |
| 1012 (setq sql-password | 1728 (setq sql-password |
| 1013 (sql-read-passwd "Password: " sql-password))) | 1729 (sql-read-passwd "Password: " sql-password))) |
| 1014 (if (memq 'server what) | 1730 ((eq (car what) 'server) ; server |
| 1015 (setq sql-server | 1731 (setq sql-server |
| 1016 (read-from-minibuffer "Server: " sql-server nil nil | 1732 (read-from-minibuffer "Server: " sql-server nil nil |
| 1017 sql-server-history))) | 1733 sql-server-history))) |
| 1018 (if (memq 'database what) | 1734 ((eq (car what) 'database) ; database |
| 1019 (setq sql-database | 1735 (setq sql-database |
| 1020 (read-from-minibuffer "Database: " sql-database nil nil | 1736 (read-from-minibuffer "Database: " sql-database nil nil |
| 1021 sql-database-history)))) | 1737 sql-database-history)))) |
| 1738 (setq what (cdr what)))) | |
| 1022 | 1739 |
| 1023 (defun sql-find-sqli-buffer () | 1740 (defun sql-find-sqli-buffer () |
| 1024 "Return the current default SQLi buffer or nil. | 1741 "Return the current default SQLi buffer or nil. |
| 1025 In order to qualify, the SQLi buffer must be alive, | 1742 In order to qualify, the SQLi buffer must be alive, |
| 1026 be in `sql-interactive-mode' and have a process." | 1743 be in `sql-interactive-mode' and have a process." |
| 1285 (use-local-map sql-mode-map) | 2002 (use-local-map sql-mode-map) |
| 1286 (if sql-mode-menu | 2003 (if sql-mode-menu |
| 1287 (easy-menu-add sql-mode-menu)); XEmacs | 2004 (easy-menu-add sql-mode-menu)); XEmacs |
| 1288 (set-syntax-table sql-mode-syntax-table) | 2005 (set-syntax-table sql-mode-syntax-table) |
| 1289 (make-local-variable 'font-lock-defaults) | 2006 (make-local-variable 'font-lock-defaults) |
| 1290 ;; Note that making KEYWORDS-ONLY nil will cause havoc if you try | 2007 (make-local-variable 'sql-mode-font-lock-keywords) |
| 1291 ;; SELECT 'x' FROM DUAL with SQL*Plus, because the title of the column | |
| 1292 ;; will have just one quote. Therefore syntactic hilighting is | |
| 1293 ;; disabled for interactive buffers. `_' and `.' are considered part | |
| 1294 ;; of words. | |
| 1295 (setq font-lock-defaults '(sql-mode-font-lock-keywords | |
| 1296 nil t ((?_ . "w") (?. . "w")))) | |
| 1297 (make-local-variable 'comment-start) | 2008 (make-local-variable 'comment-start) |
| 1298 (setq comment-start "--") | 2009 (setq comment-start "--") |
| 1299 ;; Make each buffer in sql-mode remember the "current" SQLi buffer. | 2010 ;; Make each buffer in sql-mode remember the "current" SQLi buffer. |
| 1300 (make-local-variable 'sql-buffer) | 2011 (make-local-variable 'sql-buffer) |
| 1301 ;; Add imenu support for sql-mode. Note that imenu-generic-expression | 2012 ;; Add imenu support for sql-mode. Note that imenu-generic-expression |
| 1302 ;; is buffer-local, so we don't need a local-variable for it. SQL is | 2013 ;; is buffer-local, so we don't need a local-variable for it. SQL is |
| 1303 ;; case-insensitive, that's why we have to set imenu-case-fold-search. | 2014 ;; case-insensitive, that's why we have to set imenu-case-fold-search. |
| 1304 ;; imenu-syntax-alist makes sure that `_' is considered part of object | |
| 1305 ;; names. | |
| 1306 (setq imenu-generic-expression sql-imenu-generic-expression | 2015 (setq imenu-generic-expression sql-imenu-generic-expression |
| 1307 imenu-case-fold-search t | 2016 imenu-case-fold-search t) |
| 1308 imenu-syntax-alist '(("_" . "w"))) | |
| 1309 ;; Make `sql-send-paragraph' work on paragraphs that contain indented | 2017 ;; Make `sql-send-paragraph' work on paragraphs that contain indented |
| 1310 ;; lines. | 2018 ;; lines. |
| 1311 (make-local-variable 'paragraph-separate) | 2019 (make-local-variable 'paragraph-separate) |
| 1312 (make-local-variable 'paragraph-start) | 2020 (make-local-variable 'paragraph-start) |
| 1313 (setq paragraph-separate "[\f]*$" | 2021 (setq paragraph-separate "[\f]*$" |
| 1314 paragraph-start "[\n\f]") | 2022 paragraph-start "[\n\f]") |
| 1315 ;; Abbrevs | 2023 ;; Abbrevs |
| 1316 (setq local-abbrev-table sql-mode-abbrev-table) | 2024 (setq local-abbrev-table sql-mode-abbrev-table) |
| 1317 (setq abbrev-all-caps 1) | 2025 (setq abbrev-all-caps 1) |
| 1318 ;; Run hook | 2026 ;; Run hook |
| 1319 (run-hooks 'sql-mode-hook)) | 2027 (run-hooks 'sql-mode-hook) |
| 2028 ;; Catch changes to sql-product and highlight accordingly | |
| 2029 (sql-highlight-product) | |
| 2030 (add-hook 'hack-local-variables-hook 'sql-highlight-product t t)) | |
| 1320 | 2031 |
| 1321 | 2032 |
| 1322 | 2033 |
| 1323 ;;; SQL interactive mode | 2034 ;;; SQL interactive mode |
| 1324 | 2035 |
| 1391 you entered, right above the output it created. | 2102 you entered, right above the output it created. |
| 1392 | 2103 |
| 1393 \(setq comint-output-filter-functions | 2104 \(setq comint-output-filter-functions |
| 1394 \(function (lambda (STR) (comint-show-output))))" | 2105 \(function (lambda (STR) (comint-show-output))))" |
| 1395 (comint-mode) | 2106 (comint-mode) |
| 1396 (setq comint-prompt-regexp sql-prompt-regexp) | 2107 ;; Get the `sql-product' for this interactive session. |
| 1397 (setq left-margin sql-prompt-length) | 2108 (set (make-local-variable 'sql-product) |
| 2109 (or sql-interactive-product | |
| 2110 sql-product)) | |
| 2111 ;; Setup the mode. | |
| 1398 (setq major-mode 'sql-interactive-mode) | 2112 (setq major-mode 'sql-interactive-mode) |
| 1399 (setq mode-name "SQLi") | 2113 (setq mode-name (concat "SQLi[" (prin1-to-string sql-product) "]")) |
| 1400 (use-local-map sql-interactive-mode-map) | 2114 (use-local-map sql-interactive-mode-map) |
| 1401 (if sql-interactive-mode-menu | 2115 (if sql-interactive-mode-menu |
| 1402 (easy-menu-add sql-interactive-mode-menu)); XEmacs | 2116 (easy-menu-add sql-interactive-mode-menu)) ; XEmacs |
| 1403 (set-syntax-table sql-mode-syntax-table) | 2117 (set-syntax-table sql-mode-syntax-table) |
| 2118 (make-local-variable 'sql-mode-font-lock-keywords) | |
| 1404 (make-local-variable 'font-lock-defaults) | 2119 (make-local-variable 'font-lock-defaults) |
| 1405 ;; Note that making KEYWORDS-ONLY nil will cause havoc if you try | 2120 ;; Note that making KEYWORDS-ONLY nil will cause havoc if you try |
| 1406 ;; SELECT 'x' FROM DUAL with SQL*Plus, because the title of the column | 2121 ;; SELECT 'x' FROM DUAL with SQL*Plus, because the title of the column |
| 1407 ;; will have just one quote. Therefore syntactic hilighting is | 2122 ;; will have just one quote. Therefore syntactic hilighting is |
| 1408 ;; disabled for interactive buffers. `_' and `.' are considered part | 2123 ;; disabled for interactive buffers. No imenu support. |
| 1409 ;; of words. | 2124 (sql-product-font-lock t nil) |
| 1410 (setq font-lock-defaults '(sql-mode-font-lock-keywords | |
| 1411 t t ((?_ . "w") (?. . "w")))) | |
| 1412 ;; Enable commenting and uncommenting of the region. | 2125 ;; Enable commenting and uncommenting of the region. |
| 1413 (make-local-variable 'comment-start) | 2126 (make-local-variable 'comment-start) |
| 1414 (setq comment-start "--") | 2127 (setq comment-start "--") |
| 1415 ;; Abbreviation table init and case-insensitive. It is not activatet | 2128 ;; Abbreviation table init and case-insensitive. It is not activated |
| 1416 ;; by default. | 2129 ;; by default. |
| 1417 (setq local-abbrev-table sql-mode-abbrev-table) | 2130 (setq local-abbrev-table sql-mode-abbrev-table) |
| 1418 (setq abbrev-all-caps 1) | 2131 (setq abbrev-all-caps 1) |
| 1419 ;; Exiting the process will call sql-stop. | 2132 ;; Exiting the process will call sql-stop. |
| 1420 (set-process-sentinel (get-buffer-process sql-buffer) 'sql-stop) | 2133 (set-process-sentinel (get-buffer-process sql-buffer) 'sql-stop) |
| 2134 ;; Create a usefull name for renaming this buffer later. | |
| 2135 (make-local-variable 'sql-alternate-buffer-name) | |
| 2136 (setq sql-alternate-buffer-name (sql-make-alternate-buffer-name)) | |
| 2137 ;; User stuff. Initialize before the hook. | |
| 2138 (set (make-local-variable 'sql-prompt-regexp) | |
| 2139 (sql-product-feature :sqli-prompt-regexp)) | |
| 2140 (set (make-local-variable 'sql-prompt-length) | |
| 2141 (sql-product-feature :sqli-prompt-length)) | |
| 2142 (make-local-variable 'sql-input-ring-separator) | |
| 2143 (make-local-variable 'sql-input-ring-file-name) | |
| 2144 ;; Run hook. | |
| 2145 (run-hooks 'sql-interactive-mode-hook) | |
| 2146 ;; Set comint based on user overrides. | |
| 2147 (setq comint-prompt-regexp sql-prompt-regexp) | |
| 2148 (setq left-margin sql-prompt-length) | |
| 1421 ;; People wanting a different history file for each | 2149 ;; People wanting a different history file for each |
| 1422 ;; buffer/process/client/whatever can change separator and file-name | 2150 ;; buffer/process/client/whatever can change separator and file-name |
| 1423 ;; on the sql-interactive-mode-hook. | 2151 ;; on the sql-interactive-mode-hook. |
| 1424 (setq comint-input-ring-separator sql-input-ring-separator | 2152 (setq comint-input-ring-separator sql-input-ring-separator |
| 1425 comint-input-ring-file-name sql-input-ring-file-name) | 2153 comint-input-ring-file-name sql-input-ring-file-name) |
| 1426 ;; Create a usefull name for renaming this buffer later. | |
| 1427 (make-local-variable 'sql-alternate-buffer-name) | |
| 1428 (setq sql-alternate-buffer-name (sql-make-alternate-buffer-name)) | |
| 1429 ;; User stuff. | |
| 1430 (run-hooks 'sql-interactive-mode-hook) | |
| 1431 ;; Calling the hook before calling comint-read-input-ring allows users | 2154 ;; Calling the hook before calling comint-read-input-ring allows users |
| 1432 ;; to set comint-input-ring-file-name in sql-interactive-mode-hook. | 2155 ;; to set comint-input-ring-file-name in sql-interactive-mode-hook. |
| 1433 (comint-read-input-ring t)) | 2156 (comint-read-input-ring t)) |
| 1434 | 2157 |
| 1435 (defun sql-stop (process event) | 2158 (defun sql-stop (process event) |
| 1449 | 2172 |
| 1450 | 2173 |
| 1451 ;;; Entry functions for different SQL interpreters. | 2174 ;;; Entry functions for different SQL interpreters. |
| 1452 | 2175 |
| 1453 ;;;###autoload | 2176 ;;;###autoload |
| 2177 (defun sql-product-interactive (&optional product) | |
| 2178 "Run product interpreter as an inferior process. | |
| 2179 | |
| 2180 If buffer `*SQL*' exists but no process is running, make a new process. | |
| 2181 If buffer exists and a process is running, just switch to buffer | |
| 2182 `*SQL*'. | |
| 2183 | |
| 2184 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | |
| 2185 (interactive) | |
| 2186 (setq product (or product sql-product)) | |
| 2187 (when (sql-product-feature :sqli-connect product) | |
| 2188 (if (comint-check-proc "*SQL*") | |
| 2189 (pop-to-buffer "*SQL*") | |
| 2190 ;; Get credentials. | |
| 2191 (apply 'sql-get-login (sql-product-feature :sqli-login product)) | |
| 2192 ;; Connect to database. | |
| 2193 (message "Login...") | |
| 2194 (funcall (sql-product-feature :sqli-connect product)) | |
| 2195 ;; Set SQLi mode. | |
| 2196 (setq sql-interactive-product product) | |
| 2197 (setq sql-buffer (current-buffer)) | |
| 2198 (sql-interactive-mode) | |
| 2199 ;; All done. | |
| 2200 (message "Login...done") | |
| 2201 (pop-to-buffer sql-buffer)))) | |
| 2202 | |
| 2203 ;;;###autoload | |
| 1454 (defun sql-oracle () | 2204 (defun sql-oracle () |
| 1455 "Run sqlplus by Oracle as an inferior process. | 2205 "Run sqlplus by Oracle as an inferior process. |
| 1456 | 2206 |
| 1457 If buffer `*SQL*' exists but no process is running, make a new process. | 2207 If buffer `*SQL*' exists but no process is running, make a new process. |
| 1458 If buffer exists and a process is running, just switch to buffer | 2208 If buffer exists and a process is running, just switch to buffer |
| 1473 The default comes from `process-coding-system-alist' and | 2223 The default comes from `process-coding-system-alist' and |
| 1474 `default-process-coding-system'. | 2224 `default-process-coding-system'. |
| 1475 | 2225 |
| 1476 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2226 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1477 (interactive) | 2227 (interactive) |
| 1478 (if (comint-check-proc "*SQL*") | 2228 (sql-product-interactive 'oracle)) |
| 1479 (pop-to-buffer "*SQL*") | 2229 |
| 1480 (sql-get-login 'user 'password 'database) | 2230 (defun sql-connect-oracle () |
| 1481 (message "Login...") | 2231 "Create comint buffer and connect to Oracle using the login |
| 1482 ;; Produce user/password@database construct. Password without user | 2232 parameters and command options." |
| 1483 ;; is meaningless; database without user/password is meaningless, | 2233 ;; Produce user/password@database construct. Password without user |
| 1484 ;; because "@param" will ask sqlplus to interpret the script | 2234 ;; is meaningless; database without user/password is meaningless, |
| 1485 ;; "param". | 2235 ;; because "@param" will ask sqlplus to interpret the script |
| 1486 (let ((parameter nil)) | 2236 ;; "param". |
| 1487 (if (not (string= "" sql-user)) | 2237 (let ((parameter nil)) |
| 1488 (if (not (string= "" sql-password)) | 2238 (if (not (string= "" sql-user)) |
| 1489 (setq parameter (concat sql-user "/" sql-password)) | 2239 (if (not (string= "" sql-password)) |
| 1490 (setq parameter sql-user))) | 2240 (setq parameter (concat sql-user "/" sql-password)) |
| 1491 (if (and parameter (not (string= "" sql-database))) | 2241 (setq parameter sql-user))) |
| 1492 (setq parameter (concat parameter "@" sql-database))) | 2242 (if (and parameter (not (string= "" sql-database))) |
| 1493 (if parameter | 2243 (setq parameter (concat parameter "@" sql-database))) |
| 1494 (setq parameter (nconc (list parameter) sql-oracle-options)) | 2244 (if parameter |
| 1495 (setq parameter sql-oracle-options)) | 2245 (setq parameter (nconc (list parameter) sql-oracle-options)) |
| 1496 (if parameter | 2246 (setq parameter sql-oracle-options)) |
| 1497 (set-buffer (apply 'make-comint "SQL" sql-oracle-program nil | 2247 (if parameter |
| 1498 parameter)) | 2248 (set-buffer (apply 'make-comint "SQL" sql-oracle-program nil |
| 1499 (set-buffer (make-comint "SQL" sql-oracle-program nil)))) | 2249 parameter)) |
| 1500 (setq sql-prompt-regexp "^SQL> ") | 2250 (set-buffer (make-comint "SQL" sql-oracle-program nil))) |
| 1501 (setq sql-prompt-length 5) | 2251 ;; SQL*Plus is buffered on WindowsNT; this handles &placeholders. |
| 1502 (setq sql-buffer (current-buffer)) | |
| 1503 ;; set sql-mode-font-lock-keywords to something different before | |
| 1504 ;; calling sql-interactive-mode. | |
| 1505 (setq sql-mode-font-lock-keywords sql-mode-oracle-font-lock-keywords) | |
| 1506 (sql-interactive-mode) | |
| 1507 ;; If running on NT, make sure we do placeholder replacement | |
| 1508 ;; ourselves. This must come after sql-interactive-mode because all | |
| 1509 ;; local variables will be killed, there. | |
| 1510 (if (eq window-system 'w32) | 2252 (if (eq window-system 'w32) |
| 1511 (setq comint-input-sender 'sql-query-placeholders-and-send)) | 2253 (setq comint-input-sender 'sql-query-placeholders-and-send)))) |
| 1512 (message "Login...done") | |
| 1513 (pop-to-buffer sql-buffer))) | |
| 1514 | 2254 |
| 1515 | 2255 |
| 1516 | 2256 |
| 1517 ;;;###autoload | 2257 ;;;###autoload |
| 1518 (defun sql-sybase () | 2258 (defun sql-sybase () |
| 1537 The default comes from `process-coding-system-alist' and | 2277 The default comes from `process-coding-system-alist' and |
| 1538 `default-process-coding-system'. | 2278 `default-process-coding-system'. |
| 1539 | 2279 |
| 1540 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2280 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1541 (interactive) | 2281 (interactive) |
| 1542 (if (comint-check-proc "*SQL*") | 2282 (sql-product-interactive 'sybase)) |
| 1543 (pop-to-buffer "*SQL*") | 2283 |
| 1544 (sql-get-login 'server 'user 'password 'database) | 2284 (defun sql-connect-sybase () |
| 1545 (message "Login...") | 2285 "Create comint buffer and connect to Sybase using the login |
| 1546 ;; Put all parameters to the program (if defined) in a list and call | 2286 parameters and command options." |
| 1547 ;; make-comint. | 2287 ;; Put all parameters to the program (if defined) in a list and call |
| 1548 (let ((params sql-sybase-options)) | 2288 ;; make-comint. |
| 1549 (if (not (string= "" sql-server)) | 2289 (let ((params sql-sybase-options)) |
| 1550 (setq params (append (list "-S" sql-server) params))) | 2290 (if (not (string= "" sql-server)) |
| 1551 (if (not (string= "" sql-database)) | 2291 (setq params (append (list "-S" sql-server) params))) |
| 1552 (setq params (append (list "-D" sql-database) params))) | 2292 (if (not (string= "" sql-database)) |
| 1553 (if (not (string= "" sql-password)) | 2293 (setq params (append (list "-D" sql-database) params))) |
| 1554 (setq params (append (list "-P" sql-password) params))) | 2294 (if (not (string= "" sql-password)) |
| 1555 (if (not (string= "" sql-user)) | 2295 (setq params (append (list "-P" sql-password) params))) |
| 1556 (setq params (append (list "-U" sql-user) params))) | 2296 (if (not (string= "" sql-user)) |
| 1557 (set-buffer (apply 'make-comint "SQL" sql-sybase-program | 2297 (setq params (append (list "-U" sql-user) params))) |
| 1558 nil params))) | 2298 (set-buffer (apply 'make-comint "SQL" sql-sybase-program |
| 1559 (setq sql-prompt-regexp "^SQL> ") | 2299 nil params)))) |
| 1560 (setq sql-prompt-length 5) | |
| 1561 (setq sql-buffer (current-buffer)) | |
| 1562 (sql-interactive-mode) | |
| 1563 (message "Login...done") | |
| 1564 (pop-to-buffer sql-buffer))) | |
| 1565 | 2300 |
| 1566 | 2301 |
| 1567 | 2302 |
| 1568 ;;;###autoload | 2303 ;;;###autoload |
| 1569 (defun sql-informix () | 2304 (defun sql-informix () |
| 1586 The default comes from `process-coding-system-alist' and | 2321 The default comes from `process-coding-system-alist' and |
| 1587 `default-process-coding-system'. | 2322 `default-process-coding-system'. |
| 1588 | 2323 |
| 1589 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2324 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1590 (interactive) | 2325 (interactive) |
| 1591 (if (comint-check-proc "*SQL*") | 2326 (sql-product-interactive 'informix)) |
| 1592 (pop-to-buffer "*SQL*") | 2327 |
| 1593 (sql-get-login 'database) | 2328 (defun sql-connect-informix () |
| 1594 (message "Login...") | 2329 "Create comint buffer and connect to Informix using the login |
| 1595 ;; username and password are ignored. | 2330 parameters and command options." |
| 1596 (if (string= "" sql-database) | 2331 ;; username and password are ignored. |
| 1597 (set-buffer (make-comint "SQL" sql-informix-program nil)) | 2332 (if (string= "" sql-database) |
| 1598 (set-buffer (make-comint "SQL" sql-informix-program nil sql-database "-"))) | 2333 (set-buffer (make-comint "SQL" sql-informix-program nil)) |
| 1599 (setq sql-prompt-regexp "^SQL> ") | 2334 (set-buffer (make-comint "SQL" sql-informix-program nil sql-database "-")))) |
| 1600 (setq sql-prompt-length 5) | |
| 1601 (setq sql-buffer (current-buffer)) | |
| 1602 (sql-interactive-mode) | |
| 1603 (message "Login...done") | |
| 1604 (pop-to-buffer sql-buffer))) | |
| 1605 | 2335 |
| 1606 | 2336 |
| 1607 | 2337 |
| 1608 ;;;###autoload | 2338 ;;;###autoload |
| 1609 (defun sql-sqlite () | 2339 (defun sql-sqlite () |
| 1630 The default comes from `process-coding-system-alist' and | 2360 The default comes from `process-coding-system-alist' and |
| 1631 `default-process-coding-system'. | 2361 `default-process-coding-system'. |
| 1632 | 2362 |
| 1633 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2363 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1634 (interactive) | 2364 (interactive) |
| 1635 (if (comint-check-proc "*SQL*") | 2365 (sql-product-interactive 'sqlite)) |
| 1636 (pop-to-buffer "*SQL*") | 2366 |
| 1637 (sql-get-login 'database) | 2367 (defun sql-connect-sqlite () |
| 1638 (message "Login...") | 2368 "Create comint buffer and connect to SQLite using the login |
| 1639 ;; Put all parameters to the program (if defined) in a list and call | 2369 parameters and command options." |
| 1640 ;; make-comint. | 2370 ;; Put all parameters to the program (if defined) in a list and call |
| 1641 (let ((params)) | 2371 ;; make-comint. |
| 1642 (if (not (string= "" sql-database)) | 2372 (let ((params)) |
| 1643 (setq params (append (list sql-database) params))) | 2373 (if (not (string= "" sql-database)) |
| 1644 (if (not (string= "" sql-server)) | 2374 (setq params (append (list sql-database) params))) |
| 1645 (setq params (append (list (concat "--host=" sql-server)) params))) | 2375 (if (not (string= "" sql-server)) |
| 1646 (if (not (string= "" sql-password)) | 2376 (setq params (append (list (concat "--host=" sql-server)) params))) |
| 1647 (setq params (append (list (concat "--password=" sql-password)) params))) | 2377 (if (not (string= "" sql-password)) |
| 1648 (if (not (string= "" sql-user)) | 2378 (setq params (append (list (concat "--password=" sql-password)) params))) |
| 1649 (setq params (append (list (concat "--user=" sql-user)) params))) | 2379 (if (not (string= "" sql-user)) |
| 1650 (if (not (null sql-sqlite-options)) | 2380 (setq params (append (list (concat "--user=" sql-user)) params))) |
| 1651 (setq params (append sql-sqlite-options params))) | 2381 (if (not (null sql-sqlite-options)) |
| 1652 (set-buffer (apply 'make-comint "SQL" sql-sqlite-program | 2382 (setq params (append sql-sqlite-options params))) |
| 1653 nil params))) | 2383 (set-buffer (apply 'make-comint "SQL" sql-sqlite-program |
| 1654 (setq sql-prompt-regexp "^sqlite> ") | 2384 nil params)))) |
| 1655 (setq sql-prompt-length 8) | |
| 1656 (setq sql-buffer (current-buffer)) | |
| 1657 (sql-interactive-mode) | |
| 1658 (message "Login...done") | |
| 1659 (pop-to-buffer sql-buffer))) | |
| 1660 | 2385 |
| 1661 | 2386 |
| 1662 | 2387 |
| 1663 ;;;###autoload | 2388 ;;;###autoload |
| 1664 (defun sql-mysql () | 2389 (defun sql-mysql () |
| 1685 The default comes from `process-coding-system-alist' and | 2410 The default comes from `process-coding-system-alist' and |
| 1686 `default-process-coding-system'. | 2411 `default-process-coding-system'. |
| 1687 | 2412 |
| 1688 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2413 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1689 (interactive) | 2414 (interactive) |
| 1690 (if (comint-check-proc "*SQL*") | 2415 (sql-product-interactive 'mysql)) |
| 1691 (pop-to-buffer "*SQL*") | 2416 |
| 1692 (sql-get-login 'user 'password 'database 'server) | 2417 (defun sql-connect-mysql () |
| 1693 (message "Login...") | 2418 "Create comint buffer and connect to MySQL using the login |
| 1694 ;; Put all parameters to the program (if defined) in a list and call | 2419 parameters and command options." |
| 1695 ;; make-comint. | 2420 ;; Put all parameters to the program (if defined) in a list and call |
| 1696 (let ((params)) | 2421 ;; make-comint. |
| 1697 (if (not (string= "" sql-database)) | 2422 (let ((params)) |
| 1698 (setq params (append (list sql-database) params))) | 2423 (if (not (string= "" sql-database)) |
| 1699 (if (not (string= "" sql-server)) | 2424 (setq params (append (list sql-database) params))) |
| 1700 (setq params (append (list (concat "--host=" sql-server)) params))) | 2425 (if (not (string= "" sql-server)) |
| 1701 (if (not (string= "" sql-password)) | 2426 (setq params (append (list (concat "--host=" sql-server)) params))) |
| 1702 (setq params (append (list (concat "--password=" sql-password)) params))) | 2427 (if (not (string= "" sql-password)) |
| 1703 (if (not (string= "" sql-user)) | 2428 (setq params (append (list (concat "--password=" sql-password)) params))) |
| 1704 (setq params (append (list (concat "--user=" sql-user)) params))) | 2429 (if (not (string= "" sql-user)) |
| 1705 (if (not (null sql-mysql-options)) | 2430 (setq params (append (list (concat "--user=" sql-user)) params))) |
| 1706 (setq params (append sql-mysql-options params))) | 2431 (if (not (null sql-mysql-options)) |
| 1707 (set-buffer (apply 'make-comint "SQL" sql-mysql-program | 2432 (setq params (append sql-mysql-options params))) |
| 1708 nil params))) | 2433 (set-buffer (apply 'make-comint "SQL" sql-mysql-program |
| 1709 (setq sql-prompt-regexp "^mysql>") | 2434 nil params)))) |
| 1710 (setq sql-prompt-length 6) | |
| 1711 (setq sql-buffer (current-buffer)) | |
| 1712 (sql-interactive-mode) | |
| 1713 (message "Login...done") | |
| 1714 (pop-to-buffer sql-buffer))) | |
| 1715 | 2435 |
| 1716 | 2436 |
| 1717 | 2437 |
| 1718 ;;;###autoload | 2438 ;;;###autoload |
| 1719 (defun sql-solid () | 2439 (defun sql-solid () |
| 1737 The default comes from `process-coding-system-alist' and | 2457 The default comes from `process-coding-system-alist' and |
| 1738 `default-process-coding-system'. | 2458 `default-process-coding-system'. |
| 1739 | 2459 |
| 1740 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2460 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1741 (interactive) | 2461 (interactive) |
| 1742 (if (comint-check-proc "*SQL*") | 2462 (sql-product-interactive 'solid)) |
| 1743 (pop-to-buffer "*SQL*") | 2463 |
| 1744 (sql-get-login 'user 'password 'server) | 2464 (defun sql-connect-solid () |
| 1745 (message "Login...") | 2465 "Create comint buffer and connect to Solid using the login |
| 1746 ;; Put all parameters to the program (if defined) in a list and call | 2466 parameters and command options." |
| 1747 ;; make-comint. | 2467 ;; Put all parameters to the program (if defined) in a list and call |
| 1748 (let ((params)) | 2468 ;; make-comint. |
| 1749 ;; It only makes sense if both username and password are there. | 2469 (let ((params)) |
| 1750 (if (not (or (string= "" sql-user) | 2470 ;; It only makes sense if both username and password are there. |
| 1751 (string= "" sql-password))) | 2471 (if (not (or (string= "" sql-user) |
| 1752 (setq params (append (list sql-user sql-password) params))) | 2472 (string= "" sql-password))) |
| 1753 (if (not (string= "" sql-server)) | 2473 (setq params (append (list sql-user sql-password) params))) |
| 1754 (setq params (append (list sql-server) params))) | 2474 (if (not (string= "" sql-server)) |
| 1755 (set-buffer (apply 'make-comint "SQL" sql-solid-program | 2475 (setq params (append (list sql-server) params))) |
| 1756 nil params))) | 2476 (set-buffer (apply 'make-comint "SQL" sql-solid-program |
| 1757 (setq sql-prompt-regexp "^") | 2477 nil params)))) |
| 1758 (setq sql-prompt-length 0) | |
| 1759 (setq sql-buffer (current-buffer)) | |
| 1760 (sql-interactive-mode) | |
| 1761 (message "Login...done") | |
| 1762 (pop-to-buffer sql-buffer))) | |
| 1763 | 2478 |
| 1764 | 2479 |
| 1765 | 2480 |
| 1766 ;;;###autoload | 2481 ;;;###autoload |
| 1767 (defun sql-ingres () | 2482 (defun sql-ingres () |
| 1784 The default comes from `process-coding-system-alist' and | 2499 The default comes from `process-coding-system-alist' and |
| 1785 `default-process-coding-system'. | 2500 `default-process-coding-system'. |
| 1786 | 2501 |
| 1787 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2502 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1788 (interactive) | 2503 (interactive) |
| 1789 (if (comint-check-proc "*SQL*") | 2504 (sql-product-interactive 'ingres)) |
| 1790 (pop-to-buffer "*SQL*") | 2505 |
| 1791 (sql-get-login 'database) | 2506 (defun sql-connect-ingres () |
| 1792 (message "Login...") | 2507 "Create comint buffer and connect to Ingres using the login |
| 1793 ;; username and password are ignored. | 2508 parameters and command options." |
| 1794 (if (string= "" sql-database) | 2509 ;; username and password are ignored. |
| 1795 (set-buffer (make-comint "SQL" sql-ingres-program nil)) | 2510 (if (string= "" sql-database) |
| 1796 (set-buffer (make-comint "SQL" sql-ingres-program nil sql-database))) | 2511 (set-buffer (make-comint "SQL" sql-ingres-program nil)) |
| 1797 (setq sql-prompt-regexp "^\* ") | 2512 (set-buffer (make-comint "SQL" sql-ingres-program nil sql-database)))) |
| 1798 (setq sql-prompt-length 2) | |
| 1799 (setq sql-buffer (current-buffer)) | |
| 1800 (sql-interactive-mode) | |
| 1801 (message "Login...done") | |
| 1802 (pop-to-buffer sql-buffer))) | |
| 1803 | 2513 |
| 1804 | 2514 |
| 1805 | 2515 |
| 1806 ;;;###autoload | 2516 ;;;###autoload |
| 1807 (defun sql-ms () | 2517 (defun sql-ms () |
| 1808 "Run isql by Microsoft as an inferior process. | 2518 "Run osql by Microsoft as an inferior process. |
| 1809 | 2519 |
| 1810 If buffer `*SQL*' exists but no process is running, make a new process. | 2520 If buffer `*SQL*' exists but no process is running, make a new process. |
| 1811 If buffer exists and a process is running, just switch to buffer | 2521 If buffer exists and a process is running, just switch to buffer |
| 1812 `*SQL*'. | 2522 `*SQL*'. |
| 1813 | 2523 |
| 1826 The default comes from `process-coding-system-alist' and | 2536 The default comes from `process-coding-system-alist' and |
| 1827 `default-process-coding-system'. | 2537 `default-process-coding-system'. |
| 1828 | 2538 |
| 1829 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2539 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1830 (interactive) | 2540 (interactive) |
| 1831 (if (comint-check-proc "*SQL*") | 2541 (sql-product-interactive 'ms)) |
| 1832 (pop-to-buffer "*SQL*") | 2542 |
| 1833 (sql-get-login 'user 'password 'database 'server) | 2543 (defun sql-connect-ms () |
| 1834 (message "Login...") | 2544 "Create comint buffer and connect to Microsoft using the login |
| 1835 ;; Put all parameters to the program (if defined) in a list and call | 2545 parameters and command options." |
| 1836 ;; make-comint. | 2546 ;; Put all parameters to the program (if defined) in a list and call |
| 1837 (let ((params sql-ms-options)) | 2547 ;; make-comint. |
| 1838 (if (not (string= "" sql-server)) | 2548 (let ((params sql-ms-options)) |
| 2549 (if (not (string= "" sql-server)) | |
| 1839 (setq params (append (list "-S" sql-server) params))) | 2550 (setq params (append (list "-S" sql-server) params))) |
| 1840 (if (not (string= "" sql-database)) | 2551 (if (not (string= "" sql-database)) |
| 1841 (setq params (append (list "-d" sql-database) params))) | 2552 (setq params (append (list "-d" sql-database) params))) |
| 1842 (if (not (string= "" sql-user)) | 2553 (if (not (string= "" sql-user)) |
| 1843 (setq params (append (list "-U" sql-user) params))) | 2554 (setq params (append (list "-U" sql-user) params))) |
| 1844 (if (not (string= "" sql-password)) | 2555 (if (not (string= "" sql-password)) |
| 1845 (setq params (append (list "-P" sql-password) params)) | 2556 (setq params (append (list "-P" sql-password) params)) |
| 1846 ;; If -P is passed to ISQL as the last argument without a password, | 2557 (if (string= "" sql-user) |
| 1847 ;; it's considered null. | 2558 ;; if neither user nor password is provided, use system |
| 1848 (setq params (append params (list "-P")))) | 2559 ;; credentials. |
| 1849 (set-buffer (apply 'make-comint "SQL" sql-ms-program | 2560 (setq params (append (list "-E") params)) |
| 1850 nil params))) | 2561 ;; If -P is passed to ISQL as the last argument without a |
| 1851 (setq sql-prompt-regexp "^[0-9]*>") | 2562 ;; password, it's considered null. |
| 1852 (setq sql-prompt-length 5) | 2563 (setq params (append params (list "-P"))))) |
| 1853 (setq sql-buffer (current-buffer)) | 2564 (set-buffer (apply 'make-comint "SQL" sql-ms-program |
| 1854 (sql-interactive-mode) | 2565 nil params)))) |
| 1855 (message "Login...done") | |
| 1856 (pop-to-buffer sql-buffer))) | |
| 1857 | 2566 |
| 1858 | 2567 |
| 1859 | 2568 |
| 1860 ;;;###autoload | 2569 ;;;###autoload |
| 1861 (defun sql-postgres () | 2570 (defun sql-postgres () |
| 1885 \(setq comint-output-filter-functions (append comint-output-filter-functions | 2594 \(setq comint-output-filter-functions (append comint-output-filter-functions |
| 1886 '(comint-strip-ctrl-m))) | 2595 '(comint-strip-ctrl-m))) |
| 1887 | 2596 |
| 1888 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2597 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1889 (interactive) | 2598 (interactive) |
| 1890 (if (comint-check-proc "*SQL*") | 2599 (sql-product-interactive 'postgres)) |
| 1891 (pop-to-buffer "*SQL*") | 2600 |
| 1892 (sql-get-login 'database 'server) | 2601 (defun sql-connect-postgres () |
| 1893 (message "Login...") | 2602 "Create comint buffer and connect to Postgres using the login |
| 1894 ;; username and password are ignored. Mark Stosberg suggest to add | 2603 parameters and command options." |
| 1895 ;; the database at the end. Jason Beegan suggest using --pset and | 2604 ;; username and password are ignored. Mark Stosberg suggest to add |
| 1896 ;; pager=off instead of \\o|cat. The later was the solution by | 2605 ;; the database at the end. Jason Beegan suggest using --pset and |
| 1897 ;; Gregor Zych. Jason's suggestion is the default value for | 2606 ;; pager=off instead of \\o|cat. The later was the solution by |
| 1898 ;; sql-postgres-options. | 2607 ;; Gregor Zych. Jason's suggestion is the default value for |
| 1899 (let ((params sql-postgres-options)) | 2608 ;; sql-postgres-options. |
| 1900 (if (not (string= "" sql-database)) | 2609 (let ((params sql-postgres-options)) |
| 1901 (setq params (append params (list sql-database)))) | 2610 (if (not (string= "" sql-database)) |
| 1902 (if (not (string= "" sql-server)) | 2611 (setq params (append params (list sql-database)))) |
| 1903 (setq params (append (list "-h" sql-server) params))) | 2612 (if (not (string= "" sql-server)) |
| 1904 (set-buffer (apply 'make-comint "SQL" sql-postgres-program | 2613 (setq params (append (list "-h" sql-server) params))) |
| 1905 nil params))) | 2614 (set-buffer (apply 'make-comint "SQL" sql-postgres-program |
| 1906 (setq sql-prompt-regexp "^.*> *") | 2615 nil params)))) |
| 1907 (setq sql-prompt-length 5) | |
| 1908 ;; This is a lousy hack to prevent psql from truncating it's output | |
| 1909 ;; and giving stupid warnings. If s.o. knows a way to prevent psql | |
| 1910 ;; from acting this way, then I would be very thankful to | |
| 1911 ;; incorporate this (Gregor Zych <zych@pool.informatik.rwth-aachen.de>) | |
| 1912 ;; (comint-send-string "*SQL*" "\\o \| cat\n") | |
| 1913 (setq sql-mode-font-lock-keywords sql-mode-postgres-font-lock-keywords) | |
| 1914 (setq sql-buffer (current-buffer)) | |
| 1915 (sql-interactive-mode) | |
| 1916 (message "Login...done") | |
| 1917 (pop-to-buffer sql-buffer))) | |
| 1918 | 2616 |
| 1919 | 2617 |
| 1920 | 2618 |
| 1921 ;;;###autoload | 2619 ;;;###autoload |
| 1922 (defun sql-interbase () | 2620 (defun sql-interbase () |
| 1940 The default comes from `process-coding-system-alist' and | 2638 The default comes from `process-coding-system-alist' and |
| 1941 `default-process-coding-system'. | 2639 `default-process-coding-system'. |
| 1942 | 2640 |
| 1943 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2641 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1944 (interactive) | 2642 (interactive) |
| 1945 (if (comint-check-proc "*SQL*") | 2643 (sql-product-interactive 'interbase)) |
| 1946 (pop-to-buffer "*SQL*") | 2644 |
| 1947 (sql-get-login 'user 'password 'database) | 2645 (defun sql-connect-interbase () |
| 1948 (message "Login...") | 2646 "Create comint buffer and connect to Interbase using the login |
| 1949 ;; Put all parameters to the program (if defined) in a list and call | 2647 parameters and command options." |
| 1950 ;; make-comint. | 2648 ;; Put all parameters to the program (if defined) in a list and call |
| 1951 (let ((params sql-interbase-options)) | 2649 ;; make-comint. |
| 1952 (if (not (string= "" sql-user)) | 2650 (let ((params sql-interbase-options)) |
| 1953 (setq params (append (list "-u" sql-user) params))) | 2651 (if (not (string= "" sql-user)) |
| 1954 (if (not (string= "" sql-password)) | 2652 (setq params (append (list "-u" sql-user) params))) |
| 1955 (setq params (append (list "-p" sql-password) params))) | 2653 (if (not (string= "" sql-password)) |
| 1956 (if (not (string= "" sql-database)) | 2654 (setq params (append (list "-p" sql-password) params))) |
| 1957 (setq params (cons sql-database params))); add to the front! | 2655 (if (not (string= "" sql-database)) |
| 1958 (set-buffer (apply 'make-comint "SQL" sql-interbase-program | 2656 (setq params (cons sql-database params))) ; add to the front! |
| 1959 nil params))) | 2657 (set-buffer (apply 'make-comint "SQL" sql-interbase-program |
| 1960 (setq sql-prompt-regexp "^SQL> ") | 2658 nil params)))) |
| 1961 (setq sql-prompt-length 5) | |
| 1962 (setq sql-buffer (current-buffer)) | |
| 1963 (sql-interactive-mode) | |
| 1964 (message "Login...done") | |
| 1965 (pop-to-buffer sql-buffer))) | |
| 1966 | 2659 |
| 1967 | 2660 |
| 1968 | 2661 |
| 1969 ;;;###autoload | 2662 ;;;###autoload |
| 1970 (defun sql-db2 () | 2663 (defun sql-db2 () |
| 1992 The default comes from `process-coding-system-alist' and | 2685 The default comes from `process-coding-system-alist' and |
| 1993 `default-process-coding-system'. | 2686 `default-process-coding-system'. |
| 1994 | 2687 |
| 1995 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2688 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 1996 (interactive) | 2689 (interactive) |
| 1997 (if (comint-check-proc "*SQL*") | 2690 (sql-product-interactive 'db2)) |
| 1998 (pop-to-buffer "*SQL*") | 2691 |
| 1999 (message "Login...") | 2692 (defun sql-connect-db2 () |
| 2000 ;; Put all parameters to the program (if defined) in a list and call | 2693 "Create comint buffer and connect to DB2 using the login |
| 2001 ;; make-comint. | 2694 parameters and command options." |
| 2002 (set-buffer (apply 'make-comint "SQL" sql-db2-program | 2695 ;; Put all parameters to the program (if defined) in a list and call |
| 2003 nil sql-db2-options)) | 2696 ;; make-comint. |
| 2004 (setq sql-prompt-regexp "^db2 => ") | 2697 (set-buffer (apply 'make-comint "SQL" sql-db2-program |
| 2005 (setq sql-prompt-length 7) | 2698 nil sql-db2-options)) |
| 2006 (setq sql-buffer (current-buffer)) | 2699 ;; Properly escape newlines when DB2 is interactive. |
| 2007 (sql-interactive-mode) | 2700 (setq comint-input-sender 'sql-escape-newlines-and-send)) |
| 2008 ;; Escape newlines. This must come after sql-interactive-mode | |
| 2009 ;; because all local variables will be killed, there. | |
| 2010 (setq comint-input-sender 'sql-escape-newlines-and-send) | |
| 2011 (message "Login...done") | |
| 2012 (pop-to-buffer sql-buffer))) | |
| 2013 | 2701 |
| 2014 ;;;###autoload | 2702 ;;;###autoload |
| 2015 (defun sql-linter () | 2703 (defun sql-linter () |
| 2016 "Run inl by RELEX as an inferior process. | 2704 "Run inl by RELEX as an inferior process. |
| 2017 | 2705 |
| 2032 an empty password. | 2720 an empty password. |
| 2033 | 2721 |
| 2034 The buffer is put in sql-interactive-mode, giving commands for sending | 2722 The buffer is put in sql-interactive-mode, giving commands for sending |
| 2035 input. See `sql-interactive-mode'. | 2723 input. See `sql-interactive-mode'. |
| 2036 | 2724 |
| 2037 To use LINTER font locking by default, put this line into your .emacs : | |
| 2038 (setq sql-mode-font-lock-keywords sql-mode-linter-font-lock-keywords) | |
| 2039 | |
| 2040 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" | 2725 \(Type \\[describe-mode] in the SQL buffer for a list of commands.)" |
| 2041 (interactive) | 2726 (interactive) |
| 2042 (if (comint-check-proc "*SQL*") | 2727 (sql-product-interactive 'linter)) |
| 2043 (pop-to-buffer "*SQL*") | 2728 |
| 2044 (sql-get-login 'user 'password 'database 'server) | 2729 (defun sql-connect-linter () |
| 2045 (message "Login...") | 2730 "Create comint buffer and connect to Linter using the login |
| 2046 ;; Put all parameters to the program (if defined) in a list and call | 2731 parameters and command options." |
| 2047 ;; make-comint. | 2732 ;; Put all parameters to the program (if defined) in a list and call |
| 2048 (let ((params sql-linter-options) (login nil) (old-mbx (getenv "LINTER_MBX"))) | 2733 ;; make-comint. |
| 2049 (if (not (string= "" sql-user)) | 2734 (let ((params sql-linter-options) (login nil) (old-mbx (getenv "LINTER_MBX"))) |
| 2050 (setq login (concat sql-user "/" sql-password))) | 2735 (if (not (string= "" sql-user)) |
| 2051 (setq params (append (list "-u" login) params)) | 2736 (setq login (concat sql-user "/" sql-password))) |
| 2052 (if (not (string= "" sql-server)) | 2737 (setq params (append (list "-u" login) params)) |
| 2053 (setq params (append (list "-n" sql-server) params))) | 2738 (if (not (string= "" sql-server)) |
| 2054 (if (string= "" sql-database) | 2739 (setq params (append (list "-n" sql-server) params))) |
| 2055 (setenv "LINTER_MBX" nil) | 2740 (if (string= "" sql-database) |
| 2056 (setenv "LINTER_MBX" sql-database)) | 2741 (setenv "LINTER_MBX" nil) |
| 2057 (set-buffer (apply 'make-comint "SQL" sql-linter-program nil | 2742 (setenv "LINTER_MBX" sql-database)) |
| 2058 params)) | 2743 (set-buffer (apply 'make-comint "SQL" sql-linter-program nil |
| 2059 (setenv "LINTER_MBX" old-mbx) | 2744 params)) |
| 2060 ) | 2745 (setenv "LINTER_MBX" old-mbx))) |
| 2061 (setq sql-prompt-regexp "^SQL>") | |
| 2062 (setq sql-prompt-length 4) | |
| 2063 (setq sql-buffer (current-buffer)) | |
| 2064 (sql-interactive-mode) | |
| 2065 (message "Login...done") | |
| 2066 (pop-to-buffer sql-buffer))) | |
| 2067 | 2746 |
| 2068 | 2747 |
| 2069 | 2748 |
| 2070 (provide 'sql) | 2749 (provide 'sql) |
| 2071 | 2750 |
