From c6b48d83f64f980663a482eda2b4108e754db0a4 Mon Sep 17 00:00:00 2001
From: lin <752873537@qq.com>
Date: Thu, 14 Nov 2019 20:27:14 +0800
Subject: [PATCH] =?UTF-8?q?#2339=20=E4=BF=AE=E6=94=B9mongdbDriver=202.11?=
=?UTF-8?q?=20->=203.11=20=E6=94=AF=E6=8C=81mongdb4.0=20=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?mongdb=E6=8F=92=E5=85=A5=E6=94=AF=E6=8C=81=E5=A4=9A=E8=A1=8C?=
=?UTF-8?q?=E6=8F=92=E5=85=A5=20=E4=BF=AE=E6=94=B9mongdb=E5=A2=9E=E5=88=A0?=
=?UTF-8?q?=E6=94=B9=E8=BF=94=E5=9B=9E=E5=BD=B1=E5=93=8D=E8=A1=8C=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../mycat/backend/jdbc/mongodb/MongoData.java | 32 ++++++++-------
.../backend/jdbc/mongodb/MongoSQLParser.java | 40 +++++++++----------
3 files changed, 38 insertions(+), 36 deletions(-)
diff --git a/pom.xml b/pom.xml
index aceec816f..310961f81 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,7 +48,7 @@
org.mongodb
mongo-java-driver
- 2.11.4
+ 3.11.0
org.iq80.leveldb
diff --git a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java
index 86bba46bc..0bb143af1 100644
--- a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java
+++ b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java
@@ -53,20 +53,24 @@ public BasicDBList getGrouyBys() {
else {
return null;
}
- }
- public void setGrouyBy(DBObject gb) {
- this.groupby=gb;
- this.type=true;
- if (gb instanceof BasicDBList) {
- Object gb2=((BasicDBList)gb).get(0);
- if (gb2 instanceof DBObject) {
- for (String field :((DBObject)gb2).keySet()) {
- Object val = ((DBObject)gb2).get(field);
- setField(field,getObjectToType(val));
- }
- }
- }
- }
+ }
+
+ public void setGrouyBy(DBObject gb) {
+ this.groupby = gb;
+ this.type = true;
+ if (gb instanceof BasicDBList) {
+ BasicDBList basicDBList = (BasicDBList)gb;
+ if(!basicDBList.isEmpty()){
+ Object gb2 = basicDBList.get(0);
+ if (gb2 instanceof DBObject) {
+ for (String field : ((DBObject) gb2).keySet()) {
+ Object val = ((DBObject) gb2).get(field);
+ setField(field, getObjectToType(val));
+ }
+ }
+ }
+ }
+ }
public static int getObjectToType(Object ob){
if (ob instanceof Integer) {
diff --git a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java
index 3d7b49460..00ad51688 100644
--- a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java
+++ b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java
@@ -6,15 +6,10 @@
import java.util.List;
+import com.mongodb.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.mongodb.BasicDBList;
-import com.mongodb.BasicDBObject;
-import com.mongodb.DB;
-import com.mongodb.DBCollection;
-import com.mongodb.DBCursor;
-import com.mongodb.DBObject;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
import com.alibaba.druid.sql.ast.SQLStatement;
@@ -186,15 +181,20 @@ private int InsertData(SQLInsertStatement state) {
throw new RuntimeException("number of values and columns have to match");
}
SQLTableSource table=state.getTableSource();
- BasicDBObject o = new BasicDBObject();
- int i=0;
- for(SQLExpr col : state.getColumns()) {
- o.put(getFieldName2(col), getExpValue(state.getValues().getValues().get(i)));
- i++;
- }
+ BasicDBObject[] oList = new BasicDBObject[state.getValuesList().size()];
+ int i = 0;
+ for(SQLInsertStatement.ValuesClause values : state.getValuesList()){
+ int j = 0;
+ BasicDBObject o = new BasicDBObject();
+ oList[i++] = o ;
+ for(SQLExpr col : state.getColumns()) {
+ o.put(getFieldName2(col), getExpValue(values.getValues().get(j++)));
+ }
+ }
+
DBCollection coll =this._db.getCollection(table.toString());
- coll.insert(new DBObject[] { o });
- return 1;
+ WriteResult result = coll.insert(oList);
+ return i; // 这里result.getN 总是返回0 , 所以按插入数据量返回影响行数
}
private int UpData(SQLUpdateStatement state) {
SQLTableSource table=state.getTableSource();
@@ -208,9 +208,9 @@ private int UpData(SQLUpdateStatement state) {
set.put(getFieldName2(col.getColumn()), getExpValue(col.getValue()));
}
DBObject mod = new BasicDBObject("$set", set);
- coll.updateMulti(query, mod);
+ WriteResult result = coll.updateMulti(query, mod);
//System.out.println("changs count:"+coll.getStats().size());
- return 1;
+ return result.getN();
}
private int DeleteDate(SQLDeleteStatement state) {
SQLTableSource table=state.getTableSource();
@@ -221,11 +221,9 @@ private int DeleteDate(SQLDeleteStatement state) {
throw new RuntimeException("not where of sql");
}
DBObject query = parserWhere(expr);
-
- coll.remove(query);
-
- return 1;
-
+
+ WriteResult result = coll.remove(query);
+ return result.getN();
}
private int dropTable(SQLDropTableStatement state) {
for (SQLTableSource table : state.getTableSources()){