package {package};

import org.teamapps.universaldb.pojo.*;
import org.teamapps.universaldb.record.*;
import org.teamapps.universaldb.index.text.*;
import org.teamapps.universaldb.index.translation.*;
import org.teamapps.universaldb.index.bool.*;
import org.teamapps.universaldb.index.file.*;
import org.teamapps.universaldb.index.enumeration.*;
import org.teamapps.universaldb.index.numeric.*;
import org.teamapps.universaldb.index.reference.value.*;
import org.teamapps.universaldb.index.reference.multi.*;
import org.teamapps.universaldb.index.reference.single.*;
import org.teamapps.universaldb.index.binary.*;
import org.teamapps.universaldb.query.*;


import java.util.*;
import java.util.function.Function;
{imports}

public interface {query} extends Query<{type}> {

    static {query} create() {
        return new {udbQuery}();
    }

    {query} fullTextFilter(TextFilter textFilter, String... fieldNames);

    {query} parseFullTextFilter(String query, String... fieldNames);

{methods}
    {query} andOr({query}... queries);

    {query} customFilter(Function<{type}, Boolean> customFilter);

    List<{type}> execute();

    List<{type}> executeOnDeletedRecords();

    {type} executeExpectSingleton();

    BitSet executeToBitSet();

    List<{type}> execute(String sortFieldName, boolean ascending, String ... path);

    List<{type}> execute(int startIndex, int length, Sorting sorting);

}

