Index: TODO =================================================================== diff -u -rf32527e58ada02a9089fa17e2d1a99bac89f9be9 -rc9ef41c49f482a38e89f7cffc54cabf909710425 --- TODO (.../TODO) (revision f32527e58ada02a9089fa17e2d1a99bac89f9be9) +++ TODO (.../TODO) (revision c9ef41c49f482a38e89f7cffc54cabf909710425) @@ -3671,6 +3671,12 @@ argument vector. - extended regression test +- library/mongo: + * updated interface to current nx + * updated to mongo-c-driver 0.4 (current version) + * The mongo c-driver does not allow to add DBRefs, since + it refuses to accept field names with leading '$'. So we skip these + tests for the time being. TODO: Index: library/mongodb/example-nsf-gridfs.tcl =================================================================== diff -u -r2fbf1bf87402e8639e772781c5719164e7e55555 -rc9ef41c49f482a38e89f7cffc54cabf909710425 --- library/mongodb/example-nsf-gridfs.tcl (.../example-nsf-gridfs.tcl) (revision 2fbf1bf87402e8639e772781c5719164e7e55555) +++ library/mongodb/example-nsf-gridfs.tcl (.../example-nsf-gridfs.tcl) (revision c9ef41c49f482a38e89f7cffc54cabf909710425) @@ -50,7 +50,7 @@ set fn README if {[file readable $fn]} { set r [::mongo::gridfs::store_file $gridFS $fn $fn text/plain] - puts stderr r=$r + puts stderr "::mongo::gridfs::store_file returned $r" } else { puts stderr "no such file: $fn" } @@ -60,7 +60,7 @@ # of 500 bytes, and close it finally. # set f [mongo::gridfile::open $gridFS README] -puts stderr "\nOpened grid file $f" +puts stderr "\nOpened grid file '$f'" puts stderr "Metadata: [mongo::gridfile::get_metadata $f]" puts stderr "ContentLength: [mongo::gridfile::get_contentlength $f]" puts stderr "ContentType: [mongo::gridfile::get_contenttype $f]" Index: library/mongodb/example-nx-reference-many.tcl =================================================================== diff -u -ra24e1f836c3126d0a0e9467bde3a9fa8da901711 -rc9ef41c49f482a38e89f7cffc54cabf909710425 --- library/mongodb/example-nx-reference-many.tcl (.../example-nx-reference-many.tcl) (revision a24e1f836c3126d0a0e9467bde3a9fa8da901711) +++ library/mongodb/example-nx-reference-many.tcl (.../example-nx-reference-many.tcl) (revision c9ef41c49f482a38e89f7cffc54cabf909710425) @@ -98,22 +98,28 @@ :property name :property members:reference,type=::Member,0..n } +if {0} { + # + # Currently, the mongo c-driver does not allow to add DBRefs, since + # it refuses to accept field names with leading '$'. So we skip this + # version for the time being. + # + Group insert -name "grp4" \ + -members [list \ + [Member new -name gustaf] \ + [Member new -name stefan]] -Group insert -name "grp4" \ - -members [list \ - [Member new -name gustaf] \ - [Member new -name stefan]] + # Retrieve the entry from the database: + set g [Group find first -cond {name = "grp4"}] + + puts stderr "Members of group [$g name]:" + foreach m [$g members] {puts stderr "\t[$m name]"} + puts stderr "" + + puts stderr "Content of collection groups:" + Group show +} -# Retrieve the entry from the database: -set g [Group find first -cond {name = "grp4"}] - -puts stderr "Members of group [$g name]:" -foreach m [$g members] {puts stderr "\t[$m name]"} -puts stderr "" - -puts stderr "Content of collection groups:" -Group show - ###################################################################### # Output ###################################################################### Index: library/mongodb/example-nx-reference-one.tcl =================================================================== diff -u -ra24e1f836c3126d0a0e9467bde3a9fa8da901711 -rc9ef41c49f482a38e89f7cffc54cabf909710425 --- library/mongodb/example-nx-reference-one.tcl (.../example-nx-reference-one.tcl) (revision a24e1f836c3126d0a0e9467bde3a9fa8da901711) +++ library/mongodb/example-nx-reference-one.tcl (.../example-nx-reference-one.tcl) (revision c9ef41c49f482a38e89f7cffc54cabf909710425) @@ -89,15 +89,22 @@ :property user:reference,type=::User } -Post insert -title "Hello referenced World" -user [User new -name Smith] +if {0} { + # + # Currently, the mongo c-driver does not allow to add DBRefs, since + # it refuses to accept field names with leading '$'. So we skip this + # version for the time being. + # + Post insert -title "Hello referenced World" -user [User new -name Smith] -# Retrieve the entry from the database: -set p [Post find first -cond {title = "Hello referenced World"}] -puts stderr "Name of user: [[$p user] name]\n" - -puts stderr "Content of the collection groups:" -Post show - + # Retrieve the entry from the database: + set p [Post find first -cond {title = "Hello referenced World"}] + + puts stderr "Name of user: [[$p user] name]\n" + + puts stderr "Content of the collection groups:" + Post show +} ###################################################################### # Output ###################################################################### Index: library/mongodb/mongoAPI.h =================================================================== diff -u -ra08065ac227c3b26514f29392a961f11db121369 -rc9ef41c49f482a38e89f7cffc54cabf909710425 --- library/mongodb/mongoAPI.h (.../mongoAPI.h) (revision a08065ac227c3b26514f29392a961f11db121369) +++ library/mongodb/mongoAPI.h (.../mongoAPI.h) (revision c9ef41c49f482a38e89f7cffc54cabf909710425) @@ -76,7 +76,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoCloseIdx].paramDefs, - method_definitions[NsfMongoCloseIdx].nrParameters, 1, + method_definitions[NsfMongoCloseIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -95,7 +95,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoConnectIdx].paramDefs, - method_definitions[NsfMongoConnectIdx].nrParameters, 1, + method_definitions[NsfMongoConnectIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -116,7 +116,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoCountIdx].paramDefs, - method_definitions[NsfMongoCountIdx].nrParameters, 1, + method_definitions[NsfMongoCountIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -137,7 +137,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFSCloseIdx].paramDefs, - method_definitions[NsfMongoGridFSCloseIdx].nrParameters, 1, + method_definitions[NsfMongoGridFSCloseIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -156,7 +156,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFSOpenIdx].paramDefs, - method_definitions[NsfMongoGridFSOpenIdx].nrParameters, 1, + method_definitions[NsfMongoGridFSOpenIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -177,7 +177,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFSRemoveFileIdx].paramDefs, - method_definitions[NsfMongoGridFSRemoveFileIdx].nrParameters, 1, + method_definitions[NsfMongoGridFSRemoveFileIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -197,7 +197,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFSStoreFileIdx].paramDefs, - method_definitions[NsfMongoGridFSStoreFileIdx].nrParameters, 1, + method_definitions[NsfMongoGridFSStoreFileIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -219,7 +219,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFileCloseIdx].paramDefs, - method_definitions[NsfMongoGridFileCloseIdx].nrParameters, 1, + method_definitions[NsfMongoGridFileCloseIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -238,7 +238,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFileGetContentTypeIdx].paramDefs, - method_definitions[NsfMongoGridFileGetContentTypeIdx].nrParameters, 1, + method_definitions[NsfMongoGridFileGetContentTypeIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -257,7 +257,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFileGetContentlengthIdx].paramDefs, - method_definitions[NsfMongoGridFileGetContentlengthIdx].nrParameters, 1, + method_definitions[NsfMongoGridFileGetContentlengthIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -276,7 +276,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFileGetMetaDataIdx].paramDefs, - method_definitions[NsfMongoGridFileGetMetaDataIdx].nrParameters, 1, + method_definitions[NsfMongoGridFileGetMetaDataIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -295,7 +295,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFileOpenIdx].paramDefs, - method_definitions[NsfMongoGridFileOpenIdx].nrParameters, 1, + method_definitions[NsfMongoGridFileOpenIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -315,7 +315,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFileReadIdx].paramDefs, - method_definitions[NsfMongoGridFileReadIdx].nrParameters, 1, + method_definitions[NsfMongoGridFileReadIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -335,7 +335,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoGridFileSeekIdx].paramDefs, - method_definitions[NsfMongoGridFileSeekIdx].nrParameters, 1, + method_definitions[NsfMongoGridFileSeekIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -355,7 +355,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoIndexIdx].paramDefs, - method_definitions[NsfMongoIndexIdx].nrParameters, 1, + method_definitions[NsfMongoIndexIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -380,7 +380,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoInsertIdx].paramDefs, - method_definitions[NsfMongoInsertIdx].nrParameters, 1, + method_definitions[NsfMongoInsertIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -401,7 +401,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoQueryIdx].paramDefs, - method_definitions[NsfMongoQueryIdx].nrParameters, 1, + method_definitions[NsfMongoQueryIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -425,7 +425,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoRemoveIdx].paramDefs, - method_definitions[NsfMongoRemoveIdx].nrParameters, 1, + method_definitions[NsfMongoRemoveIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { @@ -446,7 +446,7 @@ if (ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMongoUpdateIdx].paramDefs, - method_definitions[NsfMongoUpdateIdx].nrParameters, 1, + method_definitions[NsfMongoUpdateIdx].nrParameters, 0, 1, &pc) != TCL_OK) { return TCL_ERROR; } else { Index: library/mongodb/nsfmongo.c =================================================================== diff -u -r7c10b8187153bffacc90607079a382f5ff98727d -rc9ef41c49f482a38e89f7cffc54cabf909710425 --- library/mongodb/nsfmongo.c (.../nsfmongo.c) (revision 7c10b8187153bffacc90607079a382f5ff98727d) +++ library/mongodb/nsfmongo.c (.../nsfmongo.c) (revision c9ef41c49f482a38e89f7cffc54cabf909710425) @@ -93,12 +93,12 @@ #endif -static int ArgumentParse(Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], +static int ArgumentParse(Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], NsfObject *obj, Tcl_Obj *procName, - Nsf_Param *paramPtr, int nrParameters, int doCheck, - ParseContext *pc) { + Nsf_Param CONST *paramPtr, int nrParameters, int serial, + int doCheck, ParseContext *pc) { return Nsf_ArgumentParse(interp, objc, objv, (Nsf_Object *)obj, - procName, paramPtr, nrParameters, + procName, paramPtr, nrParameters, serial, doCheck, (Nsf_ParseContext *)pc); } @@ -623,7 +623,6 @@ static int NsfMongoInsert(Tcl_Interp *interp, mongo *connPtr, CONST char *namespace, Tcl_Obj *valuesObj) { int i, objc, result; Tcl_Obj **objv, *resultObj; - //bson buf[1]; bson b[1]; result = Tcl_ListObjGetElements(interp, valuesObj, &objc, &objv); @@ -644,15 +643,17 @@ } bson_finish(b); - //bson_from_buffer( b, buf ); - mongo_insert(connPtr, namespace, b); - - resultObj = BsonToList(interp, b->data, 0); - Tcl_SetObjResult(interp, resultObj); + result = mongo_insert(connPtr, namespace, b); + if (result == MONGO_ERROR) { + result = NsfPrintError(interp, ErrorMsg(connPtr->err)); + } else { + resultObj = BsonToList(interp, b->data, 0); + Tcl_SetObjResult(interp, resultObj); + result = TCL_OK; + } bson_destroy(b); - - return TCL_OK; + return result; } /* @@ -938,8 +939,9 @@ gridFilePtr = (gridfile *)ckalloc(sizeof(gridfile)); result = gridfs_find_filename(gridfsPtr, filename, gridFilePtr); + fprintf(stderr, "NsfMongoGridFileOpen returned result %d\n", result); - if (result == 1) { + if (result == MONGO_OK) { Nsf_PointerAdd(interp, buffer, "gridfile", gridFilePtr); Tcl_SetObjResult(interp, Tcl_NewStringObj(buffer, -1)); } else { Index: library/mongodb/nx-mongo.tcl =================================================================== diff -u -ra467cf37f204cc977b7af7519a0994c65f9ed10f -rc9ef41c49f482a38e89f7cffc54cabf909710425 --- library/mongodb/nx-mongo.tcl (.../nx-mongo.tcl) (revision a467cf37f204cc977b7af7519a0994c65f9ed10f) +++ library/mongodb/nx-mongo.tcl (.../nx-mongo.tcl) (revision c9ef41c49f482a38e89f7cffc54cabf909710425) @@ -341,7 +341,7 @@ # :public method property {spec {-class ::nx::mongo::Attribute} {initblock ""}} { regsub -all {,type=} $spec {,arg=} spec - next [list $spec -class $class $initblock] + next [list -class $class $spec $initblock] } # @@ -477,7 +477,7 @@ # # _id is the special property maintained by mongoDB # - :property _id -class ::nx::mongo::Attribute { + :property -class ::nx::mongo::Attribute _id { set :mongotype oid }