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