8000 Merge branch 'develop' of https://github.com/orientechnologies/orient… · githubcs/orientdb@7558ece · GitHub
[go: up one dir, main page]

Skip to content

Commit 7558ece

Browse files
committed
Merge branch 'develop' of https://github.com/orientechnologies/orientdb into develop
2 parents 02e2622 + c2a8d96 commit 7558ece

File tree

2 files changed

+34
-33
lines changed

2 files changed

+34
-33
lines changed

server/src/main/java/com/orientechnologies/orient/server/network/protocol/binary/OAsyncCommandResultListener.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.orientechnologies.orient.server.network.protocol.binary;
22

3+
import java.io.IOException;
4+
import java.util.concurrent.atomic.AtomicBoolean;
5+
36
import com.orientechnologies.common.log.OLogManager;
47
import com.orientechnologies.orient.core.command.OCommandResultListener;
58
import com.orientechnologies.orient.core.db.record.OIdentifiable;
69
import com.orientechnologies.orient.core.fetch.remote.ORemoteFetchListener;
710
import com.orientechnologies.orient.core.record.ORecord;
8-
import com.orientechnologies.orient.core.record.ORecordInternal;
9-
10-
import java.io.IOException;
11-
import java.util.concurrent.atomic.AtomicBoolean;
1211

1312
/**
1413
* Asynchronous command result manager. As soon as a record is returned by the command is sent over the wire.
@@ -35,7 +34,7 @@ public boolean result(final Object iRecord) {
3534
if (empty.compareAndSet(true, false))
3635
try {
3736
protocol.sendOk(txId);
38-
} catch (IOException e1) {
37+
} catch (IOException ignored) {
3938
}
4039

4140
try {
@@ -54,7 +53,7 @@ protected void sendRecord(ORecord<?> iLinked) {
5453
});
5554

5655
protocol.channel.writeByte((byte) 1); // ONE MORE RECORD
57-
protocol.writeIdentifiable((ORecordInternal<?>) ((OIdentifiable) iRecord).getRecord());
56+
protocol.writeIdentifiable(((OIdentifiable) iRecord).getRecord());
5857

5958
} catch (IOException e) {
6059
return false;
@@ -66,7 +65,8 @@ protected void sendRecord(ORecord<?> iLinked) {
6665
@Override
6766
public void end() {
6867
super.end();
69-
resultListener.end();
68+
if (resultListener != null)
69+
resultListener.end();
7070
}
7171

7272
public boolean isEmpty() {

server/src/main/java/com/orientechnologies/orient/server/network/protocol/http/OHttpResponse.java

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,30 @@
1515
*/
1616
package com.orientechnologies.orient.server.network.protocol.http;
1717

18-
import com.orientechnologies.common.collection.OMultiValue;
19-
import com.orientechnologies.common.log.OLogManager;
20-
import com.orientechnologies.common.util.OCallable;
21-
import com.orientechnologies.orient.core.db.record.OIdentifiable;
22-
import com.orientechnologies.orient.core.record.ORecord;
23-
import com.orientechnologies.orient.core.record.impl.ODocument;
24-
import com.orientechnologies.orient.core.serialization.OBinaryProtocol;
25-
import com.orientechnologies.orient.core.serialization.serializer.OJSONWriter;
26-
2718
import java.io.ByteArrayInputStream;
2819
import java.io.ByteArrayOutputStream;
2920
import java.io.IOException;
3021
import java.io.InputStream;
3122
import java.io.OutputStream;
3223
import java.io.StringWriter;
3324
import java.util.ArrayList;
25+
import java.util.Collections;
3426
import java.util.Date;
3527
import java.util.Iterator;
3628
import java.util.LinkedHashSet;
3729
import java.util.List;
3830
import java.util.Map;
3931
import java.util.zip.GZIPOutputStream;
4032

33+
import com.orientechnologies.common.collection.OMultiValue;
34+
import com.orientechnologies.common.log.OLogManager;
35+
import com.orientechnologies.common.util.OCallable;
36+
import com.orientechnologies.orient.core.db.record.OIdentifiable;
37+
import com.orientechnologies.orient.core.record.ORecord;
38+
import com.orientechnologies.orient.core.record.impl.ODocument;
39+
import com.orientechnologies.orient.core.serialization.OBinaryProtocol;
40+
import com.orientechnologies.orient.core.serialization.serializer.OJSONWriter;
41+
4142
/**
4243
* Maintains information about current HTTP response.
4344
*
@@ -170,36 +171,36 @@ public void writeResult(Object iResult, final String iFormat, final String accep
170171
if (iResult == null)
171172
send(OHttpUtils.STATUS_OK_NOCONTENT_CODE, "", OHttpUtils.CONTENT_TEXT_PLAIN, null, null, true);
172173
else {
173-
if (iResult instanceof Map<?, ?>) {
174-
iResult = ((Map<?, ?>) iResult).entrySet().iterator();
174+
final Object newResult;
175+
if (isJSObject(iResult)) {
176+
newResult = Collections.singleton(new ODocument().field("value", iResult)).iterator();
177+
} else if (iResult instanceof Map<?, ?>) {
178+
newResult = ((Map<?, ?>) iResult).entrySet().iterator();
175179
} else if (OMultiValue.isMultiValue(iResult)
176180
&& (OMultiValue.getSize(iResult) > 0 && !(OMultiValue.getFirstValue(iResult) instanceof OIdentifiable))) {
177-
final List<OIdentifiable> resultSet = new ArrayList<OIdentifiable>();
178-
resultSet.add(new ODocument().field("value", iResult));
179-
iResult = resultSet.iterator();
180-
181+
newResult = Collections.singleton(new ODocument().field("value", iResult)).iterator();
181182
} else if (iResult instanceof OIdentifiable) {
182183
// CONVERT SIGLE VALUE IN A COLLECTION
183-
final List<OIdentifiable> resultSet = new ArrayList<OIdentifiable>();
184-
resultSet.add((OIdentifiable) iResult);
185-
iResult = resultSet.iterator();
184+
newResult = Collections.singleton(iResult).iterator();
186185
} else if (iResult instanceof Iterable<?>)
187-
iResult = ((Iterable<OIdentifiable>) iResult).iterator();
186+
newResult = ((Iterable<OIdentifiable>) iResult).iterator();
188187
else if (OMultiValue.isMultiValue(iResult))
189-
iResult = OMultiValue.getMultiValueIterator(iResult);
188+
newResult = OMultiValue.getMultiValueIterator(iResult);
190189
else {
191-
final List<OIdentifiable> resultSet = new ArrayList<OIdentifiable>();
192-
resultSet.add(new ODocument().field("value", iResult));
193-
iResult = resultSet.iterator();
190+
newResult = Collections.singleton(new ODocument().field("value", iResult)).iterator();
194191
}
195192

196-
if (iResult == null)
193+
if (newResult == null)
197194
send(OHttpUtils.STATUS_OK_NOCONTENT_CODE, "", OHttpUtils.CONTENT_TEXT_PLAIN, null, null, true);
198-
else if (iResult instanceof Iterator<?>)
199-
writeRecords(iResult, null, iFormat, accept);
195+
else
196+
writeRecords(newResult, null, iFormat, accept);
200197
}
201198
}
202199

200+
private boolean isJSObject(Object iResult) {
201+
return iResult.getClass().getName().equals("jdk.nashorn.api.scripting.ScriptObjectMirror");
202+
}
203+
203204
public void writeRecords(final Object iRecords) throws IOException {
204205
writeRecords(iRecords, null, null, null);
205206
}

0 commit comments

Comments
 (0)
0