xml_index.c
text/plain
Filename: xml_index.c
Type: text/plain
Part: 2
#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);
}
*/