internal QCandidates(LocalTransaction a_trans, ClassMetadata a_classMetadata, QField a_field) { // Transaction necessary as reference to stream // root of the QCandidate tree // collection of all constraints // possible class information // possible field information // current executing constraint, only set where needed i_trans = a_trans; i_classMetadata = a_classMetadata; _field = a_field; if (a_field == null || a_field._fieldMetadata == null || !(a_field._fieldMetadata .GetHandler() is StandardReferenceTypeHandler)) { return; } ClassMetadata yc = ((StandardReferenceTypeHandler)a_field._fieldMetadata.GetHandler ()).ClassMetadata(); if (i_classMetadata == null) { i_classMetadata = yc; } else { yc = i_classMetadata.GetHigherOrCommonHierarchy(yc); if (yc != null) { i_classMetadata = yc; } } }
internal QConClass(Transaction trans, QCon parent, QField field, IReflectClass claxx ) : base(trans, parent, field, null) { // C/S if (claxx != null) { ObjectContainerBase container = trans.Container(); _classMetadata = container.ClassMetadataForReflectClass(claxx); if (_classMetadata == null) { // could be an aliased class, try to resolve. string className = claxx.GetName(); string aliasRunTimeName = container.Config().ResolveAliasStoredName(className); if (!className.Equals(aliasRunTimeName)) { _classMetadata = container.ClassMetadataForName(aliasRunTimeName); } } if (claxx.Equals(container._handlers.IclassObject)) { _classMetadata = (ClassMetadata)_classMetadata.TypeHandler(); } } _claxx = claxx; }
internal QCandidates(LocalTransaction a_trans, ClassMetadata a_classMetadata, QField a_field, bool isTopLevel) { // Transaction necessary as reference to stream // collection of all constraints // possible class information // possible field information // current executing constraint, only set where needed _result = new QueryResultCandidates(this); _isTopLevel = isTopLevel; i_trans = a_trans; _classMetadata = a_classMetadata; _field = a_field; if (a_field == null || a_field._fieldMetadata == null || !(a_field._fieldMetadata .GetHandler() is StandardReferenceTypeHandler)) { return; } ClassMetadata yc = ((StandardReferenceTypeHandler)a_field._fieldMetadata.GetHandler ()).ClassMetadata(); if (_classMetadata == null) { _classMetadata = yc; } else { yc = _classMetadata.GetHigherOrCommonHierarchy(yc); if (yc != null) { _classMetadata = yc; } } }
internal QConPath(Transaction a_trans, QCon a_parent, QField a_field) : base(a_trans , a_parent, a_field, null) { if (a_field != null) { _classMetadata = a_field.GetFieldType(); } }
internal QConClass(Transaction a_trans, QCon a_parent, QField a_field, IReflectClass claxx) : base(a_trans, a_parent, a_field, null) { // C/S if (claxx != null) { _classMetadata = a_trans.Container().ProduceClassMetadata(claxx); if (claxx.Equals(a_trans.Container()._handlers.IclassObject)) { _classMetadata = (ClassMetadata)_classMetadata.TypeHandler(); } } _claxx = claxx; }
// Our QConPath objects are just placeholders to fields, // so the parents are reachable. // If we find a "real" constraint, we throw the QPath // out and replace it with the other constraint. private void Morph(BooleanByRef removeExisting, QCon newConstraint, IReflectClass claxx) { bool mayMorph = true; if (claxx != null) { ClassMetadata yc = i_trans.Container().ProduceClassMetadata(claxx); if (yc != null) { IEnumerator i = IterateChildren(); while (i.MoveNext()) { QField qf = ((QCon)i.Current).GetField(); if (!yc.HasField(i_trans.Container(), qf.Name())) { mayMorph = false; break; } } } } // } if (mayMorph) { IEnumerator j = IterateChildren(); while (j.MoveNext()) { newConstraint.AddConstraint((QCon)j.Current); } if (HasJoins()) { IEnumerator k = IterateJoins(); while (k.MoveNext()) { QConJoin qcj = (QConJoin)k.Current; qcj.ExchangeConstraint(this, newConstraint); newConstraint.AddJoin(qcj); } } i_parent.ExchangeConstraint(this, newConstraint); removeExisting.value = true; } else { i_parent.AddConstraint(newConstraint); } }
// public void visit(Object a_tree) { // final QCandidate parent = (QCandidate) a_tree; // if (parent.createChild(this)) { // return; // } // // // No object found. // // All children constraints are necessarily false. // // Check immediately. // Iterator4 i = iterateConstraints(); // while(i.moveNext()){ // ((QCon)i.current()).visitOnNull(parent.getRoot()); // } // // } public void Filter(QField field, IParentCandidate parent) { if (parent.CreateChild(field, this)) { return; } // No object found. // All children constraints are necessarily false. // Check immediately. IEnumerator i = IterateConstraints(); while (i.MoveNext()) { ((QCon)i.Current).VisitOnNull(parent.GetRoot()); } }
public QConObject(Transaction a_trans, QCon a_parent, QField a_field, object a_object ) : base(a_trans) { // the constraining object // cache for the db4o object ID // the YapClass // needed for marshalling the request // C/S only i_parent = a_parent; if (a_object is ICompare) { a_object = ((ICompare)a_object).Compare(); } i_object = a_object; i_field = a_field; }
public QConObject(Transaction a_trans, QCon a_parent, QField a_field, object a_object ) : base(a_trans) { // the constraining object // cache for the db4o object ID // the YapClass // needed for marshalling the request // C/S only i_parent = a_parent; if (a_object is ICompare) { a_object = ((ICompare)a_object).Compare(); } i_object = a_object; i_field = a_field; }
private FieldMetadata FieldMetadataFrom(QField qField, ClassMetadata type) { var existingField = qField.GetFieldMetadata(); if (existingField != null) { return(existingField); } var field = type.FieldMetadataForName(qField.Name()); if (field != null) { field.Alive(); } return(field); }
private FieldMetadata FieldMetadataFrom(QField qField, Db4objects.Db4o.Internal.ClassMetadata type) { FieldMetadata existingField = qField.GetFieldMetadata(); if (existingField != null) { return(existingField); } FieldMetadata field = type.FieldMetadataForName(qField.Name()); if (field != null) { field.Alive(); } return(field); }
public virtual void Filter(QField field, IParentCandidate candidate) { candidate.UseField(field); bool res = true; bool processed = false; if (_checkClassMetadataOnly) { ClassMetadata classMetadata = candidate.ClassMetadata(); if (classMetadata != null) { res = i_evaluator.Not(_classMetadata.GetHigherHierarchy(classMetadata) == _classMetadata ); processed = true; } } if (!processed) { res = Evaluate(candidate); } Visit1(candidate.GetRoot(), this, res); }
internal virtual void UseField(QField a_field) { Read(); if (_bytes == null) { _fieldMetadata = null; return; } ReadClassMetadata(); _member = null; if (a_field == null) { _fieldMetadata = null; return; } if (_classMetadata == null) { _fieldMetadata = null; return; } _fieldMetadata = FieldMetadataFrom(a_field, _classMetadata); if (_fieldMetadata == null) { FieldNotFound(); return; } HandlerVersion handlerVersion = _classMetadata.SeekToField(Transaction(), _bytes, _fieldMetadata); if (handlerVersion == HandlerVersion.Invalid) { FieldNotFound(); return; } _handlerVersion = handlerVersion._number; }
internal bool Filter(QField field, IFieldFilterable filterable) { return _result.Filter(field, filterable); }
private FieldMetadata FieldMetadataFrom(QField qField, ClassMetadata type) { var existingField = qField.GetFieldMetadata(); if (existingField != null) { return existingField; } var field = type.FieldMetadataForName(qField.Name()); if (field != null) { field.Alive(); } return field; }
internal virtual void UseField(QField a_field) { Read(); if (_bytes == null) { _fieldMetadata = null; return; } ReadClassMetadata(); _member = null; if (a_field == null) { _fieldMetadata = null; return; } if (_classMetadata == null) { _fieldMetadata = null; return; } _fieldMetadata = FieldMetadataFrom(a_field, _classMetadata); if (_fieldMetadata == null) { FieldNotFound(); return; } var handlerVersion = _classMetadata.SeekToField(Transaction(), _bytes, _fieldMetadata); if (handlerVersion == HandlerVersion.Invalid) { FieldNotFound(); return; } _handlerVersion = handlerVersion._number; }
public _IVisitor4_68(IFieldFilterable filterable, QField field) { this.filterable = filterable; this.field = field; }
internal QCandidates(LocalTransaction a_trans, ClassMetadata a_classMetadata, QField a_field) { // Transaction necessary as reference to stream // root of the QCandidate tree // collection of all constraints // possible class information // possible field information // current executing constraint, only set where needed i_trans = a_trans; i_classMetadata = a_classMetadata; _field = a_field; if (a_field == null || a_field._fieldMetadata == null || !(a_field._fieldMetadata .GetHandler() is StandardReferenceTypeHandler)) { return; } ClassMetadata yc = ((StandardReferenceTypeHandler)a_field._fieldMetadata.GetHandler ()).ClassMetadata(); if (i_classMetadata == null) { i_classMetadata = yc; } else { yc = i_classMetadata.GetHigherOrCommonHierarchy(yc); if (yc != null) { i_classMetadata = yc; } } }
internal virtual void PrepareComparison(QField a_field) { if (IsNullConstraint() & !a_field.IsArray()) { _preparedComparison = Null.Instance; } else { _preparedComparison = a_field.PrepareComparison(Context(), i_object); } }
public _IVisitor4_68(IFieldFilterable filterable, QField field) { this.filterable = filterable; this.field = field; }
internal virtual QCon AddSharedConstraint (QField a_field, object a_object) { var newConstraint = new QConObject(i_trans, this, a_field, a_object); AddConstraint(newConstraint); return newConstraint; }
internal virtual bool Filter(QField field, IFieldFilterable filterable) { ToQCandidates(); if (_candidates != null) { _candidates.Traverse(new _IVisitor4_68(filterable, field)); _candidates = (QCandidateBase)_candidates.Filter(new _IPredicate4_73()); } return _candidates != null; }
internal bool Filter(QField field, IFieldFilterable filterable) { return(_result.Filter(field, filterable)); }
internal QCandidates(LocalTransaction a_trans, ClassMetadata a_classMetadata, QField a_field, bool isTopLevel) { // Transaction necessary as reference to stream // collection of all constraints // possible class information // possible field information // current executing constraint, only set where needed _result = new QueryResultCandidates(this); _isTopLevel = isTopLevel; i_trans = a_trans; _classMetadata = a_classMetadata; _field = a_field; if (a_field == null || a_field._fieldMetadata == null || !(a_field._fieldMetadata .GetHandler() is StandardReferenceTypeHandler)) { return; } ClassMetadata yc = ((StandardReferenceTypeHandler)a_field._fieldMetadata.GetHandler ()).ClassMetadata(); if (_classMetadata == null) { _classMetadata = yc; } else { yc = _classMetadata.GetHigherOrCommonHierarchy(yc); if (yc != null) { _classMetadata = yc; } } }
internal virtual bool Attach(QQuery query, string a_field) { Db4objects.Db4o.Internal.Query.Processor.QCon qcon = this; ClassMetadata yc = GetYapClass(); bool[] foundField = new bool[] { false }; ForEachChildField(a_field, new _IVisitor4_101(foundField, query)); if (foundField[0]) { return true; } QField qf = null; if (yc == null || yc.HoldsAnyClass()) { int[] count = new int[] { 0 }; FieldMetadata[] yfs = new FieldMetadata[] { null }; i_trans.Container().ClassCollection().AttachQueryNode(a_field, new _IVisitor4_119 (yfs, count)); if (count[0] == 0) { return false; } if (count[0] == 1) { qf = yfs[0].QField(i_trans); } else { qf = new QField(i_trans, a_field, null, 0, 0); } } else { if (yc.IsTranslated()) { i_trans.Container()._handlers.DiagnosticProcessor().DescendIntoTranslator(yc, a_field ); } FieldMetadata yf = yc.FieldMetadataForName(a_field); if (yf != null) { qf = yf.QField(i_trans); } if (qf == null) { qf = new QField(i_trans, a_field, null, 0, 0); } } QConPath qcp = new QConPath(i_trans, qcon, qf); query.AddConstraint(qcp); qcon.AddConstraint(qcp); return true; }
// public void visit(Object a_tree) { // final QCandidate parent = (QCandidate) a_tree; // if (parent.createChild(this)) { // return; // } // // // No object found. // // All children constraints are necessarily false. // // Check immediately. // Iterator4 i = iterateConstraints(); // while(i.moveNext()){ // ((QCon)i.current()).visitOnNull(parent.getRoot()); // } // // } public void Filter(QField field, IParentCandidate parent) { if (parent.CreateChild(field, this)) { return; } // No object found. // All children constraints are necessarily false. // Check immediately. IEnumerator i = IterateConstraints(); while (i.MoveNext()) { ((QCon)i.Current).VisitOnNull(parent.GetRoot()); } }
internal virtual Db4objects.Db4o.Internal.Query.Processor.QCon AddSharedConstraint (QField a_field, object a_object) { QConObject newConstraint = new QConObject(i_trans, this, a_field, a_object); AddConstraint(newConstraint); return newConstraint; }
internal virtual bool CreateChild(QCandidates a_candidates) { if (!_include) { return(false); } if (_fieldMetadata != null) { ITypeHandler4 handler = _fieldMetadata.GetHandler(); if (handler != null) { QueryingReadContext queryingReadContext = new QueryingReadContext(Transaction(), MarshallerFamily().HandlerVersion(), _bytes, _key); ITypeHandler4 arrayElementHandler = Handlers4.ArrayElementHandler(handler, queryingReadContext ); if (arrayElementHandler != null) { int offset = queryingReadContext.Offset(); bool outerRes = true; // The following construct is worse than not ideal. // For each constraint it completely reads the // underlying structure again. The structure could b // kept fairly easy. TODO: Optimize! IEnumerator i = a_candidates.IterateConstraints(); while (i.MoveNext()) { QCon qcon = (QCon)i.Current; QField qf = qcon.GetField(); if (qf == null || qf.Name().Equals(_fieldMetadata.GetName())) { QCon tempParent = qcon.Parent(); qcon.SetParent(null); QCandidates candidates = new QCandidates(a_candidates.i_trans, null, qf); candidates.AddConstraint(qcon); qcon.SetCandidates(candidates); ReadArrayCandidates(handler, queryingReadContext.Buffer(), arrayElementHandler, candidates ); queryingReadContext.Seek(offset); bool isNot = qcon.IsNot(); if (isNot) { qcon.RemoveNot(); } candidates.Evaluate(); ByRef pending = ByRef.NewInstance(); bool[] innerRes = new bool[] { isNot }; candidates.Traverse(new _IVisitor4_160(innerRes, isNot, pending)); // Collect all pending subresults. // We need to change // the // constraint here, so // our // pending collector // uses // the right // comparator. // We only keep one // pending result // for // all array // elements. // and memorize, // whether we had a // true or a false // result. // or both. if (isNot) { qcon.Not(); } // In case we had pending subresults, we // need to communicate // them up to our root. if (((Tree)pending.value) != null) { ((Tree)pending.value).Traverse(new _IVisitor4_229(this)); } if (!innerRes[0]) { // Again this could be double triggering. // // We want to clean up the "No route" // at some stage. qcon.Visit(GetRoot(), qcon.Evaluator().Not(false)); outerRes = false; } qcon.SetParent(tempParent); } } return(outerRes); } // We may get simple types here too, if the YapField was null // in the higher level simple evaluation. Evaluate these // immediately. if (Handlers4.IsQueryLeaf(handler)) { a_candidates.i_currentConstraint.Visit(this); return(true); } } } if (_fieldMetadata == null) { return(false); } if (_fieldMetadata is NullFieldMetadata) { return(false); } _classMetadata.SeekToField(Transaction(), _bytes, _fieldMetadata); Db4objects.Db4o.Internal.Query.Processor.QCandidate candidate = ReadSubCandidate( a_candidates); if (candidate == null) { return(false); } // fast early check for ClassMetadata if (a_candidates.i_classMetadata != null && a_candidates.i_classMetadata.IsStronglyTyped ()) { ITypeHandler4 handler = _fieldMetadata.GetHandler(); if (Handlers4.IsUntyped(handler)) { handler = TypeHandlerFor(candidate); } if (handler == null) { return(false); } } AddDependant(a_candidates.Add(candidate)); return(true); }
public virtual void Filter(QField field, IParentCandidate candidate) { candidate.UseField(field); bool res = true; bool processed = false; if (_checkClassMetadataOnly) { ClassMetadata classMetadata = candidate.ClassMetadata(); if (classMetadata != null) { res = i_evaluator.Not(_classMetadata.GetHigherHierarchy(classMetadata) == _classMetadata ); processed = true; } } if (!processed) { res = Evaluate(candidate); } Visit1(candidate.GetRoot(), this, res); }
private FieldMetadata FieldMetadataFrom(QField qField, Db4objects.Db4o.Internal.ClassMetadata type) { FieldMetadata existingField = qField.GetFieldMetadata(); if (existingField != null) { return existingField; } FieldMetadata field = type.FieldMetadataForName(qField.Name()); if (field != null) { field.Alive(); } return field; }