All pastes #1736996 Raw Edit

C

public c v1 · immutable
#1736996 ·published 2010-01-04 03:08 UTC
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;}