mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
Fill in missing code in MysqlChangesets
Summary: Add in the missing code to establish a MySQL connection to the `changesets` crate. Also add unit tests for `MysqlChangesets`. Reviewed By: jsgf Differential Revision: D7174371 fbshipit-source-id: b531c5d5efb95eeb5e39188c4d608540f0c0261f
This commit is contained in:
parent
bb8c39183e
commit
9f091474bb
14
changesets/schemas/mysql-changesets.sql
Normal file
14
changesets/schemas/mysql-changesets.sql
Normal file
@ -0,0 +1,14 @@
|
||||
CREATE TABLE changesets (
|
||||
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
||||
repo_id INTEGER NOT NULL,
|
||||
cs_id BINARY(20) NOT NULL,
|
||||
gen BIGINT NOT NULL,
|
||||
UNIQUE (repo_id, cs_id)
|
||||
);
|
||||
|
||||
CREATE TABLE csparents (
|
||||
cs_id BIGINT NOT NULL,
|
||||
parent_id BIGINT NOT NULL,
|
||||
seq INTEGER NOT NULL,
|
||||
PRIMARY KEY (cs_id, parent_id, seq)
|
||||
);
|
@ -113,9 +113,30 @@ pub struct MysqlChangesets {
|
||||
}
|
||||
|
||||
impl MysqlChangesets {
|
||||
pub fn open(_params: ConnectionParams) -> Result<Self> {
|
||||
// TODO (kulshrax) connect to MySQL, and make this async (return a Future)
|
||||
unimplemented!();
|
||||
pub fn open(params: ConnectionParams) -> Result<Self> {
|
||||
let url = params.to_diesel_url()?;
|
||||
let conn = MysqlConnection::establish(&url)?;
|
||||
Ok(Self {
|
||||
connection: Mutex::new(conn),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn create_test_db<P: AsRef<str>>(prefix: P) -> Result<Self> {
|
||||
let params = db::create_test_db(prefix)?;
|
||||
Self::create(params)
|
||||
}
|
||||
|
||||
fn create(params: ConnectionParams) -> Result<Self> {
|
||||
let changesets = Self::open(params)?;
|
||||
|
||||
let up_query = include_str!("../schemas/mysql-changesets.sql");
|
||||
changesets
|
||||
.connection
|
||||
.lock()
|
||||
.expect("lock poisoned")
|
||||
.batch_execute(&up_query)?;
|
||||
|
||||
Ok(changesets)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,8 @@ use std::sync::Arc;
|
||||
|
||||
use futures::Future;
|
||||
|
||||
use changesets::{ChangesetEntry, ChangesetInsert, Changesets, ErrorKind, SqliteChangesets};
|
||||
use changesets::{ChangesetEntry, ChangesetInsert, Changesets, ErrorKind, MysqlChangesets,
|
||||
SqliteChangesets};
|
||||
use mercurial_types_mocks::nodehash::*;
|
||||
use mercurial_types_mocks::repo::*;
|
||||
|
||||
@ -245,6 +246,18 @@ changesets_test_impl! {
|
||||
}
|
||||
}
|
||||
|
||||
changesets_test_impl! {
|
||||
mysql_test => {
|
||||
new: new_mysql,
|
||||
}
|
||||
}
|
||||
|
||||
changesets_test_impl! {
|
||||
mysql_arced_test => {
|
||||
new: new_mysql_arced,
|
||||
}
|
||||
}
|
||||
|
||||
fn new_sqlite() -> SqliteChangesets {
|
||||
let db = SqliteChangesets::in_memory().expect("Creating an in-memory SQLite database failed");
|
||||
db
|
||||
@ -253,3 +266,11 @@ fn new_sqlite() -> SqliteChangesets {
|
||||
fn new_sqlite_arced() -> Arc<Changesets> {
|
||||
Arc::new(new_sqlite())
|
||||
}
|
||||
|
||||
fn new_mysql() -> MysqlChangesets {
|
||||
MysqlChangesets::create_test_db("changesets_test").expect("Failed to create test database")
|
||||
}
|
||||
|
||||
fn new_mysql_arced() -> Arc<Changesets> {
|
||||
Arc::new(new_mysql())
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user