repo/sqlite: add base schema

This commit is contained in:
Dmitriy Pleshevskiy 2022-08-16 23:36:50 +03:00
parent 96a80f9b35
commit 1fd49b8664
Signed by: pleshevskiy
GPG key ID: 1B59187B161C0215
7 changed files with 202 additions and 2 deletions

85
Cargo.lock generated
View file

@ -2,6 +2,17 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "ahash"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
dependencies = [
"getrandom",
"once_cell",
"version_check",
]
[[package]]
name = "autocfg"
version = "1.1.0"
@ -14,6 +25,12 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cc"
version = "1.0.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
[[package]]
name = "cfg-if"
version = "1.0.0"
@ -76,6 +93,18 @@ dependencies = [
"winapi",
]
[[package]]
name = "fallible-iterator"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
[[package]]
name = "fallible-streaming-iterator"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
[[package]]
name = "getrandom"
version = "0.2.7"
@ -92,6 +121,18 @@ name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
dependencies = [
"ahash",
]
[[package]]
name = "hashlink"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d452c155cb93fecdfb02a73dd57b5d8e442c2063bd7aac72f1bc5e4263a43086"
dependencies = [
"hashbrown",
]
[[package]]
name = "heck"
@ -121,6 +162,17 @@ version = "0.2.127"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "505e71a4706fa491e9b1b55f51b95d4037d0821ee40131190475f692b35b009b"
[[package]]
name = "libsqlite3-sys"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f0455f2c1bc9a7caa792907026e469c1d91761fb0ea37cbb16427c77280cf35"
dependencies = [
"cc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "log"
version = "0.4.17"
@ -142,6 +194,12 @@ version = "6.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4"
[[package]]
name = "pkg-config"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
[[package]]
name = "proc-macro-error"
version = "1.0.4"
@ -204,6 +262,20 @@ dependencies = [
"thiserror",
]
[[package]]
name = "rusqlite"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
dependencies = [
"bitflags",
"fallible-iterator",
"fallible-streaming-iterator",
"hashlink",
"libsqlite3-sys",
"smallvec",
]
[[package]]
name = "ryu"
version = "1.0.11"
@ -241,6 +313,12 @@ dependencies = [
"serde",
]
[[package]]
name = "smallvec"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
[[package]]
name = "syn"
version = "1.0.99"
@ -258,6 +336,7 @@ version = "0.1.0"
dependencies = [
"clap",
"log",
"rusqlite",
"serde",
"serde_json",
"xdg",
@ -295,6 +374,12 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
[[package]]
name = "vcpkg"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "version_check"
version = "0.9.4"

View file

@ -12,6 +12,7 @@ maintenance = { status = "experimental" }
[dependencies]
clap = { version = "3.2.16", default-features = false, features = ["derive", "std"] }
log = "0.4.17"
rusqlite = { version = "0.28.0", features = ["bundled"] }
serde = { version = "1.0.142", features = ["derive"] }
serde_json = "1.0.83"
xdg = "2.4.1"

View file

@ -27,7 +27,7 @@
//---------------------------------------------------------------------
use clap::Parser;
use repo::fs::FsRepo;
use repo::sqlite::SqliteRepo;
use xdg::BaseDirectories;
mod cli;
@ -38,7 +38,10 @@ fn main() {
let args = cli::Args::parse();
let xdg_dirs = BaseDirectories::with_prefix(env!("CARGO_PKG_NAME")).unwrap();
let repo = FsRepo::new(xdg_dirs);
let repo = match SqliteRepo::new(xdg_dirs) {
Ok(repo) => repo,
Err(err) => return eprintln!("Cannot connect to repository: {}", err),
};
match args.command {
cli::SubCommand::Add(args) => {

View file

@ -14,6 +14,7 @@
//! along with tas. If not, see <https://www.gnu.org/licenses/>.
//!
pub mod fs;
pub mod sqlite;
use std::path::PathBuf;
@ -21,6 +22,7 @@ use crate::domain;
#[derive(Debug)]
pub enum Error {
Connect,
NotFound,
InvalidData,
InsertData,

60
src/repo/sqlite.rs Normal file
View file

@ -0,0 +1,60 @@
use rusqlite::Connection;
use xdg::BaseDirectories;
use crate::domain;
use crate::repo::{Error, Repository};
const SCHEMA_FILE: &str = "schema.sql";
pub struct SqliteRepo {
conn: Connection,
}
impl SqliteRepo {
pub fn new(xdg_dirs: BaseDirectories) -> Result<Self, Error> {
let file_path = xdg_dirs.get_data_file(SCHEMA_FILE);
let conn = Connection::open(file_path).map_err(|_| Error::Connect)?;
Ok(Self { conn })
}
}
impl Repository for SqliteRepo {
fn get_current_task_opt(&self) -> Result<Option<domain::CurrentTaskInfo>, Error> {
todo!()
}
fn get_task_opt(&self, id: domain::TaskId) -> Result<Option<domain::Task>, Error> {
todo!()
}
fn get_tasks(&self) -> Result<Vec<domain::Task>, Error> {
todo!()
}
fn remove_task(&self, id: domain::TaskId) -> Result<domain::Task, Error> {
todo!()
}
fn insert_task(&self, insert_data: super::InsertTaskData) -> Result<domain::Task, Error> {
todo!()
}
fn update_task(
&self,
id: domain::TaskId,
update_data: super::UpdateTaskData,
) -> Result<domain::Task, Error> {
todo!()
}
fn start_task(&self, id: domain::TaskId) -> Result<domain::Task, Error> {
todo!()
}
fn stop_task(&self) -> Result<domain::Task, Error> {
todo!()
}
fn finish_task(&self) -> Result<domain::Task, Error> {
todo!()
}
}

View file

@ -0,0 +1,25 @@
CREATE TABLE _tas_info (
version INTEGER PRIMARY KEY
);
CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
group TEXT NULL,
link TEXT NULL,
path TEXT NULL,
current BOOLEAN NOT NULL DEFAULT false,
created_at DATETIME NOT NULL DEFAULT datetime('now'),
finished_at DATETIME NULL
);
CREATE VIEW active_tasks AS (
SELECT *
FROM tasks
WHERE finished_at IS NULL
ORDER BY created_at
);

View file

@ -0,0 +1,24 @@
CREATE TABLE _tas_info (
version INTEGER PRIMARY KEY
);
CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
group TEXT NULL,
link TEXT NULL,
path TEXT NULL,
current BOOLEAN NOT NULL DEFAULT false,
created_at DATETIME NOT NULL DEFAULT datetime('now'),
finished_at DATETIME NULL
);
CREATE VIEW active_tasks AS (
SELECT *
FROM tasks
WHERE finished_at IS NULL
ORDER BY created_at
);