This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+lang/sql/README.org

137 lines
5.3 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: SQL layer
[[file:img/sql.png]]
* Table of Contents :TOC_4_gh:noexport:
- [[#description][Description]]
- [[#features][Features:]]
- [[#install][Install]]
- [[#sql-keywords-capitalization][SQL Keywords Capitalization]]
- [[#sql-interactive-mode][SQL Interactive Mode]]
- [[#blacklisting-keywords][Blacklisting keywords]]
- [[#auto-indent][Auto-Indent]]
- [[#key-bindings][Key bindings]]
- [[#highlighting][Highlighting]]
- [[#inferior-process-interactions-sqli][Inferior Process Interactions (SQLi)]]
- [[#send-sql-queries-to-sqli][Send SQL queries to SQLi:]]
- [[#sqli-buffer][SQLi buffer]]
- [[#code-formatting][Code Formatting]]
* Description
This layer adds support for a wide range of SQL dialects to Spacemacs.
** Features:
- Syntax highlighting for the following SQL dialects
- ANSI
- DB2
- Informix
- Ingres
- Interbase
- Linter
- Microsoft
- MySQL
- Oracle
- Postgres
- Solid
- SQLite
- Sybase
- Vertica
- Syntax-checking via [[https://github.com/purcell/sqlint][sqlint]] for ANSI SQL.
- Snippet insertion for the more general SQL constructs.
- REPL support via =SQLi= buffer.
- Automatic capitalization of keywords.
* Install
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =sql= to the existing =dotspacemacs-configuration-layers= list in this
file.
For syntax-checking you also need to install [[https://www.ruby-lang.org/en/about/][ruby]] as well as =sqlint=.
#+BEGIN_SRC ruby
gem install sqlint
#+END_SRC
** SQL Keywords Capitalization
SQL, by convention, uses upper-case keywords, although lower-case works just as
well. As humans, the separation between upper-case and lower-case helps scan and
parse the code much more quickly.
To install [[https://github.com/Trevoke/sqlup-mode.el][sqlup-mode]] which enables auto capitalization in =sql mode= set the
variable =sql-capitalize-keywords= to =t=.
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers '(
(sql :variables sql-capitalize-keywords t)))
#+END_SRC
*** SQL Interactive Mode
If you want capitalization only in =sql-mode= and not in =sql-interactive-mode=
you can set the variable =sql-capitalize-keywords-disable-interactive= to =t=.
*** Blacklisting keywords
[[https://github.com/Trevoke/sqlup-mode.el][sqlup-mode]] can be configured to ignore certain keywords. For example if you use
=name= as column name it would be annoying to have it upcased. You can prevent
this behaviour by setting the variable =sql-capitalize-keywords-blacklist= to
a list with keywords to ignore, e.g.
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers '(
(sql :variables
sql-capitalize-keywords t
sql-capitalize-keywords-blacklist '("name" "varchar"))))
#+END_SRC
This layer is blacklisting =name= by default as it is a very common name for
column and NAME is non-reserved SQL keyword.
** Auto-Indent
This mode use [[https://github.com/alex-hhh/emacs-sql-indent][sql-indent]] to indent the code. You can check the packages README
to adjust the rules. If thats not what you want, you can also disable
auto-indent by setting the variable =sql-auto-indent= to =nil=.
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers '(
(sql :variables sql-auto-indent nil)))
#+END_SRC
* Key bindings
** Highlighting
| Key binding | Description |
|-------------+-----------------------------------|
| ~SPC m h k~ | select a SQL dialect to highlight |
** Inferior Process Interactions (SQLi)
| Key binding | Description |
|-------------+-----------------------------|
| ~SPC m b b~ | show the SQLi buffer name |
| ~SPC m b s~ | set the SQLi buffer |
| ~SPC m l a~ | List all objects |
| ~SPC m l t~ | list all objects in a table |
*** Send SQL queries to SQLi:
| Key binding | Description |
|-------------+---------------------------------------------------------------------------------------|
| ~SPC m s b~ | Send the whole buffer to the SQLi buffer |
| ~SPC m s B~ | Send the whole buffer to the SQLi buffer and switch to it in =insert state= |
| ~SPC m s i~ | Start the SQLi process |
| ~SPC m s f~ | Send the paragraph around point to the SQLi buffer |
| ~SPC m s F~ | Send the paragraph around point to the SQLi buffer and switch to it in =insert state= |
| ~SPC m s q~ | Prompt for a string to send to the SQLi buffer |
| ~SPC m s Q~ | Prompt for a string to send to the SQLi buffer and switch to it in =insert state= |
| ~SPC m s r~ | Send the selected region to the SQLi buffer |
| ~SPC m s R~ | Send the selected region to the SQLi buffer and switch to it in =insert state= |
** SQLi buffer
| Key binding | Description |
|-------------+--------------------------------------------------------------|
| ~SPC m b r~ | rename buffer (follow up in the SQL buffer with ~SPC m b s~) |
| ~SPC m b S~ | save the current connection |
** Code Formatting
| ~SPC m = c~ | capitalize SQL keywords in region (if capitalize is enabled) |