1/* Query - query parsing and evaluation
2 *
3 * Copyright 2001-2004, Axel D��rfler, axeld@pinc-software.de.
4 * This file may be used under the terms of the MIT License.
5 *
6 * Adjusted by Ingo Weinhold <bonefish@cs.tu-berlin.de> for usage in RAM FS.
7 */
8#ifndef QUERY_H
9#define QUERY_H
10
11
12#include <OS.h>
13#include <SupportDefs.h>
14
15#include <util/DoublyLinkedList.h>
16
17#include "Index.h"
18#include "ramfs.h"
19
20
21namespace QueryParser {
22	template<typename QueryPolicy> class Query;
23};
24
25class Node;
26class Volume;
27
28
29#define B_QUERY_NON_INDEXED	0x00000002
30
31
32class Query : public DoublyLinkedListLinkImpl<Query> {
33public:
34							~Query();
35
36	static	status_t		Create(Volume* volume, const char* queryString,
37								uint32 flags, port_id port, uint32 token,
38								Query*& _query);
39
40			status_t		Rewind();
41			status_t		GetNextEntry(struct dirent* entry, size_t size);
42
43			void			LiveUpdate(Entry* entry, Node* node,
44								const char* attribute, int32 type,
45								const void* oldKey, size_t oldLength,
46								const void* newKey, size_t newLength);
47
48private:
49			struct QueryPolicy;
50			friend struct QueryPolicy;
51			typedef QueryParser::Query<QueryPolicy> QueryImpl;
52
53private:
54							Query(Volume* volume);
55
56			status_t		_Init(const char* queryString, uint32 flags,
57								port_id port, uint32 token);
58
59private:
60			Volume*			fVolume;
61			QueryImpl*		fImpl;
62};
63
64
65#endif	/* QUERY_H */
66