From 2d24b33a186cad43d9b2cb279b15db75a8f4b389 Mon Sep 17 00:00:00 2001 From: Vyacheslav Tyutyunkov Date: Tue, 19 Mar 2013 12:44:23 +0700 Subject: [PATCH] #21 --- jejdb/src/cpp/jejdb.c | 5 +- jejdb/src/java/org/ejdb/Test2.java | 11 ++-- jejdb/src/java/org/ejdb/driver/EJDBCollection.java | 17 ++++-- jejdb/src/java/org/ejdb/driver/EJDBQuery.java | 62 +++++++++++++++++++--- 4 files changed, 79 insertions(+), 16 deletions(-) diff --git a/jejdb/src/cpp/jejdb.c b/jejdb/src/cpp/jejdb.c index c0d32a3..b1b59cd 100755 --- a/jejdb/src/cpp/jejdb.c +++ b/jejdb/src/cpp/jejdb.c @@ -643,7 +643,7 @@ JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_txControl (JNIEnv return JNI_FALSE; } - bool status = false, txActive = false; + bool status = false, txActive = true; switch (mode) { case org_ejdb_driver_EJDBCollection_JBTXBEGIN : @@ -659,6 +659,7 @@ JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_txControl (JNIEnv break; case org_ejdb_driver_EJDBCollection_JBTXSTATUS : + txActive = false; status = ejdbtranstatus(coll, &txActive); break; @@ -672,5 +673,5 @@ JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_txControl (JNIEnv return JNI_FALSE; } - return status ? JNI_TRUE : JNI_FALSE; + return txActive ? JNI_TRUE : JNI_FALSE; }; diff --git a/jejdb/src/java/org/ejdb/Test2.java b/jejdb/src/java/org/ejdb/Test2.java index fb04a6d..ce4ff31 100644 --- a/jejdb/src/java/org/ejdb/Test2.java +++ b/jejdb/src/java/org/ejdb/Test2.java @@ -24,7 +24,7 @@ public class Test2 { try { db.open("test5"); - System.out.println("test ELDB opened"); + System.out.println("test EJDB opened"); EJDBCollection test = db.getCollection("test"); @@ -42,11 +42,16 @@ public class Test2 { test.sync(); System.out.println("test collection synced"); - EJDBResultSet rs = test.createQuery(new BasicBSONObject(), null, null, 0).execute(); + EJDBQuery query = test.createQuery(new BasicBSONObject()); + + System.out.println("Objects matched: " + query.count()); + + EJDBResultSet rs = query.find(); for (BSONObject r : rs) { System.out.println(r); } -// test.createQuery(new BasicBSONObject("index", new BasicBSONObject("$lt", 5)), null, null, EJDBQuery.JBQRYCOUNT).execute(); + + System.out.println(query.findOne()); } finally { db.close(); diff --git a/jejdb/src/java/org/ejdb/driver/EJDBCollection.java b/jejdb/src/java/org/ejdb/driver/EJDBCollection.java index 0123f79..007506e 100644 --- a/jejdb/src/java/org/ejdb/driver/EJDBCollection.java +++ b/jejdb/src/java/org/ejdb/driver/EJDBCollection.java @@ -35,7 +35,6 @@ public class EJDBCollection { this.cname = cname; } - // TODO: protected native boolean txControl(int mode); public void ensureExists() { @@ -70,8 +69,20 @@ public class EJDBCollection { public native void setIndex(String path, int flags); - public EJDBQuery createQuery(BSONObject query, BSONObject[] qors, BSONObject hints, int flags) { - return new EJDBQuery(this, query, qors, hints, flags); + public EJDBQuery createQuery(BSONObject query) { + return new EJDBQuery(this, query, null, null); + } + + public EJDBQuery createQuery(BSONObject query, BSONObject[] qors) { + return new EJDBQuery(this, query, qors, null); + } + + public EJDBQuery createQuery(BSONObject query, BSONObject hints) { + return new EJDBQuery(this, query, null, hints); + } + + public EJDBQuery createQuery(BSONObject query, BSONObject[] qors, BSONObject hints) { + return new EJDBQuery(this, query, qors, hints); } public void beginTransaction() { diff --git a/jejdb/src/java/org/ejdb/driver/EJDBQuery.java b/jejdb/src/java/org/ejdb/driver/EJDBQuery.java index 948f042..e12ba18 100644 --- a/jejdb/src/java/org/ejdb/driver/EJDBQuery.java +++ b/jejdb/src/java/org/ejdb/driver/EJDBQuery.java @@ -1,6 +1,13 @@ package org.ejdb.driver; import org.bson.BSONObject; +import org.bson.BasicBSONObject; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author Tyutyunkov Vyacheslav (tve@softmotions.com) @@ -9,27 +16,58 @@ import org.bson.BSONObject; public class EJDBQuery { // Query search mode flags - public static final int JBQRYCOUNT = 1; /*< Query only count(*) */ + protected static final int JBQRYCOUNT = 1; /*< Query only count(*) */ private EJDBCollection coll; private BSONObject query; - private BSONObject[] qors; + private List qors; private BSONObject hints; private int flags; - EJDBQuery(EJDBCollection coll, BSONObject query, BSONObject[] qors, BSONObject hints, int flags) { + EJDBQuery(EJDBCollection coll, BSONObject query, BSONObject[] qors, BSONObject hints) { this.coll = coll; this.query = query; - this.qors = qors; + this.qors = new ArrayList(); + if (qors != null) { + this.qors.addAll(Arrays.asList(qors)); + } this.hints = hints; - this.flags = flags; + } + + public BSONObject getQueryObject() { + return query; } // TODO - public EJDBResultSet execute() { - QResult qResult = this.execute(query, qors, hints, flags); - return qResult != null ? new EJDBResultSet(qResult.rsPointer) : null; + public EJDBResultSet find() { + return this.execute(hints, 0).getResultSet(); + } + + public BSONObject findOne() { + Map hintsMap = hints != null ? hints.toMap() : new HashMap(); + hintsMap.put("$max", 1); + + EJDBResultSet rs = this.execute(new BasicBSONObject(hintsMap), 0).getResultSet(); + BSONObject result = rs.hasNext() ? rs.next() : null; + rs.close(); + + return result; + } + + public int update() { + return this.execute(hints, JBQRYCOUNT).getCount(); + } + + public int count() { + return this.execute(hints, JBQRYCOUNT).getCount(); + } + + protected QResult execute(BSONObject hints, int flags) { + BSONObject[] qors = new BSONObject[this.qors.size()]; + this.qors.toArray(qors); + + return this.execute(query, qors, hints, flags); } protected native QResult execute(BSONObject query, BSONObject[] qors, BSONObject hints, int flags); @@ -42,5 +80,13 @@ public class EJDBQuery { this.count = count; this.rsPointer = rsPointer; } + + public int getCount() { + return count; + } + + public EJDBResultSet getResultSet() { + return new EJDBResultSet(rsPointer); + } } } -- 2.7.4