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 */