SQLJocky5
MySQL client for Dart.
Creating a connection
var s = ConnectionSettings(
user: "root",
password: "dart_jaguar",
host: "localhost",
port: 3306,
db: "example",
);
var conn = await MySqlConnection.connect(s);
Closing a connection
await conn.close();
Execute a query
Results results = await conn.execute('select name, email from users');
Results
is an iterable of Row
. Columns can be accessed from Row
using
integer index or by name.
results.forEach((Row row) {
// Access columns by index
print('Name: ${row[0]}, email: ${row[1]}');
// Access columns by name
print('Name: ${row.name}, email: ${row.email}');
});
Prepared query
await conn.prepared('insert into users (name, email, age) values (?, ?, ?)',
['Bob', 'bob@bob.com', 25]);
Insert id
An insert query's results will be empty, but will have an id if there was an auto-increment column in the table:
print("New user's id: ${result.insertId}");
Prepared multiple queries
var results = await query.preparedMulti(
'insert into users (name, email, age) values (?, ?, ?)',
[['Bob', 'bob@bob.com', 25],
['Bill', 'bill@bill.com', 26],
['Joe', 'joe@joe.com', 37]]);
Transactions
Transaction trans = await pool.begin();
try {
var result1 = await trans.execute('...');
var result2 = await trans.execute('...');
await trans.commit();
} catch(e) {
await trans.rollback();
}
Safe transaction
await pool.transaction((trans) {
var result1 = await trans.execute('...');
var result2 = await trans.execute('...');
});
TODO
- Compression
- COM_SEND_LONG_DATA
- CLIENT_MULTI_STATEMENTS and CLIENT_MULTI_RESULTS for stored procedures
- Better handling of various data types, especially BLOBs, which behave differently when using straight queries and prepared queries.
- Implement the rest of mysql's commands
- Handle character sets properly? Currently defaults to UTF8 for the connection character set. Is it necessary to support anything else?
- Improve performance where possible
- Geometry type
- Decimal type should probably use a bigdecimal type of some sort
- MySQL 4 types (old decimal, anything else?)
- Test against multiple mysql versions
Attention perform the tests in a serial way do not use concurrency dart run test --concurrency 1
Libraries
- constants
- internal/auth/auth_handler
- internal/auth/character_set
- internal/auth/handshake_handler
- internal/auth/ssl_handler
- internal/comm/buffered_socket
- internal/comm/comm
- internal/comm/common
- internal/comm/receiver
- internal/comm/sender
- internal/comm/task_queue
- internal/common/logging
- internal/connection/impl
- internal/handlers/debug_handler
- internal/handlers/handler
- internal/handlers/ok_packet
- internal/handlers/parameter_packet
- internal/handlers/ping_handler
- internal/handlers/quit_handler
- internal/handlers/use_db_handler
- internal/prepared_statement_handler/close_statement_handler
- internal/prepared_statement_handler/execute_query_handler
- internal/prepared_statement_handler/prepare_handler
- internal/prepared_statement_handler/prepare_ok_packet
- internal/prepared_statement_handler/prepared_query
- internal/query_handler/query_stream_handler
- internal/query_handler/result_set_header_packet
- internal/result_parser/binary_data_packet
- internal/result_parser/standard_data_packet
- public/connection/connection
- public/connection/settings
- public/exceptions/client_error
- public/exceptions/exceptions
- public/exceptions/mysql_exception
- public/exceptions/protocol_error
- public/results/blob
- public/results/field
- public/results/future
- public/results/results
- public/results/row
- sqljocky
- MySQL and MariaDB client for Dart.
- utils/buffer