Index: TODO =================================================================== diff -u -r7543d1df847248f723f02fa1abc6645713b9d10f -r4bfd06fe844a57be4044b937148037a88baeed17 --- TODO (.../TODO) (revision 7543d1df847248f723f02fa1abc6645713b9d10f) +++ TODO (.../TODO) (revision 4bfd06fe844a57be4044b937148037a88baeed17) @@ -4918,6 +4918,9 @@ - some conveniance improvements in nx-mongo.tcl (ability to ignore attributes in "bson encode", ability to unset attributes in gridfs, ...) - bump version numbers of nsfmongo to 0.3 and nx-monogo to 0.5 +- represent BSON_TYPE_REGEX as pairs (regex + options) in the Tcl + representation to preserve regular expression options +- update to newest version of mongo-c-driver and libbson from github ======================================================================== TODO: Index: library/mongodb/README =================================================================== diff -u -rcef3de5c4f65e767d0c66389bacc77bc3c2e5a68 -r4bfd06fe844a57be4044b937148037a88baeed17 --- library/mongodb/README (.../README) (revision cef3de5c4f65e767d0c66389bacc77bc3c2e5a68) +++ library/mongodb/README (.../README) (revision 4bfd06fe844a57be4044b937148037a88baeed17) @@ -40,7 +40,7 @@ ./configure --with-tcl=/usr/local/ns/lib/ --with-nsf=../../ \ --with-mongoc=/usr/local/src/mongo-c-driver/mongoc/,/usr/local/src/mongo-c-driver/.libs \ - --with-bson=/usr/local/src/libbson/bson,/usr/local/src/libbson/.libs \ + --with-bson=/usr/local/src/libbson/src/bson,/usr/local/src/libbson/.libs \ --enable-threads --enable-symbols --prefix=/usr/local/ns Index: library/mongodb/nsfmongo.c =================================================================== diff -u -r7543d1df847248f723f02fa1abc6645713b9d10f -r4bfd06fe844a57be4044b937148037a88baeed17 --- library/mongodb/nsfmongo.c (.../nsfmongo.c) (revision 7543d1df847248f723f02fa1abc6645713b9d10f) +++ library/mongodb/nsfmongo.c (.../nsfmongo.c) (revision 4bfd06fe844a57be4044b937148037a88baeed17) @@ -201,9 +201,12 @@ case BSON_TYPE_DOUBLE: tag = NSF_BSON_DOUBLE; elemObj = Tcl_NewDoubleObj(bson_iter_double( &i )); break; case BSON_TYPE_BOOL: tag = NSF_BSON_BOOL; elemObj = Tcl_NewBooleanObj(bson_iter_bool( &i )); break; case BSON_TYPE_REGEX: { - const char *options = NULL; /* TODO: not handled */ + const char *options = NULL, *regex = NULL; tag = NSF_BSON_REGEX; - elemObj = Tcl_NewStringObj(bson_iter_regex( &i, &options ), -1); + regex = bson_iter_regex( &i, &options ); + elemObj = Tcl_NewListObj(0, NULL); + Tcl_ListObjAppendElement(interp, elemObj, Tcl_NewStringObj(regex, -1)); + Tcl_ListObjAppendElement(interp, elemObj, Tcl_NewStringObj(options, -1)); break; } case BSON_TYPE_UTF8: { @@ -391,8 +394,14 @@ break; } case BSON_TYPE_REGEX: { - char *opts = ""; /* TODO: how to handle regex opts? */ - bson_append_regex(bbPtr, name, keyLength, ObjStr(value), opts); + int objc = 0; + Tcl_Obj **objv; + + result = Tcl_ListObjGetElements(interp, value, &objc, &objv); + if (result != TCL_OK || objc != 2) { + return NsfPrintError(interp, "invalid regexp representation: %s", ObjStr(value)); + } + bson_append_regex(bbPtr, name, keyLength, ObjStr(objv[0]), ObjStr(objv[1])); break; } case BSON_TYPE_DATE_TIME: {