diff --git a/sql/insert_url.sql b/sql/insert_url.sql index 9b9b7e9..9dfec7b 100644 --- a/sql/insert_url.sql +++ b/sql/insert_url.sql @@ -1,14 +1,15 @@ -CREATE OR REPLACE FUNCTION public.insert_url(in_url text) RETURNS TABLE (out_url text, out_website_name text) +CREATE OR REPLACE FUNCTION public.insert_url(in_url text) RETURNS text LANGUAGE plpgsql STRICT AS $$ DECLARE ret_value integer; + temp_folder_path text; BEGIN PERFORM * FROM artist_website aw WHERE aw.url = in_url; IF FOUND THEN - RETURN; + RAISE EXCEPTION 'url already exists'; END IF; INSERT INTO artist_website (url) VALUES (in_url); @@ -16,23 +17,23 @@ BEGIN SELECT * INTO ret_value FROM set_artist_name(in_url); IF ret_value <> 0 THEN DELETE FROM artist_website WHERE url = in_url; - RETURN; + RAISE EXCEPTION 'could not set artist_name'; END IF; SELECT * INTO ret_value FROM set_website_name(in_url); IF ret_value <> 0 THEN DELETE FROM artist_website WHERE url = in_url; - RETURN; + RAISE EXCEPTION 'could not set website_name'; END IF; SELECT * INTO ret_value FROM set_folder_path(in_url); IF ret_value <> 0 THEN DELETE FROM artist_website WHERE url = in_url; - RETURN; + RAISE EXCEPTION 'could not set folder_path'; END IF; - RETURN QUERY SELECT aw.url, aw.folder_path - FROM artist_website aw - WHERE aw.url ILIKE in_url; + SELECT folder_path INTO temp_folder_path FROM artist_website WHERE url ILIKE in_url; + + RETURN concat(in_url, ' # ', temp_folder_path); END; $$; diff --git a/sql/insert_url_with_custom_artist.sql b/sql/insert_url_with_custom_artist.sql index f68a725..d3e076a 100644 --- a/sql/insert_url_with_custom_artist.sql +++ b/sql/insert_url_with_custom_artist.sql @@ -1,22 +1,23 @@ -CREATE OR REPLACE FUNCTION public.insert_url_with_custom_artist(in_url text, in_artist_name text) RETURNS TABLE (out_url text, out_website_name text) +CREATE OR REPLACE FUNCTION public.insert_url_with_custom_artist(in_url text, in_artist_name text) RETURNS text LANGUAGE plpgsql STRICT AS $$ DECLARE ret_value integer; temp_artist_id integer; + temp_folder_path text; BEGIN PERFORM * FROM artist_website aw WHERE aw.url = in_url; IF FOUND THEN - RETURN; + RAISE EXCEPTION 'url already exists'; END IF; PERFORM * FROM artist a WHERE a.name = in_artist_name; IF FOUND THEN - RETURN; + RAISE EXCEPTION 'artist already exists'; END IF; INSERT INTO artist_website (url) VALUES (in_url); @@ -31,17 +32,17 @@ BEGIN SELECT * INTO ret_value FROM set_website_name(in_url); IF ret_value <> 0 THEN DELETE FROM artist_website WHERE url = in_url; - RETURN; + RAISE EXCEPTION 'could not set website_name'; END IF; SELECT * INTO ret_value FROM set_folder_path(in_url); IF ret_value <> 0 THEN DELETE FROM artist_website WHERE url = in_url; - RETURN; + RAISE EXCEPTION 'could not set folder_path'; END IF; - RETURN QUERY SELECT aw.url, aw.folder_path - FROM artist_website aw - WHERE aw.url ILIKE in_url; + SELECT folder_path INTO temp_folder_path FROM artist_website WHERE url ILIKE in_url; + + RETURN concat(in_url, ' # ', temp_folder_path); END; $$; diff --git a/src/main.rs b/src/main.rs index 309d023..8011ec7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use postgres::{Client, NoTls}; use std::{ env::args, + error::Error, fs::{self, File}, io::{self, BufRead, BufReader, Write}, }; @@ -189,12 +190,12 @@ fn import_file(client: &mut postgres::Client, file: Option) { continue; } - let output = client.query_one("SELECT insert_url($1)", &[&line]).unwrap(); - - let result: i32 = output.get(0); - if result == 1 { - writeln!(fucked_file, "{}", line).unwrap(); - } + match client.query_one("SELECT insert_url($1);", &[&line]) { + Ok(_) => break, + Err(_) => { + writeln!(fucked_file, "{}", line).unwrap(); + } + }; } } @@ -210,12 +211,19 @@ fn add_url(client: &mut postgres::Client, uri: Option) { } }; - let output = client.query_one("SELECT insert_url($1);", &[&url]).unwrap(); + let url: &str = url.trim(); - let result: i32 = output.get(0); - if result == 1 { - eprintln!("Database didn\'t like your input"); - } + let output = match client.query_one("SELECT insert_url($1);", &[&url]) { + Ok(val) => val, + Err(val) => { + eprintln!("{}", val); + return; + } + }; + + let something: String = output.get(0); + + println!("{}", something); } fn add_artist_with_custom_name(client: &mut postgres::Client, uri_and_artist: Option>) { @@ -238,17 +246,23 @@ fn add_artist_with_custom_name(client: &mut postgres::Client, uri_and_artist: Op } }; - let output = client - .query_one( - "SELECT insert_url_with_custom_artist($1, $2);", - &[&url, &artist_name], - ) - .unwrap(); + let url: &str = url.trim(); + let artist_name: &str = artist_name.trim(); - let result: i32 = output.get(0); - if result == 1 { - eprintln!("Database didn\'t like your input"); - } + let output = match client.query_one( + "SELECT insert_url_with_custom_artist($1, $2);", + &[&url, &artist_name], + ) { + Ok(val) => val, + Err(val) => { + eprintln!("{}", val); + return; + } + }; + + let something: String = output.get(0); + + println!("{}", something); } fn main() {