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
10 typedef void *record1_t;
11 typedef void *record2_t;
12 #define DBASE_RECORD_JOIN_DEFINED
13 #endif
14 
15 struct dbase_join;
16 typedef struct dbase_join dbase_join_t;
17 
18 /* JOIN extension to RECORD interface - method table */
19 typedef 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 */
35 extern 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 */
42 extern void dbase_join_release(dbase_join_t * dbase);
43 
44 /* JOIN - method table implementation */
45 extern dbase_table_t SEMANAGE_JOIN_DTABLE;
46 
47 #endif
48