mirror of
				https://github.com/johrpan/musicus.git
				synced 2025-10-26 11:47:25 +01:00 
			
		
		
		
	library: Format SQL queries
This commit is contained in:
		
							parent
							
								
									e2b59c6c11
								
							
						
					
					
						commit
						0d0d8e668f
					
				
					 1 changed files with 144 additions and 27 deletions
				
			
		
							
								
								
									
										171
									
								
								src/library.rs
									
										
									
									
									
								
							
							
						
						
									
										171
									
								
								src/library.rs
									
										
									
									
									
								
							|  | @ -57,16 +57,30 @@ impl MusicusLibrary { | ||||||
|                 work: None, |                 work: None, | ||||||
|                 .. |                 .. | ||||||
|             } => { |             } => { | ||||||
|                 let composers = self.con() |                 let composers = self | ||||||
|                     .prepare("SELECT DISTINCT persons.id, persons.first_name, persons.last_name FROM persons INNER JOIN works ON works.composer = persons.id WHERE persons.first_name LIKE ?1 OR persons.last_name LIKE ?1 LIMIT 9") |                     .con() | ||||||
|  |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM persons \ | ||||||
|  |                             JOIN works ON works.composer = persons.id \ | ||||||
|  |                         WHERE persons.first_name LIKE ?1 OR persons.last_name LIKE ?1 \ | ||||||
|  |                         LIMIT 9",
 | ||||||
|  |                     ) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&search], Person::from_row) |                     .query_map([&search], Person::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .collect::<rusqlite::Result<Vec<Person>>>() |                     .collect::<rusqlite::Result<Vec<Person>>>() | ||||||
|                     .unwrap(); |                     .unwrap(); | ||||||
| 
 | 
 | ||||||
|                 let performers = self.con() |                 let performers = self | ||||||
|                     .prepare("SELECT DISTINCT persons.id, persons.first_name, persons.last_name FROM persons INNER JOIN performances ON performances.person = persons.id WHERE persons.first_name LIKE ?1 OR persons.last_name LIKE ?1 LIMIT 9") |                     .con() | ||||||
|  |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM persons \ | ||||||
|  |                             JOIN performances ON performances.person = persons.id \ | ||||||
|  |                         WHERE persons.first_name LIKE ?1 OR persons.last_name LIKE ?1 \ | ||||||
|  |                         LIMIT 9",
 | ||||||
|  |                     ) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&search], Person::from_row) |                     .query_map([&search], Person::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -84,7 +98,13 @@ impl MusicusLibrary { | ||||||
| 
 | 
 | ||||||
|                 let works = self |                 let works = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT works.id, works.title, persons.id, persons.first_name, persons.last_name FROM works INNER JOIN persons ON works.composer = persons.id WHERE title LIKE ?1 LIMIT 9") |                     .prepare( | ||||||
|  |                         "SELECT works.id, works.title, persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM works \ | ||||||
|  |                             JOIN persons ON works.composer = persons.id \ | ||||||
|  |                         WHERE title LIKE ?1 \ | ||||||
|  |                         LIMIT 9" | ||||||
|  |                     ) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&search], Work::from_row) |                     .query_map([&search], Work::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -106,8 +126,18 @@ impl MusicusLibrary { | ||||||
|                 work: None, |                 work: None, | ||||||
|                 .. |                 .. | ||||||
|             } => { |             } => { | ||||||
|                 let performers = self.con() |                 let performers = self | ||||||
|                     .prepare("SELECT DISTINCT persons.id, persons.first_name, persons.last_name FROM persons INNER JOIN performances ON performances.person = persons.id INNER JOIN recordings ON recordings.id = performances.recording INNER JOIN works ON works.id = recordings.work WHERE works.composer IS ?1 AND (persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) LIMIT 9") |                     .con() | ||||||
|  |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM persons \ | ||||||
|  |                             JOIN performances ON performances.person = persons.id \ | ||||||
|  |                             JOIN recordings ON recordings.id = performances.recording \ | ||||||
|  |                             JOIN works ON works.id = recordings.work \ | ||||||
|  |                         WHERE works.composer IS ?1 \ | ||||||
|  |                             AND (persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) \ | ||||||
|  |                         LIMIT 9",
 | ||||||
|  |                     ) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&composer.id, &search], Person::from_row) |                     .query_map([&composer.id, &search], Person::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -116,7 +146,15 @@ impl MusicusLibrary { | ||||||
| 
 | 
 | ||||||
|                 let ensembles = self |                 let ensembles = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT DISTINCT ensembles.id, ensembles.name FROM ensembles INNER JOIN performances ON performances.ensemble = ensembles.id INNER JOIN recordings ON recordings.id = performances.recording INNER JOIN works ON works.id = recordings.work WHERE works.composer IS ?1 AND ensembles.name LIKE ?2 LIMIT 9") |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT ensembles.id, ensembles.name \ | ||||||
|  |                         FROM ensembles \ | ||||||
|  |                             JOIN performances ON performances.ensemble = ensembles.id \ | ||||||
|  |                             JOIN recordings ON recordings.id = performances.recording \ | ||||||
|  |                             JOIN works ON works.id = recordings.work \ | ||||||
|  |                         WHERE works.composer IS ?1 AND ensembles.name LIKE ?2 \ | ||||||
|  |                         LIMIT 9",
 | ||||||
|  |                     ) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&composer.id, &search], Ensemble::from_row) |                     .query_map([&composer.id, &search], Ensemble::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -125,7 +163,12 @@ impl MusicusLibrary { | ||||||
| 
 | 
 | ||||||
|                 let works = self |                 let works = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT DISTINCT works.id, works.title, persons.id, persons.first_name, persons.last_name FROM works INNER JOIN persons ON works.composer = persons.id WHERE works.composer = ?1 AND title LIKE ?2 LIMIT 9") |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT works.id, works.title, persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM works \ | ||||||
|  |                             JOIN persons ON works.composer = persons.id \ | ||||||
|  |                         WHERE works.composer = ?1 AND title LIKE ?2 \ | ||||||
|  |                         LIMIT 9")
 | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&composer.id, &search], Work::from_row) |                     .query_map([&composer.id, &search], Work::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -146,8 +189,18 @@ impl MusicusLibrary { | ||||||
|                 work: None, |                 work: None, | ||||||
|                 .. |                 .. | ||||||
|             } => { |             } => { | ||||||
|                 let composers = self.con() |                 let composers = self | ||||||
|                     .prepare("SELECT DISTINCT persons.id, persons.first_name, persons.last_name FROM persons INNER JOIN works ON works.composer = persons.id INNER JOIN recordings ON recordings.work = works.id INNER JOIN performances ON performances.recording = recordings.id WHERE performances.ensemble IS ?1 AND (persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) LIMIT 9") |                     .con() | ||||||
|  |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM persons \ | ||||||
|  |                             JOIN works ON works.composer = persons.id \ | ||||||
|  |                             JOIN recordings ON recordings.work = works.id \ | ||||||
|  |                             JOIN performances ON performances.recording = recordings.id \ | ||||||
|  |                         WHERE performances.ensemble IS ?1 \ | ||||||
|  |                             AND (persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) \ | ||||||
|  |                         LIMIT 9",
 | ||||||
|  |                     ) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&ensemble.id, &search], Person::from_row) |                     .query_map([&ensemble.id, &search], Person::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -156,7 +209,15 @@ impl MusicusLibrary { | ||||||
| 
 | 
 | ||||||
|                 let recordings = self |                 let recordings = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name FROM recordings INNER JOIN works ON recordings.work = works.id INNER JOIN persons ON works.composer = persons.id INNER JOIN performances ON recordings.id = performances.recording WHERE performances.ensemble IS ?1 AND (works.title LIKE ?2 OR persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) LIMIT 9") |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM recordings \ | ||||||
|  |                             JOIN works ON recordings.work = works.id \ | ||||||
|  |                             JOIN persons ON works.composer = persons.id \ | ||||||
|  |                             JOIN performances ON recordings.id = performances.recording \ | ||||||
|  |                         WHERE performances.ensemble IS ?1 \ | ||||||
|  |                             AND (works.title LIKE ?2 OR persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) \ | ||||||
|  |                         LIMIT 9")
 | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&ensemble.id, &search], Recording::from_row) |                     .query_map([&ensemble.id, &search], Recording::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -175,8 +236,18 @@ impl MusicusLibrary { | ||||||
|                 work: None, |                 work: None, | ||||||
|                 .. |                 .. | ||||||
|             } => { |             } => { | ||||||
|                 let composers = self.con() |                 let composers = self | ||||||
|                     .prepare("SELECT DISTINCT persons.id, persons.first_name, persons.last_name FROM persons INNER JOIN works ON works.composer = persons.id INNER JOIN recordings ON recordings.work = works.id INNER JOIN performances ON performances.recording = recordings.id WHERE performances.person IS ?1 AND (persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) LIMIT 9") |                     .con() | ||||||
|  |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM persons \ | ||||||
|  |                             JOIN works ON works.composer = persons.id \ | ||||||
|  |                             JOIN recordings ON recordings.work = works.id \ | ||||||
|  |                             JOIN performances ON performances.recording = recordings.id \ | ||||||
|  |                         WHERE performances.person IS ?1 \ | ||||||
|  |                             AND (persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) \ | ||||||
|  |                         LIMIT 9",
 | ||||||
|  |                     ) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&performer.id, &search], Person::from_row) |                     .query_map([&performer.id, &search], Person::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -185,7 +256,15 @@ impl MusicusLibrary { | ||||||
| 
 | 
 | ||||||
|                 let recordings = self |                 let recordings = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name FROM recordings INNER JOIN works ON recordings.work = works.id INNER JOIN persons ON works.composer = persons.id INNER JOIN performances ON recordings.id = performances.recording WHERE performances.person IS ?1 AND (works.title LIKE ?2 OR persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) LIMIT 9") |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM recordings \ | ||||||
|  |                             JOIN works ON recordings.work = works.id \ | ||||||
|  |                             JOIN persons ON works.composer = persons.id \ | ||||||
|  |                             JOIN performances ON recordings.id = performances.recording \ | ||||||
|  |                         WHERE performances.person IS ?1 \ | ||||||
|  |                             AND (works.title LIKE ?2 OR persons.first_name LIKE ?2 OR persons.last_name LIKE ?2) \ | ||||||
|  |                         LIMIT 9")
 | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&performer.id, &search], Recording::from_row) |                     .query_map([&performer.id, &search], Recording::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -206,7 +285,16 @@ impl MusicusLibrary { | ||||||
|             } => { |             } => { | ||||||
|                 let recordings = self |                 let recordings = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name FROM recordings INNER JOIN works ON recordings.work = works.id INNER JOIN persons ON works.composer = persons.id INNER JOIN performances ON recordings.id = performances.recording WHERE works.composer IS ?1 AND performances.ensemble IS ?2 AND works.title LIKE ?3 LIMIT 9") |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM recordings \ | ||||||
|  |                             JOIN works ON recordings.work = works.id \ | ||||||
|  |                             JOIN persons ON works.composer = persons.id \ | ||||||
|  |                             JOIN performances ON recordings.id = performances.recording \ | ||||||
|  |                         WHERE works.composer IS ?1 \ | ||||||
|  |                             AND performances.ensemble IS ?2 \ | ||||||
|  |                             AND works.title LIKE ?3 \ | ||||||
|  |                         LIMIT 9")
 | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&composer.id, &ensemble.id, &search], Recording::from_row) |                     .query_map([&composer.id, &ensemble.id, &search], Recording::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -226,7 +314,16 @@ impl MusicusLibrary { | ||||||
|             } => { |             } => { | ||||||
|                 let recordings = self |                 let recordings = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name FROM recordings INNER JOIN works ON recordings.work = works.id INNER JOIN persons ON works.composer = persons.id INNER JOIN performances ON recordings.id = performances.recording WHERE works.composer IS ?1 AND performances.person IS ?2 AND works.title LIKE ?3 LIMIT 9") |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM recordings \ | ||||||
|  |                             JOIN works ON recordings.work = works.id \ | ||||||
|  |                             JOIN persons ON works.composer = persons.id \ | ||||||
|  |                             JOIN performances ON recordings.id = performances.recording \ | ||||||
|  |                         WHERE works.composer IS ?1 \ | ||||||
|  |                             AND performances.person IS ?2 \ | ||||||
|  |                             AND works.title LIKE ?3 \ | ||||||
|  |                         LIMIT 9")
 | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&composer.id, &performer.id, &search], Recording::from_row) |                     .query_map([&composer.id, &performer.id, &search], Recording::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -243,7 +340,12 @@ impl MusicusLibrary { | ||||||
|             } => { |             } => { | ||||||
|                 let recordings = self |                 let recordings = self | ||||||
|                     .con() |                     .con() | ||||||
|                     .prepare("SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name FROM recordings INNER JOIN works ON recordings.work = works.id INNER JOIN persons ON works.composer IS persons.id WHERE works.id IS ?1") |                     .prepare( | ||||||
|  |                         "SELECT DISTINCT recordings.id, works.id, works.title, persons.id, persons.first_name, persons.last_name \ | ||||||
|  |                         FROM recordings \ | ||||||
|  |                             JOIN works ON recordings.work = works.id \ | ||||||
|  |                             JOIN persons ON works.composer IS persons.id \ | ||||||
|  |                         WHERE works.id IS ?1")
 | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|                     .query_map([&work.id], Recording::from_row) |                     .query_map([&work.id], Recording::from_row) | ||||||
|                     .unwrap() |                     .unwrap() | ||||||
|  | @ -305,21 +407,36 @@ impl MusicusLibrary { | ||||||
|     pub fn performances(&self, recording: &Recording) -> Vec<String> { |     pub fn performances(&self, recording: &Recording) -> Vec<String> { | ||||||
|         let mut performances = self |         let mut performances = self | ||||||
|             .con() |             .con() | ||||||
|             .prepare("SELECT persons.id, persons.first_name, persons.last_name, instruments.id, instruments.name FROM performances INNER JOIN persons ON persons.id = performances.person LEFT JOIN instruments ON instruments.id = performances.role INNER JOIN recordings ON performances.recording = recordings.id WHERE recordings.id IS ?1") |             .prepare( | ||||||
|  |                 "SELECT persons.id, persons.first_name, persons.last_name, instruments.id, instruments.name \ | ||||||
|  |                 FROM performances \ | ||||||
|  |                     INNER JOIN persons ON persons.id = performances.person \ | ||||||
|  |                     LEFT JOIN instruments ON instruments.id = performances.role \ | ||||||
|  |                     INNER JOIN recordings ON performances.recording = recordings.id \ | ||||||
|  |                 WHERE recordings.id IS ?1")
 | ||||||
|             .unwrap() |             .unwrap() | ||||||
|             .query_map([&recording.id], Performance::from_person_row) |             .query_map([&recording.id], Performance::from_person_row) | ||||||
|             .unwrap() |             .unwrap() | ||||||
|             .collect::<rusqlite::Result<Vec<Performance>>>() |             .collect::<rusqlite::Result<Vec<Performance>>>() | ||||||
|             .unwrap(); |             .unwrap(); | ||||||
| 
 | 
 | ||||||
|         performances.append(&mut self |         performances.append( | ||||||
|             .con() |             &mut self | ||||||
|             .prepare("SELECT ensembles.id, ensembles.name, instruments.id, instruments.name FROM performances INNER JOIN ensembles ON ensembles.id = performances.ensemble LEFT JOIN instruments ON instruments.id = performances.role INNER JOIN recordings ON performances.recording = recordings.id WHERE recordings.id IS ?1") |                 .con() | ||||||
|             .unwrap() |                 .prepare( | ||||||
|             .query_map([&recording.id], Performance::from_ensemble_row) |                     "SELECT ensembles.id, ensembles.name, instruments.id, instruments.name \ | ||||||
|             .unwrap() |                 FROM performances \ | ||||||
|             .collect::<rusqlite::Result<Vec<Performance>>>() |                     INNER JOIN ensembles ON ensembles.id = performances.ensemble \ | ||||||
|             .unwrap()); |                     LEFT JOIN instruments ON instruments.id = performances.role \ | ||||||
|  |                     INNER JOIN recordings ON performances.recording = recordings.id \ | ||||||
|  |                 WHERE recordings.id IS ?1",
 | ||||||
|  |                 ) | ||||||
|  |                 .unwrap() | ||||||
|  |                 .query_map([&recording.id], Performance::from_ensemble_row) | ||||||
|  |                 .unwrap() | ||||||
|  |                 .collect::<rusqlite::Result<Vec<Performance>>>() | ||||||
|  |                 .unwrap(), | ||||||
|  |         ); | ||||||
| 
 | 
 | ||||||
|         performances |         performances | ||||||
|             .into_iter() |             .into_iter() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue