rev 388 - in trunk: modules/DBM modules/Prosist pr

SVN User <[email protected]> Sun, 18 Apr 2004 02:19:03 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-04-18 02:19:00 -0400 (Sun, 18 Apr 2004)
New Revision: 388

Modified:
   trunk/modules/DBM/DBM.c
   trunk/modules/Prosist/Prosist.c
   trunk/modules/Prosist/Prosist.vcproj
   trunk/pr/dbm.pr
Log:
more work on prosist, changed TRUNC const to TRUNCATE 
in DBM

Modified: trunk/modules/DBM/DBM.c
===================================================================
--- trunk/modules/DBM/DBM.c	2004-04-18 05:37:25 UTC (rev 387)
+++ trunk/modules/DBM/DBM.c	2004-04-18 06:19:00 UTC (rev 388)
@@ -79,10 +79,10 @@
 MODULE_DECLARE(DB);
 MODULE_DECLARE(DBM_Exc);
 
-MODULE_CONSTANT_DECLARE(DBM, READONLY ); 
-MODULE_CONSTANT_DECLARE(DBM, READWRITE); 
-MODULE_CONSTANT_DECLARE(DBM, RWCREATE ); 
-MODULE_CONSTANT_DECLARE(DBM, RWTRUNC  ); 
+MODULE_CONSTANT_DECLARE(DBM, READONLY   ); 
+MODULE_CONSTANT_DECLARE(DBM, READWRITE  ); 
+MODULE_CONSTANT_DECLARE(DBM, RWCREATE   ); 
+MODULE_CONSTANT_DECLARE(DBM, RWTRUNCATE ); 
 
 MODULE_START(DBM)
 {
@@ -104,10 +104,10 @@
 	MODULE_ADD_TO_OBJ(DBM_Exc, DBM_OBJ, "DBMError");
 	DBM_OBJ->unclonable = TRUE;
 
-	MODULE_CONSTANT_INT(DBM, READONLY,  APR_DBM_READONLY ); // read-only access
-	MODULE_CONSTANT_INT(DBM, READWRITE, APR_DBM_READWRITE); // read-write access
-	MODULE_CONSTANT_INT(DBM, RWCREATE,  APR_DBM_RWCREATE ); // r/w, create if needed
-	MODULE_CONSTANT_INT(DBM, RWTRUNC,   APR_DBM_RWTRUNC  ); // r/w, truncate if already there
+	MODULE_CONSTANT_INT(DBM, READONLY,   APR_DBM_READONLY  ); // read-only access
+	MODULE_CONSTANT_INT(DBM, READWRITE,  APR_DBM_READWRITE ); // read-write access
+	MODULE_CONSTANT_INT(DBM, RWCREATE,   APR_DBM_RWCREATE  ); // r/w, create if needed
+	MODULE_CONSTANT_INT(DBM, RWTRUNCATE, APR_DBM_RWTRUNC   ); // r/w, truncate if already there
 }
 
 DEF( DB, getNames, FPARM2( name,  NULL, 
@@ -306,4 +306,6 @@
 	MODULE_ADD_SYM(DB, close);
 	MODULE_ADD_SYM(DB, closed_QUES);
 	MODULE_ADD_SYM(DB, __objList__);
+
+	check_exceptions(ist);
 }
Modified: trunk/modules/Prosist/Prosist.c
===================================================================
--- trunk/modules/Prosist/Prosist.c	2004-04-18 05:37:25 UTC (rev 387)
+++ trunk/modules/Prosist/Prosist.c	2004-04-18 06:19:00 UTC (rev 388)
@@ -53,60 +53,23 @@
 
 // Prosist.c - peristant Prothon db
 
-#include <stdio.h>
-#include <string.h>
 #include <prothon/prothon_dll.h>
 
-#define INITIAL_NUMBER_OF_OBJECTS  32
+#include <apr_dbm.h>
 
-typedef struct obj_map_s* obj_map_p;
+typedef apr_dbm_t* apr_dbm_p;
 
-typedef struct obj_map_s {
-	int			free;
-	obj_p		obj;
-	size_t		ofs;
-	size_t		len;
-	obj_map_p	prev;
-	obj_map_p	next;
-} obj_map_t;
 
-typedef struct {
-	apr_file_t*			stream;
-	apr_pool_t*			pool;
-	apr_thread_mutex_t*	mutex;
-	size_t				file_size;				
-	size_t				free_size;				
-	obj_map_p			free_list;
-	obj_map_p			map_list;
-} dbdata_t;
-
-typedef dbdata_t* dbdata_p;
-
-
-
-void store_object(isp ist, dbdata_p dbdatap, obj_p root_obj) {
-
-}
-
-void trans_abort(isp ist, dbdata_p dbdatap) {
-
-}
-
-void trans_commit(isp ist, dbdata_p dbdatap) {
-
-}
-
-obj_p load_object(isp ist, dbdata_p dbdatap, i64_t id) {
-	obj_p obj = NULL;
-
-	return obj;
-}
-
-
 MODULE_DECLARE(Prosist);
 MODULE_DECLARE(DB);
-MODULE_DECLARE(ProsistException);
+MODULE_DECLARE(ProsistExc);
 
+MODULE_CONSTANT_DECLARE(Prosist, READONLY ); 
+MODULE_CONSTANT_DECLARE(Prosist, READWRITE); 
+MODULE_CONSTANT_DECLARE(Prosist, RWCREATE ); 
+MODULE_CONSTANT_DECLARE(Prosist, RWTRUNCATE  ); 
+
+
 MODULE_START(Prosist)
 {
 	Prosist_OBJ = NEW_OBJ(NULL);
@@ -117,64 +80,69 @@
 	MODULE_SET_DOC(DB, "Prosist.DB database object prototype");
 	MODULE_ADD_TO_OBJ(DB, Prosist_OBJ, "DB");
 
-	ProsistException_OBJ = NEW_OBJ(OBJ(EXCEPTION));
-	MODULE_SET_DOC(ProsistException, "Re module error");
-	MODULE_ADD_TO_OBJ(ProsistException, Prosist_OBJ, "ProsistException");
+	ProsistExc_OBJ = NEW_OBJ(OBJ(EXCEPTION));
+	MODULE_SET_DOC(ProsistExc, "Prosist module error");
+	MODULE_ADD_TO_OBJ(ProsistExc, Prosist_OBJ, "ProsistException");
 
 	DB_OBJ->unclonable = TRUE;
 	set_obj_rdacc(DB_OBJ, ACC_USER1);
+	
+	MODULE_CONSTANT_INT(Prosist, READONLY,   APR_DBM_READONLY ); // read-only access
+	MODULE_CONSTANT_INT(Prosist, READWRITE,  APR_DBM_READWRITE); // read-write access
+	MODULE_CONSTANT_INT(Prosist, RWCREATE,   APR_DBM_RWCREATE ); // r/w, create if needed
+	MODULE_CONSTANT_INT(Prosist, RWTRUNCATE, APR_DBM_RWTRUNC  ); // r/w, truncate if already there
 }
 
-DEF( DB, __init__, list6(ist, sym(ist, "filename"),  NULL, 
-			                  sym(ist, "root"),      OBJ(NONE),
-							  sym(ist, "overwrite"), OBJ(PR_FALSE) ) ) {
-	char* filename;
-    obj_p root_obj;
-	int overwrite = FALSE;
-	apr_int32_t flags;
-	apr_status_t aprerr;
-	dbdata_p dbdatap;
+DEF( DB, __init__, FPARM4( name,  NULL, 
+                           root,  OBJ(NONE), 
+                           mode,  Prosist_RWCREATE, 
+                           uperm, NEW_INT(APR_UREAD|APR_UWRITE) ) ) {
 
-	CHECK_TYPE_EXC(parms[1], OBJ(STRING_PROTO), "string");
-	filename = pr_strptr(parms[1]);
+	apr_status_t aprerr;
+	apr_pool_t* cntxt;
+	apr_dbm_p db;
+	char *name;
+    obj_p root_obj;
+    int mode, uperm;
+	
+	STRING_PARAM(1, name);
 	root_obj = parms[3];
-	if (parms[5] == OBJ(PR_TRUE)) overwrite = TRUE;
+	INT_32_PARAM(3, mode);
+	INT_32_PARAM(4, uperm);
 
-	self->data_type = DATA_TYPE_DATAPTR;
-	dbdatap = self->data.ptr = pr_malloc(sizeof(dbdata_t));
+	aprerr = apr_pool_create(&cntxt, get_pr_head_pool());
+	IF_APR_ERR("out of memory opening Prosist database") return NULL;
 
-	//dbdatap->obj_map = new_dict_obj(ist, INITIAL_NUMBER_OF_OBJECTS);
+	aprerr = apr_dbm_open_ex(&db, "SDBM", name, mode, uperm, cntxt);  
+	IF_APR_ERR("opening Prosist database") return NULL;
 
-	aprerr = apr_pool_create(&(dbdatap->pool), get_pr_head_pool());
-	IF_APR_ERR("Out of memory creating Prosist DB") return NULL;
-	flags = APR_READ | APR_WRITE | APR_BINARY;
-	if (root_obj != OBJ(NONE)) {
-		flags |= APR_CREATE;
-		if (!overwrite) flags |= APR_EXCL;
+	if (root_obj == OBJ(NONE)) {
+		if (mode == APR_DBM_RWTRUNC) {
+			raise_exception(ist, ProsistExc_OBJ, "root == None incompatible with RWTRUNC mode");
+			return NULL;
+		}
+		//root_obj = load_object(ist, dbdatap, 0);
+	} else {
+		if (mode != APR_DBM_RWCREATE && mode != APR_DBM_RWTRUNC) {
+			raise_exception(ist, ProsistExc_OBJ, "root obj given but mode doesn't allow creation");
+			return NULL;
+		}
+		//store_object(ist, dbdatap, root_obj);
 	}
-	aprerr = apr_file_open(&(dbdatap->stream), filename, flags, APR_OS_DEFAULT, dbdatap->pool);
-	if (aprerr != APR_SUCCESS) {
-		char err_buf[80];
-		raise_exception(ist, OBJ(IOEXCEPTION), "Unable to open file %s: %s",
-				filename, apr_strerror(aprerr, err_buf, sizeof(err_buf)));
-		apr_pool_destroy(dbdatap->pool);
-		return NULL;
-	}
-	if (root_obj == OBJ(NONE))
-		root_obj = load_object(ist, dbdatap, 0);
-	else
-		store_object(ist, dbdatap, root_obj);
 
 	read_unlock(ist, self);
 	set_obj_rdacc(self, ACC_USER1);
 	set_obj_doc(self, "Prosist DataBase");
 	set_attr(ist, self, sym(ist, "filename"), parms[1]);
-	set_attr(ist, self, sym(ist, "root"), root_obj);
+	set_attr(ist, self, sym(ist, "root"),     root_obj);
 	read_lock(ist, self);
 
+	self->data_type = DATA_TYPE_DATAPTR;
+	self->data.ptr  = db;
+
 	return OBJ(NONE);
 }
-
+/*
 DEF(DB, abort, NULL) {
 	dbdata_p dbdatap = self->data.ptr;
 	if (dbdatap)
@@ -205,15 +173,11 @@
 	if (self->data.ptr) return OBJ(PR_FALSE);
 	else                return OBJ(PR_TRUE);
 }
-
+*/
 MAIN_MODULE_INIT(Prosist)
 {
 	MODULE_SUB_INIT(Prosist);
 	MODULE_ADD_SYM(DB, __init__);
-	MODULE_ADD_SYM(DB, abort);
-	MODULE_ADD_SYM(DB, commit);
-	MODULE_ADD_SYM(DB, close);
-	MODULE_ADD_SYM(DB, closed_QUES);
 
 	check_exceptions(ist);
 }

Modified: trunk/modules/Prosist/Prosist.vcproj
===================================================================
--- trunk/modules/Prosist/Prosist.vcproj	2004-04-18 05:37:25 UTC (rev 387)
+++ trunk/modules/Prosist/Prosist.vcproj	2004-04-18 06:19:00 UTC (rev 388)
@@ -19,7 +19,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="c:\prothon\include;c:\prothon\apr\apr\include"
+				AdditionalIncludeDirectories="c:\prothon\include;c:\prothon\apr\apr\include;c:\prothon\apr\apr-util\include"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FILE_EXPORTS;APR_DECLARE_STATIC;APU_DECLARE_STATIC"
 				MinimalRebuild="TRUE"
 				BasicRuntimeChecks="3"
@@ -33,11 +33,11 @@
 				Name="VCCustomBuildTool"/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="apr.lib wsock32.lib"
+				AdditionalDependencies="apr.lib aprutil.lib wsock32.lib"
 				OutputFile="$(OutDir)/Prosist.dll"
 				LinkIncremental="2"
-				AdditionalLibraryDirectories="C:\prothon\apr\apr\LibR"
-				IgnoreDefaultLibraryNames="LIBCMTD.lib"
+				AdditionalLibraryDirectories="C:\prothon\apr\apr\LibR;C:\prothon\apr\apr-util\LibR"
+				IgnoreDefaultLibraryNames="LIBCMTD.LIB"
 				GenerateDebugInformation="TRUE"
 				ProgramDatabaseFile="$(OutDir)/Prosist.pdb"
 				SubSystem="2"
Modified: trunk/pr/dbm.pr
===================================================================
--- trunk/pr/dbm.pr	2004-04-18 05:37:25 UTC (rev 387)
+++ trunk/pr/dbm.pr	2004-04-18 06:19:00 UTC (rev 388)
@@ -4,7 +4,7 @@
 
 from DBM import DB
 
-db = DB("test.dbm", mode=DBM.RWTRUNC)
+db = DB("test.dbm", mode=DBM.RWTRUNCATE)
 
 if db.exists?('a'):
 	print 'err1'