rendered paste body#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/dir.h>#include <sys/param.h>#include <dbi/dbi.h>#include "library.h"#include "database.h"dbi_conn DB_conn; /* pointer to connection handler *//* Initiate database *//* * */#define DB_TABLE_SIZE 9const char DB_table[DB_TABLE_SIZE][1024] ={/* Artists Table */"CREATE TABLE Artist ( \id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY, \name VARCHAR(256), \summary TEXT, \UNIQUE (name) \) ",/* Albums Table */"CREATE TABLE Album ( \id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY, \name VARCHAR(256), \dir INTEGER UNSIGNED, \VA TINYINT UNSIGNED NOT NULL DEFAULT 0, \UNIQUE (name,dir) \) ",/* Directories Table */"CREATE TABLE Directories ( \id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY, \dir VARCHAR(256), \UNIQUE (dir))",/* Album to Artist Relationship table */"CREATE TABLE Album_Artist ( \album_id INTEGER UNSIGNED NOT NULL, \artist_id INTEGER UNSIGNED NOT NULL, \PRIMARY KEY (album_id,artist_id), \FOREIGN KEY (album_id) REFERENCES Album(id), \FOREIGN KEY (artist_id) REFERENCES Artist(id) \) ",/* Tags Table */ "CREATE TABLE Tags ( \id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, \filename VARCHAR(256), \dir INTEGER UNSIGNED NOT NULL, \album INTEGER UNSIGNED NOT NULL, \artist INTEGER UNSIGNED NOT NULL, \composer INTEGER UNSIGNED, \genre SMALLINT UNSIGNED, \title VARCHAR(256), \year SMALLINT UNSIGNED, \comment TEXT, \track SMALLINT UNSIGNED, \discnumber SMALLINT UNSIGNED, \length SMALLINT UNSIGNED, \UNIQUE (filename,dir), \FOREIGN KEY (album) REFERENCES Album(id), \FOREIGN KEY (artist) REFERENCES Artist(id), \FOREIGN KEY (dir) REFERENCES Directories(id) \) ",/* Configuration Table */"CREATE TABLE Config ( \opt VARCHAR(16) PRIMARY KEY, \sval VARCHAR(256), \ival INTEGER \)",/* Album Art */"CREATE TABLE AlbumArt ( \album_id INTEGER UNSIGNED NOT NULL PRIMARY KEY, \filename VARCHAR(256), \data MEDIUMBLOB, \FOREIGN KEY (album_id) REFERENCES Album(id), \UNIQUE (filename,album_id) \)",/* Artist Art */"CREATE TABLE ArtistArt ( \artist_id INTEGER UNSIGNED NOT NULL PRIMARY KEY, \filename VARCHAR(256), \data MEDIUMBLOB, \FOREIGN KEY (artist_id) REFERENCES Artist(id), \UNIQUE (filename,artist_id) \)",/* Similar Artists relation table */"CREATE TABLE SimilarArtist ( \artist_id INTEGER UNSIGNED NOT NULL, \sartist_id INTEGER UNSIGNED NOT NULL, \PRIMARY KEY (artist_id,sartist_id), \FOREIGN KEY (artist_id) REFERENCES Artist(id), \FOREIGN KEY (sartist_id) REFERENCES Artist(id) \)"};/* * * * * INSERT INTO Albums (Name) select Album from FP group by binary (Album) having count(Album)>1; * *//* Regular start */int DB_startup(char *user, char *pass, char *driver, char *table){ int rv,i; const char *errormsg; dbi_result result; dbi_initialize(NULL); DB_conn = dbi_conn_new(driver); dbi_conn_set_option(DB_conn,"host","localhost"); dbi_conn_set_option(DB_conn, "username",user); dbi_conn_set_option(DB_conn, "password", pass);// dbi_conn_set_option(DB_conn, "dbname", table); dbi_conn_set_option(DB_conn, "encoding", "UTF-8"); rv = dbi_conn_connect(DB_conn); if(rv){ printf("dbi_conn_connect = FAIL\n"); dbi_conn_close(DB_conn); dbi_shutdown(); return 1; } printf("Heeeelo\n"); rv = dbi_conn_error(DB_conn,&errormsg); printf("DB_init: Status %i: %s\n",rv,errormsg); /* Switch into Database */ result = dbi_conn_queryf(DB_conn,"USE %s",table); return (DB_conn) ? 0 : 1;}/* First start */int DB_init(char *user, char *pass, char *driver, char *table){ int rv,i; const char *errormsg; dbi_result result; dbi_initialize(NULL); DB_conn = dbi_conn_new(driver); dbi_conn_set_option(DB_conn,"host","localhost"); dbi_conn_set_option(DB_conn, "username",user); dbi_conn_set_option(DB_conn, "password", pass);// dbi_conn_set_option(DB_conn, "dbname", "Amatory"); dbi_conn_set_option(DB_conn, "encoding", "UTF-8"); rv = dbi_conn_connect(DB_conn); if(rv){ printf("dbi_conn_connect = FAIL\n"); dbi_conn_close(DB_conn); dbi_shutdown(); return 1; } printf("Heeeelo\n"); rv = dbi_conn_error(DB_conn,&errormsg); printf("DB_init: Status %i: %s\n",rv,errormsg); /* Create Database */ result = dbi_conn_queryf(DB_conn,"CREATE DATABASE %s",table); /* Switch into Database */ result = dbi_conn_queryf(DB_conn,"USE %s",table); /* Create Tables */ for(i=0;i<DB_TABLE_SIZE;i++){ result = dbi_conn_query(DB_conn,DB_table[i]); rv = dbi_conn_error(DB_conn,&errormsg); printf("DB_init: Table=%i %s\n",i,errormsg); } dbi_conn_close(DB_conn); dbi_shutdown(); return 0;}int DB_shutdown(){ dbi_conn_close(DB_conn); dbi_shutdown(); DB_conn = NULL;}