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

Libraries

buffer
buffered_socket
comm
common
exceptions
impl
logging
receiver
results.field
sender
settings
sqljocky
MySQL and MariaDB client for Dart.
sqljocky.auth_handler
sqljocky.binary_data_packet
sqljocky.blob
sqljocky.character_set
sqljocky.close_statement_handler
sqljocky.connection
sqljocky.constants
sqljocky.debug_handler
sqljocky.execute_query_handler
sqljocky.handler
sqljocky.handshake_handler
sqljocky.my_sql_exception
sqljocky.mysql_client_error
sqljocky.mysql_protocol_error
sqljocky.ok_packet
sqljocky.parameter_packet
sqljocky.ping_handler
sqljocky.prepare_handler
sqljocky.prepare_ok_packet
sqljocky.prepared_query
sqljocky.query_stream_handler
sqljocky.quit_handler
sqljocky.result_set_header_packet
sqljocky.results_impl
sqljocky.row
sqljocky.ssl_handler
sqljocky.standard_data_packet
sqljocky.use_db_handler