6659 nvlist_free(NULL) is a no-op
[illumos-gate.git] / usr / src / lib / libnisdb / db_scheme_c.x
blob391d707670d097a3eeaf0d3e93dcdef71d94799c
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  */
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  */
30 #if RPC_XDR
31 %#include "ldap_xdr.h"
32 #endif /* RPC_XDR */
34 #if RPC_HDR
35 %#ifndef _DB_SCHEMA_H
36 %#define _DB_SCHEMA_H
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 */
46 const DB_KEY_CASE = TA_CASE;
48 #endif /* RPC_HDR */
50 %#include "nisdb_rw.h"
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;
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 */
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 */
74 %/* A scheme is a description of the fields of a table. */
76 #if RPC_HDR || RPC_XDR
77 #ifdef USINGC
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;
86 typedef struct db_scheme  * db_scheme_p;
87 #endif /* USINGC */
88 #endif /* RPC_HDR */
90 #ifndef USINGC
91 #ifdef RPC_HDR
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);
103 % public:
104 %/* Accessor: return number of keys in scheme. */
105 %  int numkeys() { return keys.keys_len; }
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 %  }
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 );
121 %/* Constructor:  create new sheme by using information in 'zdesc'. */
122 %  db_scheme( table_obj * );
124 %/* Destructor:  delete all keys associated with scheme and scheme itself. */
125 %  ~db_scheme();
127 %/* Free space occupied by columns. */
128 %  void clear_columns( int );
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* );
134 %/* Print out description of table. */
135 %  void print();
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 %  }
142 %/* Locking methods */
144 %  int acqexcl(void) {
145 %       return (WLOCK(scheme));
146 %  }
148 %  int relexcl(void) {
149 %       return (WULOCK(scheme));
150 %  }
152 %  int acqnonexcl(void) {
153 %       return (RLOCK(scheme));
154 %  }
156 %  int relnonexcl(void) {
157 %       return (RULOCK(scheme));
158 %  }
161 %typedef class db_scheme * db_scheme_p;
162 #endif /* RPC_HDR */
163 #endif /* USINGC */
165 #if RPC_HDR
166 %#endif /* _DB_SCHEMA_H */
168 #endif /* RPC_HDR */