1/* Copyright (C) 2005 Red Hat, Inc. */
2
3#ifndef _SEMANAGE_DATABASE_JOIN_INTERNAL_H_
4#define _SEMANAGE_DATABASE_JOIN_INTERNAL_H_
5
6#include "database.h"
7#include "handle.h"
8
9#ifndef DBASE_RECORD_JOIN_DEFINED
10typedef void *record1_t;
11typedef void *record2_t;
12#define DBASE_RECORD_JOIN_DEFINED
13#endif
14
15struct dbase_join;
16typedef struct dbase_join dbase_join_t;
17
18/* JOIN extension to RECORD interface - method table */
19typedef struct record_join_table {
20
21	/* Join two records together.
22	 * One of the provided records could be NULL */
23	int (*join) (semanage_handle_t * handle,
24		     const record1_t * record1,
25		     const record2_t * record2, record_t ** result);
26
27	/* Splits a record into two */
28	int (*split) (semanage_handle_t * handle,
29		      const record_t * record,
30		      record1_t ** split1, record2_t ** split2);
31
32} record_join_table_t;
33
34/* JOIN - initialization */
35extern int dbase_join_init(semanage_handle_t * handle,
36			   record_table_t * rtable,
37			   record_join_table_t * rjtable,
38			   dbase_config_t * join1,
39			   dbase_config_t * join2, dbase_join_t ** dbase);
40
41/* FILE - release */
42extern void dbase_join_release(dbase_join_t * dbase);
43
44/* JOIN - method table implementation */
45extern dbase_table_t SEMANAGE_JOIN_DTABLE;
46
47#endif
48