1 21 package com.db4o.cs.messages; 22 23 import com.db4o.*; 24 import com.db4o.config.*; 25 import com.db4o.cs.*; 26 import com.db4o.foundation.*; 27 import com.db4o.inside.query.*; 28 29 public abstract class MsgQuery extends MsgObject { 30 31 private static final int ID_AND_SIZE = 2; 32 33 private static int nextID; 34 35 protected final void writeQueryResult(AbstractQueryResult queryResult, YapServerThread serverThread, QueryEvaluationMode evaluationMode) { 36 37 int queryResultId = 0; 38 int maxCount = 0; 39 40 if(evaluationMode == QueryEvaluationMode.IMMEDIATE){ 41 maxCount = queryResult.size(); 42 } else{ 43 queryResultId = generateID(); 44 maxCount = config().prefetchObjectCount(); 45 } 46 47 MsgD message = QUERY_RESULT.getWriterForLength(transaction(), bufferLength(maxCount)); 48 YapWriter writer = message.payLoad(); 49 writer.writeInt(queryResultId); 50 51 IntIterator4 idIterator = queryResult.iterateIDs(); 52 53 writer.writeIDs(idIterator, maxCount); 54 55 if(queryResultId > 0){ 56 serverThread.mapQueryResultToID(new LazyClientObjectSetStub(queryResult, idIterator), queryResultId); 57 } 58 59 serverThread.write(message); 60 } 61 62 private int bufferLength(int maxCount) { 63 return YapConst.INT_LENGTH * (maxCount + ID_AND_SIZE); 64 } 65 66 private static synchronized int generateID(){ 67 nextID ++; 68 if(nextID < 0){ 69 nextID = 1; 70 } 71 return nextID; 72 } 73 74 protected AbstractQueryResult newQueryResult(QueryEvaluationMode mode){ 75 return stream().newQueryResult(transaction(), mode); 76 } 77 78 } 79 | Popular Tags |