Package com.mobixess.jodb.core.io

Examples of com.mobixess.jodb.core.io.IOTicket


   
    @SuppressWarnings("unchecked")
    public ObjectSet execute(JODBSession session, Predicate predicate, Comparator comparator) throws IOException
    {
        IOBase base = session.getBase();
        IOTicket ticket = base.getIOTicket(true, false);
        try {
            JODBOperationContext context = new JODBOperationContext(session, ticket, null, null,null);
            INqLoader loader = getLoader(context, predicate, comparator);
            if(!loader.isPredicateOptimized() || !loader.isComparatorOptimized()){
                return executeUnoptimized(session, predicate, comparator, loader);
            }
            Class predicateSubjectClass = loader.getPredicateSubjectClass();
            //ClassDescriptor predicateSubjectClassDescriptor = session.getDescriptorForClass(predicateSubjectClass);
            //Method setProxyMethod = loader.getSyntheticProxySetMethod();
            //Class syntheticPredicate;

            Class syntheticPredicateSubjectClass = loader.loadClass(predicateSubjectClass.getName());
            SyntheticSubject syntheticSubject  = new SyntheticSubject(context, loader,syntheticPredicateSubjectClass);
           
            Class syntheticPredicateClass = loader.loadClass(predicate.getClass().getName());
            Predicate syntheticPredicate  = (Predicate) instantiateSyntheticPredicate(session, predicate, syntheticPredicateClass);// (Predicate)syntheticPredicateClass.newInstance();
           
            Comparator syntheticComparator = null;
            if(comparator!=null){
                Class syntheticComparatorClass = loader.loadClass(comparator.getClass().getName());
                syntheticComparator = (Comparator) instantiateSyntheticPredicate(session, comparator, syntheticComparatorClass);
                //(Comparator) session.getDescriptorForClass(syntheticComparatorClass).newInstance();
            }
           
            //int[] predicateSubjectFields = loader.getPredicateSubjectFields();
            JODBIndexingRootAgent indexingRootAgent = session.getIndexingRootAgent();
            JODBIndexingAgent indexingAgent = null;
            Iterator<Integer> predicateSubjectAccessedFields = loader.getAccessedPredicateSubjectFields();
            while (predicateSubjectAccessedFields.hasNext() && indexingAgent == null) {
                indexingAgent = indexingRootAgent.getIndexingAgent(predicateSubjectAccessedFields.next(), session.getBase());
            }
            ByteBuffer indexDataBuffer = null;
            int indexField = -1;
            IndexDataIterator indexIterator = null;
            if(indexingAgent!=null){
                indexField = indexingAgent.getFieldId();
                indexDataBuffer = ByteBuffer.allocate(16);
                indexIterator = indexingAgent.getIndexIterator(true);
            }
           
            if(indexIterator==null){
                indexIterator = new LArrayIndexIterator(base.getForAllObjects(ticket));
            }

            SyntheticSubject syntheticSubjectPrev = null;
            COMPARISON_STATE comparison_state= COMPARISON_STATE.UNKNOWN;
            LArrayChunkedBuffer acceptedIdsBuffer = new LArrayChunkedBuffer();
            while (indexIterator.hasNext()) {
                if(indexDataBuffer != null){
                    indexDataBuffer.clear();
                }
                long nextObjectId = indexIterator.next(indexDataBuffer);

                if(!syntheticSubject.setObjectData(nextObjectId, indexField, indexDataBuffer)){
                    continue;
                }

                if(!syntheticPredicate.match(syntheticSubject._syntheticSubject)){
                    continue;
                }
                acceptedIdsBuffer.add(nextObjectId);
                if(syntheticComparator!=null && comparison_state!=COMPARISON_STATE.MIXED){
                    if(syntheticSubjectPrev!=null ){
                        int compareResult = syntheticComparator.compare(syntheticSubjectPrev._syntheticSubject, syntheticSubject._syntheticSubject);
                        if ((compareResult < 0 && comparison_state == COMPARISON_STATE.DESCENDING)
                                || (compareResult > 0 && comparison_state == COMPARISON_STATE.ASCENDING))
                        {
                            comparison_state = COMPARISON_STATE.MIXED;
                            continue;
                        }else if(compareResult!=0){
                            comparison_state = compareResult < 0? COMPARISON_STATE.ASCENDING : COMPARISON_STATE.DESCENDING;
                        }
                        SyntheticSubject swapHolder = syntheticSubjectPrev;
                        syntheticSubjectPrev = syntheticSubject;
                        syntheticSubject = swapHolder;
                    }else{
                        syntheticSubjectPrev = syntheticSubject;
                        syntheticSubject = new SyntheticSubject(context, loader,syntheticPredicateSubjectClass);
                        continue;
                    }
                   
                }
            }
           
            if(comparator!=null){
                if(comparison_state == COMPARISON_STATE.MIXED){
                    long[] acceptedIds = acceptedIdsBuffer.toArray();
                    acceptedIdsBuffer = null;//for GC
                    NQueryUtils.quickQuerySort(acceptedIds, syntheticComparator, syntheticSubject, syntheticSubjectPrev);
                    return new SimpleArrayQueryList(acceptedIds,session);
                }else if (comparison_state == COMPARISON_STATE.DESCENDING){
                    acceptedIdsBuffer.setIteratorDirection(false);
                }
            }
            return new ChunkedBufferQueryList(acceptedIdsBuffer, session);
        } catch (Exception e) {
            // TODO log
            throw new JodbIOException(e);
        } finally {
            ticket.close();
        }
        //return null;
    }
View Full Code Here


    }
   
    @SuppressWarnings("unchecked")
    private ObjectSet executeUnoptimized(JODBSession session, Predicate predicate, Comparator comparator, INqLoader loader) throws IOException{
        IOBase base = session.getBase();
        IOTicket ticket = base.getIOTicket(true, false);
        try {

           
            Class predicateSubjectClass = loader.getPredicateSubjectClass();

            JODBIndexingRootAgent indexingRootAgent = session.getIndexingRootAgent();
            JODBIndexingAgent indexingAgent = null;
            Iterator<Integer> predicateSubjectAccessedFields = loader.getAccessedPredicateSubjectFields();
            if(predicateSubjectAccessedFields != null){
                while (predicateSubjectAccessedFields.hasNext() && indexingAgent == null) {//TODO may be useless if analysis incomplete
                    Integer fieldId = predicateSubjectAccessedFields.next();
                    if(fieldId!=null){
                        indexingAgent = indexingRootAgent.getIndexingAgent(fieldId, session.getBase());
                    }
                }
            }

            IndexDataIterator indexIterator = null;
            if(indexingAgent!=null){
                indexIterator = indexingAgent.getIndexIterator(true);
            }
           
            if(indexIterator==null){
                indexIterator = new LArrayIndexIterator(base.getForAllObjects(ticket));
            }

            COMPARISON_STATE comparison_state= COMPARISON_STATE.UNKNOWN;
            LArrayChunkedBuffer acceptedIdsBuffer = new LArrayChunkedBuffer();
            Object previous = null;
            while (indexIterator.hasNext()) {

                long nextObjectId = indexIterator.next(null);
               
                Object obj = session.getObjectForOffset(nextObjectId, JODBConfig.getDefaultActivationDepth());
                //TODO make configurable upon analysis
               
                if(!obj.getClass().isAssignableFrom(predicateSubjectClass)){
                    continue;
                }

                if(!predicate.match(obj)){
                    continue;
                }
                acceptedIdsBuffer.add(nextObjectId);
               
                if(comparator!=null ){
                    if(previous!=null && comparison_state != COMPARISON_STATE.MIXED){
                        int compareResult = comparator.compare(previous, obj);
                        if ((compareResult < 0 && comparison_state == COMPARISON_STATE.DESCENDING)
                                || (compareResult > 0 && comparison_state == COMPARISON_STATE.ASCENDING))
                        {
                            comparison_state = COMPARISON_STATE.MIXED;
                            continue;
                        }else if(compareResult!=0){
                            comparison_state = compareResult < 0? COMPARISON_STATE.ASCENDING : COMPARISON_STATE.DESCENDING;
                        }
                    }
                    previous = obj;
                }
            }
           
            if(comparator!=null){
                if(comparison_state == COMPARISON_STATE.MIXED){
                    long[] acceptedIds = acceptedIdsBuffer.toArray();
                    acceptedIdsBuffer = null;//for GC
                    NQueryUtils.quickQuerySort(acceptedIds, comparator,session);
                    return new SimpleArrayQueryList(acceptedIds,session);
                }else if (comparison_state == COMPARISON_STATE.DESCENDING){
                    acceptedIdsBuffer.setIteratorDirection(false);
                }
            }
            return new ChunkedBufferQueryList(acceptedIdsBuffer, session);
        } catch (Exception e) {
            // TODO log
            throw new JodbIOException(e);
        } finally {
            ticket.close();
        }
    }
View Full Code Here

        public long getFirstObjectOffset() throws RemoteException {
            return _ioBase.getFirstObjectOffset();
        }

        public long[] getForAllObjects(int ioTicket) throws IOException {
            IOTicket ticket = _ioBase.findTicket(ioTicket);
            return _ioBase.getForAllObjects(ticket);
        }
View Full Code Here

        JODB.openServer(testFile);
    }
   
    private static void runClient() throws Exception{
        JODBIOBaseProxy baseProxy = new JODBIOBaseProxy(JODBIOBaseProxy.composeURI("//localhost",null));
        IOTicket ticket = baseProxy.getIOTicket(true, false);
        System.err.println(" "+ticket);
    }
View Full Code Here

        transactionContainer.runResolve(sessionContainer);
        IRemoteTransactionContainer remoteTransactionContainer = _server.getRemoteTransactionContainer();
        long transactionOffset = remoteTransactionContainer.initTransaction();
        long indexVersion = remoteTransactionContainer.getIndexingAgentVersion();
        session.ensureIndexVersion(indexVersion);
        IOTicket ticket = getIOTicket(true,false);
        try {
            applyTransaction(transactionContainer, ticket, session, transactionOffset, indexingRootAgent);
            dispatchTranslatedData(transactionContainer, remoteTransactionContainer);
            remoteTransactionContainer.checkTransactionComplete();
            transactionContainer.resetTranslatedObjects(session, transactionOffset);
        } catch (Exception e) {
            throw new JodbIOException(e);
        }finally{
            transactionContainer.reset();
            ticket.close();
            remoteTransactionContainer.disposeRemoteContainer();
        }
    }
View Full Code Here

    public synchronized void close() throws IOException {
        _closed = true;//TODO notify server?
        synchronized (_remoteTicketsCollector) {
            Iterator<IOTicket> iterator = _remoteTicketsCollector.keySet().iterator();
            while (iterator.hasNext()) {
                IOTicket ticket = iterator.next();
                ticket.close();
            }
        }
       
    }
View Full Code Here

TOP

Related Classes of com.mobixess.jodb.core.io.IOTicket

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.