|  |  |  | @ -25,15 +25,19 @@ init([DatabaseFile]) -> | 
		
	
		
			
				|  |  |  |  |   end. | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | init_db(Database) -> | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, genids, [{genid, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                {type, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                {size, integer, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                {seed, integer, [not_null]}], | 
		
	
		
			
				|  |  |  |  |                             [{primary_key, [genid]}, | 
		
	
		
			
				|  |  |  |  |                              {check, "type IN ('division', 'final')"}]), | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, teams, [{name, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, genids, [{genid, text, [not_null]}], | 
		
	
		
			
				|  |  |  |  |                             [{primary_key, [genid]}]), | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, divisions, [{division, integer, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                   {prac_size, integer, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                   {prac_seed, integer, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                   {qual_size, integer, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                   {qual_seed, integer, [not_null]}], | 
		
	
		
			
				|  |  |  |  |                             [{primary_key, [division]}]), | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, teams, [{team, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                               {division, integer}, | 
		
	
		
			
				|  |  |  |  |                                               {inspection, blob}], | 
		
	
		
			
				|  |  |  |  |                             [{primary_key, [name]}]), | 
		
	
		
			
				|  |  |  |  |                             [{primary_key, [team]}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[division], divisions, [division], "ON DELETE RESTRICT"}}]), | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, matches, [{genid, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                 {round, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                 {number, integer, [not_null]}, | 
		
	
	
		
			
				
					|  |  |  | @ -44,11 +48,10 @@ init_db(Database) -> | 
		
	
		
			
				|  |  |  |  |                             [{primary_key, [genid, round, number]}, | 
		
	
		
			
				|  |  |  |  |                              {check, "round IN ('practice', 'qualification', 'elimination', 'final')"}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[genid], genids, [genid], "ON DELETE RESTRICT"}}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[blue_1], teams, [name], "ON DELETE RESTRICT"}}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[blue_2], teams, [name], "ON DELETE RESTRICT"}}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[red_1], teams, [name], "ON DELETE RESTRICT"}}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[red_2], teams, [name], "ON DELETE RESTRICT"}}]), | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[blue_1], teams, [team], "ON DELETE RESTRICT"}}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[blue_2], teams, [team], "ON DELETE RESTRICT"}}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[red_1], teams, [team], "ON DELETE RESTRICT"}}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[red_2], teams, [team], "ON DELETE RESTRICT"}}]), | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, match_scores, [{genid, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                      {round, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                      {number, integer, [not_null]}, | 
		
	
	
		
			
				
					|  |  |  | @ -67,21 +70,22 @@ init_db(Database) -> | 
		
	
		
			
				|  |  |  |  |   ok = sqlite3:create_table(Database, skills_scores, [{team, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                       {type, text, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                       {attempt, integer, [not_null]}, | 
		
	
		
			
				|  |  |  |  |                                                       {score, blob, [not_null]}], | 
		
	
		
			
				|  |  |  |  |                                                       {score, blob}], | 
		
	
		
			
				|  |  |  |  |                             [{primary_key, [team, type, attempt]}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[team], teams, [name], "ON DELETE CASCADE"}}]), | 
		
	
		
			
				|  |  |  |  |                              {check, "type IN ('driver', 'autonomous')"}, | 
		
	
		
			
				|  |  |  |  |                              {foreign_key, {[team], teams, [team], "ON DELETE CASCADE"}}]), | 
		
	
		
			
				|  |  |  |  |   ok. | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | delete_teams(Database, Teams) -> | 
		
	
		
			
				|  |  |  |  |   SQL = lists:append(["BEGIN; ", | 
		
	
		
			
				|  |  |  |  |                       lists:append([io_lib:format("DELETE FROM teams WHERE name = ~p; ", | 
		
	
		
			
				|  |  |  |  |                       lists:append([io_lib:format("DELETE FROM teams WHERE team = ~p; ", | 
		
	
		
			
				|  |  |  |  |                                                   [Team]) || Team <- Teams]), | 
		
	
		
			
				|  |  |  |  |                       "COMMIT;"]), | 
		
	
		
			
				|  |  |  |  |   first_error(sqlite3:sql_exec_script(Database, SQL)). | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | add_teams(Database, Teams) -> | 
		
	
		
			
				|  |  |  |  |   SQL = lists:append(["BEGIN; ", | 
		
	
		
			
				|  |  |  |  |                       lists:append([io_lib:format("INSERT INTO teams(name) VALUES('~s') ON CONFLICT(name) DO NOTHING; ", | 
		
	
		
			
				|  |  |  |  |                       lists:append([io_lib:format("INSERT INTO teams(team) VALUES('~s') ON CONFLICT(team) DO NOTHING; ", | 
		
	
		
			
				|  |  |  |  |                                                   [Team]) || Team <- Teams]), | 
		
	
		
			
				|  |  |  |  |                       "COMMIT;"]), | 
		
	
		
			
				|  |  |  |  |   first_error(sqlite3:sql_exec_script(Database, SQL)). | 
		
	
	
		
			
				
					|  |  |  | 
 |