FgForrest / evitaDB

evitaDB is a specialized database with an easy-to-use API for e-commerce systems. It is a low-latency NoSQL in-memory engine that handles all the complex tasks that e-commerce systems have to deal with on a daily basis. evitaDB is expected to act as a fast secondary lookup/search index used by front stores.
https://evitadb.io
Other
61 stars 7 forks source link

Filter was not yet called on selling price bitmap filter, this is not expected! #668

Closed novoj closed 2 weeks ago

novoj commented 2 weeks ago

Exception occurs for this query:

query(collection('Product'),filterBy(userFilter(and()),and(and(entityPrimaryKeyInSet(12785))),entityLocaleEquals('cs'),attributeInSet('productType', 'BASIC', 'SET', 'MASTER'),attributeEquals('status', 'ACTIVE'),priceInCurrency('CZK'),priceInPriceLists('jaro-leto-2024-cz', 'jaro-leto-2024-sk', 'podzim-zima-2023', 'jaro-leto-2023', 'podzim-zima-2022', 'black-friday-20', 'basic', 'reference', 'nulova-sazba-dph-eur', 'basic_milagro_cz'),priceValidInNow(),referenceHaving('stockVisibilities',and(entityHaving(and(attributeInSet('code', 'milagro_cz', '12', '1', '4', '6')))))),orderBy(attributeNatural('orderedQuantity', DESC)),require(priceType(WITH_TAX),strip(0, 20),entityFetch(attributeContent('ratingVotes', 'rating', 'availability', 'codeShort', 'relatedFiles', 'descriptionShort', 'productType', 'url', 'minOrderQuantity', 'name'),priceContentAll(),referenceContent('categories',entityFetch(attributeContent('code'),dataInLocales('cs'))),referenceContentWithAttributes('stocks',attributeContent('quantityOnStock'),entityFetch(attributeContent('name', 'code'),dataInLocales('cs'))),referenceContent('tags',entityFetch(attributeContent('isVisibleInDetail', 'name', 'code', 'isVisibleInFilter', 'isVisibleInListing'),dataInLocales('cs'))),referenceContent('parameterValues',filterBy(attributeEquals('variant', true)),entityFetch(attributeContent('code', 'name', 'order'),referenceContentWithAttributes('parameter',attributeContent('orderInParameter'),entityFetch(attributeContent('isVisibleInDetail', 'code'),dataInLocales('cs'))),dataInLocales('cs'))),referenceContent('master'),dataInLocales('cs')),priceHistogram(20),facetSummaryOfReference('stocks',IMPACT,entityFetch(attributeContent('name', 'code'),dataInLocales('cs'))),facetSummaryOfReference('parameterValues',IMPACT,filterGroupBy(attributeEquals('isVisibleInFilter', true)),orderBy(referenceProperty('parameter',attributeNatural('orderInParameter', ASC))),orderGroupBy(attributeNatural('order', ASC)),entityFetch(attributeContent('code', 'name', 'basicUnitValue'),dataInLocales('cs')),entityGroupFetch(attributeContent('code', 'name', 'description'),dataInLocales('cs'))),facetSummaryOfReference('tags',IMPACT,filterBy(attributeEquals('isVisibleInFilter', true)),entityFetch(attributeContent('name', 'code'),dataInLocales('cs')))))

Stacktrace:

io.evitadb.exception.GenericEvitaInternalError: Filter was not yet called on selling price bitmap filter, this is not expected!
    at io.evitadb.utils.Assert.isPremiseValid(Assert.java:89)
    at io.evitadb.core.query.filter.translator.price.alternative.SellingPriceAvailableBitmapFilter.getFilteredPriceRecords(SellingPriceAvailableBitmapFilter.java:140)
    at io.evitadb.core.query.algebra.prefetch.SelectionFormula.lambda$getFilteredPriceRecords$8(SelectionFormula.java:229)
    at java.base/java.util.Optional.map(Optional.java:260)
    at io.evitadb.core.query.algebra.prefetch.SelectionFormula.getFilteredPriceRecords(SelectionFormula.java:227)
    at io.evitadb.core.query.algebra.price.filteredPriceRecords.FilteredPriceRecords.lambda$collectFilteredPriceRecordsFromPriceRecordAccessors$5(FilteredPriceRecords.java:242)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
    at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
    at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
    at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
    at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
    at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
    at io.evitadb.core.query.algebra.price.filteredPriceRecords.FilteredPriceRecords.collectFilteredPriceRecordsFromPriceRecordAccessors(FilteredPriceRecords.java:243)
    at io.evitadb.core.query.sort.price.FilteredPriceRecordsCollector.computeResult(FilteredPriceRecordsCollector.java:119)
    at io.evitadb.core.query.sort.price.FilteredPriceRecordsCollector.<init>(FilteredPriceRecordsCollector.java:63)
    at io.evitadb.core.query.extraResult.translator.histogram.producer.PriceHistogramComputer.getPriceRecords(PriceHistogramComputer.java:364)
    at io.evitadb.core.query.extraResult.translator.histogram.producer.PriceHistogramComputer.compute(PriceHistogramComputer.java:304)
    at io.evitadb.core.query.extraResult.translator.histogram.producer.PriceHistogramComputer.compute(PriceHistogramComputer.java:63)
    at io.evitadb.core.query.extraResult.translator.histogram.producer.PriceHistogramProducer.fabricate(PriceHistogramProducer.java:110)