===========
Crate Shell
===========

The crash shell provides a CLI for the Crate Server.

If the package was installed using `pip` the shell can be started by
invoking `crash` in a terminal.

`crash` by default will try to connect to `localhost:4200`. To connect to
another host use the `connect` command inside the shell or use the `--hosts`
argument when launching the shell.

When you connect to a server that is not reachable or whose hostname cannot be resolved
you will get an error::

    cr> connect 127.0.0.1:65535
    +------------------------+-----------+-----------+--------------------+
    | server_url             | node_name | connected | message            |
    +------------------------+-----------+-----------+--------------------+
    | http://127.0.0.1:65535 | NULL      | FALSE     | Connection refused |
    +------------------------+-----------+-----------+--------------------+
    CONNECT ERROR

    cr> connect null.lol:4200
    +----------------------+-----------+-----------+--------------------------------+
    | server_url           | node_name | connected | message                        |
    +----------------------+-----------+-----------+--------------------------------+
    | http://null.lol:4200 | NULL      | FALSE     | Hostname could no be resolved. |
    +----------------------+-----------+-----------+--------------------------------+
    CONNECT ERROR


Successful connects will give you some information about the servers you connect to::

    cr> connect 127.0.0.1:44209
    +------------------------+-----------+-----------+---------+
    | server_url             | node_name | connected | message |
    +------------------------+-----------+-----------+---------+
    | http://127.0.0.1:44209 | crate     | TRUE      | OK      |
    +------------------------+-----------+-----------+---------+
    CONNECT OK

If you connect to more than one server, the command will succeed
if at least one server is reachable::

    cr> CONNECT 127.0.0.1:44209 null.lol:4295
    +------------------------+-----------+-----------+--------------------------------+
    | server_url             | node_name | connected | message                        |
    +------------------------+-----------+-----------+--------------------------------+
    | http://127.0.0.1:44209 | crate     | TRUE      | OK                             |
    | http://null.lol:4295   | NULL      | FALSE     | Hostname could no be resolved. |
    +------------------------+-----------+-----------+--------------------------------+
    CONNECT OK

Once the shell is connected, SQL statements can be executed simply by entering
them without any special arguments like this::

    cr> SELECT schema_name, table_name from information_schema.tables
    ... order by table_name
    +--------------------+-------------------+
    | schema_name        | table_name        |
    +--------------------+-------------------+
    | sys                | cluster           |
    | information_schema | columns           |
    | sys                | nodes             |
    | sys                | shards            |
    | information_schema | table_constraints |
    | information_schema | tables            |
    +--------------------+-------------------+
    SELECT 6 rows in set (... sec)
