#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); } */