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 2005 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 %#pragma ident "%Z%%M% %I% %E% SMI" 30 31 #if RPC_HDR 32 %#ifndef _DB_SCHEMA_H 33 %#define _DB_SCHEMA_H 34 35 #ifdef USINGC 36 %#include "db_item_c.h" 37 %#include "db_entry_c.h" 38 #else 39 %#include "db_item.h" 40 %#include "db_entry.h" 41 #endif /* USINGC */ 42 43 const DB_KEY_CASE = TA_CASE; 44 45 #endif /* RPC_HDR */ 46 % 47 %#include "nisdb_rw.h" 48 % 49 %/* Positional information of where field starts within record 50 % and its maximum length in terms of bytes. */ 51 struct db_posn_info { 52 short int start_column; 53 short int max_len; 54 }; 55 56 %/* Description of a key */ 57 struct db_key_desc { 58 item *key_name; 59 unsigned long key_flags; /* corresponds to tc_flags in table_col defn */ 60 int column_number; /* column within data structure */ 61 db_posn_info where; /* where within record entry is 'key' located */ 62 short int store_type; /* ISAM or SS ? maybe useless */ 63 }; 64 65 %/* Description of the data field. */ 66 struct db_data_desc { 67 db_posn_info where; /* where within record entry is 'data' located */ 68 short int store_type; /* ISAM or SS ? maybe useless */ 69 }; 70 71 %/* A scheme is a description of the fields of a table. */ 72 73 #if RPC_HDR || RPC_XDR 74 #ifdef USINGC 75 76 struct db_scheme { 77 db_key_desc keys<>; 78 short int max_columns; /* applies to data only ? */ 79 db_data_desc data; 80 __nisdb_rwlock_t scheme_rwlock; 81 }; 82 83 typedef struct db_scheme * db_scheme_p; 84 #endif /* USINGC */ 85 #endif /* RPC_HDR */ 86 87 #ifndef USINGC 88 #ifdef RPC_HDR 89 % 90 %class db_scheme { 91 % protected: 92 % struct { 93 % int keys_len; 94 % db_key_desc *keys_val; 95 % } keys; 96 % short int max_columns; /* applies to data only ? */ 97 % db_data_desc data; 98 % STRUCTRWLOCK(scheme); 99 % 100 % public: 101 %/* Accessor: return number of keys in scheme. */ 102 % int numkeys() { return keys.keys_len; } 103 % 104 %/* Accessor: return location of array of key_desc's. */ 105 % db_key_desc* keyloc () { return keys.keys_val; } 106 % 107 %/* Constructor: create empty scheme */ 108 % db_scheme() { 109 % keys.keys_len = 0; 110 % keys.keys_val = NULL; 111 % (void) __nisdb_rwinit(&scheme_rwlock); 112 % } 113 % 114 %/* Constructor: create new scheme by making copy of 'orig'. 115 % All items within old scheme are also copied (i.e. no shared pointers). */ 116 % db_scheme( db_scheme* orig ); 117 % 118 %/* Constructor: create new sheme by using information in 'zdesc'. */ 119 % db_scheme( table_obj * ); 120 % 121 %/* Destructor: delete all keys associated with scheme and scheme itself. */ 122 % ~db_scheme(); 123 % 124 %/* Free space occupied by columns. */ 125 % void clear_columns( int ); 126 % 127 %/* Predicate: return whether given string is one of the index names 128 % of this scheme. If so, return in 'result' the index's number. */ 129 % bool_t find_index( char*, int* ); 130 % 131 %/* Print out description of table. */ 132 % void print(); 133 % 134 %/* Size of the non-MT/LDAP portion of the db_scheme structure */ 135 % ulong_t oldstructsize(void) { 136 % return ((ulong_t)&(this->scheme_rwlock) - (ulong_t)this); 137 % } 138 % 139 %/* Locking methods */ 140 % 141 % int acqexcl(void) { 142 % return (WLOCK(scheme)); 143 % } 144 % 145 % int relexcl(void) { 146 % return (WULOCK(scheme)); 147 % } 148 % 149 % int acqnonexcl(void) { 150 % return (RLOCK(scheme)); 151 % } 152 % 153 % int relnonexcl(void) { 154 % return (RULOCK(scheme)); 155 % } 156 %}; 157 158 %typedef class db_scheme * db_scheme_p; 159 #endif /* RPC_HDR */ 160 #endif /* USINGC */ 161 162 #if RPC_HDR 163 %#endif /* _DB_SCHEMA_H */ 164 165 #endif /* RPC_HDR */ 166