#include "xml_index.h"

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

int open_env(DB_ENV* env,int envflags,char *data_dir,char *env_home){
	int retval=db_env_create(&env,0);
	if(retval != 0){
		printf("Error creating DB_ENV handle: err: %d\n",
				retval);
		return -1;
	}
	env->set_errpfx(env, "error");
	env->set_data_dir(env, data_dir);								//access violation
	env->set_cachesize(env, 0, 5000000, 1);

	retval = env->open(env, env_home, envflags, 0);
	if(retval != 0)
	{
	  env->err(env, retval,
			  "Error opening the environment");
	  env->close(env, 0);
	  return -1;
	}
	env->set_flags(env, DB_LOG_AUTO_REMOVE, 1);
	return 0;
}

int open_db(DB *db,DB_ENV *env,int dbflags,char *relation_name){
	int retval=db_create(&db,env,0);
	db->set_errpfx(db,"error in open db");

	retval=db->open(db,NULL,relation_name,NULL,DB_BTREE,dbflags,0);	//access violation
	if(retval != 0)
    {
        db->err(db, retval,
                       "Error opening person_db");
        return -1;
    }
	return 0;
}

PG_FUNCTION_INFO_V1(create_xml_value_index);

Datum 
create_xml_value_index(PG_FUNCTION_ARGS)
{
	char*	data_dir_value = "C:\\Program Files\\PostgreSQL\\8.3\\data\\xml_index\\value";
	char*	env_value = "C:\\Program Files\\PostgreSQL\\8.3\\data\\xml_index\\value";

	char* primary_key = GET_STR(PG_GETARG_TEXT_P(0));
	char* xml_column = GET_STR(PG_GETARG_TEXT_P(1));
	char* relation_name = GET_STR(PG_GETARG_TEXT_P(2));

	int envflags =  DB_CREATE | DB_INIT_LOCK | 
					DB_INIT_LOG | DB_INIT_MPOOL | 
					DB_INIT_TXN | DB_RECOVER;
	int dbflags = DB_CREATE | DB_AUTO_COMMIT;

	
	DB *db;
	DB_ENV *env;
	
	//just test bdb in PG
	if(open_env(env,envflags,data_dir_value,env_value))
		PG_RETURN_BOOL(false);
	if(open_db(db,env,dbflags,relation_name))
		PG_RETURN_BOOL(false);
	PG_RETURN_BOOL(true);
}

/*
Datum
search_xml_value_index(PG_FUNCTION_ARGS)
{
	PG_RETURN_BOOL(true);
}
*/