1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * db_scheme_c.x
24 *
25 * Copyright 2015 Gary Mills
26 * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
27 * Use is subject to license terms.
28 */
29
30 #if RPC_XDR
31 %#include "ldap_xdr.h"
32 #endif /* RPC_XDR */
33
34 #if RPC_HDR
35 %#ifndef _DB_SCHEMA_H
36 %#define _DB_SCHEMA_H
37
38 #ifdef USINGC
39 %#include "db_item_c.h"
40 %#include "db_entry_c.h"
41 #else
42 %#include "db_item.h"
43 %#include "db_entry.h"
44 #endif /* USINGC */
45
46 const DB_KEY_CASE = TA_CASE;
47
48 #endif /* RPC_HDR */
49 %
50 %#include "nisdb_rw.h"
51 %
52 %/* Positional information of where field starts within record
53 % and its maximum length in terms of bytes. */
54 struct db_posn_info {
55 short int start_column;
56 short int max_len;
57 };
58
59 %/* Description of a key */
60 struct db_key_desc {
61 item *key_name;
62 unsigned long key_flags; /* corresponds to tc_flags in table_col defn */
63 int column_number; /* column within data structure */
64 db_posn_info where; /* where within record entry is 'key' located */
65 short int store_type; /* ISAM or SS ? maybe useless */
66 };
67
68 %/* Description of the data field. */
69 struct db_data_desc {
70 db_posn_info where; /* where within record entry is 'data' located */
71 short int store_type; /* ISAM or SS ? maybe useless */
72 };
73
74 %/* A scheme is a description of the fields of a table. */
75
76 #if RPC_HDR || RPC_XDR
77 #ifdef USINGC
78
79 struct db_scheme {
80 db_key_desc keys<>;
81 short int max_columns; /* applies to data only ? */
82 db_data_desc data;
83 __nisdb_rwlock_t scheme_rwlock;
84 };
85
86 typedef struct db_scheme * db_scheme_p;
87 #endif /* USINGC */
88 #endif /* RPC_HDR */
89
90 #ifndef USINGC
91 #ifdef RPC_HDR
92 %
93 %class db_scheme {
94 % protected:
95 % struct {
96 % int keys_len;
97 % db_key_desc *keys_val;
98 % } keys;
99 % short int max_columns; /* applies to data only ? */
100 % db_data_desc data;
101 % STRUCTRWLOCK(scheme);
102 %
103 % public:
104 %/* Accessor: return number of keys in scheme. */
105 % int numkeys() { return keys.keys_len; }
106 %
107 %/* Accessor: return location of array of key_desc's. */
108 % db_key_desc* keyloc () { return keys.keys_val; }
109 %
110 %/* Constructor: create empty scheme */
111 % db_scheme() {
112 % keys.keys_len = 0;
113 % keys.keys_val = NULL;
114 % (void) __nisdb_rwinit(&scheme_rwlock);
115 % }
116 %
117 %/* Constructor: create new scheme by making copy of 'orig'.
118 % All items within old scheme are also copied (i.e. no shared pointers). */
119 % db_scheme( db_scheme* orig );
120 %
121 %/* Constructor: create new sheme by using information in 'zdesc'. */
122 % db_scheme( table_obj * );
123 %
124 %/* Destructor: delete all keys associated with scheme and scheme itself. */
125 % ~db_scheme();
126 %
127 %/* Free space occupied by columns. */
128 % void clear_columns( int );
129 %
130 %/* Predicate: return whether given string is one of the index names
131 % of this scheme. If so, return in 'result' the index's number. */
132 % bool_t find_index( char*, int* );
133 %
134 %/* Print out description of table. */
135 % void print();
136 %
137 %/* Size of the non-MT/LDAP portion of the db_scheme structure */
138 % ulong_t oldstructsize(void) {
139 % return ((ulong_t)&(this->scheme_rwlock) - (ulong_t)this);
140 % }
141 %
142 %/* Locking methods */
143 %
144 % int acqexcl(void) {
145 % return (WLOCK(scheme));
146 % }
147 %
148 % int relexcl(void) {
149 % return (WULOCK(scheme));
150 % }
151 %
152 % int acqnonexcl(void) {
153 % return (RLOCK(scheme));
154 % }
155 %
156 % int relnonexcl(void) {
157 % return (RULOCK(scheme));
158 % }
159 %};
160
161 %typedef class db_scheme * db_scheme_p;
162 #endif /* RPC_HDR */
163 #endif /* USINGC */
164
165 #if RPC_HDR
166 %#endif /* _DB_SCHEMA_H */
167
168 #endif /* RPC_HDR */