database 1.1.16
Lightweight native MySQL/MariaDB & PostgreSQL driver
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
database
A lightweight native MySQL/MariaDB & PostgreSQL driver written in D
The goal is a native driver that re-uses the same buffers and the stack as much as possible, avoiding unnecessary allocations and work for the garbage collector
example
import std.stdio;
import mysql;
void usedb() {
auto conn = new Connection("host=127.0.0.1;user=root;pwd=pwd;db=test");
// auto conn = new Connection("127.0.0.1", "root", "pwd", "test", 3306);
// change database
conn.use("mewmew");
// simple insert statement
execute(conn, "insert into users (name, email) values (?, ?)", "frank", "[email protected]");
auto id = conn.lastInsertId;
struct User {
string name;
string email;
}
// simple select statement
User[] users;
execute(conn, "select name, email from users where id > ?", 13, (MySQLRow row) {
users ~= row.toStruct!User;
});
// simple select statement
string[string] rows;
execute(conn, "select name, email from users where id > ?", 13, (MySQLRow row) {
rows ~= row.toAA();
});
foreach(row; rows) {
writeln(row["name"], row["email"]);
}
// batch inserter - inserts in packets of 128k bytes
auto insert = inserter(conn, "users_copy", "name", "email");
foreach(user; users)
insert.row(user.name, user.email);
insert.flush;
// re-usable prepared statements
auto upd = conn.prepare("update users set sequence = ?, login_at = ?, secret = ? where id = ?");
ubyte[] bytes = [0x4D, 0x49, 0x4C, 0x4B];
foreach(i; 0..100)
execute(conn, upd, i, Clock.currTime, MySQLBinary(bytes), i);
// passing variable or large number of arguments
string[] names;
string[] emails;
int[] ids = [1, 1, 3, 5, 8, 13];
execute(conn, "select name from users where id in " ~ ids.placeholders, ids, (MySQLRow row) {
writeln(row.name.peek!(char[])); // peek() avoids allocation - cannot use result outside delegate
names ~= row.name.get!string; // get() duplicates - safe to use result outside delegate
emails ~= row.email.get!string;
});
// another query example
execute(conn, "select id, name, email from users where id > ?", 13, (size_t index /*optional*/, MySQLHeader header /*optional*/, MySQLRow row) {
writeln(header[0].name, ": ", row.id.get!int);
return (index < 5); // optionally return false to discard remaining results
});
// structured row
execute(conn, "select name, email from users where length(name) > ?", 5, (MySQLRow row) {
auto user = row.toStruct!User; // default is strict.yesIgnoreNull - a missing field in the row will throw
// auto user = row.toStruct!(User, Strict.yes); // missing or null will throw
// auto user = row.toStruct!(User, Strict.no); // missing or null will just be ignored
writeln(user);
});
// structured row with nested structs
struct GeoRef {
double lat;
double lng;
}
struct Place {
string name;
GeoRef location;
}
execute(conn, "select name, lat as `location.lat`, lng as `location.lng` from places", (MySQLRow row) {
auto place = row.toStruct!Place;
writeln(place.location);
});
// structured row annotations
struct PlaceFull {
uint id;
string name;
@optional string thumbnail; // ok to be null or missing
@optional GeoRef location; // nested fields ok to be null or missing
@optional @as("contact_person") string contact; // optional, and sourced from field contact_person instead
@ignore File tumbnail; // completely ignored
}
execute(conn, "select id, name, thumbnail, lat as `location.lat`, lng as `location.lng`, contact_person from places", (MySQLRow row) {
auto place = row.toStruct!PlaceFull;
writeln(place.location);
});
// automated struct member uncamelcase
@uncamel struct PlaceOwner {
uint placeID; // matches placeID and place_id
uint locationId; // matches locationId and location_id
string ownerFirstName; // matches ownerFirstName and owner_first_name
string ownerLastName; // matches ownerLastName and owner_last_name
string feedURL; // matches feedURL and feed_url
}
conn.close();
}
- Registered by shove
- 1.1.16 released 5 years ago
- shove70/database
- MIT License
- Copyright © 2015, Marcio Martins, Shove
- Authors:
- Dependencies:
- none
- Versions:
-
1.2.1 2023-Oct-03 1.2.0 2023-Aug-19 1.1.28 2022-Jan-25 1.1.27 2020-Oct-14 1.1.26 2019-Dec-17 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
9 downloads this month
-
809 downloads total
-
- Score:
- 1.7
- Short URL:
- database.dub.pm