/*
	USQLiteDatabase.cpp
*/

#include "USQLiteDatabase.h"

#include "FullPath.h"

#include <stdlib.h>

int USQLiteDatabase::Callback(void *pArg, int argc, char **argv, char **columnNames)
{
	USQLiteDatabase *p = (USQLiteDatabase *)pArg;
	return p->process( argc, argv, columnNames );
}

USQLiteDatabase::USQLiteDatabase(char *path)
{
	char *msg = NULL;
	db = sqlite_open(path, 1, &msg);
}

USQLiteDatabase::USQLiteDatabase(FSSpec fss)
{
	char *msg = NULL;
	Handle p;
	short len;
	GetFullPath( fss.vRefNum,
				 fss.parID,
				 fss.name,
				 &len,
				 &p );
	HLock(p);
	db = sqlite_open(*p, 1, &msg);
	DisposeHandle(p);
}

USQLiteDatabase::~USQLiteDatabase()
{
	if( db )
		sqlite_close(db);
	db = NULL;
}

int USQLiteDatabase::exec( char *sql )
{
	int retval = 0;
	if (db) {
		char *errMsg = NULL;
		retval = sqlite_exec( db, sql, Callback, (void *)this, &errMsg );
		if( errMsg ) {
			last = errMsg;
			free(errMsg);
		}
	}
	return retval;
}

int USQLiteDatabase::exec_printf( char *sql, ... )
{
	va_list args;
	va_start( args, sql );
	char *errMsg = NULL;
	int ret = sqlite_exec_vprintf( db, sql, Callback, (void *) this, &errMsg, args);
	if( errMsg ) {
		last = errMsg;
		free(errMsg);
	}
	va_end(args);
	return ret;
}
