sqlshell

command module
v0.0.0-...-fd12d0f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 23, 2022 License: MIT Imports: 24 Imported by: 0

README

sqlshell

sqlshell a (better) replacement of database (DB) shell(s)

Build Go Report Card GoDoc

Introduction

Each database has its own Command Line (CLI) tool, e.g. sqlite3 for SQLite database, sqlplus for ORACLE one. All of these tools have their own syntax and behavior and sometime lack of certain features found in other tools. For instance, the sqlplus does not support proper cursor movement (it is not based on ncurses), and therefore lack of useful features such as history, in-place query editing, etc.

The sqlshell provides uniform shell for different database, and therefore it works identically regardless of underlying DB. The DB access is provided via Go sql module and can support any database throught native database libraries.

Build

To build sqlshell you'll need specific DB libraries, e.g.

  • for SQLite you do not need anything to do
  • for ORACLE please obtain ORACLE SDK and adjust accordingly oci8.pc file
  • for MySQL ...
  • for Postgress ... After that, just run make to make a build on your architecture or use make build_linux, etc. for other platforms
Usage

The sqlshell provides the following set of features:

  • full access to SQL commands
    • different output formatting options, e.g. columns, rows or json views
  • persistent history
  • uniform access to different database backend
    • currently sqlshell supports access to SQLite, MySQL, ORACLE, Postgres databases
  • full access to UNIX commands, yes you can execute your favorite UNIX command, e.g. ls or pwd or even vim :)

Here is a preview of sqlshell session:

# start from any UNIX shell
# sqlshell sqlite:///tmp/file.db

# now we are in sqlshell
sqlsh >

# any unix command is supported, e.g.
sqlsh > ls
file1 file2

# use SQL command, by default it will use pairs format which shows
# given DB record as key:value pair printed separately
sqlsh > select * from table;

id   : 1
name : value1

id   : 2
name : value2
...

# change database format
sqlsh > set format
format  : json,pairs,rows or rows:minwidth:tabwidth:padding:padchar
Example : dbformat=rows:4:16:0

# setup db output as rows data-format
sqlsh > set format=rows

# execute query
sqlsh > select * from table;
1 value1
2 value2

# show history
sqlsh > history
ls
pwd
select * from table;

# execute certain command from the history
sqlsh > !3

id   : 1
name : value1

id   : 2
name : value2

The sqlshell also adds useful index,limit commands to manage output from database. Since different DBs use different methods (in MySQL you need to use LIMIT X, Y while in ORALCE you need to wrap your SQL statement into another one to use ROWNU) we provide this function to manage this use-cases. For example, to limit your DB results to a specific range just do the following:

sqlsh > set index=10
sqlsh > set limit=100
sqlsh > select * from table;

and it will show only results within index-limit range (in this case between 10 and 100).

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL