Giter Site home page Giter Site logo

sqlbless's Introduction

SQL-Bless

<English> / <Japanese>

The SQL-Bless is a command-line database client like SQL*Plus or psql.

  • Emacs-like keybindings for inline editing of multiple lines of SQL.
    • The action of Enter key will only insert a line feed code.
    • Press Ctrl-J or Ctrl-Enter to execute the input.
  • Save the result of SELECT in CSV format
  • Supported RDBMS
    • SQLite3
    • Oracle
    • PostgreSQL
    • Microsoft SQL Server
    • MySQL
  • Allows editing database records directly, similar to a spreadsheet (with the EDIT command)
  • Auto commit is disabled.

image

Video by @emisjerry

Key Binding
Enter, Ctrl-M Insert a linefeed
Ctrl-Enter/J or ;+Enter1 Execute SQL
Ctrl-F/B Move Cursor forward or backward
Ctrl-N/P Move Cursor or refer history
Ctrl-C Exit with rollback
Ctrl-D Delete character or submit EOF (exit with rollback)
ALT-P, Ctrl-Up, PageUp Insert the previous SQL (history)
ALT-N, Ctrl-Down, PageDown Insert the next SQL (history)

Supported commands

  • SELECT / INSERT / UPDATE / DELETE

    • INSERT, UPDATE and DELETE begin the transaction automatically.
  • COMMIT / ROLLBACK

  • SPOOL

    • spool FILENAME .. open FILENAME and write log and output.
    • spool off .. stop spooling and close.
  • EXIT / QUIT

    • Rollback a transaction and exit SQL-Bless.
  • START filename

    • Start the SQL script given with filename
  • REM comments

  • DESC [tablename] / \D [tablename]

    • When the tablename is given, show the specification of the the table
    • Without the tablename, show the list of tables.
  • HISTORY

    • Show the history of input SQLs
  • EDIT tablename [WHERE conditions...]

    • Start an editor to modify the selected records of the table.
    • In the editor, these keys are bound.
      • x or d: set NULL to the current cell
      • c: apply changes
      • q or ESC: quit without applying changes
    • Because the EDIT statement automatically generates SQL from data changed in the editor, it may not be able to properly represent SQL data for special types specific to individual databases. If you find it, we would appreciate it if you could contact us.
  • ; (or the string specified with -term string) is a statement seperator when script is executed

  • When sql is input interactively, terminator string (; or the string specified with -term string) is ignored

Example of a spooled file

# (2023-04-17 22:52:16)
# select *
#   from tab
#  where rownum < 5
TNAME,TABTYPE,CLUSTERID
AQ$_INTERNET_AGENTS,TABLE,<NULL>
AQ$_INTERNET_AGENT_PRIVS,TABLE,<NULL>
AQ$_KEY_SHARD_MAP,TABLE,<NULL>
AQ$_QUEUES,TABLE,<NULL>
# (2023-04-17 22:52:20)
# history
0,2023-04-17 22:52:05,spool hoge
1,2023-04-17 22:52:16,"select *
  from tab
 where rownum < 5"
2,2023-04-17 22:52:20,history

Install

Download the binary package from Releases and extract the executable.

via Scoop-installer (Windows)

scoop install https://raw.githubusercontent.com/hymkor/sqlbless/master/sqlbless.json

or

scoop bucket add hymkor https://github.com/hymkor/scoop-bucket
scoop install sqlbless

Installing via Go

go install github.com/hymkor/sqlbless@latest

How to start

$ sqlbless {options} [DRIVERNAME] DATASOURCENAME

DRIVERNAME can be omitted when DATASOURCENAME contains DRIVERNAME.

SQLite3

$ sqlbless sqlite3 :memory:
$ sqlbless sqlite3 path/to/file.db

Oracle

$ sqlbless oracle oracle://USERNAME:PASSWORD@HOSTNAME:PORT/SERVICE
$ sqlbless oracle://USERNAME:PASSWORD@HOSTNAME:PORT/SERVICE

PostgreSQL

$ sqlbless postgres host=127.0.0.1 port=5555 user=USERNAME password=PASSWORD dbname=DBNAME sslmode=disable
$ sqlbless postgres postgres://USERNAME:[email protected]:5555/DBNAME?sslmode=verify-full
$ sqlbless postgres://USERNAME:[email protected]:5555/DBNAME?sslmode=verify-full

SQL Server

$ sqlbless sqlserver sqlserver://@localhost?database=master
$ sqlbless sqlserver://@localhost?database=master
( Windows authentication )

MySQL

$ sqlbless.exe mysql user:password@/database

Common Options

  • -crlf
    • Use CRLF
  • -fs string
    • Set a field separator (default ",")
  • -null string
    • Set a string representing NULL (default "<NULL>")
  • -tsv
    • Use TAB as seperator
  • -f string
    • Start the script
  • -submit-enter
    • Submit by [Enter] and insert a new line by [Ctrl]-[Enter]
  • -debug
    • Print type-information in the header of SELECT and EDIT
  • -help
    • Help

Footnotes

  1. ; or the string specfied with the option -term string โ†ฉ

sqlbless's People

Contributors

hymkor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

isgasho

sqlbless's Issues

[FR] List all tables command

Could you add a command to list all tables in the database?
For example, we can use ".tables" in sqlite3.exe to list all the tables.

For now, i use the following SQL statements to list tables:

  • SQL Server: select name from sysobjects where xtype='U';
  • SQlite3: SELECT name FROM sqlite_master WHERE type='table';

It would be nice if the command to display the column structure was also available. Such as Oracle's "describe" command.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.