modify return values further

This commit is contained in:
2024-12-11 17:00:45 +01:00
parent 1344e625f1
commit 1c116092b8
3 changed files with 53 additions and 37 deletions

View File

@ -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 LANGUAGE plpgsql STRICT
AS $$ AS $$
DECLARE DECLARE
ret_value integer; ret_value integer;
temp_folder_path text;
BEGIN BEGIN
PERFORM * FROM artist_website aw PERFORM * FROM artist_website aw
WHERE aw.url = in_url; WHERE aw.url = in_url;
IF FOUND THEN IF FOUND THEN
RETURN; RAISE EXCEPTION 'url already exists';
END IF; END IF;
INSERT INTO artist_website (url) VALUES (in_url); INSERT INTO artist_website (url) VALUES (in_url);
@ -16,23 +17,23 @@ BEGIN
SELECT * INTO ret_value FROM set_artist_name(in_url); SELECT * INTO ret_value FROM set_artist_name(in_url);
IF ret_value <> 0 THEN IF ret_value <> 0 THEN
DELETE FROM artist_website WHERE url = in_url; DELETE FROM artist_website WHERE url = in_url;
RETURN; RAISE EXCEPTION 'could not set artist_name';
END IF; END IF;
SELECT * INTO ret_value FROM set_website_name(in_url); SELECT * INTO ret_value FROM set_website_name(in_url);
IF ret_value <> 0 THEN IF ret_value <> 0 THEN
DELETE FROM artist_website WHERE url = in_url; DELETE FROM artist_website WHERE url = in_url;
RETURN; RAISE EXCEPTION 'could not set website_name';
END IF; END IF;
SELECT * INTO ret_value FROM set_folder_path(in_url); SELECT * INTO ret_value FROM set_folder_path(in_url);
IF ret_value <> 0 THEN IF ret_value <> 0 THEN
DELETE FROM artist_website WHERE url = in_url; DELETE FROM artist_website WHERE url = in_url;
RETURN; RAISE EXCEPTION 'could not set folder_path';
END IF; END IF;
RETURN QUERY SELECT aw.url, aw.folder_path SELECT folder_path INTO temp_folder_path FROM artist_website WHERE url ILIKE in_url;
FROM artist_website aw
WHERE aw.url ILIKE in_url; RETURN concat(in_url, ' # ', temp_folder_path);
END; END;
$$; $$;

View File

@ -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 LANGUAGE plpgsql STRICT
AS $$ AS $$
DECLARE DECLARE
ret_value integer; ret_value integer;
temp_artist_id integer; temp_artist_id integer;
temp_folder_path text;
BEGIN BEGIN
PERFORM * FROM artist_website aw PERFORM * FROM artist_website aw
WHERE aw.url = in_url; WHERE aw.url = in_url;
IF FOUND THEN IF FOUND THEN
RETURN; RAISE EXCEPTION 'url already exists';
END IF; END IF;
PERFORM * FROM artist a PERFORM * FROM artist a
WHERE a.name = in_artist_name; WHERE a.name = in_artist_name;
IF FOUND THEN IF FOUND THEN
RETURN; RAISE EXCEPTION 'artist already exists';
END IF; END IF;
INSERT INTO artist_website (url) VALUES (in_url); INSERT INTO artist_website (url) VALUES (in_url);
@ -31,17 +32,17 @@ BEGIN
SELECT * INTO ret_value FROM set_website_name(in_url); SELECT * INTO ret_value FROM set_website_name(in_url);
IF ret_value <> 0 THEN IF ret_value <> 0 THEN
DELETE FROM artist_website WHERE url = in_url; DELETE FROM artist_website WHERE url = in_url;
RETURN; RAISE EXCEPTION 'could not set website_name';
END IF; END IF;
SELECT * INTO ret_value FROM set_folder_path(in_url); SELECT * INTO ret_value FROM set_folder_path(in_url);
IF ret_value <> 0 THEN IF ret_value <> 0 THEN
DELETE FROM artist_website WHERE url = in_url; DELETE FROM artist_website WHERE url = in_url;
RETURN; RAISE EXCEPTION 'could not set folder_path';
END IF; END IF;
RETURN QUERY SELECT aw.url, aw.folder_path SELECT folder_path INTO temp_folder_path FROM artist_website WHERE url ILIKE in_url;
FROM artist_website aw
WHERE aw.url ILIKE in_url; RETURN concat(in_url, ' # ', temp_folder_path);
END; END;
$$; $$;

View File

@ -1,6 +1,7 @@
use postgres::{Client, NoTls}; use postgres::{Client, NoTls};
use std::{ use std::{
env::args, env::args,
error::Error,
fs::{self, File}, fs::{self, File},
io::{self, BufRead, BufReader, Write}, io::{self, BufRead, BufReader, Write},
}; };
@ -189,12 +190,12 @@ fn import_file(client: &mut postgres::Client, file: Option<String>) {
continue; continue;
} }
let output = client.query_one("SELECT insert_url($1)", &[&line]).unwrap(); match client.query_one("SELECT insert_url($1);", &[&line]) {
Ok(_) => break,
let result: i32 = output.get(0); Err(_) => {
if result == 1 {
writeln!(fucked_file, "{}", line).unwrap(); writeln!(fucked_file, "{}", line).unwrap();
} }
};
} }
} }
@ -210,12 +211,19 @@ fn add_url(client: &mut postgres::Client, uri: Option<String>) {
} }
}; };
let output = client.query_one("SELECT insert_url($1);", &[&url]).unwrap(); let url: &str = url.trim();
let result: i32 = output.get(0); let output = match client.query_one("SELECT insert_url($1);", &[&url]) {
if result == 1 { Ok(val) => val,
eprintln!("Database didn\'t like your input"); 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<Vec<String>>) { fn add_artist_with_custom_name(client: &mut postgres::Client, uri_and_artist: Option<Vec<String>>) {
@ -238,17 +246,23 @@ fn add_artist_with_custom_name(client: &mut postgres::Client, uri_and_artist: Op
} }
}; };
let output = client let url: &str = url.trim();
.query_one( let artist_name: &str = artist_name.trim();
let output = match client.query_one(
"SELECT insert_url_with_custom_artist($1, $2);", "SELECT insert_url_with_custom_artist($1, $2);",
&[&url, &artist_name], &[&url, &artist_name],
) ) {
.unwrap(); Ok(val) => val,
Err(val) => {
let result: i32 = output.get(0); eprintln!("{}", val);
if result == 1 { return;
eprintln!("Database didn\'t like your input");
} }
};
let something: String = output.get(0);
println!("{}", something);
} }
fn main() { fn main() {