Drizzle Client Requirements
must Must Have Items
want Want to Have Items
nice Nice to Have
Design Philosophy
- Modular Connection design. One abstract connection socket with plugin support.
Non-Functional Requirements
Database Support
- must Provide command line interface to relational database servers.
- must Ship with a libdrizzle plugin supporting Drizzle/MySQL/MariaDB servers.
- want Support for DBs not in the Drizzle/MySQL/MariaDB family through the use of a generic SQL server API and pluggable modules providing features specific to a particular server.
- want Integrate with built-in console plugin in Drizzle.
- want Support Drizzle's concurrent queries.
Connectivity
- must Support for connectivity to
- SSL/TLS connections to DB servers.
- remote TCP
- local TCP
- Unix domain sockets
- want Reconnect to servers without restarting client.
- nice Concurrent connections to more than one server (which may be running different software as well).
Error Handling
- must Die gracefully
- must Open files and connections closed cleanly.
- want Any query data still in memory should be scrubbed.
- must Provide sane return codes that have meaning.
- must Include clear documentation of return codes.
- want Provide clear error messages as much as possible.
- must Respond to signals in an appropriate manner.
User Support
- must Man page (with examples) (developed as final version of requirements)
- want Provide built in help for all commands, command line options, etc.
- want Support the ability to use external editors through the use of the users $EDITOR environment variable.
- nice Documentation on Drizzle wiki.
Admin
- must Support config file (eg .drizzlerc) that can be ignored if necessary.
- must Maintain command history (in a file too for persistence).
- want Do not retain passwords in memory after use (change from current client)
- ... except when running in batch mode.
- want Provide server administrative tools (SQL allows much of this, provide meta cmds otherwise).
- Retrieve server status (threads, memory use, queries, etc)
- Kill queries
- Threads
- Servers Change passwords Manage tables (populate tables, modify table fields, delete tables, etc)
- Replicate DBs Migrate DBs across servers
Back end
- must National Language Support (NLS) (Gettext? What is Python's facility for that?)
- must Support utf8/international character sets (the default in drizzled).
- must Batch processing of commandline or file-supplied queries
- want Show preview of changes/resulting queries before performing them (option)
Formatting
- want Variable-format terminal windows.
- want Support customized output: change separators, omit column names, vertical vs. horizontal output alignment, column type information, etc.
- want Customizable command terminators.
Interactive Functionality
- must Support Meta Commands
- want Support the current list of meta commands unless there is reason to to leave particular commands out.
- want Add meta command(s) like psql's \d.
- nice Syntax highlighting.
- nice Preliminary syntax checking (before submitting a query to server)
- want Tab completion
- This will need to be toggle-able (to accommodate tab separated fields, etc).
- Complete on tab for:
- SQL keywords
- DB names
- Table names
- Field names
Pipes
- want Pipe query answers to pager (conditional on more lines than terminal has?)
- want Redirection and piping of queries (like a normal shell).
- want Pipe to external proceses.
- want Redirect to external files.
- nice Data processing and filtering constructs.
- want Logging: ability to write out all output to a file instead of/as well as stdout.