diff options
author | Dwight <dmerriman@gmail.com> | 2008-03-21 18:21:22 -0400 |
---|---|---|
committer | Dwight <dmerriman@gmail.com> | 2008-03-21 18:21:22 -0400 |
commit | cf6cd6c60b2e604eb0acb68c96b2a027ccdeafe8 (patch) | |
tree | c30931f1b260e57107f4685e4d263092631085c0 | |
parent | f8a960b7a05edee7bf5652e164ea96f976b7d340 (diff) | |
download | mongo-cf6cd6c60b2e604eb0acb68c96b2a027ccdeafe8.tar.gz |
bad assert
cleanup
-rw-r--r-- | boost/boost/Debug/BuildLog.htm | bin | 9580 -> 9572 bytes | |||
-rw-r--r-- | boost/boost/Debug/boost.lib | bin | 2633866 -> 2634390 bytes | |||
-rw-r--r-- | boost/boost/Debug/vc90.idb | bin | 1829888 -> 1829888 bytes | |||
-rw-r--r-- | boost/boost/Debug/vc90.pdb | bin | 552960 -> 552960 bytes | |||
-rw-r--r-- | db/db.cpp | 2 | ||||
-rw-r--r-- | db/javajs.cpp | 65 | ||||
-rw-r--r-- | db/javajs.h | 46 | ||||
-rw-r--r-- | db/jsobj.cpp | 18 | ||||
-rw-r--r-- | db/jsobj.h | 20 | ||||
-rw-r--r-- | db/query.cpp | 29 |
10 files changed, 110 insertions, 70 deletions
diff --git a/boost/boost/Debug/BuildLog.htm b/boost/boost/Debug/BuildLog.htm Binary files differindex 1869886f77c..3750eec4137 100644 --- a/boost/boost/Debug/BuildLog.htm +++ b/boost/boost/Debug/BuildLog.htm diff --git a/boost/boost/Debug/boost.lib b/boost/boost/Debug/boost.lib Binary files differindex 7e840cddf6e..bddb299d593 100644 --- a/boost/boost/Debug/boost.lib +++ b/boost/boost/Debug/boost.lib diff --git a/boost/boost/Debug/vc90.idb b/boost/boost/Debug/vc90.idb Binary files differindex 82ea821ae3d..5462e96f0ce 100644 --- a/boost/boost/Debug/vc90.idb +++ b/boost/boost/Debug/vc90.idb diff --git a/boost/boost/Debug/vc90.pdb b/boost/boost/Debug/vc90.pdb Binary files differindex b65afb9eb29..5ea9dba1f61 100644 --- a/boost/boost/Debug/vc90.pdb +++ b/boost/boost/Debug/vc90.pdb diff --git a/db/db.cpp b/db/db.cpp index 90a2b378c78..b265af79685 100644 --- a/db/db.cpp +++ b/db/db.cpp @@ -269,7 +269,7 @@ public: };
void listen(int port) {
- cout << "db version: 100 mar2008 profiling" << endl;
+ cout << "db version: 101 mar2008 where" << endl;
pdfileInit();
testTheDb();
cout << curTimeMillis() % 10000 << " waiting for connections...\n" << endl;
diff --git a/db/javajs.cpp b/db/javajs.cpp index 0722999dc42..3e3cc50121e 100644 --- a/db/javajs.cpp +++ b/db/javajs.cpp @@ -72,8 +72,6 @@ JavaJSImpl::JavaJSImpl(){ } #endif - cout << "using classpath: " << q << endl; - JavaVMOption * options = new JavaVMOption[3]; options[0].optionString = q; options[1].optionString = "-Djava.awt.headless=true"; @@ -87,18 +85,23 @@ JavaJSImpl::JavaJSImpl(){ cerr << "Creating JVM" << endl; jint res = JNI_CreateJavaVM( &_jvm, (void**)&_env, vm_args); + + if( res ) { + cout << "using classpath: " << q << endl; + cerr + << "res : " << res << " " + << "_jvm : " << _jvm << " " + << "_env : " << _env << " " + << endl; + } + jassert( res == 0 ); jassert( _jvm > 0 ); - jassert( _env > 0 ); - - cerr - << "res : " << res << " " - << "_jvm : " << _jvm << " " - << "_env : " << _env << " " - << endl; - + jassert( _env > 0 ); _dbhook = findClass( "ed/js/DBHook" ); + if( _dbhook == 0 ) + cout << "using classpath: " << q << endl; jassert( _dbhook ); _scopeCreate = _env->GetStaticMethodID( _dbhook , "scopeCreate" , "()J" ); @@ -164,16 +167,15 @@ void JavaJSImpl::scopeFree( jlong id ){ // scope setters -int JavaJSImpl::scopeSetNumber( jlong id , char * field , double val ){ +int JavaJSImpl::scopeSetNumber( jlong id , const char * field , double val ){ return _env->CallStaticBooleanMethod( _dbhook , _scopeSetNumber , id , _env->NewStringUTF( field ) , val ); } -int JavaJSImpl::scopeSetString( jlong id , char * field , char * val ){ +int JavaJSImpl::scopeSetString( jlong id , const char * field , char * val ){ return _env->CallStaticBooleanMethod( _dbhook , _scopeSetString , id , _env->NewStringUTF( field ) , _env->NewStringUTF( val ) ); } -#ifdef J_USE_OBJ -int JavaJSImpl::scopeSetObject( jlong id , char * field , JSObj * obj ){ +int JavaJSImpl::scopeSetObject( jlong id , const char * field , JSObj * obj ){ jobject bb = 0; if ( obj ){ //cout << "from c : " << obj->toString() << endl; @@ -183,30 +185,27 @@ int JavaJSImpl::scopeSetObject( jlong id , char * field , JSObj * obj ){ return _env->CallStaticBooleanMethod( _dbhook , _scopeSetObject , id , _env->NewStringUTF( field ) , bb ); } -#endif // scope getters -double JavaJSImpl::scopeGetNumber( jlong id , char * field ){ +double JavaJSImpl::scopeGetNumber( jlong id , const char * field ){ return _env->CallStaticDoubleMethod( _dbhook , _scopeGetNumber , id , _env->NewStringUTF( field ) ); } -char * JavaJSImpl::scopeGetString( jlong id , char * field ){ +string JavaJSImpl::scopeGetString( jlong id , const char * field ) { jstring s = (jstring)_env->CallStaticObjectMethod( _dbhook , _scopeGetString , id , _env->NewStringUTF( field ) ); if ( ! s ) - return 0; + return ""; const char * c = _env->GetStringUTFChars( s , 0 ); - char * buf = new char[ strlen(c) + 1 ]; - strcpy( buf , c ); + string retStr(c); _env->ReleaseStringUTFChars( s , c ); - - return buf; + return retStr; } #ifdef J_USE_OBJ -JSObj * JavaJSImpl::scopeGetObject( jlong id , char * field ){ - +JSObj JavaJSImpl::scopeGetObject( jlong id , const char * field ) +{ int guess = _env->CallStaticIntMethod( _dbhook , _scopeGuessObjectSize , id , _env->NewStringUTF( field ) ); char * buf = (char *) malloc(guess); @@ -217,10 +216,8 @@ JSObj * JavaJSImpl::scopeGetObject( jlong id , char * field ){ //cout << "len : " << len << endl; assert( len > 0 && len < guess ); - JSObj * obj = new JSObj( buf , true ); - assert( obj->objsize() <= guess ); - //cout << "going to print" << endl; - //cout << obj->toString() << endl; + JSObj obj(buf, true); + assert( obj.objsize() <= guess ); return obj; } #endif @@ -270,7 +267,7 @@ void jasserted(const char *msg, const char *file, unsigned line) { char * findEd(){ #if defined(_WIN32) - return "c:/l/ed/ed"; + return "c:/l/ed"; #else static list<char*> possibleEdDirs; @@ -338,15 +335,15 @@ JavaJS.run("print(5);"); if ( testObject ){ if ( debug ) cout << "going to get object" << endl; - JSObj * obj = JavaJS.scopeGetObject( scope , "abc" ); + JSObj obj = JavaJS.scopeGetObject( scope , "abc" ); if ( debug ) cout << "done gettting object" << endl; - if ( obj && debug ){ - cout << "obj : " << obj->toString() << endl; + if ( debug ){ + cout << "obj : " << obj.toString() << endl; } if ( debug ) cout << "func4 start" << endl; - JavaJS.scopeSetObject( scope , "obj" , obj ); + JavaJS.scopeSetObject( scope , "obj" , &obj ); if ( debug ) cout << "\t here 1" << endl; jlong func4 = JavaJS.functionCreate( "print( tojson( obj ) );" ); if ( debug ) cout << "\t here 2" << endl; @@ -354,7 +351,7 @@ JavaJS.run("print(5);"); if ( debug ) cout << "func4 end" << endl; if ( debug ) cout << "func5 start" << endl; - jassert( JavaJS.scopeSetObject( scope , "c" , obj ) ); + jassert( JavaJS.scopeSetObject( scope , "c" , &obj ) ); jlong func5 = JavaJS.functionCreate( "print( \"setObject : 517 == \" + c.foo );" ); jassert( func5 ); jassert( ! JavaJS.invoke( scope , func5 ) ); diff --git a/db/javajs.h b/db/javajs.h index a4ed39358f5..b2cd0a2513c 100644 --- a/db/javajs.h +++ b/db/javajs.h @@ -9,6 +9,8 @@ #pragma pack() #include <jni.h> +#include "jsobj.h" + #include <sys/types.h> #if !defined(_WIN32) #include <dirent.h> @@ -33,25 +35,20 @@ class JavaJSImpl { jboolean scopeReset( jlong id ); void scopeFree( jlong id ); - double scopeGetNumber( jlong id , char * field ); - char * scopeGetString( jlong id , char * field ); - jboolean scopeGetBoolean( jlong id , char * field ){ + double scopeGetNumber( jlong id , const char * field ); + string scopeGetString( jlong id , const char * field ); + jboolean scopeGetBoolean( jlong id , const char * field ){ return _env->CallStaticBooleanMethod( _dbhook , _scopeGetBoolean , id , _env->NewStringUTF( field ) ); } -#ifdef J_USE_OBJ - JSObj * scopeGetObject( jlong id , char * field ); -#endif - char scopeGetType( jlong id , char * field ){ + JSObj scopeGetObject( jlong id , const char * field ); + char scopeGetType( jlong id , const char * field ){ return _env->CallStaticByteMethod( _dbhook , _scopeGetType , id , _env->NewStringUTF( field ) ); } - - int scopeSetNumber( jlong id , char * field , double val ); - int scopeSetString( jlong id , char * field , char * val ); -#ifdef J_USE_OBJ - int scopeSetObject( jlong id , char * field , JSObj * obj ); -#endif - int scopeSetBoolean( jlong id , char * field , jboolean val ){ + int scopeSetNumber( jlong id , const char * field , double val ); + int scopeSetString( jlong id , const char * field , char * val ); + int scopeSetObject( jlong id , const char * field , JSObj * obj ); + int scopeSetBoolean( jlong id , const char * field , jboolean val ) { return _env->CallStaticBooleanMethod( _dbhook , _scopeSetNumber , id , _env->NewStringUTF( field ) , val ); } @@ -117,3 +114,24 @@ class JavaJSImpl { }; extern JavaJSImpl *JavaJS; + +// a javascript "scope" +class Scope { +public: + Scope() { s = JavaJS->scopeCreate(); } + ~Scope() { JavaJS->scopeFree(s); s = 0; } + void reset() { JavaJS->scopeReset(s); } + + double getNumber(const char *field) { return JavaJS->scopeGetNumber(s,field); } + string getString(const char *field) { return JavaJS->scopeGetString(s,field); } + jboolean getBoolean(const char *field) { return JavaJS->scopeGetBoolean(s,field); } + JSObj scopeGetObject(const char *field ) { return JavaJS->scopeGetObject(s,field); } + + void setNumber(const char *field, double val ) { JavaJS->scopeSetNumber(s,field,val); } + void setString(const char *field, char * val ) { JavaJS->scopeSetString(s,field,val); } + void setObject(const char *field, JSObj& obj ) { JavaJS->scopeSetObject(s,field,&obj); } + void setBoolean(const char *field, jboolean val ) { JavaJS->scopeSetBoolean(s,field,val); } + + jlong s; +}; + diff --git a/db/jsobj.cpp b/db/jsobj.cpp index 014982a415d..6078fa4ce4d 100644 --- a/db/jsobj.cpp +++ b/db/jsobj.cpp @@ -3,6 +3,22 @@ #include "stdafx.h"
#include "jsobj.h"
#include "../util/goodies.h"
+#include "javajs.h"
+
+class Where {
+public:
+ ~Where() {
+ JavaJS->scopeFree(scope);
+ scope = 0; func = 0;
+ }
+ jlong scope, func;
+};
+
+JSMatcher::~JSMatcher() {
+ for( int i = 0; i < nBuilders; i++ )
+ delete builders[i];
+ delete where;
+}
Element nullElement;
@@ -104,7 +120,7 @@ int Element::size() { if( !eoo() ) {
const char *next = data + totalSize;
- if( *next < 0 || *next > DBRef ) {
+ if( *next < 0 || *next > JSTypeMax ) {
// bad type.
cout << "*********************************************\n";
cout << "Bad data or size in Element::size()" << endl;
diff --git a/db/jsobj.h b/db/jsobj.h index 8d36351f905..54de68ac812 100644 --- a/db/jsobj.h +++ b/db/jsobj.h @@ -4,7 +4,7 @@ #include "../stdafx.h"
#include "../util/builder.h"
-#include "javajs.h"
+//#include "javajs.h"
#include <set>
@@ -20,7 +20,7 @@ class JSObjBuilder; */
enum JSType { EOO = 0, Number=1, String=2, Object=3, Array=4, BinData=5,
Undefined=6, jstOID=7, Bool=8, Date=9 , jstNULL=10, RegEx=11 ,
- DBRef=12, Code=13, MaxKey=127 };
+ DBRef=12, Code=13, JSTypeMax=13, MaxKey=127 };
/* subtypes of BinData.
bdtCustom and above are ones that the JS compiler understands, but are
@@ -357,14 +357,8 @@ public: ~RegexMatcher() { delete re; }
};
-class Where {
-public:
- ~Where() {
- JavaJS->scopeFree(scope);
- scope = 0; func = 0;
- }
- jlong scope, func;
-};
+// SQL where clause equivalent
+class Where;
/* For when a js object is a query pattern.
@@ -393,11 +387,7 @@ public: JSMatcher(JSObj& pattern);
- ~JSMatcher() {
- for( int i = 0; i < nBuilders; i++ )
- delete builders[i];
- delete where;
- }
+ ~JSMatcher();
bool matches(JSObj& j, bool *deep = 0);
diff --git a/db/query.cpp b/db/query.cpp index dea2ed5e196..e918260e019 100644 --- a/db/query.cpp +++ b/db/query.cpp @@ -9,6 +9,7 @@ #include "introspect.h"
#include "btree.h"
#include "../util/lruishmap.h"
+#include "javajs.h"
//ns->query->DiskLoc
LRUishMap<JSObj,DiskLoc,5> lrutest(123);
@@ -385,6 +386,23 @@ string validateNS(const char *ns, NamespaceDetails *d) { bool userCreateNS(const char *ns, JSObj& j);
+bool dbEval(JSObj& cmd, JSObjBuilder& result) {
+ Element e = cmd.firstElement();
+ assert( e.type() == Code );
+ const char *code = e.valuestr();
+ if ( ! JavaJS )
+ JavaJS = new JavaJSImpl();
+ Scope s;
+ Element args = cmd.findElement("args");
+ if( args.type() == Object ) {
+ JSObj eo = args.embeddedObject();
+ s.setObject("args", eo);
+ }
+// FINISH...invoke
+ result.append("errmsg", "not implemented");
+ return false;
+}
+
// e.g.
// system.cmd$.find( { queryTraceLevel: 2 } );
//
@@ -401,16 +419,17 @@ inline bool runCommands(const char *ns, JSObj& jsobj, stringstream& ss, BufBuild bool ok = false;
bool valid = false;
-cout << jsobj.toString() << endl;
+ //cout << jsobj.toString() << endl;
Element e;
-// e = jsobj.findElement("create");
- //if( e.eoo() )
-// e = jsobj.firstElement();
e = jsobj.firstElement();
if( e.eoo() ) goto done;
- if( e.type() == Number ) {
+ if( e.type() == Code ) {
+ valid = true;
+ ok = dbEval(jsobj, anObjBuilderForYa);
+ }
+ else if( e.type() == Number ) {
if( strcmp(e.fieldName(), "profile") == 0 ) {
anObjBuilderForYa.append("was", (double) client->profile);
client->profile = (int) e.number();
|