2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 * Copyright 1999-2004 The OpenLDAP Foundation.
5 * Portions Copyright 1999 Dmitry Kovalev.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
12 * A copy of this license is available in the file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
17 * This work was initially developed by Dmitry Kovalev for inclusion
18 * by OpenLDAP Software.
21 #ifndef __BACKSQL_SCHEMA_MAP_H__
22 #define __BACKSQL_SCHEMA_MAP_H__
24 typedef struct backsql_oc_map_rec {
26 * Structure of corresponding LDAP objectClass definition
29 #define BACKSQL_OC_NAME(ocmap) ((ocmap)->bom_oc->soc_cname.bv_val)
31 struct berval bom_keytbl;
32 struct berval bom_keycol;
33 /* expected to return keyval of newly created entry */
34 char *bom_create_proc;
35 /* in case create_proc does not return the keyval of the newly
37 char *bom_create_keyval;
38 /* supposed to expect keyval as parameter and delete
39 * all the attributes as well */
40 char *bom_delete_proc;
41 /* flags whether delete_proc is a function (whether back-sql
42 * should bind first parameter as output for return code) */
43 int bom_expect_return;
48 typedef struct backsql_at_map_rec {
49 /* Description of corresponding LDAP attribute type */
50 AttributeDescription *bam_ad;
51 /* ObjectClass if bam_ad is objectClass */
54 struct berval bam_from_tbls;
55 struct berval bam_join_where;
56 struct berval bam_sel_expr;
57 /* supposed to expect 2 binded values: entry keyval
58 * and attr. value to add, like "add_name(?,?,?)" */
60 /* supposed to expect 2 binded values: entry keyval
61 * and attr. value to delete */
62 char *bam_delete_proc;
63 /* for optimization purposes attribute load query
64 * is preconstructed from parts on schemamap load time */
66 /* following flags are bitmasks (first bit used for add_proc,
67 * second - for delete_proc) */
68 /* order of parameters for procedures above;
69 * 1 means "data then keyval", 0 means "keyval then data" */
71 /* flags whether one or more of procedures is a function
72 * (whether back-sql should bind first parameter as output
74 int bam_expect_return;
76 struct berval bam_sel_expr_u;
78 /* next mapping for attribute */
79 struct backsql_at_map_rec *bam_next;
82 #define BACKSQL_AT_MAP_REC_INIT { NULL, NULL, BER_BVC(""), BER_BVC(""), BER_BVNULL, NULL, NULL, NULL, 0, 0, BER_BVNULL, NULL }
84 /* defines to support bitmasks above */
85 #define BACKSQL_ADD 0x1
86 #define BACKSQL_DEL 0x2
88 #define BACKSQL_IS_ADD(x) ( BACKSQL_ADD & (x) )
89 #define BACKSQL_IS_DEL(x) ( BACKSQL_DEL & (x) )
91 #define BACKSQL_NCMP(v1,v2) ber_bvcmp((v1),(v2))
93 int backsql_load_schema_map( backsql_info *si, SQLHDBC dbh );
95 backsql_oc_map_rec *backsql_name2oc( backsql_info *si, struct berval *oc_name );
96 backsql_oc_map_rec *backsql_oc2oc( backsql_info *si, ObjectClass *oc );
97 backsql_oc_map_rec *backsql_id2oc( backsql_info *si, unsigned long id );
99 backsql_at_map_rec *backsql_name2at( backsql_oc_map_rec *objclass,
100 struct berval *at_name );
101 backsql_at_map_rec *backsql_ad2at( backsql_oc_map_rec *objclass,
102 AttributeDescription *ad );
103 int backsql_supad2at( backsql_oc_map_rec *objclass,
104 AttributeDescription *supad, backsql_at_map_rec ***pret );
105 int backsql_destroy_schema_map( backsql_info *si );
107 #endif /* __BACKSQL_SCHEMA_MAP_H__ */