| 
									
										
										
										
											2019-12-03 12:03:39 +01:00
										 |  |  | CREATE TABLE persons ( | 
					
						
							|  |  |  |     id INTEGER NOT NULL PRIMARY KEY, | 
					
						
							|  |  |  |     first_name TEXT NOT NULL, | 
					
						
							|  |  |  |     last_name TEXT NOT NULL | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CREATE TABLE instruments ( | 
					
						
							|  |  |  |     id INTEGER NOT NULL PRIMARY KEY, | 
					
						
							|  |  |  |     name TEXT NOT NULL | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CREATE TABLE works ( | 
					
						
							|  |  |  |     id INTEGER NOT NULL PRIMARY KEY, | 
					
						
							|  |  |  |     composer INTEGER REFERENCES persons(id), | 
					
						
							|  |  |  |     title TEXT NOT NULL, | 
					
						
							|  |  |  |     part_of INTEGER REFERENCES works(id) ON DELETE CASCADE, | 
					
						
							| 
									
										
										
										
											2020-03-21 14:34:45 +01:00
										 |  |  |     part_index INTEGER, | 
					
						
							|  |  |  |     part_level INTEGER | 
					
						
							| 
									
										
										
										
											2019-12-03 12:03:39 +01:00
										 |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CREATE TABLE instrumentations ( | 
					
						
							|  |  |  |     work INTEGER NOT NULL REFERENCES works(id) ON DELETE CASCADE, | 
					
						
							|  |  |  |     instrument INTEGER NOT NULL REFERENCES instruments(id) ON DELETE CASCADE | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | allPersons: | 
					
						
							|  |  |  | SELECT * FROM persons ORDER BY last_name; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | personById: | 
					
						
							|  |  |  | SELECT * FROM persons WHERE id = :id LIMIT 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | allInstruments: | 
					
						
							|  |  |  | SELECT * FROM instruments ORDER BY name; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | instrumentById: | 
					
						
							|  |  |  | SELECT * FROM instruments WHERE id = :id LIMIT 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | workById: | 
					
						
							|  |  |  | SELECT * FROM works WHERE id = :id LIMIT 1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-21 14:34:45 +01:00
										 |  |  | workParts: | 
					
						
							|  |  |  | SELECT * FROM works WHERE part_of = :id ORDER BY part_index; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -- TODO: Uncomment this once https://github.com/simolus3/moor/issues/453 is fixed. | 
					
						
							|  |  |  | -- worksByComposer(:id AS INTEGER): | 
					
						
							|  |  |  | -- SELECT DISTINCT A.* FROM works A, works B ON A.id = B.part_of | 
					
						
							|  |  |  | --     WHERE A.composer = :id OR B.composer = :id; | 
					
						
							| 
									
										
										
										
											2019-12-03 12:03:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | instrumentsByWork: | 
					
						
							|  |  |  | SELECT instruments.* FROM instrumentations | 
					
						
							|  |  |  |     JOIN instruments ON instrumentations.instrument=instruments.id | 
					
						
							|  |  |  |     WHERE instrumentations.work = :workId; |