This commit is contained in:
djkato 2023-05-02 14:33:54 +02:00
parent eb68d42748
commit 97d7206559
8 changed files with 162 additions and 90 deletions

88
Cargo.lock generated
View file

@ -276,7 +276,7 @@ checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -293,7 +293,7 @@ checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -355,7 +355,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde",
"syn",
"syn 1.0.109",
"zbus",
"zbus_names",
"zvariant",
@ -450,7 +450,7 @@ checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -713,14 +713,11 @@ version = "0.1.0"
dependencies = [
"chrono",
"csv",
"directories",
"dotenvy",
"eframe",
"egui",
"egui_extras",
"grid",
"if_chain",
"regex",
"rfd",
"sqlx",
"tokio",
@ -771,7 +768,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
"syn",
"syn 1.0.109",
]
[[package]]
@ -788,7 +785,7 @@ checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -810,7 +807,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -823,15 +820,6 @@ dependencies = [
"crypto-common",
]
[[package]]
name = "directories"
version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210"
dependencies = [
"dirs-sys",
]
[[package]]
name = "dirs"
version = "4.0.0"
@ -1000,7 +988,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -1359,12 +1347,7 @@ dependencies = [
[[package]]
name = "grid"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0634107a3a005070dd73e27e74ecb691a94e9e5ba7829f434db7fbf73a6b5c47"
dependencies = [
"no-std-compat",
]
version = "0.9.1-alpha.0"
[[package]]
name = "gtk-sys"
@ -1777,12 +1760,6 @@ dependencies = [
"static_assertions",
]
[[package]]
name = "no-std-compat"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
[[package]]
name = "nohash-hasher"
version = "0.2.0"
@ -1886,7 +1863,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -1973,7 +1950,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -2434,9 +2411,9 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.156"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4"
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [
"serde_derive",
]
@ -2455,13 +2432,13 @@ dependencies = [
[[package]]
name = "serde_derive"
version = "1.0.156"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d"
checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 2.0.12",
]
[[package]]
@ -2472,7 +2449,7 @@ checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -2667,7 +2644,7 @@ dependencies = [
"sha2",
"sqlx-core",
"sqlx-rt",
"syn",
"syn 1.0.109",
"url",
]
@ -2728,6 +2705,17 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "system-deps"
version = "6.0.3"
@ -2780,7 +2768,7 @@ checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -2862,7 +2850,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -2932,7 +2920,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -3090,7 +3078,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
"wasm-bindgen-shared",
]
@ -3124,7 +3112,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -3320,7 +3308,7 @@ checksum = "9539b6bd3eadbd9de66c9666b22d802b833da7e996bc06896142e09854a61767"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]
[[package]]
@ -3546,7 +3534,7 @@ dependencies = [
"proc-macro2",
"quote",
"regex",
"syn",
"syn 1.0.109",
"zvariant_utils",
]
@ -3590,7 +3578,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
"zvariant_utils",
]
@ -3602,5 +3590,5 @@ checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.109",
]

View file

@ -11,14 +11,17 @@ description = "An assistant tool to easily map a CSV spreadsheets collumns to a
[dependencies]
sqlx = { version = "0.6.2", features = [ "runtime-tokio-native-tls" , "mysql" ] }
tokio = { version = "1.25.0", features = ["full"] }
dotenvy = "0.15.6"
directories = "4.0.1"
# ["rt", "io-std", "macros", "parking_lot", "sync" ]
# dotenvy = "0.15.6"
# directories = "4.0.1"
csv = "1.1.6"
egui = "0.21.0"
eframe = "0.21.0"
egui_extras = "0.21.0"
rfd = "0.11.1"
grid = "0.9.0"
regex = "1.7.1"
# need remove_row() and remove_col(), Change back once pull request accepted
grid = { path = "../grid/grid" }
# regex = "1.7.1"
chrono = "0.4.24"
if_chain = "1.0.2"
# serde = "1.0.160"

3
mysql-connect.sh Executable file
View file

@ -0,0 +1,3 @@
sudo systemctl start docker
sleep 1
sudo docker exec -e IN_DOCKER -it csql-Opencart_dummy_DB-1 /bin/bash -c "mysql -pmauFJcuf5dhRMQrjj"

View file

@ -60,8 +60,18 @@ impl BackendManger {
let mut csv_data = self.csv_data.lock().await;
try_match_headers_to_fields(&mut db_table_data, None, &mut csv_data)
}
Communication::ImportDBEntries(usize) => {
todo!()
Communication::ImportDBEntries => {
let mut db_table_data = self.db_table_data.lock().await;
let mut csv_data = self.csv_data.lock().await;
if let Some(current_working_table_i) = db_table_data.current_working_table {
if let Some(current_working_table) =
db_table_data.tables.get_mut(current_working_table_i)
{
todo!();
}
}
}
Communication::SaveCSV(path) => {
todo!()
@ -82,11 +92,13 @@ impl BackendManger {
&mut csv_data,
);
}
Communication::RemoveRow(usize) => {
todo!()
Communication::RemoveRow(i) => {
let mut csv_data = self.csv_data.lock().await;
csv_data.data.remove_row(i);
}
Communication::RemoveCol(usize) => {
todo!()
Communication::RemoveCol(i) => {
let mut csv_data = self.csv_data.lock().await;
csv_data.data.remove_col(i);
}
Communication::TryParseCol(col_index) => {
let mut csv_data = self.csv_data.lock().await;
@ -103,9 +115,48 @@ impl BackendManger {
csv_data.is_parsed = true;
}
}
Communication::StartInserting(table_index, sender, oneshot_sender) => {
Communication::StartInserting(sender, oneshot_sender) => {
let csv_data = self.csv_data.lock().await;
let db_table_data = self.db_table_data.lock().await;
let table_index = db_table_data.current_working_table.unwrap();
let table = db_table_data.tables.get(table_index).unwrap();
let trans_start =
Table::start_transaction(self.db_connection.as_mut().unwrap()).await;
sender
.send(trans_start)
.await
.unwrap_or_else(|_| println!("db- failed to send Transaction Start"));
let start_i: usize = csv_data.are_headers.into();
let res = table
.truncate_table(self.db_connection.as_mut().unwrap())
.await;
sender.send(res).await.unwrap_or_else(|_| {
println!("db - failed to send start of insert into table")
});
for i in start_i..csv_data.data.rows() {
let row: Vec<&DataEntry> = csv_data.data[i].iter().collect();
let res = table
.insert_into_table(self.db_connection.as_mut().unwrap(), row)
.await;
println!(
" | Query: {}\n > Result: {:?}",
res.query, res.result
);
sender.send(res).await.unwrap_or_else(|_| {
println!("db - failed to send end of insert into table")
});
}
oneshot_sender.send(true).unwrap_or_else(|_| {
println!("db - failed to send end of insert into table")
});
}
Communication::StartAppending(sender, oneshot_sender) => {
let csv_data = self.csv_data.lock().await;
let db_table_data = self.db_table_data.lock().await;
let table_index = db_table_data.current_working_table.unwrap();
let table = db_table_data.tables.get(table_index).unwrap();
let trans_start =
Table::start_transaction(self.db_connection.as_mut().unwrap()).await;
@ -113,7 +164,7 @@ impl BackendManger {
sender
.send(trans_start)
.await
.unwrap_or_else(|_| println!("failed to send Transaction Start"));
.unwrap_or_else(|_| println!("db- failed to send Transaction Start"));
let start_i: usize = csv_data.are_headers.into();
@ -129,11 +180,11 @@ impl BackendManger {
sender
.send(res)
.await
.unwrap_or_else(|_| println!("failed to send insert into table"));
.unwrap_or_else(|_| println!("db - failed to send append to table"));
}
oneshot_sender
.send(true)
.unwrap_or_else(|_| println!("Failed to send end of insertin transaction"));
.unwrap_or_else(|_| println!("Failed to send end of append transaction"));
}
Communication::TryCommit(sender) => {
sender
@ -243,12 +294,13 @@ pub enum Communication {
),
LoadImportFilePath(String),
GetTableDescription(usize),
ImportDBEntries(usize),
ImportDBEntries,
RemoveCol(usize),
RemoveRow(usize),
SaveCSV(String),
TryParseCol(usize),
StartInserting(usize, Sender<QueryResult>, oneshot::Sender<bool>),
StartAppending(Sender<QueryResult>, oneshot::Sender<bool>),
StartInserting(Sender<QueryResult>, oneshot::Sender<bool>),
TryCommit(oneshot::Sender<QueryResult>),
TryRollBack(oneshot::Sender<QueryResult>),
}

View file

@ -1,7 +1,7 @@
use std::{error::Error, sync::Arc};
use super::database_handler::FieldDescription;
use std::{error::Error, sync::Arc};
#[derive(Clone)]
pub struct ImportedData {
pub data: grid::Grid<DataEntry>,
@ -16,6 +16,7 @@ pub struct DataEntry {
pub curr_field_description: Option<FieldDescription>,
pub is_parsed: Option<Result<(), Arc<dyn Error + Send + Sync>>>,
}
impl ImportedData {
pub fn load_csv(&mut self) -> Result<(), Box<dyn Error + Send>> {
match csv::Reader::from_path(self.path.as_str()) {

View file

@ -116,6 +116,42 @@ impl Table {
}
}
}
pub async fn truncate_table(&self, connection: &mut MySqlConnection) -> QueryResult {
match connection
.execute(format!("truncate {}", self.name).as_str())
.await
{
Ok(res) => {
return QueryResult {
query: format!("truncate {}", self.name),
result: Ok(res),
}
}
Err(e) => {
return QueryResult {
query: format!("truncate {}", self.name),
result: Err(Box::new(e)),
}
}
}
}
pub async fn query_for_table_entries(
&mut self,
connection: &mut MySqlConnection,
) -> QueryResult {
let res = sqlx::query(format!("select * from {}", self.name).as_str())
.fetch_all(connection)
.await;
match res {
Ok(rows) => {
for row in rows {
todo!()
}
}
Err(e) => todo!(),
}
todo!();
}
pub async fn insert_into_table(
&self,
connection: &mut MySqlConnection,

View file

@ -15,13 +15,9 @@ pub struct DBTransactionWindow {
is_log_finished: bool,
is_finished: bool,
final_result_receiver: Option<oneshot::Receiver<QueryResult>>,
working_table_index: usize,
}
impl DBTransactionWindow {
pub fn default(
sender: Sender<Communication>,
working_table_index: usize,
) -> DBTransactionWindow {
pub fn default(sender: Sender<Communication>) -> DBTransactionWindow {
DBTransactionWindow {
sender,
log_history: vec![],
@ -30,7 +26,6 @@ impl DBTransactionWindow {
final_result_receiver: None,
is_log_finished_receiver: None,
is_log_finished: false,
working_table_index,
}
}
}
@ -92,11 +87,7 @@ impl DBTransactionWindow {
self.is_log_finished_receiver = Some(finished_receiver);
self.logs_receiver = Some(log_receiver);
self.sender
.try_send(Communication::StartInserting(
self.working_table_index,
log_sender,
finished_sender,
))
.try_send(Communication::StartAppending(log_sender, finished_sender))
.unwrap_or_else(|_| println!("Failed to send startInserting"));
}
}
@ -189,3 +180,9 @@ pub struct OptionsDBTransactionWindow {
substitute_zero_dates_for_null: bool,
remove_id_field_from_insert: bool,
}
pub enum TransactionType {
Append,
Save,
Import,
}

View file

@ -100,17 +100,9 @@ impl App for CSQL {
}
}
} else {
println!("No transaction window, creating...");
if let Ok(db_table_data) = self.db_table_data_handle.try_lock() {
println!("got a db_lock");
if let Some(cw_table_i) = db_table_data.current_working_table {
println!("Found a current_working _table");
self.db_transaction_window = Some(DBTransactionWindow::default(
self.sender.clone(),
cw_table_i,
))
}
};
self.db_transaction_window =
Some(DBTransactionWindow::default(self.sender.clone()))
}
}
});