Unify DataServer: RHLI Reference

Transcription

Unify DataServer: RHLI Reference
Unify DataServer:
RHLI Reference
R
E 1996, 1997, 2001, 2005 by Unify Corporation, Sacramento, California, USA
All rights reserved. Printed in the United States of America.
No part of this document may be reproduced, transmitted, transcribed, stored in a retrieval system, or
translated into any language or computer language, in any form or by any means, electronic, mechanical,
magnetic, optical, chemical, manual or otherwise without the prior written consent of Unify Corporation.
Unify Corporation makes no representations or warranties with respect to the contents of this document
and specifically disclaims any implied warranties of merchantability or fitness for any particular purpose.
Further, Unify Corporation reserves the right to revise this document and to make changes from time to
time in its content without being obligated to notify any person of such revisions or changes.
The Software described in this document is furnished under a Software License Agreement. The Software
may be used or copied only in accordance with the terms of the license agreement. It is against the law to
copy the Software on tape, disk, or any other medium for any purpose other than that described in the
license agreement.
Unify Corporation values and appreciates any comments you may have concerning our products or this
document. Please address comments to:
Product Manager
Unify Corporation
2101 Arena Boulevard Ste. 100
Sacramento, CA 95834-1922
(800) 248-6439
(916) 928-6400
FAX (916) 928-6406
UNIFY, ACCELL, VISION, and the Unify Logo are registered trademarks of Unify Corporation. Unify
DataServer is a trademark of Unify Corporation. UNIX is a registered trademark of the Open Group in
the United States and other countries. The X Window System is a product of the Massachusetts Institute of
Technology. Motif, OSF, and OSF/Motif are trademarks of Open Software Foundation, Inc. SYBASE is a
registered trademark, and SQL Server, DBĆLibrary, and Open Server are trademarks of Sybase, Inc.
INFORMIX is a registered trademark of Informix Software, Inc., a subsidiary of IBM. INGRES is a
trademark of Computer Associates International, Inc. ORACLE is a registered trademark of Oracle
Corporation. Sun is a registered trademark, and SunView, SunĆ3, SunĆ4, X11/NeWS, SunOS, PCĆNFS, and
Open Windows are trademarks of Sun Microsystems. All SPARC trademarks are trademarks or registered
trademarks of SPARC International, Inc. SPARCstation is licensed exclusively to Sun Microsystems, Inc.
Novell is a registered trademark of Novell, Inc. Macintosh is a trademark of Apple Computer, Inc.
Microsoft, MS, MSĆDOS, and Windows are registered trademarks of Microsoft Corporation. All other
products or services mentioned herein may be registered trademarks, trademarks, or service marks of their
respective manufacturers, companies, or organizations.
Part Number: 7806-02
2
Contents
About This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Related Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Syntax Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Function Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
11
12
12
12
Function Names and Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
Function Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
Function Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Locking Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Security Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Data Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Name Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ID Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Journal Access Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ordered Access Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML Processing Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
19
19
20
20
21
22
23
23
24
25
25
25
Returned Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
RHLI Application Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Include Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
Data Types and Null Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Converting Internal/External Data Formats . . . . . . . . . . . . . . . . . . .
Converting Internal to External Format . . . . . . . . . . . . . . . . . . .
Converting External to Internal Format . . . . . . . . . . . . . . . . . . .
Handling String Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Handling U_AMT data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
35
35
35
36
36
Referencing Database Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compile-Time Name Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Runtime Name Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
38
41
ID Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
3
4
Automatic ID Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Partial ID Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Manual ID Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Initializing Mapping Structures . . . . . . . . . . . . . . . . . . . . . . . . .
Using Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using a Custom ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
45
46
47
48
48
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Status Values of Function Operations . . . . . . . . . . . . . . . . . . . . . . .
The Status and Statusl Parameters . . . . . . . . . . . . . . . . . . . . . . . . . .
Testing for Partial Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Testing for Complete Failure . . . . . . . . . . . . . . . . . . . . . . . . . . .
Retrieving a Status Value Message . . . . . . . . . . . . . . . . . . . . . . .
Most Common RHLI Function Status Values . . . . . . . . . . . . . . . . .
System Error Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Error Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
51
51
52
53
54
54
61
61
Transaction Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Type 2 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Type 1 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Type 0 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
62
63
63
Scanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
An example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
66
Compiling and Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compiling With ucc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Loading Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
70
72
The RHLI Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
About the Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Structure Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
77
The DBAUTH Structure: Schema Information . . . . . . . . . . . . . . . . . .
80
The DBBTREE Structure: B-tree Index Information . . . . . . . . . . . . . .
81
The DBCGRP Structure: Column Group Information . . . . . . . . . . . . .
83
The DBCOLNM Structure: Column Name Information . . . . . . . . . . .
85
The DBHASH Structure: Hash Table Index Information . . . . . . . . . . .
86
The DBINFO Structure: Database Information . . . . . . . . . . . . . . . . . .
88
The DBLINK Structure: Link Information . . . . . . . . . . . . . . . . . . . . . .
90
The DBTABLE Structure: Table Information . . . . . . . . . . . . . . . . . . . .
92
The DBTBLNM Structure: Table Name Information . . . . . . . . . . . . . .
99
The DBUSER Structure: User and Default Schema Information . . . . .
100
The DBVOLM Structure: Volume Information . . . . . . . . . . . . . . . . . .
101
Contents
Contents
The UACSINF Structure: Access Method Information . . . . . . . . . . . .
105
The UATHINF Structure: Schema Information . . . . . . . . . . . . . . . . . .
107
The UATHMAP Structure: Authorization ID Mapping . . . . . . . . . . . .
108
The UBTINF Structure: B-tree Information . . . . . . . . . . . . . . . . . . . . .
109
The UBTMAP Structure: B-tree ID Mapping . . . . . . . . . . . . . . . . . . .
111
The UCGPINF Structure: Column Group Information . . . . . . . . . . . .
112
The UCOLINF Structure: Column Information . . . . . . . . . . . . . . . . . .
113
The UCOLMAP Structure: Column ID Mapping . . . . . . . . . . . . . . . . .
116
The UDBINF Structure: Database Information . . . . . . . . . . . . . . . . . .
118
The UGRTDS Structure: Grant Privilege Descriptor . . . . . . . . . . . . . .
120
The UHSHMAP Structure: Hash Table ID Mapping . . . . . . . . . . . . . .
124
The UHTINF Structure: Hash Table Information . . . . . . . . . . . . . . . . .
125
The UJRNINF Structure: Journal Information . . . . . . . . . . . . . . . . . . .
127
The ULNKINF Structure: Link Information . . . . . . . . . . . . . . . . . . . .
129
The ULNKMAP Structure: Link ID Mapping . . . . . . . . . . . . . . . . . . .
130
The UNIPCOLL Structure: Column Access Information . . . . . . . . . . .
131
The UNIPEXT Structure: Column Conversion Information . . . . . . . .
140
The UOACOLS Structure: Ordered Access Row Order . . . . . . . . . . . .
141
The URVKDS Structure: Revoke Privilege Descriptor . . . . . . . . . . . .
142
The UTBLINF Structure: Table Information . . . . . . . . . . . . . . . . . . . .
145
The UTBLMAP Structure: Table ID Mapping . . . . . . . . . . . . . . . . . . .
148
The UTXINF Structure: Transaction Information . . . . . . . . . . . . . . . .
150
The UTXOPT Structure: Begin Transaction Options . . . . . . . . . . . . . .
152
The UUSRINF Structure: User Information . . . . . . . . . . . . . . . . . . . . .
154
The UVOLINF Structure: Volume Information . . . . . . . . . . . . . . . . . .
155
The UVOLMAP Structure: Volume ID Mapping . . . . . . . . . . . . . . . . .
158
Function Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
uabttx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
161
uaddath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
163
uaddbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
165
uaddcgp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
167
uaddcnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
169
uadddb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
171
5
6
uaddhsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
173
uaddlnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
175
uaddprf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
178
uaddprm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
180
uaddprv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
182
uaddtbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
185
uaddtnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188
uaddusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
190
uaddvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
192
ualcscn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
194
ualctbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
196
uallath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
199
uallbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
201
uallcgp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
203
uallcol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
206
uallhsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
208
ualllnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
210
uallpid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
212
ualltbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
214
ualltx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
216
uallusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
218
uallvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
220
ubegord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
222
ubegscn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
225
ubegtx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
227
ubndath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
229
ubndbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
231
ubndcol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
233
ubnddb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
235
ubndhsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
237
ubndlnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
239
ubndtbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
241
ubndusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
243
Contents
Contents
ubndvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
245
ucbgtx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
247
uclritr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
249
uclsdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
251
uclsjrn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
253
ucmttx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
255
ucrypwd, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
257
udelrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
259
udrpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
261
udrpbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
263
udrpcgp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
265
udrpcnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
267
udrphsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
269
udrplnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
271
udrpprf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
273
udrpprm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
275
udrpprv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
277
udrptbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
280
udrptnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
282
udrpusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
284
udrpvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
286
uendord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
288
uendscn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
289
uexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
291
uextint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
292
ufchath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
295
ufchcnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
297
ufchjrn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
300
ufchlnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
302
ufchmsg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
305
ufchord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
307
ufchrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
310
ufchscn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
312
7
8
ufchtbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
314
ufchtnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
317
ufrescn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
319
uinfacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
321
uinfath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
323
uinfbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
326
uinfcgp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
329
uinfcol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
332
uinfdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
335
uinfhsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
338
uinflck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
341
uinflnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
344
uinfsch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
347
uinfscn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
349
uinftbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
351
uinftx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
355
uinfusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
357
uinfvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
360
uinimsg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
363
uinsand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
365
uinsbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
367
uinsor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
372
uinsprj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
375
uinsrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
377
uinssrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
379
uinstbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
381
uintext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
382
ulckdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
385
ulckrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
387
ulcksch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
390
ulcktbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
392
ulogmsg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
394
umapath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
396
Contents
Contents
umapbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
398
umapcol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
400
umaphsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
402
umaplnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
404
umaptbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
406
umapvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
408
umodath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
410
umodbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
412
umoddb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
414
umodhsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
416
umodlnk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
418
umodusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
420
umodvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
422
unumath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
424
unumcgp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
426
unumchd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
428
unumcol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
430
unumprn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
432
unumrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
434
unumtbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
436
unumusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
438
unumvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
440
uopndb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
442
uopnjrn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
447
upkfrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
449
uposord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
451
usetitr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
453
uskrord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
456
utrnctbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
458
uulkdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
460
uulkrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
461
uulksch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
463
uulktbl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
465
9
10
uupdrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLAddAttribute() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLCreateElement() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLDeleteAttribute() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLDeleteCurrentElement() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLDeleteCurrentElementValue() . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLGetAttributeCount() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLGetAttributeNames() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLGetAttributeValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLGetAttributeValues() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLGetCurrentElementName() . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLGetErrorInfo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLGetValueOfCurrentElement() . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLModifyElementValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLMoveToFirstChild() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLMoveToLastChild() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLMoveToNextSibling() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLMoveToParentElement() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLMoveToPreviousSibling() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLMoveToRootElement() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLParse() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uXMLSetAttributeValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
467
469
471
473
475
477
479
481
483
485
487
489
491
493
495
497
499
501
503
505
507
509
511
Appendixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
513
Appendix A: Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
An Ordered Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Name Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ID Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Journaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Text Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
515
516
520
524
528
532
534
536
539
542
Contents
About This Manual
This document is written for C programmers who want to access a Unify
DataServer database through the Relational Host Language Interface
(RHLI).
The RHLI is a library of more than 100 functions. To access the functions,
you must include RHLI header files and use Unify DataServer tools to
compile and load the C program that contains the functions.
You use the functions to create and change date in a Unify DataServer
database. For instance, you can use RHLI functions to perform the following
tasks:
create a database
define database structures
add data to a database
retrieve data from a database
modify data stored in a database
delete data stored in a database
retrieve information about database objects
The first chapter of this manual describes the categories of functions and
gives a brief description of each function. The chapter also describes the
function naming conventions. The second chapter describes the C
structures used with many of the functions. The third chapter describes
all of the RHLI functions in alphabetical order.
Related Documents
This manual describes the functions in reference-style format. For a
description of RHLI concepts, see Unify DataServer: Developing a
Database.
11
Syntax Conventions
Icons
This section describes the syntax and naming conventions used to
describe the functions described in this manual.
bold
Indicates a keyword, structure name, or data type that
must be entered as shown.
italic
Indicates an argument or parameter name that you
supply.
The manual uses the following icons:
Tip
A Tip contains helpful information.
Warning
A Warning cautions against actions that could cause data loss or damage
to the database.
Additional Help
Additional Help tells you where to find more information about described
topics.
Function Format
Each function description is divided into several parts:
Header
Name of the function.
Summary statement (following the header bar)
A brief statement of the function’s purpose.
12
Syntax
Syntax for the function.
Arguments
Required and optional arguments that are used when
calling the function.
Description
Function usage and any special conditions and notes.
Status Values
Indicates the status of the function’s operation.statusl is a list
of one or more values indicating the status of each object
operation corresponding to the object list for the function. Each
statusl value can be checked to determine which objects
incurred the error.
Security
Permissions required to execute the function if other than
a regular user.
Example
Example of function usage or a reference to the
Examples appendix.
See Also
Cross references to related information.
13
14
Function Names and
Categories
15
Chapter
Focus
This chapter describes the naming conventions, categories and returned
values of the RHLI functions.
16
Function Names and Categories
Function Naming Conventions
Each RHLI function has a seven-character name. The name is created by
combining the operation that the function performs and the object the
function operates on.
For instance, the ufchrow function fetches a row. The following diagram
shows how the function name consists of an operation and an object
abbreviation.
RHLI Function Naming Conventions
PREFIX
OPERATION
OBJECT
for all RHLI
the
object the
( prefix
) ( indicates
) ( database
)
functions
RHLI operation
operation acts on
The following tables list the operations and object abbreviations that
compose the RHLI function names.
Not every combination of the operations and object abbreviations create a
valid RHLI function.
Function Names and Categories
17
Operation Abbreviations Used in Function Names
Op
Description
Op
abt
add
alc
all
beg
bnd
cbg
cir
clr
cls
cmt
del
drp
end
exit
ext
abort
add
allocate
get all
begin/initiate
name bind
commit and begin
clear a condition
clear a condition
close
commit
delete
drop/delete
end/terminate
program termination
convert from external
format
fetch/reference
free/deallocate
grt
inf
ins
int
fch
fre
Description
grant
get information
insert
convert from internal
format
lck
lock
log
make a record of
map
map a compile-time ID to
a runtime ID
mod
modify
num
retrieve number of
opn
open
pkf
primary key fetch
pos
position
rvk
revoke
set
set a condition
skr
seek to a row
ulk
unlock
upd
update
Object Abbreviations Used in Function Names
Obj
Description
Obj
Description
and
ath
bt
cgp
chd
cnm
col
db
ext
scan “and” groups
authorizations/schemas
B-trees
column group
child of link relationship
column names
columns
databases
convert to external
format
hash tables
convert to internal format
interrupt
journal
links
messages
or
ord
prf
prj
prm
prn
scan “or” groups
ordered access
volume preferences
scan projection list
permissions
parent or link
relationship
privileges
database row
scan
scan sort
database table
table names
transaction
users
volumes
hsh
int
itr
jrn
lnk
msg
18
prv
row
scn
srt
tbl
tnm
tx
usr
vol
Function Names and Categories
Function Categories
Functions are categorized into the following eleven categories:
message handling
transaction management
locking management
security management
data definition
name binding
ID mapping
scanning
data manipulation
journal access
ordered access
Message Handling
Message functions access the message gathering facilities of the
database.
ufchmsg
uinimsg
ulogmsg
Transaction
Management
Transaction management functions begin, commit, and, abort
transactions.
uabttx
ubegtx
ucbgtx
ucmttx
uinftx
Function Names and Categories
Retrieve the message corresponding to a status value
Initialize the messageĆlogging facilities
Append a message to the error log
Abort a transaction
Start a transaction
Commit a transaction and start a new transaction
Commit a transaction
Retrieve transaction information
19
Locking
Management
Locking management functions manipulate locks on and retrieve lock
information for databases, tables, and rows.
uinflck
uinfsch
ulckdb
ulckrow
ulcksch
ulcktbl
uulkdb
uulkrow
uulksch
uulktbl
Security
Management
Security management functions grant and revoke permissions and
privileges to and from users and schemas.
uaddprm
uaddath
uaddprv
uaddusr
ucrypwd
udrpath
udrpprm
udrpprv
udrpusr
ufchath
uinfath
uinftx
uinfusr
umodath
umodusr
20
Retrieve data lock information
Retrieve table definition lock information
Lock a database
Lock a row
Lock a table definition
Lock a table
Unlock a database
Unlock a row
Unlock a table definition
Unlock a table
Grant schema access
Add a schema to the database
Grant user or schema privileges
Add a user to the database and/or set a user's default
schema
Encrypt a password
Drop a schema from the database
Revoke schema access
Revoke user or schema privileges
Drop a user from the database
Set a current schema for a user
Retrieve schema information
Retrieve transaction information
Retrieve user information
Modify a schema name
Modify a user name and default schema
Function Names and Categories
Data Definition
Data definition functions add, drop, and modify databases, volumes,
tables, columns, column groups, users, schemas, B-trees, links, and hash
tables.
uaddath
uaddbt
uaddcgp
uaddcnm
uadddb
uaddhsh
uaddlnk
uaddprf
uaddtbl
uaddtnm
uaddvol
udrpath
udrpbt
udrpcgp
udrpcnm
udrphsh
udrplnk
udrpprf
udrptbl
udrptnm
udrpvol
ufchcnm
ufchtnm
uinfacs
uinfath
uinfbt
uinfcgp
uinfcol
uinfdb
uinfhsh
uinflnk
uinftbl
uinfvol
Add a schema
Define a BĆtree
Add a column group to a table
Add a column name (or synonym)
Create a new, empty database
Define a hash table
Define a link
Add a volume preference for a table
Add a table
Add a table name (or synonym)
Add a volume
Drop a schema
Drop a BĆtree
Drop a column group from a table
Drop a column name (or synonym)
Drop a hash table
Drop a link
Drop a volume preference for a table
Drop a table
Drop a table name (or synonym)
Drop a volume
Fetch column names (or synonyms)
Fetch table names (or synonyms)
Retrieve access information
Retrieve schema information
Retrieve BĆtree information
Retrieve column group information
Retrieve column information
Retrieve database information
Retrieve hash table information
Retrieve link information
Retrieve table information
Retrieve volume information
continued
Function Names and Categories
21
Data Definition Functions (continued):
umodath
Modify a schema name
umodbt
Modify a BĆtree name
umoddb
Modify a database
umodhsh
Modify a hash table name
umodlnk
Modify a link name
umodvol
Modify a volume name
unumath
Retrieve number of schemas
unumchd
Retrieve number of rows in a table
unumcol
Retrieve number of columns in a table
unumprn
Retrieve number of rows in a table
unumtbl
Retrieve number of tables
Name Binding
Name binding functions obtain object IDs for database objects.
uallath
uallbt
uallcgp
uallcol
uallhsh
ualllnk
uallpid
ualltbl
ualltx
uallusr
uallvol
ubndath
ubndbt
ubndcol
ubnddb
ubndhsh
ubndlnk
ubndtbl
ubndusr
ubndvol
22
Retrieve a list of authorization IDs
Retrieve a list of BĆtree IDs
Retrieve a list of column group IDs
Retrieve a list of column IDs
Retrieve a list of hash table IDs
Retrieve a list of link IDs
Retrieve a list of process IDs
Retrieve a list of table IDs
Retrieve a list of transaction IDs
Retrieve a list of user IDs
Retrieve a list of volume IDs
Bind a schema name to an authorization ID
Bind a BĆtree name to a BĆtree ID
Bind column name to a column ID
Bind a database name to a database ID
Bind a hash table name to a hash table ID
Bind a link name to a link ID
Bind table name to a table ID
Bind a user name to a user ID
Bind a volume name to a volume ID
Function Names and Categories
ID Mapping
ID mapping functions map compile-time object IDs to runtime object IDs.
umapath
umapbt
umapcol
umaphsh
umaplnk
umaptbl
umapvol
Scanning
Map a compileĆtime BĆtree ID to its runtime ID
Map a compileĆtime column ID to its runtime ID
Map a compileĆtime hash table ID to its runtime ID
Map a compileĆtime link ID to its runtime ID
Map a compileĆtime table ID to its runtime ID
Map a compileĆtime volume ID to its runtime ID
Scanning functions set up and perform a scan on a table. A scan searches
for rows that meet the specified criteria, retrieves the desired columns
from each row and sorts the rows according to user-defined sort criteria.
ualcscn
ubegscn
uendscn
ufchscn
ufrescn
uinfscn
uinsand
uinsbuf
uinsor
uinsprj
uinssrt
uinstbl
Function Names and Categories
Map a compileĆtime authorization ID to its runtime
ID
Allocate a scan information structure
Begin a scan
End a scan
Retrieve the next row from a scan
Free or clear a scan information structure
Create a list used for scan data retrieval
Insert an AND group
Allocate a remote scan buffer
Insert an expression into an OR group
Add a column to the projection list of a scan
Insert a column to the sort criteria
Specify the target table for a scan
23
Data Manipulation
Data manipulation functions are used to access data from the database
and perform operations such as adding, updating, deleting or getting
information about a database row. The scanning functions are listed on
page 23.
ualctbl
uclritr
uclsdb
udelrow
uexit
uextint
ufchlnk
ufchrow
ufchtbl
uinsrow
uintext
unumath
unumcgp
unumchd
unumcol
unumprn
unumrow
unumtbl
unumusr
unumvol
uopndb
upkfrow
usetitr
uupdrow
24
Dynamically allocate a UNIPCOLL structure
Clear the process interrupt
Close the database
Delete a row
Terminate a process
Convert column values from external format to
internal format
Fetch the parent row through a link access method
Fetch a row
Fetch a row sequentially
Insert a row into a table
Convert column values from internal format to
external format
Retrieve the number of schemas in the database
Retrieve the number of columns in a column group
Retrieve the number of child rows for a link
Retrieve the number of columns in a table
Retrieve the number of parent rows for a link
Retrieve the number of rows in a table
Retrieve the number of tables in the database
Retrieve the number of users in the database
Retrieve the number of volumes in the database
Open the database for access
Fetch a row through its primary key
Set the process interrupt
Update a row
Function Names and Categories
Journal Access
Functions
Journal access functions read the contents of the transaction journal.
uclsjrn
ufchjrn
uopnjrn
Close the transaction journal
Fetch the next update operation from the transaction
journal
Open a transaction journal
Additional Help
For more information about the transaction journal, see Unify
DataServer: Managing a Database.
Ordered Access
Functions
Ordered access functions set up and perform an ordered access on a table.
ubegord
uendord
ufchord
uposord
uskrord
XML Processing
Functions
Begin an ordered access
End an ordered access
Retrieve a row from an ordered access
Position by values to a row within an ordered access
Position by row ID to a row within an ordered access
The XML processing functions perform operations on XML data..
uXMLAddAttribute
Adds a new attribute to an element
uXMLCreateElement
Creates a new element
uXMLDeleteAttribute
Deletes an attribute
uXMLDeleteCurrentElement
Deletes the current element
uXMLDeleteCurrentElementValue
Deletes the value of an element
uXMLDestroy
Destroys an XML object
uXMLGetAttributeCount Returns the number of attributes
uXMLGetAttributeNames Returns the attribute names of an element
Function Names and Categories
25
uXMLGetAttributeValue Returns an attribute value
uXMLGetAttributeValues Returns the attribute values of an element
uXMLGetCurrentElementName
Returns the tag name of the current element
uXMLGetErrorInfo
Returns an error description
uXMLGetValueOfCurrentElement
Returns the value of the current element
uXMLModifyElementValue
Modifies the value of an element
uXMLMoveToFirstChild
Moves the current element pointer to the
first child
uXMLMoveToLastChild
Moves the current element pointer to the last
child
uXMLMoveToNextSibling
Moves the current element pointer to next
sibling
uXMLMoveToParentElement
Moves the current element pointer to the
parent
uXMLMoveToPreviousSibling
Moves the current element pointer to the
previous sibling
uXMLMoveToRootElement
Moves the current element pointer to the
root element
uXMLParse
Parses an XML file
uXMLSetAttributeValue
Sets an attribute value
26
Function Names and Categories
Returned Values
Most of the functions return an integer value upon completion. The
returned values are defined as:
USUCCESS
UFAILURE
The operation was successful.
A failure occurred during the operation; check status
value for the error.
If the function did not execute correctly, test the value of the status
parameter or statusl list to determine which error occurred.
All status and statusl status values are of type USTATUS (or long) and
are defined in the rhlierr.h header file. When an RHLI function fails (it
returns UFAILURE), but the status status value is UENORM, this
typically indicates that the function parameters were not correctly defined
and that the RHLI function could not set the status status value. Refer to
the function description to verify the parameters.
Additional Help
See the Unify DataServer: Error Messages.
Function Names and Categories
27
28
Function Names and Categories
RHLI Application
Basics
29
Chapter
Focus
This chapter describes the features and information that help you write an
RHLI application.
To write an RHLI application, you must have a good understanding of C
language concepts, including structure manipulation and memory
allocation and deallocation.
This chapter contains the following sections:
Include files
Data types and null values
Referencing database objects
ID mapping
Error handling
Transaction kinds: type 0, 1, or 2
Scanning
Compiling and loading
30
RHLI Application Basics
Include Files
Unify DataServer provides two include files that contain definitions for
RHLI database options. Include files are sometimes called header files.
The include files are:
rhli.h
Contains definitions for database options, column data
types and lengths, lock and transaction types, security
privileges and capabilities, return values, and other
database specifications.
rhlierr.h
Contains define statements for all error status values
returned by RHLI functions. When an RHLI function
returns a value of UFAILURE (or 0), it also returns at
least one status value.
The status values can be tested to determine why the
function failed, and if multiple arguments were passed to
the function, which particular argument failed.
In addition, the rhlierr.h file contains brief comments
describing the meaning of each error status value. This
may also be helpful in determining the cause of an error.
uXML.h
Contains definitons used by the XML processing
functions.
You include both the rhli.h and rhlierr.h at the top of an RHLI program,
by using the #include statement. For example:
#include <include/rhli.h>
#include <include/rhlierr.h>
The include files are contained in a directory named include. If the
include directory is not located in the current directory, you have two
ways of specifying to the compiler (and preprocessor) where the
directory is located:
specify the directory path in the –I option on the ucc command
specify the relative path in the include statement itself; use the
angle brackets (<>) to delimit the include directory and file name
RHLI Application Basics
31
Example
To specify the relative path name in the include statement, add the full
relative path and file name in the include statement. Delimit the path and
file name with double quotes (” ”).
#include “../../include/rhli.h”
#include “../../include/rhlierr.h”
The example instructs the preprocessor to search for the include files
beginning in the current directory and apply the ../../ relative path name.
Additional Help
About
32
See
–I option on ucc
Unify DataServer:
Configuration Variable and
Utility Reference
Status values
Unify DataServer: Error
Messages
RHLI Application Basics
Data Types and Null Values
When you define a column, you must specify a data type for the column.
The column data type specifies how that column’s value is stored in the
database and how the column value is displayed. To define a column, use
the uaddtbl function.
A null value is a data value that is unknown or not applicable. While a
null value is a valid value, a column containing a null value is essentially
empty.
The following table compares Interactive SQL/A data types with the
equivalent RHLI representations.
SQL/A and RHLI Column Data Types
Interactive SQL/A
RHLI
SMALLINT
NUMERIC
U_INT
INTEGER
DECIMAL
NUMERIC(5–9)
U_HINT
HUGE INTEGER
U_GINT
FLOAT
U_FLT
AMOUNT
U_AMT
HUGE AMOUNT
U_HAMT
CURRENCY
U_GAMT
DATE
U_DATE
HUGE DATE
U_HDATE
TIME
U_TIME
CHARACTER
U_STR
table continued on next page
RHLI Application Basics
33
SQL/A and RHLI Column Data Types
Interactive SQL/A
RHLI
TEXT
U_VTXT
BINARY
U_VBIN
BYTE
U_BYT
REAL
U_REAL
DOUBLE PRECISION
U_DBL
All RHLI data type declarations are found in the rhli.h header file.
For complete descriptions of the data types, including their precision and
scale, see the DBCOL structure on page 94.
Additional Help
About
34
See
Creating a table and defining
column data types
The uaddtbl function
What the data types are used
for
The “Working With the Data Types
and Null Values” in Unify DataServer:
Writing Interactive SQL/A Queries
UNIPCOLL and UTP_VDDS
The chapter “RHLI Structures”
Null values
The chapter “Working With the Data
Types and Null Values” in Unify
DataServer: Writing Interactive SQL/A
Queries.
RHLI Application Basics
Converting
Internal/External
Data Formats
Before you can display values for columns declared as data types
U_DATE, U_HDATE and U_TIME, you must first convert the column
values from internal to external format: this is because U_DATE,
U_TIME and U_HDATE column values are stored in internal format and
cannot be displayed as such.
The same is true when inserting or updating U_DATE, U_HDATE, and
U_TIME column values into the database: you must convert the external
(display) value into an internal (database storage) format.
The uintext function allows you to convert date and time column values
from internal to external format, and the uextint function converts
external format date and time column values into internal values.
Column values for all data types other than U_DATE, U_HDATE, and
U_TIME do not need to be converted; if the values are converted by
using the uintext or uextint functions, the values remain unchanged.
Converting Internal to External Format
If you want to display date or time data that you have retrieved or fetched
with an RHLI function it is necessary to convert the data from internal to
external format. To convert data, specify the uintext function.
To convert data from internal to external format with the uintext
function, you must first describe the columns you want to retrieve data
from by initializing the internal structure UNIPCOLL.
Converting External to Internal Format
The uextint function converts column values from external data format
to internal format and is used before inserting or updating the column
values into the database with the uinsrow or uupdrow functions.
Before you can convert the date or time data with the uextint function,
you must first describe the external format of the column data you are
updating or inserting by initializing the internal structure UNIPEXT.
RHLI Application Basics
35
Handling String
Data
When storing or retrieving string values from a Unify DataServer
database with RHLI functions, the RHLI function handles string (or data
type U_STR) column values as C language strings. A C language string is
defined as a series of ASCII characters followed by a zero-byte
terminator.
When storing a string value into a column of type U_STR, you must
terminate the end of the string with a zero-byte. A zero-byte at the end of
a string indicates the end of the string value.
However, only the actual string value is stored in the database. Blank
characters at the end of the string, as well as the zero-byte itself, are not
considered part of the string value and are stripped off before the string
value is stored.
When a string column value is retrieved from the database, the RHLI row
retrieval function adds a zero-byte to terminate the string.
A string column of length N requires a maximum of N+1 bytes to return
its value. The extra byte is for the terminating zero-byte.
Handling U_AMT
data
Values that are of data type U_AMT are normally values that represent a
value with a scale of 2. U_AMT values are stored with a default scale of
2.
However, when a U_AMT value is stored into a C variable of type long
integer, the scale is lost. If a U_AMT value is stored into a database
column, the scale is retained. To print U_AMT values that are stored in C
integer values, divide the value by 100 to restore the scale of 2.
36
RHLI Application Basics
Referencing Database Objects
All database objects in Unify DataServer can be referenced with RHLI
functions by either of two methods:
by using a unique numeric identifier that identifies the object;
called the object ID
by using a unique name
The following database objects can be assigned names or IDs:
volumes
databases
tables
columns
column groups
hash tables
B-trees
links
schemas
users
transactions (IDs
only)
Object names other than schema names must be between 1 and 44
characters. All object names must begin with a letter, and cannot include
spaces or any of the following reserved characters:
():.$@#*!’”~‘%^&–+={}[]\|;,<>?
Schema names, however, are limited to a maximum of 18 characters in
length.
Because many database operations performed with RHLI functions
require the object ID, you must ensure that the correct object ID is
specified.
Performance
To improve the performance of name binding, use the name cache. The
name cache keeps a list of current object IDs in local process memory,
where they can be accessed more quickly. The name cache is controlled
by the NAMECACHE configuration variable.
To retrieve an object ID, you bind the object’s name to its current ID.
There are two kinds of name binding:
compile-time name binding
runtime name binding
RHLI Application Basics
37
Compile-Time Name
Binding
To perform compile-time name binding, the object name is embedded
inside the RHLI function call that requires the ID in your RHLI program.
At compile-time, the Unify DataServer C preprocessor upp maps the
object name to the unique object ID and substitutes in the current ID for
that object.
The preprocessor generates code used to detect changes made to the
database object(s) between the time the program was compiled and
eventually run.
If any changes have been made in the given schema, an error code is
returned and the affected modules must be recompiled.
Compile-time name binding can reduce program runtime overhead, but
may require additional compilation and loading steps.
RHLI also features a “remapping” capability that allows you to remap all
compile-time object IDs in the program to their current runtime IDs.
To compile-time name binding, you delimit an object name with special
characters and keywords. When the preprocessor encounters these special
notations in the source code, the object name is replaced with the
appropriate object ID.
The format of compile-time name binding directives is:
$[( class [ : attribute ] )] object_name $
The class indicator specifies the class of object to be addressed.
The attribute indicator specifies the object attribute to be substituted into
the source code. The attribute indicator is optional; if it is not specified,
the object’s ID is substituted into the source code. Each object class has a
unique set of attributes.
The object name is the name of the object.
38
RHLI Application Basics
The following tables lists the class and associated attribute keywords:
Compile-Time Name Binding Keywords
With this class:
You can specify this attribute:
UCOL Object is a column
column’s ID (default
attribute)
TID
column’s table ID
AID
column’s authorization
(schema) ID
DEFID
column’s definition ID
MAPID
column’s ID-mapping ID
COLTYP column’s type
COLLEN column’s internal length
(precision)
COLSCL column’s internal length
(scale)
DSPLEN column’s display length
(precision)
DSPSCL
column’s display length
(scale)
COLDESC column’s description
DSPPICT column’s display picture
clause
QNAME
column’s fully-qualified
name
UTBL Object is a table
table’s ID (default attribute)
table’s authorization
(schema) ID
DEFID
table’s definition ID
MAPID
table’s ID-mapping ID
SEGSZ
table’s segment size
EXPNUM table’s expected number of
rows
TBLBASE table’s base value
TBLDESC table’s description
QNAME
table’s fully-qualified name
UATH Object is an
AID
CID
TID
AID
authorization (schema)
QNAME
authorization’s ID (default
attribute)
authorization’s
fully-qualified name
continued
RHLI Application Basics
39
Compile-Time Name Binding Keywords (continued)
With this class:
UHSH Object is a hash
You can specify this attribute:
HID
index
QNAME
Object is a
B-tree index
UBT
BTID
QNAME
hash index’s ID (default
attribute)
hash index’s fully-qualified
name
B-tree index’s ID (default
attribute)
B-tree index’s fully-qualified
name
ULNK
Object is a
link index
LID
QNAME
UVOL
Object is a
volume
VID
QNAME
UUSR
Object is a user
UID
link index’s ID (default
attribute)
link index’s fully-qualified
name
volume’s ID (default
attribute)
volume’s fully-qualified
name
user’s ID (default attribute)
For example, to retrieve a column’s Table ID, use the following compiler
directive:
$(UCOL:TID)column_name$
When using compiler directives, the class indicator specifies the type of
object. This means that the auxiliary name binding conventions described
in the description for ucc are not needed to identify the object.
40
RHLI Application Basics
Runtime Name
Binding
To perform name binding, specify the object name with one of the
several RHLI name binding functions. The function returns the
appropriate object ID.
To perform name binding on a given object, you must meet one of the
following criteria:
have DBA authority (see the uaddprv function)
be located in the same schema in which the database object resides
(see the ufchath function)
be located in a schema that has been granted schema privileges
that allow you to access the desired object
To perform runtime name binding, you call one of the RHLI object
binding functions in your RHLI program, provide the object name, and it
returns the object ID. Then you pass the ID into the RHLI function that
requires the object ID.
Additional Help
For a list of the name binding functions, see the chapter “Function Names
and Categories”.
RHLI Application Basics
41
ID Mapping
ID mapping provides the option to remap object IDs that are used in an
application to the correct internal set of object IDs.
Each time you refer to a database object in your application programs,
Unify DataServer cross-references its own internal ID table and
substitutes in the correct object ID.
ID mapping alleviates the worry of running your applications on different
database environments. The schema or tables you were able to access in a
previous application are still accessed by the new application, whether or
not the internal structure of the database has been changed.
ID mapping is implemented in one of three ways:
automatic ID mapping happens implicitly when a database is
opened
partial ID mapping
manual ID mapping happens explicitly during execution of the
application
Each time a database is opened, you can specify that all the object IDs
you use in your application are to be remapped before any database
operations begin.
A significant benefit of remapping object IDs when you open a database
is that the object remapping process is all done at once, saving you
processing time later. This feature is particularly helpful for applications
that refer to and access many database objects.
However, manual ID mapping allows you the flexibility to selectively
remapped those objects you feel are critical to the application (or that are
subject to change). The processing of ID mapping is then controlled
locally, only where it is needed.
Manual ID mapping also provides you with the option of choosing a
“custom” object ID that never changes and can be used in your
application programs without having to worry about what the internal
object ID really is. The custom ID is remapped by Unify DataServer to
the correct internal ID each time your custom ID is used to reference an
object.
42
RHLI Application Basics
In either case, once an object ID has been remapping, it stays set until the
database is closed, and is only available to the application program that
initiated the remapping (and opened the database).
Similar to name binding, once an object ID has been remapped, Unify
DataServer assumes you will be accessing the object soon and
consequently places a definition lock on the object.
Object definition locks prevent design changes to the locked objects until
the calling program closes the database and unlocks the objects. This
helps make ID mapping consistent and stable for the duration of the
database session.
Additional Help
For more information about name binding functions, see the “Data
Access and Manipulation” chapter.
Automatic ID
Mapping
Automatic ID mapping remaps all the object ID references you use in
your application programs to runtime IDs when the application opens a
database.
To implement automatic ID mapping, you must:
set the DB_REMAP option each time you open a database in your
application
The DB_REMAP option specifies that all object IDs referenced in
your application programs are to be remapped to their
corresponding runtime object IDs before any processing is allowed
on the database.
use compiler directives in place of each object ID reference in your
application programs
compile and load your application programs by using ucc and uld
Example
The following example shows how to set the DB_REMAP option with the
uopndb function.
/* define uopndb() parameters */
UDBID dbid;
char * dbname = ”/usr/db/parts.db”;
USTATUS status;
RHLI Application Basics
43
if ( uopndb(dbname, DB_REMAP, &dbid, &status) != USUCCESS )
{
printf(”Unable to open the database %s\n”, dbname);
uexit(1);
}
A compiler directive is special syntax that you embed into your
application program(s) wherever a reference to an object ID is made.
Compiler directives are processed by the Unify DataServer compiler, ucc.
When you compile your application programs by using ucc, all compiler
directives embedded in the program code are substituted with a
compile-time object ID.
When your application programs are executed, the compile-time object
IDs that were provided by ucc are then substituted (or remapped) to the
correct runtime object IDs for that particular database.
Compiler directives for automatic ID mapping must always be delimited
with dollar signs ($).
Additional Help
For more information about compiling programs with ucc, see the
“Compiling and Loading” chapter.
The following table shows the compiler directive syntax for specifying a
compile-time object ID.
When specifying an
44
ID for a
The compiler directive syntax for the
compile-time ID is
Schema
$ [ (UATH:AID) ] schema_name $
B-Tree
$ [ (UBT:BTID) ] B-Tree_name $
Column
$ [ (UCOL:CID) ] column_name $
Hash table
$ [ (UHSH:HID) ] hash_table_name $
Link
$ [ (ULNK:LID) ] link_name $
Table
$ [ (UTBL:TID) ] table_name $
Volume
$ [ (UBOL:VID) ] volume_name $
RHLI Application Basics
Example
To refer to a schema named admin, the compiler directive for the
compile-time object ID would be:
$(UATH:AID) admin$
Or, to refer to the table misc contained in schema admin, the compiler
directive for the compile-time object ID would be:
$(UTBL:TID) admin.misc$
This example shows the use of a compiler directive that specifies the
table commissions contained in schema sales.
/* Access table “commissions” using a compiler directive */
if ( ufchrow(tx, $(UTBL:TID)sales.commissions$, USLCK, rid,
&unipcol, statusl, &status) != USUCCESS )
{
printf(”Cannot not access commissions (Table ID=%ld)\n”,
$(UTBL:TID)sales.commissions$);
uexit(99);
}
Partial ID Mapping
Unify DataServer provides for automatic mapping of compile-time
database object IDs referenced in a program to current runtime database
object IDs.
The implementation of partial ID mapping addresses the problem of
assignments of object IDs to a schema change over time or that differ
between application sites.
Automatic ID mapping is accomplished by using the DB_REMAP option
when opening the database with the RHLI function uopndb(). Upon
opening the database, all database objects that are referenced by a
program are remapped.
Automatic ID mapping requires that all of the database objects referenced
by the program be present in the database. Otherwise, the remapping, and
therefore the database open, will fail.
Partial ID mapping eliminates this restriction and defers an error
condition until an unmapped ID is actually used in a later RHLI function.
Partial ID mapping enables delivery of a schema that supports only a
selected set of subsystems of an application. At runtime, the application
is responsible for disabling access to subsystems that will not be
supported.
RHLI Application Basics
45
To implement partial ID mapping:
set the DB_PARTMAP option OR’d with the DB_REMAP option
when using the uopndb() call
use special syntax compiler directives in place of each object ID
referenced in the application program
compile and load the application program using ucc and uld
Manual ID Mapping
Manual ID mapping allows you to selectively remapped compile-time
object IDs to their correct internal IDs.
Unlike automatic ID mapping, manual ID mapping is performed when
you reference the database object, not when the database is first opened.
To implement manual ID mapping, you must:
set the DB_NOLOCK option each time you open a database in your
application
The DB_NOLOCK option specifies that no locking is to be
performed when the database is first opened. This option is
typically used when you want to control which database objects to
lock.
initialize a mapping structure and call the associated mapping
function for each object your application references
compile and load your application programs by using ucc and uld
Remember that when you remapping an object ID, a definition lock is
implicitly placed on that object. Therefore, by remapping object IDs, you
are in effect controlling which objects are protected from other
transaction operations.
By mapping and locking IDs selectively in this manner a minimum of
database objects are tied up at any one time. This allows for greater
concurrency since only the objects your application program uses are
locked.
To use manual ID mapping, you must use the mapping functions. Each
function has an associated structure. The structure must be initialized
before you call a mapping function.
46
RHLI Application Basics
Initializing Mapping Structures
Mapping structures are initialized manually by using a mapping macro.
A mapping macro is a special command that is interpreted by the Unify
DataServer compiler, ucc, and initializes the specified mapping structure
information.
The following table lists the syntax for mapping macros.
Mapping Macro Syntax for Manual ID Mapping
To initialize this
structure:
The mapping macro syntax is:
UATHMAP
INIATHMAP( athnm, aid, –>UATHMAP);
UBTMAP
INIBTMAP( btn, bid, –>UBTMAP);
UCOLMAP
INICOLMAP( colnm, cid, –>UCOLMAP)
UHSHMAP
INIHSHMAP( hshnm, hid, –>UHSHMAP)
ULNKMAP
INILNKMAP(lnknm, tid, –>ULNKMAP);
UTBLMAP
INITBLMAP( tblnm, tid, –>UTBLMAP);
UVOLMAP
INIVOLMAP( volnm, vid, –>UVOLMAP);
where:
athnm
btcnm
colnm
hshnm
lnknm
tblnm
volnm
= schema name
= B-tree name
= column name
= hash table name
= link name
= table name
= volume name
aid
bid
cid
hid
lid
tid
vid
= Authorization ID
= B-tree ID
= Column ID
= Hash Table ID
= Link ID
= Table ID
= Volume ID
The first argument in a mapping macro is the object name: the name of
object is entered (without quotes).
The second argument in a mapping macro is the object ID: you can use a
compiler directive or a custom ID.
The third argument in a mapping macro is a pointer to the structure that
describes the object to be initialized.
RHLI Application Basics
47
Using Compiler Directives
The following example shows the manual remapping of two B-tree IDs,
commissions and revenue, by using compiler directives.
#define NBTMAP
2
/* define umapbt() parameters */
UDBID dbid;
USTATUS
statusl[NBTMAP];
USTATUS
status;
UBTMAP
btmapl[NBTMAP];
/* Initialize UBTMAP structures */
INIBTMAP(sales.commissions, $(UBT:BTID)sales.commissions$,
&btmapl[0]);
INIBTMAP(sales.revenue, $(UBT:BTID)sales.revenue$, &btmapl[1]);
/* Re-map B-trees */
if ( umapbt(dbid, NBTMAP, btmapl, statusl, &status) != USUCCESS )
{
printf(”Unable to map B–tree ID info: status = %ld\n”, status);
uexit(101);
}
When you compile this program (using ucc), the compiler directives
contained in the mapping macros are substituted with B-tree IDs that are
valid at compile-time. The compile-time B-tree ID and the B-tree name
are then used to initialize the UBTMAP structure.
When you execute the program, the function umapbt function uses the
values stored in the structure UBTMAP to find the current, runtime B-tree
IDs.
Using a Custom ID
A custom ID is a unique integer number that you choose to refer to a
database object. Instead of using a compiler directive, you simply use this
“customized” ID number each time you reference an object in the
database.
For example, to initialize the schema admin with a custom ID of 10001,
you simply substitute the aid argument in the mapping macro
INIATHMAP with the value 10001:
INIATHMAP(admin, 10001, &athmapl);
48
RHLI Application Basics
After the umapath function is executed, you can then refer to the schema
admin (with RHLI functions) by using the Authorization ID value 10001.
And the same example, using a compiler directive:
INIATHMAP(admin, $(UATH:AID)admin$, &athmapl);
Example
The following examples shows the remapping of the table manf (found
in the PUBLIC schema), using a custom Table ID.
#define COLNO
18
/* define ’umaptbl()’ arguments */
UDBID
dbid;
UTBLMAP
utblmap;
USTATUS
statusl[COLNO];
USTATUS
status;
/* Initialize UTBLMAP structure */
INITBLMAP(PUBLIC.manf, 1124, &utblmap);
/* Re-map table manf */
if ( umaptbl(dbid, 1, &utblmap, statusl, &status) != USUCCESS)
{
printf(”Mapping of manf failed: status=%ld\n”, status);
uexit(1);
}
/* Access table manf using custom Table ID */
if (ufchrow(tx, 1124, USLCK, rid, &unipcol, statusl,
&status)!= USUCCESS )
{
printf(”Data retrieval failed on Table ID 1124\n”);
uexit(99);
}
Notice the initialization of the compile-time Table ID with the value
1124. This value is then used to reference the table in the ufchrow
function.
Consider these two things if you initialize a compile-time object ID by
using custom initialization:
1. Make sure that the object ID you pick is unique. That is, no two
“custom” object IDs should be the same.
2. Pick a non-zero, positive integer that falls within the acceptable
range for the type of the object ID.
Hopefully, that should be enough to ensure uniqueness Refer to your
system manual to verify the range for a long integer on your machine.
RHLI Application Basics
49
Additional Help
For more examples of how to use manual ID mapping, see the description
for each of the mapping functions.
50
RHLI Application Basics
Error Handling
Errors that occur during execution of RHLI application programs are
located in three areas:
the function itself returns a status value indicating whether or not
the function executed successfully
after each RHLI function executes, a status value is returned; some
functions return a list of status values, each status value
corresponds to an object the function operates on
each system error that occurs is logged to the system file errlog
Each of these is described in this chapter followed by a description of
signal handling.
Status Values of
Function Operations
All RHLI functions return a status value that indicates whether the
function operation was a success or a failure. The return values are:
The status of a function operation can be verified by checking the
function return value.
USUCCESS
The operation was successful.
UFAILURE
A failure occurred during the operation.
If the return value is equal to USUCCESS (or 1), the function operation
was totally successful.
However, a return value of UFAILURE (or 0) indicates that either the
operation failed partially or completely. See Status and Statusl Values on
page 51.
The Status and
Statusl Parameters
If an RHLI function does not execute correctly, the error that occurred is
returned in the status or statusl parameter.
If the function you are executing allows you to specify a list of one or
more objects to be operated on, one or more of the operations involving
these objects may fail: this is considered a partial failure.
RHLI Application Basics
51
Testing for Partial Failure
A partial failure is indicated when the RHLI function returns the value
UEPART into the status parameter. One (or more) of the objects listed in
the object list was operated on and an error occurred.
After each function operation, the statusl list contains a corresponding
status value for each object operation listed in the object list. If a partial
failure occurs, simply check the status value for each element of statusl
to diagnose which object operation failed.
For example, if the first object operation in the object list failed, the first
element in statusl contains the appropriate error status value; if the third
object operation failed, the third element value of statusl contains the
corresponding error status value (and so on).
If an object operation was successful, however, the corresponding statusl
entry contains the status value UENORM.
All status and statusl status values are of type USTATUS (or long).
Example
The following is a sample function (named reterr) that can be used if a
partial failure occurs: the reterr function checks each entry in statusl and
returns a status value for the first error it finds.
#include <include/rhli.h>
#include <include/rhlierr.h>
USTATUS reterr(status, nstat, statusl)
USTATUS status;
/* status value */
int nstat;
/* # of entries in statusl */
USTATUS statusl[]; /* status list */
{
int indx;
/* temp index variable */
/* If the status value is set to UEPART, check each statusl */
/* entry for an error status value. */
if ( status == UEPART )
{
for ( indx = 0; indx < nstat; ++indx )
{
if ( ((status = *(statusl + indx)) != UENORM)
&& (status != UENOWRK) )
{
break;
}
}
}
return(status);
/* return the first error status value */
}
52
RHLI Application Basics
After verifying that status is equal to UEPART, the reterr function checks
for each element in statusl for an error status: UENORM indicates
success, and UENOWRK indicates that no work was done on this object
due to an error elsewhere in the operation.
Once you know the reason for the partial failure, you have the option of
redoing the entire operation (after the current transaction has been
aborted or rolled back), or, to just redo the operation(s) for the object(s)
that failed after you correct any programming errors in the application
that caused the error.
Testing for Complete Failure
If a function operation fails completely, a non-UEPART status value is
returned to the function parameter status.
For example, if the umodath function fails, the status parameter is set to
one of the following values:
UEILTX
Invalid Transaction ID
UEDBCLS
Database is closed
UENOAID
Invalid Authorization ID
UENLONG
Name too long
UEBDNM
Illegal characters in the user name
If status is set to UEPART, then a partial failure occurred.
Additional Help
About
RHLI Application Basics
See
All status and statusl status values
Unify DataServer: Error
Messages, or the rhlierr.h
header file
Partial failures
“Testing for Partial Failure”
on page 52
53
Retrieving a Status Value Message
Once you have a status value, you can check what the error code means
by either:
checking the Unify DataServer: Error Messages manual
checking the rhlierr.h header file
retrieving (and displaying) the error message
The first and second options assume your application programs print (or
store) the status values so that you can look them up.
The third option, however, allows you to retrieve (and if you wish, to
display) the error message text for the status value. This is accomplished
by using the ufchmsg function.
Additional Help
For more information about how to retrieve text for status value error
messages, see the ufchmsg function.
Most Common
RHLI Function
Status Values
This section describes the most commonly occurring status values
returned from each RHLI function. You can use this section to determine
the conditions that you can test for when a function is used in your
application.
The following status codes are the most commonly occurring codes for
all of the functions:
54
UENORM
The function completed successfully; no error condition
is returned.
UEPART
Errors are returned through the status list.
UENOMEM
More (dynamically allocated) memory is needed.
UELMOUT
A locking conflict exists.
UEINTRPT
An interrupt was received.
UESGTERM
A SIGTERM interrupt was received.
RHLI Application Basics
UEDBDOWN
The database is being shut down, gracefully close
database.
UEILTX
An illegal transaction id was encountered.
UENOPRV
Current user does not have privilege required for
operation.
UENOPRIV
Same as UENOPRV.
UEEXCPMP
The database is opened with conditional ID remapping
(DB_REMAP|DB_CONDMAP). It indicates that a
compile-time ID used in the function failed to remap at
the time uopndb() is called. (Note that conditional
mapping defers reporting the error until the ID is used.)
For more information about the status codes, see Unify DataServer:
Error Messages.
The following table lists status codes that are associated with specific
functions. These status codes occur most frequently with the associated
function, in addition to the list of commonly occurring functions listed
above.
Function
Most Frequent Status Codes
uabttx
UENOABRT
uaddath
UENOXID
uaddbt
UEBDNAM
UEDUPNM
UEMXBKL
UENMLONG
UECOLTP
uaddcgp and uaddcnm
UEBDNAM
UEDUPNM
UENMLONG
UENMREQ
uadddb
UEBDNAM
UEDUPNM
UEDLONG
UENMLONG
UERSVNM
uaddhsh
UEBDNAM
UEDUPNM
UENMLONG
uaddlnk
UEBDNAM
UEDUPNM
UENMLONG
table continued on next page
RHLI Application Basics
55
Function
Most Frequent Status Codes
uaddprf
UEDUPPRF
uaddprm
UEDUPK
uaddprv
UENOGRT
uaddtbl
UEBDNAM
UEDUPNM
UENOCOL
UENMLONG
UENOVID
UEDLONG
uaddtnm
UEBDNAM
UEDUPNM
UENMLONG
UENMREQ
uaddusr
UEBDNAM
UEDUPNM
UEDUPUSR
UENMLONG
UENMREQ
uaddvol
UEBDNAM
UEDUPNM
UEEXIST
UENMLONG
UENMREQ
ubegord
UENOSAM
UENOMEM
UEMXSCN
ubegtx
UEUMXTX
ubndath
UENMPRS
UENONAME
ubndbt
UENMPRS
UEAMBIG
UENONAME
ubndcol
UENMPRS
UEAMBIG
UENONAME
ubnddb
UENONAME
ubndhsh
UENMPRS
UEAMBIG
UENONAME
ubndlnk
UENMPRS
UEAMBIG
UENONAME
ubndtbl
UENMPRS
UENONAME
ubndusr
UENONAME
ubndvol
UENONAME
table continued on next page
56
RHLI Application Basics
Function
Most Frequent Status Codes
uclsdb
UETXACTV
udelrow
UEREF
UEBIGLG
udrpath
UENOAID
UENONAME
udrpbt
UENOBT
UENONAME
udrpcgp
UENONAME
UEDRCGP
UENOUNQ
udrpcnm
UENOTID
UENONAME
udrphsh
UENOHID
UENONAME
UENOCID
UENOHSH
udrplnk
UENOLID
UENONAME
UEREF
UENOCID
UENOLNK
udrpprf
UENOVID
UENOPRF
udrpprm
UENOUID
UENOPRM
UENOAID
udrpprv
UEUKNOBJ
UENOOBJ
UEUNPRV
udrptbl
UENOTID
UENONAME
UEVIEW
UENMPRS
udrptnm
UENOTID
UEBDNAM
UEVIEW
UENONAME
udrpusr
UENOUID
UEDBOWN
udrpvol
UENOVID
UEVLACT
UEBDVOL
UENONAME
uextint
UESTRLNG
UECONV
ufchath
UENOAID
UENOPRM
ufchcnm
UENOCID
UENONAME
ufchlnk
UENOCID
UENOREF
UENONAME
UENOLID
table continued on next page
RHLI Application Basics
57
Function
Most Frequent Status Codes
ufchord
UEBDATYP
UENOROW
UENOTID
UENOCOL
ufchrow
UENOTID
UENOCOL
UENOROW
ufchscn
UEBDSZR
UEVDBUF
UEBDBNX
UENOWRK
UEBDFNX
UEBDFTP
UEEOSCN
UECONV
ufchtbl
UECONV
UEVDBUF
UENOWRK
UEEOSCN
UEBDFTP
uinfath
UENOWRK
UENOAID
uinfbt
UENOBID
UENOWRK
uinfcgp
UENOWRK
uinfcol
UENOWRK
uinfdb
UENOWRK
uinflck
UENOLCK
uinflnk
UEPART
uinfsch
UENOLCK
uinftbl
UEPART
uinftx
UEPART
uinfusr
UENOWRK
umapath
UEISMAP
UENONAME
UENOMAP
UENMPRS
UEMNMAP
umapbt
UEISMAP
UENONAME
UEMNMAP
UENMPRS
UEAMBIG
UENOMAP
UEPART
table continued on next page
58
RHLI Application Basics
Function
Most Frequent Status Codes
umapcol
UEISMAP
UENONAME
UEMNMAP
UENOMAP
UENMPRS
UEAMBIG
UEBDMAP
umaphsh
UEISMAP
UENONAME
UEMNMAP
UENMPRS
UEAMBIG
UENOMAP
umaplnk
UEISMAP
UENONAME
UEMNMAP
UENMPRS
UEAMBIG
UENOMAP
umaptbl
UEISMAP
UENONAME
UEBDMAP
UENMPRS
UEMNMAP
UENOMAP
umapvol
UEISMAP
UEMNMAP
UENONAME
UENOMAP
umodath
UENMLONG
UEDUPNM
UEBDNAM
umodbt
UENMREQ
UEBDNAM
UENMLONG
UEDUPNM
umodhsh
UENMREQ
UEBDNAM
UENMLONG
UEDUPNM
umodlnk
UENMREQ
UEBDNAM
UENMLONG
UEDUPNM
umodusr
UENMREQ
UEBDNAM
UENMLONG
UEDUPNM
umodvol
UENMREQ
UEBDNAM
UENMLONG
UEDUPNM
unumcgp
UENOCID
unumchd
UENOTID
UENOVID
unumcol
UENOTID
UENOROW
table continued on next page
RHLI Application Basics
59
60
Function
Most Frequent Status Codes
unumprn
UENOTID
UENOVID
unumrow
UENOTID
unumtbl
UENOAID
uopndb
UEDBOPN
UENDENT
UEINVAL
uopnjrn
UENOENT
UEINBHDR
upkfrow
UENOTID
UENOCID
UENOROW
UENOKEY
UENOCGP
uposord
UEEOSCN
usetitr
UEINVAL
uskrord
UEBDATYP
UEEOSCN
uulkdb
UENOLCK
uulkrow
UENOLCK
UENORID
UENOTID
uulksch
UENOTID
UENOLCK
uulktbl
UENOTID
UENOLCK
uupdrow
UENOTID
UENORID
uXML*
UEDOMEX
UEGENEX
UENTELEM
UENOBIN
UEFILNF
UENONDVL
UENOPELM
UENDNTFD
UEERRXML
UENOCHLD
UENONCOL
UEBADUN
UEXMLEX
UENOSIB
XMNOATTR
UENOROW
UENORID
RHLI Application Basics
System Error Log
File
Located in every application database directory, the system error log file,
dbname.err, is used by Unify DataServer to log system status and error
messages.
Status and error messages are appended to dbname.err each time a major
status event or system error occurs and can be checked by using any
standard Unix system editor, such as vi.
A dbname.err file is implicitly created each time a new database is
created with the uadddb function. While you can delete the contents of
the errlog file, do not remove the file.
Error Log File
All errors and status conditions that occur during the execution of an
RHLI application program that accesses a Unify DataServer database are
written to the system error log file, errlog. Errors and status conditions
are logged to errlog in a format similar to this example:
Error Log File
**************************Wed Sep 7 09:04:56 1988
Program: creatdb
Calling function: bterrlg.c
Offending function: bterrlg.c
Status: 0
Errno: 0
Notes: errlog created*********Wed Sep 7 09:05:05 1988
Program: creatdb
Calling function: bterrlg.c
Offending function: bterrlg.c
Status: 223
Errno: 4096
Notes: writing normal sync record*********Wed Sep 7 09:13:50 1988
Program: fmdmn
Calling function: wrnsnlg.c
Offending function: wrnsnlg.c
Status: 223
Errno: 8192
Notes: writing normal sync record
An errlog file is created each time a new database is created and is
located in your local database directory. Every database directory must
contain an errlog file. To create a database, use the uadddb function.
RHLI Application Basics
61
Transaction Types
RHLI features three types of transactions, each of which enforces a
different level of concurrency and database integrity:
Type 2
Type 1
Type 0
Type 2 transactions are the most restrictive, while Type 0 transactions are
the most lenient in terms of concurrency and preserving maximum
database integrity.
This kind of flexibility allows you to tailor your applications according to
the sensitivity of certain database operations.
You specify the transaction type when you begin a transaction with the
ubegtx or ucbgtx functions.
Type 2 Transactions
A Type 2 transaction strictly enforces any shared or exclusive locks that
the transaction acquires while performing its operations. All locks remain
in place until the transaction commits or aborts.
This type of transaction limits database concurrency but improves data
integrity and provides the highest degree of read reproducability.
Type 2 transactions are especially useful for those operations where
performance is less important but data accuracy and consistency is
critical.
For example, a banking transaction dealing with monetary amounts
would use a Type 2 transaction to perform database updates.
62
RHLI Application Basics
Type 1 Transactions
A Type 1 transaction enforces all locks acquired by the transaction,
except that shared locks can be released successfully at any time during
the transaction. This improves database concurrency but reduces read
reproducability of data.
Type 1 transactions are useful in cases where good performance is
required but data accuracy is less important.
For example, a Type 1 transaction would be useful in an inventory
system, where updates to the inventory tables must be made quickly and
checks for inventory figures can be approximate.
Type 0 Transactions
A Type 0 transaction is able to read uncommitted data locked by other
processes or transactions. This type of transaction cannot be used to
perform any update operations and should be used with caution.
Type 0 transactions are normally used when high performance is required
but the accuracy of the data is not as important.
For example, a Type 0 transaction might be used by a reporting
application that generates statistical reports used to portray data at a
given moment in time (sometimes called “snapshot” reporting).
RHLI Application Basics
63
Scanning
Scanning is a method for retrieving one or more rows from a table. You
determine which rows are retrieved by specifying selection criteria. Unify
DataServer examines the existing access methods for the table and
determines the best possible access method for retrieving the rows.
To perform a scan, follow these general steps.
1. Allocate a scan information structure by calling the ualcscn
function. This structure eventually will contain information about
the table column values that are compared by using the specified
selection criteria.
The ualcscn function returns a pointer to the Scan Information
Structure. This structure is referenced during the remaining scan
operations.
2. Indicate which table the scan is to be performed on by calling the
uinstbl function.
3. Indicate which columns are to be projected by calling the uinsprj
function.
The function uinsprj function must be called once for each
column that is to be included in the projection. The sequence of
columns that are added to the projection list determines the order
that the columns appear in the rows returned from the scan.
4. Allocate a criteria structure by calling the uinsand function.
5. Specify individual selection criteria by calling the uinsor function.
Selection criteria can include column value matches or
comparisons. Multiple criteria for a single column are grouped
together by using “or”, to create one or more “or-groups”.
If there is more than one column being matched or compared, the
resulting “or-groups” are grouped together with “and”.
6. If you want the retrieved rows to be ordered, specify the sort keys
and sort order by calling the uinssrt function.
64
RHLI Application Basics
7. If you want to get DBVAL column structures, call the uinfscn
function.
8. Begin the scan by calling the ubegscn function. The ubegscn
function uses the scan information in the Scan Information
Structure to determine the best method for retrieving the rows: it
selects the rows that meet the criteria specified and returns a Scan
ID that can be used to identify the row(s) selected by the scan.
When calling the ubegscn function, you can specify whether it
should lock the rows returned with the scan by using a shared or an
exclusive lock, or if it should not lock them.
9. Fetch rows from the scan by calling the ufchscn function. Before
rows can be retrieved from the scan, you must allocate space for
the column values that are returned with ufchscn.
This can be done in one of two ways:
by calling the uinfscn function to generate a database
value list based on the projection list and implicitly
allocate space
by manually constructing a database value list that
matches the type and number of columns in the
projection list, and allocating space in your program
The uinfscn function uses the scan projection list information
stored in the Scan Information Structure to generate a database
value list.
The database value list contains the column values and any column
options (such as whether the database value is null, or whether it
should be ignored when converting from internal to external
format and vice versa).
The uinfscn function uses the information in the database value
list to allocate space to receive the column values when retrieving
rows with the ufchscn function.
Rows are then locked and retrieved from the scan by using the
ufchscn function.
10. End the scan by calling the uendscn function.
11. Deallocate the scan information structure by using the ufrescn
function.
In addition, you can specify that the structure only be emptied, so
that you can respecify all new scan criteria without having to
reallocate space by using the ualcscn function.
RHLI Application Basics
65
The steps are indicated in the following example.
Additional Help
About
See
The syntax of the functions
An example
Function reference for each
function
The example in this section performs a scan on a table named table1. The
following diagram indicates the table, column names, data types, and
values used in the scan.
The table1 Table
A
B
C
1
0
2
2
2
2
NORTH
NORTH
WEST
EAST
NORTH
NORTH
3.00000
3.00000
3.00000
3.00000
4.00000
8.00000
CHAR(20)
NUMERIC(9)
FLOAT
The equivalent SQL/A query that the scan performs is:
SELECT A, B, C FROM table1
WHERE A BETWEEN 1 and 100
AND (B = ”NORTH” or B = ”WEST”)
AND C < 7.824;
This query has four conditions; each condition requires a separate call to
the uinsor function. These are the conditions:
Column A is between the values 1 and 100.
Column B is equal to NORTH.
Column B is equal to WEST.
Column C is less than 7.824.
66
RHLI Application Basics
#include <stdio.h>
#include <include/rhli.h>
#include <include/rhlierr.h>
#define N_TABLE1_COL 3
UDBID dbid;
UTXID txid;
USTATUS status[1];
USTATUS statusl[N_TABLE1_COL];
UTXOPT txopt;
char *scaninf;
int scanid;
int prevlck;
URID rid;
UDBVAL search_dbv[5];
UDBVAL *prjvall;
UDBVAL *nulldbv;
UTID tid = $table1.$;
UCID cidl[] = {$table1.A$,$table2.B$,$table3.C$};
long a1,a2;
char b1[20],b2[20];
double
c1;
/*
** INIT_DBVALL
**
** Since these buffers probably only need to be set up once,
** no matter how often you do the query, it is best to
** initialize them in some function once, and if possible
** call it only once. This will save runtime CPU time.
*/
init_dbvall()
{
search_dbv[0].unip.hintp = &a1;
search_dbv[1].unip.hintp = &a2;
search_dbv[2].unip.strp = b1;
search_dbv[3].unip.strp = b2;
search_dbv[4].unip.fltp = &c1;
Step 1
Step 2
Step 3
nulldbv = (UDBVAL *) 0L;
}
main ()
{
init_dbvall();
txopt.txknd = UTXTYPE2;
txopt.waitflg = UWAIT;
if (uopndb (””,DB_NORMAL,&dbid,status) != USUCCESS)
fatal (”uopndb”);
if (ubegtx (dbid,UROOTTXID,&txid,&txopt,status)
!= USUCCESS)
fatal (”ubegtx”);
if (ualcscn (txid,0,0,0,&scaninf,status) != USUCCESS)
fatal (”ualcscn”);
if (uinstbl (txid,scaninf,tid,status) != USUCCESS)
RHLI Application Basics
67
fatal (”uinstbl”);
if (uinsprj (txid,scaninf,3,cidl,statusl,status)
!= USUCCESS)
fatal (”uinsprj”);
init_criterea();
Step 4
Step 5
if (uinsand (txid,scaninf,4,status) != USUCCESS)
fatal (”uinsand”);
if (uinsor (txid,scaninf,$table1.A$,
URNGCC,&search_dbv[0],&search_dbv[1],status)
!= USUCCESS)
fatal (”uinsor.1”);
if (uinsor (txid,scaninf,$B$,
ULIKE,&search_dbv[2],nulldbv,status)
!=USUCCESS)
fatal (”uinsor.1”);
if (uinsor (txid,scaninf,$table2.B$,
ULIKE,&search_dbv[3],nulldbv,status)
!= USUCCESS)
fatal (”uinsor.2”);
if (uinsor (txid,scaninf,$table3.C$,
ULETST,&search_dbv[4],nulldbv,status)
!= USUCCESS)
fatal (”uinsor.3”);
Step 7
Step 8
Step 9
if (uinfscn (txid,scaninf,&prjvall,status) != USUCCESS)
fatal (”uinfscn”);
if (ubegscn (txid,USLCK,scaninf,&scanid,status)
!= USUCCESS)
fatal (”ubegscn”);
while
(ufchscn(scanid,&rid,prjvall,&prevlck,statusl,status) ==
USUCCESS)
{
fprintf (stdout,”%d | %s | %f\n”,
*(prjvall[0].unip.hintp),
prjvall[1].unip.strp,
*(prjvall[2].unip.fltp));
}
if (*status != UEEOSCN) fatal (”ufchscn”);
Step 10
Step 11
if (uendscn (scanid,status) != USUCCESS)
fatal (”uendscn”);
if (ufrescn (txid,&scaninf,DB_RESET,status) !=
USUCCESS)
fatal (”ufrescn”);
if (ucmttx (txid,status) != USUCCESS)
fatal (”ucmttx”);
if (uclsdb (dbid,DB_NORMAL,status) != USUCCESS)
fatal (”uclsdb”);
uexit (0);
68
/* should bail out here */
RHLI Application Basics
fatal (”uexit”); /* otherwise bail out from fatal */
}
RHLI Application Basics
69
Compiling and Loading
RHLI programs are compiled and loaded in two steps:
Step 1
Compile the program source files by using the Unify DataServer C
compiler ucc.
Step 2
Load the program object file(s) by using the Unify DataServer C program
loader uld.
Before compiling and loading your RHLI program, make sure that you
have:
included the proper header file(s) in your program
used the correct C data types to maintain compatibility with the
Unify DataServer database types
named your program by using a file name of 11 characters or less,
beginning with a character
Compiling With ucc
The Unify DataServer C compiler, ucc, compiles an RHLI source file and
creates an object file. The ucc compiler uses the preprocessor upp and
the system C compiler cc.
The upp preprocessor identifies any database object names in the source
file that need ID mapping or name binding performed. The preprocessor
substitutes appropriate object IDs for objects referenced with name
binding or ID mapping constructs.
The upp preprocessor produces two intermediate files
A file that contains the substituted object IDs for all object
references. The file contains the .u suffix.
A preprocessed file used as input to the cc compiler. The file
contains the .p suffix.
The .u file identifies the objects referenced in the source file and contains
the corresponding definition ID assigned by the database to each table or
column.
70
RHLI Application Basics
The table and column definition IDs are used to identify the given table
or column at that point in time. If any updates are later made to the table
or column in the database, a new definition ID is generated and stored in
the database.
The definition IDs stored in the .u files are compared to current IDs
during runtime to determine whether changes have occurred to the
database that affect the accuracy of the name binding that was performed
earlier.
After the preprocessing phase, ucc renames the .p file by using the
format Ufile.c, where the original source file name is prefixed with “U”
and concluded with “.c”. ucc then passes the Ufile.c files, along with any
other arguments entered in the ucc command line, to the UNIX or host
operating system C language compiler, cc.
The cc compiler is the UNIX or host operating system C language
compiler that compiles the preprocessed source file and generates an
object file. The object file contains the suffix .o.
RHLI Application Basics
71
The Compilation Process
Source File
file.c"
Preprocessor
upp
Intermediate
Data File
file.p"
C Compiler
(This file is created only if the
program references database
tables and columns. It is passed
ontoăthe loader, uld.)
Intermediate
Data File
file.u"
(optional)
1
C Compiler
cc
ucc
Intermediate
Source File
Ufile.c"
1
Object File
Ufile.o"
C Compiler
ucc
Object File
file.o"
The Loading Process
The Unify DataServer program loader, uld, verifies that changes have not
occurred to the referenced database objects since the object files were
compiled, then loads the files by using the UNIX or host operating system
link loader, ld.
ld combines the object file(s) and any archive files specified, resolves
external references, searches libraries specified, and generates the
program executable.
72
RHLI Application Basics
RHLI program object files are loaded by running uld from the operating
system shell, passing the RHLI program object files (.o) as arguments, as
well as any archive files and their corresponding .u files.
During loading, intermediate data files are created to aid in detecting
database changes between compile-time, load-time, and runtime.
The uld utility loads an object file created by the ucc utility. The object
files (.o) and any archive files (.a) are passed as arguments to uld.
If the specified archive files depended on compile-time name binding,
you must specify the corresponding .u file name along with the archive
file name in the uld command line.
If any of the object files performed name-binding at compile-time, there
must be a corresponding .u file existing in the current directory. If one
does not exist, then the source file(s) must be recompiled by using ucc
(or with upp and cc).
For each .o file passed in the command line, uld searches for the
corresponding .u file. For those object files or archive files with a
corresponding .u file, uld interacts with the database to retrieve
information about the tables and columns referenced.
If there are any discrepancies between the information in the .u files and
the database objects in the database, then the objects referenced have
been updated since compilation.
In this event, uld fails and returns an error message stating which object
files contained the invalid references. The invalid object files must then
be recreated by recompiling the corresponding source files.
If no changes have been made to the referenced tables and columns since
compilation, uld generates an intermediate source code file named
Ufile_h.c which contains information that is used when the executable is
run and the database is opened.
The intermediate source file Ufile_h.c is compiled by uld and the
resulting object file is then passed on to the UNIX or host operating
system C loader ld.
ld combines the object files, resolves external references, searches
libraries and produces an executable file. For more information about ld,
see the manual for your UNIX or host operating system C loader.
RHLI Application Basics
73
The following diagrams shows the loading process.
Events That Take Place During Loading
Object File
file.o"
Archive File
file.a"
Intermediate
Data File
file.u"
(optional)
DataServer
C PROGRAM
LOADER
uld
Intermediate
Data File
Ufile_h.c"
UNIX
C PROGRAM
LOADER
ld
RHLI
Program
Executable
file"
74
RHLI Application Basics
The RHLI Structures
75
Chapter
Focus
This chapter describes the structures used with many of the RHLI
functions. This chapter contains the following sections.
About the Structures
Structure Index
Structure Descriptions
76
The RHLI Structures
About the Structures
The structures used by the functions contain information specific to the
operation that the function performs. You must initialize the correct
structure with the appropriate data values before you call an RHLI
function.
The table on page 77 lists the RHLI functions and the structures
associated with each function. Some functions do not require the use of a
structure.
Structures are passed to the RHLI functions as pointers to the structures
rather than as the structures themselves.
All RHLI function structures are declared and defined in the rhli.h header
file. You must specify this file in an INCLUDE statement in your C
program that references RHLI functions
Structure Index
The following table lists the RHLI functions and the associated structures.
Use this table to determine which structure to initialize before calling the
associated function.
Function
Structure
uabttx
uaddath
uaddbt
uaddcgp
uaddcnm
uadddb
uaddhsh
uaddlnk
uaddprf
DBAUTH
DBBTREE
DBCGRP
DBCOLNM
DBINFO
DBHASH
DBLINK
1UDBVAL
None
None
Function
uaddprm
uaddprv
uaddtbl
uaddtnm
uaddusr
uaddvol
ualcscn
ualctbl
uallath
Structure
None
UGRTDS
DBTABLE
DBTBLNM
DBUSER
DBVOLM
None
UNIPCOLL
None
is a member of the UNIPCOLL structure.
continued
The RHLI Structures
77
Function
Structure
uallbt
uallcgp
uallcol
uallhsh
ualllnk
uallpid
ualltbl
ualltx
uallusr
None
None
None
None
None
None
None
None
None
uallvol
ubegord
ubegscn
ubegtx
ubndath
ubndbt
ubndcol
ubnddb
ubndhsh
ubndlnk
ubndtbl
ubndusr
ubndvol
ucbgtx
uclritr
uclsdb
uclsjrn
ucmttx
None
None
None
None
None
None
None
None
ucrypwd
udelrow
udrpath
udrpbt
udrpcgp
udrpcnm
udrphsh
udrplnk
udrpprf
None
uextint
UNIPCOLL,
UNIPEXT
ufchath
ufchcnm
ufchjrn
ufchlnk
ufchmsg
ufchord
ufchrow
None
None
udrpprm
udrpprv
udrptbl
udrptnm
udrpusr
udrpvol
uendord
uendscn
uexit
ufchscn
ufchtbl
ufchtnm
ufrescn
uinfacs
uinfath
uinfbt
uinfcgp
uinfcol
1UDBVAL
UTXOPT
Function
URVKDS
None
DBTBLNM
None
None
None
None
None
UDBVAL1
UNIPCOLL
None
None
UACSINF
UATHINF
UBTINF
UCGPINF
UCOLINF
uinfdb
uinfhsh
uinflck
uinflnk
uinfsch
uinfscn
uinftbl
uinftx
uinfusr
Structure
None
UOACOLS
None
UTXOPT
None
None
None
None
None
None
None
None
None
DBCGRP
DBCOLNM
None
None
None
UJRNINF
UNIPCOLL
None
UNIPCOLL
UNIPCOLL
UDBINF
UHTINF
None
UNLKINF
None
UDBVAL1
UTBLINF
UTXINF
UUSRINF
is a member of the UNIPCOLL structure.
continued
78
The RHLI Structures
Function
Structure
Function
uinfvol
uinimsg
uinsand
uinsbuf
uinsor
uinsprj
uinsrow
uinssrt
UVOLINF
uinstbl
uintext
None
UNIPCOLL
UNIPEXT
None
UNIPCOLL
None
ulckdb
ulckrow
ulcksch
ulcktbl
ulogmsg
None
None
None
None
None
umapath
umapbt
umapcol
umaphsh
umaplnk
umaptbl
umapvol
umodath
umodbt
UATHMAP
UBTMAP
UCOLMAP
UHSHMAP
UNLMAP
UTBLMAP
UVOLMAP
DBAUTH
DBBTREE
umoddb
umodhsh
umodlnk
umodusr
umodvol
unumath
unumcgp
unumchd
unumcol
DBINFO
DBHASH
DBLINK
DBUSER
DBVOLM
unumprn
unumrow
unumtbl
unumusr
unumvol
uopndb
uopnjrn
upkfrow
None
None
None
None
None
None
None
uposord
usetitr
uskrord
uulkdb
uulkrow
uulksch
uulktbl
uupdrow
UDBVAL1
1UDBVAL
The RHLI Structures
None
None
None
Structure
UDBVAL1
UNIPCOLL
None
None
None
None
None
None
None
None
None
None
UNIPCOLL
is a member of the UNIPCOLL structure.
79
The DBAUTH Structure: Schema
Information
The DBAUTH structure has the following declaration.
typedef struct
{
UAID aid;
UXID xid;
char * authnm;
} DBAUTH;
/* Authorization ID (returned)*/
/* reserved for future use
*/
/* pointer to schema name
*/
The DBAUTH structure is used by the uaddath and umodath functions
to describe a schema. The uaddath function adds a new schema. The
umodath function modifies, or changes, a schema name.
The aid member contains the authorization ID of the schema. If the
schema is being added with the uaddath function, Unify DataServer
places the authorization ID in aid. Otherwise, you must supply an
existing authorization ID.
The xid member is reserved for future use. Set xid to UNULLXID.
The authnm member contains a pointer to a buffer containing the name of
the schema. The name can be specified when adding a new schema or
when modifying an existing schema name. If a name is not desired, set
authnm to (char *)0 or to an empty string.
80
The RHLI Structures
The DBBTREE Structure: B-tree Index
Information
The DBBTREE structure has the following declaration.
typedef struct
{
char * btname;
UBTID btid;
UOPTS btopts;
UTID tid;
UVID vid;
int ncol;
UBTCOL * btcoll;
USTATUS * statusl;
} DBBTREE;
/*
/*
/*
/*
/*
/*
/*
/*
name of B-tree
B-tree ID
B-tree options
table B-tree indexes
volume on which to place B-tree
number of columns
list of columns for B-tree key
list of corresponding statuses
*/
*/
*/
*/
*/
*/
*/
*/
The DBBTREE structure is used by the uaddbt and umodbt functions to
specify B-tree information. The uaddbt function adds a new B-tree
index. The umodbt function modifies an existing B-tree index name.
The btname member contains a pointer to a buffer containing the name of
the B-tree. The name must contain the B-tree name only; it cannot
contain the corresponding schema name or table name prefixes. If a name
is not desired, set btname to (char *)0 or an empty string.
The btid member contains the B-tree ID. If the B-tree is being added, the
system returns the B-tree ID in btid. Otherwise, you must supply an
existing B-tree ID.
The umodbt function can modify a B-tree name only; therefore, only the
btname and btid members need to be initialized when calling the umodbt
function.
The btopts member contains the B-tree creation options:
The RHLI Structures
DB_INSCATTER
data may be scattered across volumes
DB_IXUSEVOL
specifies preferred volume to use
DB_DUPNOK
no duplicate keys
DB_DUPSOK
allow duplicate keys
81
DB_NORMAL
DB_DUPNOK is the default value used
The tid member contains the table ID to which all of the columns
comprising the B-tree index belong.
The vid member is reserved for future use.
The ncol member contains the count of the number of entries in the
B-tree index column list (btcoll).
The btcoll member contains a pointer to a list of B-tree index column
structures (UBTCOL) which describe the columns comprising the btree
index. The list contains ncol entries.
The rank (or position) of each column in the B-tree index is implied by
its location in this list; for example, the column described by btcoll[0] is
the most significant column and is of rank 1.
The statusl member contains a pointer to a list of B-tree index column
status buffers. The list contains ncol entries. Upon completion of the
B-tree operation, each entry in the status list contains an error code which
indicates the result of the operation for the corresponding column entry in
the btcoll list.
The UBTCOL Structure
The UBTCOL structure specifies information about a column that makes
up the B-tree. The UBTCOL structure is declared as follows:
typedef struct
{
UCID cid;
UOPTS btcopts;
} UBTCOL;
/* Column ID
/* DB_ASCEND || DB_DESCND
*/
*/
The cid member contains the column ID of a column which is to
comprise the B-tree index.
The btcopts member contains the B-tree column processing options as
they relate to the corresponding column:
DB_ASCEND
ascending key value
DB_DESCND
descending key value
DB_NORMAL DB_ASCEND is the default value used
82
The RHLI Structures
The DBCGRP Structure: Column
Group Information
The DBCGRP structure has the following declaration.
typedef struct
{
UCID grpcid;
DBCMBR * mbrlst;
USTATUS * statusl;
int ncol;
UOPTS colopts;
} DBCGRP;
/*
/*
/*
/*
/*
/*
Column Group ID (returned)
pointer to column group member
column list
array of column status codes
# of columns in ’mbrlst’
group column processing options
*/
*/
*/
*/
*/
*/
The DBCGRP structure is used by the uaddcgp and udrpcg functions to
specify information about a column group.
The grpcid member contains the column group ID. If the column group is
being added, Unify DataServer places the column group ID in grpcid.
Otherwise, you must supply an existing column group ID.
The mbrlst member contains a pointer to a list of DBCMBR column
group member structures which describes the columns which comprise
the column group. The list contains ncol entries. The DBCMBR structure
is described on page 84.
If DB_ORDERD is specified for colopts, the rank (or position) of each
column in the mbrlst member list is implied by its location in this list. For
example, the column described by mbrlst[0] is the most significant
column and is of rank 1. If DB_ORDERD is not specified, Unify
DataServer assigns the rank by ordering the column IDs.
The statusl member contains a pointer to a list of member column status
buffers. The list contains ncol entries. Upon completion of the column
group operation, each entry in the status list contains an error code which
indicates the result of the operation for the corresponding column entry in
the mbrlst list.
The ncol member contains the count of the number of entries in the
column group member column list mbrlst.
The RHLI Structures
83
The colopts member contains the column group options (attributes):
DB_ORDNRY
ordinary column
DB_COLKEY
column is primary key for table
DB_UNIQUE
column must be unique
DB_ORDERD column is ordered
DB_NORMAL DB_ORDNRY is the default value used
You can specify more than one option by separating the options with the
bitwise logical OR operator (|).
If DB_COLKEY or DB_UNIQUE is specified, each of the members of the
column group must have been created with the DB_NONULL option.
This option is specified in the DBTABLE structure described on page 98.
If DB_ORDERD is specified, you cannot specify DB_COLKEY or
DB_UNIQUE.
The DBCMBR Structure
The DBCMBR structure specifies information about a column member in
the column group. The DBCMBR structure has the following declaration.
typedef struct
{
UCID mbrcid;
UOPTS mbropts;
} DBCMBR;
/* column group member Column ID
/* column group member options
*/
*/
The mbrcid member contains the column ID of a column that is a member
of a column group.
The mbropts member contains the member column processing options as
they relate to the corresponding column:
DB_ASCEND
ascending key value
DB_DESCND
descending key value
DB_NORMAL DB_ASCEND is the default value used
84
The RHLI Structures
The DBCOLNM Structure: Column
Name Information
The DBCOLNM structure has the following declaration.
typedef struct
{
UCID cid;
char * colnm;
} DBCOLNM;
/* Column ID to bind name to
/* pointer to column name
*/
*/
The DBCOLNM structure is used by the uaddcnm and udrpcnm
functions to specify column names.
The cid member contains the column ID which this structure describes.
The colnm member contains the column name string, zero terminated.
The RHLI Structures
85
The DBHASH Structure: Hash Table
Index Information
The DBHASH structure has the following declaration.
typedef struct
{
char * htname;
UCID * colidl;
UHID hid;
UVID vid;
long htthrsh;
long htovfsz;
int htbchsz;
UOPTS htopts;
int ncol;
} DBHASH;
/*
/*
/*
/*
/*
/*
/*
/*
/*
name of hash table
Column ID list
Hash Table ID
volume on which to place hash tbl
split threshold value
hash table overflow bucket size
# of buckets in hash table cache
hash table options
number of columns
*/
*/
*/
*/
*/
*/
*/
*/
*/
The DBHASH structure is used by the uaddhsh and umodhsh functions
to specify information about hash table indexes.
The htname member contains a pointer to a buffer containing the name of
the hash table. The name must contain the hash table name only; it cannot
contain the corresponding schema name or table name prefixes. If a name
is not desired, set htname to (char *)0 or an empty string.
The colidl member contains a pointer to a list of hash table index column
IDs that describes the columns that comprise the hash table index. The
list contains ncol entries. There is no rank implied in a hash table index.
Columns of U_VTXT or U_VBIN data types cannot be used in a hash
table key.
The hid member contains the hash table ID. If the hash table is being
added, the system places the hash table ID in hid. Otherwise, you must
supply an existing hash table ID.
The umodhsh function can modify a hash table name only; therefore,
only the htname and hid members need to be initialized when calling the
umodhsh function.
The vid member contains the volume ID on which to place the hash table
index. If the hash table can be placed on any volume (no volume
preference exists), the vid member should contain the value UNULLVID.
86
The RHLI Structures
The htthrsh member contains a threshold for splitting hash table buckets.
If this number is set to a low value, hash key retrieval time is kept low at
the cost of disk space. If this number is set to a high value, space in the
hash table index is more fully used at the cost of hash key retrieval time.
A htthrsh value of 20L will keep a hash table index moderately full.
The htovfsz member contains the number of overflow buckets that should
be allocated at one time. A value of 1L means that overflow buckets
should be allocated as they are needed. This value incurs the cost of
having to manage overflow buckets individually. A value of 16L means
that overflow buckets are allocated 16 at a time. This value means that
the unused buckets take up space until they are needed, but it is easier for
the system to manage the buckets.
The htbchsz member is reserved for future use and should be set to 0.
The htopts member contains the hash table processing options:
DB_DUPNOK
no duplicate keys
DB_INSCATTER
data may be scattered across volumes
DB_IXUSEVOL
specifies preferred volume to use
DB_TYPE00
key folding algorithm #0
DB_TYPE01
(deprecated)
DB_TYPE02
(deprecated)
DB_TYPE03
(deprecated)
DB_TYPE04
(deprecated)
DB_TYPE05
(deprecated)
DB_TYPE06
key folding algorithm #6
DB_TYPE07
(deprecated)
DB_TYPE08
key folding algorithm #8
DB_TYPE09
key folding algorithm #9
DB_NORMAL
DB_DUPNOK is the default value used
You can select one of the DB_TYPE options only. If you omit a
DB_TYPE option, DB_TYPE08 is used.
The ncol member contains the count of the number of entries in the hash
table index column list colidl.
The RHLI Structures
87
The DBINFO Structure: Database
Information
The DBINFO structure has the following declaration.
typedef struct
{
DBVOLM * rootvol;
UOPTS dbopts;
/* Operating System
int dbmode;
int dbusrid;
int dbgrpid;
char * descrpt;
char * dbname;
} DBINFO;
/* pointer to root volume info.
/* database creation options
*/
*/
Specific Values (See: chmod, chown)
/* DB file access modes (u/g/o)
/* DB file Owner ID (or –1)
/* DB file Group ID (or –1)
/* pointer to DB description
/* pointer to database name
*/
*/
*/
*/
*/
*/
The DBINFO structure is used by the uadddb and umoddb functions to
specify information about a database.
The rootvol member contains a pointer to a DBVOLM structure that
describes the root volume information. For more information about
defining volumes, see the DBVOLM structure description on page 101
The dbopts member contains the database creation options:
DB_PUBLIC
Normal mode (do not overwrite any existing
databases, create a public database)
DB_OVERWR overwrite existing database
DB_PRIVAT
create private database
DB_NORMAL DB_PUBLIC is the default value used
You can specify more than one option by separating the options with the
bitwise logical OR operator (|).
The dbmode member contains the Unix file access modes that all
database files are created with; these modes can be changed by the user if
so desired. For more information, see the chmod(2) description in your
Unix system manual.
88
The RHLI Structures
The dbusrid member is the Unix file owner ID that all database files are
created with; the owner ID can be changed by the user if so desired. If
you specify –1, the current effective user ID is used as the owner ID.
You can also use the VOLUSER configuration variable to set the owner ID.
If you set the dbusrid member to the value of a user other than the current
effective user, you must have the necessary underlying UNIX privileges.
The dbgrpid member is the Unix file group ID that all database files are
created with; the group ID can be changed by the user if so desired. If
you specify –1, the current group ID is used for the group ID. You can
also use the VOLGROUP configuration variable to set the group ID.
The descrpt member contains a pointer to a buffer containing a
description of the database. If a description is not desired, set descrpt to
(char *)0 or an empty string.
The dbname member contains a pointer to a buffer containing the name
of the database. If a name is not desired, set dbname to (char *)0 or an
empty string.
The umoddb function cannot modify the database root volume (rootvol)
or any database creation options (dbopts); therefore, only the dbmode,
dbusrid, dbgrpid, descprt and dbname members can be initialized when
calling the umoddb function.
For more information about user and group IDs, see the chown(2) and
chgrp(2) descriptions in your Unix system manual . For more
information about configuration variables, see Unify DataServer:
Managing a Database
The RHLI Structures
89
The DBLINK Structure: Link
Information
The DBLINK structure has the following declaration.
typedef struct
{
char * lnkname;
UCID * pcolidl;
UCID * ccolidl;
UTID ptblid;
UTID ctblid;
ULID lid;
int ncol;
} DBLINK;
/*
/*
/*
/*
/*
/*
/*
name of link
parent column ID list
child column ID list
parent table ID
child table ID
Link ID
number of columns
*/
*/
*/
*/
*/
*/
*/
The DBLINK structure is used by the uaddlnk and umodlnk functions to
specify information about links.
The lnkname member contains a pointer to a buffer containing the name
of the link. The name must contain the link name only ; it cannot contain
the corresponding schema name or table name prefixes. If a name is not
desired, set lnkname to (char *)0 or an empty string.
The pcolidl member contains a pointer to a list of link index parent
column IDs which describes the columns which comprise the link index.
The list contains ncol entries. Note that there is no rank implied in a link
index.
For the parent of a particular child to be identified, the parent column or
set of columns must be unique. See the uaddtb function for information
on how to specify a uniqueness constraint on a column.
The ccolidl member contains a pointer to a list of link index child column
IDs which describes the columns which comprise the link index. The list
contains ncol entries. Note that there is no rank implied in a link index.
If the link is on more than one column, then the order of column IDs in
the lists indicates which columns are to be linked between the two tables.
Each column in the child list must have the same type as the
corresponding column in the parent list. A column or set of columns can
be the child of no more than one link.
90
The RHLI Structures
The ptblid member contains the table ID of the parent table to which the
columns described by the pcolidl list belong.
The ctblid member contains the table ID of the child table to which the
columns described by the ccolidl list belong.
The child table cannot have the same table ID as the parent table.
The lid member contains the link ID. If the link index is being added,
Unify DataServer places the link ID in lid. Otherwise, the user is required
to supply an existing link ID.
Since the umodlnk function can change a link name only, initialize the
lnkname and lid members only of the DBLINK structure when calling the
umodlnk function.
The ncol member contains the count of the number of entries in the link
index column list pcolidl and ccolidl.
The RHLI Structures
91
The DBTABLE Structure: Table
Information
The DBTABLE structure has the following declaration.
typedef struct
{
UTID tid;
DBCOL * dbcol;
USTATUS * statusl;
UVID vid;
long segsz;
long expnum;
long tblbase;
UOPTS tblopts;
int ncol;
char * tblnm;
char * tbldesc;
} DBTABLE;
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Table ID (returned)
array of column information
array of column status codes
initial preference volume
desired segment size (bytes)
expected number of rows
direct table base value
table processing options
# of entries in dbcol list
pointer to table name
pointer to table description
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
The DBTABLE structure is used by the uaddtbl function to specify
information about a table.
The tid member contains the table ID of the table. If the table is being
added, Unify DataServer places the table ID in tid. Otherwise, you must
supply an existing table ID.
The dbcol member contains a pointer to a list of DBCOL column
information structures, which provide information about the table
columns. The dbcol list contains ncol entries.
The statusl member contains a pointer to a list of status buffers, each
entry of which indicates the success or failure of the corresponding entry
in the column information list. The list contains ncol entries.
The vid member contains the volume ID on which to place the table. If
the table can be placed on any volume (no volume preference exists), set
the vid member to UNULLVID.
The segsz member contains the table’s desired segment size, in bytes. If
you want Unify DataServer to choose an optimal segment size for you,
set segsz to 0L.
92
The RHLI Structures
A segment is a contiguous disk buffer where table rows reside; typically,
a segment’s size corresponds to the table’s row size. This helps minimize
the amount of fragmentation left over in the segment.
The expnum member contains the number of rows, if any, designated
when the table was created. If the DB_FIXSIZE option is specified, the
expnum value specifies a fixed number of rows. The expnum member’s
value is advisory only and does not place any restrictions on the number
of records that can be inserted into the table.
The tblbase member contains the table’s base value, if the table is a direct
table. Otherwise, the value of tblbase is zero (0).
The tblopts member options are:
DB_ORDNRY
create ordinary table
DB_DIRECT
create directĆkeyed table
DB_FIXSIZE
reserved for future use
DB_KEYED
all directĆkey column values are userĆsupplied
DB_RDONLY
reserved for future use
DB_SCATTR
scatter data across volumes
DB_USEVOL
must use specified preference volumes
DB_NORMAL DB_ORDNRY is the default value used
You can specify more than one option by separating the options with the
bitwise logical OR operator (|).
If you specify the DB_KEYED option, you must also specify the
DB_DIRECT option.
The DB_USEVOL option indicates that the rows inserted into the table
must be stored on the volume specified by the vid member. If
DB_USEVOL is not specified, then vid is taken as the desired volume, but
other volumes defined for the database are not excluded.
The DB_SCATTR option indicates that rows inserted into the table are to
be scattered evenly over all volumes in the volume preference list (as
space permits). If DB_SCATTR is not specified, then rows are placed in
the first volume in the list until it becomes full, then the second volume
in the list, and so forth. For more information, see the uaddprf function.
The RHLI Structures
93
If no volume is specified in vid, then all volumes defined for the database
are used for scattering.
The ncol member contains the number of columns in the table column
information list dbcol and its corresponding status list statusl. If the value
of ncol is zero (0), the dbcol and statusl members are not allocated and
should not be referenced.
The tblnm member contains a pointer to a buffer containing the name of
the table. If a name is not desired, set tblnm to (char *)0 or an empty
string.
The tbldesc member contains a pointer to a buffer containing the textual
description of the table. If a description is not desired, set tbldesc to
(char *)0 or an empty string.
Performance
When the direct access column values are scattered, the system overhead
for generating the values can be substantial. If your direct access column
values are scattered and you do not want Unify DataServer to generate
the values, specify the DB_KEY option.
The DBCOL Structure
The DBCOL structure specifies column information. The DBCOL
structure has the following declaration.
typedef struct
{
UCID cid;
int coltyp;
int collen;
int colscl;
int dsplen;
int dspscl;
UOPTS colopts;
char * colnm;
char * coldesc;
char * dsppict;
} DBCOL;
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Column ID (returned)
column type
column storage precision (XXX.XXX)
column storage scale (.YYY)
column display precision
column display scale
column processing options
pointer to column name
pointer to column description
pointer to column display picture
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
The cid member contains the column ID of the created table column. If
the column is being added, the system places the column ID in cid.
Otherwise, the user is required to supply an existing column ID.
94
The RHLI Structures
The coltyp member contains the data type of the column. Valid column
types are:
U_INT for SMALLINT (16-bit )
U_HINT for INTEGER (32-bit)
U_GINT for HUGE INTEGER (64-bit)
U_FLT for FLOAT (double precision floating point)
U_DBL for DOUBLE PRECISION (double precision floating point)
U_REAL for REAL (single precision floating point)
U_AMT for AMOUNT
U_HAMT for HUGE AMOUNT
U_GAMT for CURRENCY
U_DATE for DATE
U_HDATE for HUGE DATE
U_TIME for TIME
U_STR for CHARACTER
U_BYT for BYTE
U_VTXT for TEXT
U_VBIN for BINARY
For more information about column data type declaration, see the rhli.h
header file.
The RHLI Structures
95
The collen member contains the internal storage precision, or length, of
the column. The colscl member contains the internal storage scale of the
column, if applicable. The following table shows values allowed for
collen and colscl.
For columns of
this data type:
Valid collen
values are:
Maximum
collen value
defined as:
U_INT
1-4
UIL_INT
0
U_HINT
1-9
UIL_HINT
0
U_GINT
1-19
UIL_GINT
0
U_REAL
32
UIL_REAL
0
U_FLT
64
UIL_FLT
0
U_DBL
64
UIL_DBL
0
U_AMT
3-9
UIL_AMT
2
U_HAMT
3-15
UIL_HAMT
2
U_GAMT
1-19
UIL_GAMT
0–8
U_DATE
0
UIL_DATE
0
U_HDATE
0
UIL_HDATE
0
U_TIME
0
UIL_TIME
0
U_STR
1-256
UIL_STR
0
U_BYT
1-1024
UIL_BYT
0
U_VTXT
0
UIL_VTXT
0
U_VBIN
0
UIL_VBIN
0
Valid colscl
values are:
Except for U_GAMT, a colscl value of 0 indicates that scale is not
applicable to the data type and must be set to 0.
96
The RHLI Structures
The dsplen member contains the external display precision, or length, of
the column. Valid values are shown in the table. You can also set dsplen
to zero (0) which causes the default display precision for that data type
to be used.
For columns of
data type:
Valid dsplen
values are:
Default dsplen
value defined
as:
U_INT
2-5
UDL_INT
0
U_HINT
2-10
UDL_HINT
0
U_GINT
2-20
UDL_GINT
0
U_REAL
1-11
UDL_REAL
0-9
U_FLT
1-17
UDL_FLT
0-15
U_DBL
1–17
UDL_DBL
0-15
U_AMT
4-16
UDL_AMT
2
U_HAMT
4-25
UDL_HAMT
2
U_GAMT
2-22
UDL_GAMT
0-8
U_DATE
8-11
UDL_DATE
0
U_HDATE
8–11
UDL_HDATE
0
U_TIME
5
UDL_TIME
0
U_STR
1–256
UDL_STR
0
U_VTXT
1–256
UDL_VTXT
0
U_VBIN
0
UDL_VBIN
0
U_BYT
1–1024
UDL_BYT
0
Valid dspscl
values are:
Except for U_GAMT, U_REAL, U_FLT, and U_DBL, a colscl value of 0
indicates that scale is not applicable for the data type and must be set
to 0.
The colnm member contains a pointer to a buffer containing the name of
the column. The name must contain only the column name component; it
cannot contain the corresponding schema name or table name prefixes. If
a name is not desired, set colnm to (char *)0 or an empty string.
The RHLI Structures
97
The coldesc member contains a pointer to a buffer containing the textual
description of the column. If a description is not desired, set coldesc to
(char *)0 or an empty string.
The dsppict member contains a pointer to a buffer containing an RPT-like
display picture clause. If a display picture clause is not desired, set
dsppict to (char *)0 or an empty string.
The colopts member contains the various column processing options:
DB_ORDNRY
Indicates that the other processing options are
not specified (all options are at their default
value of FALSE).
DB_COLKEY
Indicates that the column is a primary key for
the table.
DB_DELETE
Reserved for future use.
DB_IMMED
Reserved for future use.
DB_NOLOG
Reserved for future use.
DB_NONULL
Indicates that the column can only contain
nonĆnull values.
DB_RDONLY
Reserved for future use.
DB_UNIQUE
Indicates that the column can only contain
unique values.
DB_NORMAL DB_ORDNRY is the default value used
You can specify more than one option by separating the options with the
bitwise logical OR operator (|).
If the DB_UNIQUE option is specified, you must also specify the
DB_NONULL option.
If the DB_COLKEY option is specified, you must also specify the
DB_UNIQUE option.
98
The RHLI Structures
The DBTBLNM Structure: Table Name
Information
The DBTBLNM structure has the following declaration.
typedef struct
{
UTID tid;
/* Table ID to bind name to
char * tblnm; /* pointer to table name
} DBTBLNM;
*/
*/
The DBTBLNM structure is used by the uaddtnm and udrptnm
functions to specify a table name for a table.
The tid member contains the table ID which this structure describes.
The tblnm member contains the table name string, zero terminated.
The RHLI Structures
99
The DBUSER Structure: User and
Default Schema Information
The DBUSER structure has the following declaration.
typedef struct
{
UOID uoid;
UAID aid;
char * usernm;
} DBUSER;
/* User/Owner ID (returned)
/* default Authorization ID (or NULL)
/* pointer to user name
*/
*/
*/
The DBUSER structure is used by the uaddusr and umodusr functions to
specify information about a user and a user’s default schema.
The uoid member contains the user ID. If the user is being added, Unify
DataServer places the user ID in uoid. Otherwise, you must supply an
existing user ID.
The aid member contains the authorization ID that corresponds to the
user’s default schema. If aid is set to UNULLAID, the authorization ID
for the PUBLIC schema is used.
The usernm member contains a pointer to a buffer containing the name of
the user. You must specify a user name.
The user name should match the user’s name as it is known to the Unix
operating system.
100
The RHLI Structures
The DBVOLM Structure: Volume
Information
The DBVOLM structure has the following declaration.
typedef struct
{
UVID vid;
long voloff;
long vollen;
long volpgsz;
UOPTS volopts;
char * volfile;
char * volname;
} DBVOLM;
/* Volume ID (returned/specified)
/* volume offset (bytes)
/* volume length
/* volume page size (bytes)
/* volume processing options
/* pointer to volume file name
/* pointer to volume name
*/
*/
*/
*/
*/
*/
*/
The DBVOLM structure is used by the uaddvol and umodvol functions
to specify information about a volume.
DBVOLM is also a member of the structure DBINFO.
The vid member is used for the volume ID for the volume that this
structure describes. If the volume is being added and the DB_SPECIFY
option is not specified as a volume processing option, the system places a
volume ID in vid. If the volume is being added and the DB_SPECIFY
option is specified, you specify the volume ID for the volume in the vid
member. The volume ID you specify cannot be an existing volume ID. If
the volume is being modified, specify an existing volume ID in the vid
member.
The voloff member is the offset within the physical media in which the
volume resides where data storage for the volume begins. The voloff
value is typically used when a single physical device is used for two or
more volumes; the offset of the second volume would be the address
immediately following the first volume, and so on.
The volume offset is the number of bytes from the beginning of the disk
partition; this value is converted internally into the corresponding number
of blocks. The offset for the root volume must always be zero (0),
although a volume offset of zero does not necessarily identify the root
volume.
The RHLI Structures
101
The vollen member indicates the length of the volume. If DB_BIG is set
in the volopts member, vollen represents the number of pages. Otherwise,
it represents the number of bytes; this value is converted internally into
the corresponding number of blocks. The volume length is used by
volume storage routines to determine how much data can fit onto the disk
partition.
If the volume type is a device or preallocated file, you must specify a
non-zero length. If the volume type is a regular file, you can specify a
non-zero or zero length. A length of zero indicates that the size is
unlimited, A non-zero length indicates a maximum size limit for the
regular file; the file grows until it reaches the size.
The volpgsz member specifies the operating system dependent page size
for the device on which the volume resides. The volpgsz size is expressed
in bytes; that is, the value 2048 represents a page whose size is 2048
bytes long. Note that this value is converted to the internal page size,
which is an integral number of blocks.
The volpgsz value must match the value preset for the Unify DataServer
release. If zero is specified, the value specified by the VOLPGSZ
configuration variable is used.
The volopts member contains various volume processing options.
Options are:
DB_ORDNRY
Indicates that the processing options are
normal. That is, the volume is not a device or
preĆallocated. This is the default setting.
DB_ALLOC
Indicates that the volume is a preallocated file.
DB_CONTIG
Reserved for future use.
DB_DEVICE
Indicates that the volume is a device (character
or blockĆspecial file).
If the volume options include DB_DEVICE, the
device special file must exist before adding a
volume on the device.
DB_FORCE
102
Indicates that if the volume is a regular file, the
UNIX operating system allocates an entire new
segment when the existing segment capacity is
exceeded. If this option is not specified, the
regular files grow in smaller allocations each
time data is added to the file.
The RHLI Structures
DB_RDONLY
Reserved for future use.
DB_SPECIFY
Indicates that the volume ID is specified (rather
than returned) in the vid member. If the
volume ID you specify is not currently being
used, the volume ID is assigned to the volume
being created.
DB_BIG
Indicates that the vollen specification is in pages
rather than bytes.
DB_NORMAL DB_ORDNRY is the default value used
You can specify more than one option by separating the options with the
bitwise logical OR operator (|).
The volfile member is the full path name of the file or character device
for the volume, including the file name. If the file name does not end
with the .db suffix, Unify DataServer appends the suffix to the name.
If the volume is a root volume, it must reside in the directory specified by
the DBPATH and DBNAME configuration variables. The path and file
name can be omitted or equal to null (char *)0 ; in this case the value of
the DBPATH and DBNAME configuration variables are used.
If the volume is not a root volume, you must specify the file name. The
path can be omitted; the default path is determined by the DBPATH
configuration variable.
The volname member contains a pointer to a buffer containing the name
of the volume. If a volume name is not desired, set volname to (char *)0
or a null string (””).
If you create a database with a device as the root volume, the device must
exist in the directory specified by the DBPATH configuration variable. The
device must have the name indicated by the DBNAME configuration
variable and the .db file name suffix. This is accomplished by using the
mknod utility the directory specified by DBPATH or symlinking the
device into DBPATH.
To re-use an existing volume that is a device, use the mkvol utility to
create the volume. The mkvol utility marks the volume as deleted.
The volume size information is maintained in terms of bytes. This is
because the user may not know the current database’s block size, and an
incorrect calculation on the user’s part cause damage to the database.
The RHLI Structures
103
Since the umodvol function can change a volume name, initialize only
the volname and vid members only of the DBVOLM structure when
calling the umodvol function.
Additional Help
About
104
See
Symlinking
Your operating system
documentation
Configuration variables
Unify DataServer:
Configuration Variable and
Utility Reference
The RHLI Structures
The UACSINF Structure: Access
Method Information
The UACSINF structure has the following declaration.
typedef struct
{
int scanid;
int acsknd;
UACS acsid;
} UACSINF;
/* scan identifier
/* access type (UBTSCN, etc)
/* access method info structure
*/
*/
*/
The UACSINF structure is used by the uinfacs function to retrieve access
method information about an access.
The scanid member contains the identifier of the access that the structure
describes.
The acsknd member contains a value that identifies the type of access
method being used by the access. Options are:
The btacs Structure
USQSCN
sequential access type
UDKSCN
direct key access type
UBTSCN
BĆtree index access type
UHKSCN
hash index access type
ULKSCN
link index access type
UNULLSCN
no access type, not initialized
The btacs structure of type UBTACS contain information if the acsknd
member is set to UBTSCN. The btacs structure has the following
declaration.
typedef struct
{
UBTID btid;
int nbtcol;
} UBTACS;
/* B-tree Index ID
/* # of btree key columns used
*/
*/
The btid member contains the B-tree ID of the B-tree index used by the
access.
The nbtcol member contains the number of components of the B-tree key
used by the access.
The RHLI Structures
105
The acid Union
The acsid member is a union of type UACS that contains additional
information for certain access types. The acsid union has the following
declaration.
typedef union
{
UBTACS btacs;
UHID hid;
ULID lid;
} UACS;
/* UBTSCN: btree access info
/* UHKSCN: Hash Index ID
/* ULKSCN: Link Index ID
*/
*/
*/
The hid member contains the Hash Table ID of the hash index used by
the access. It will be filled in if the value of acsknd is equal to UHKSCN.
The lid member contains the Link ID of the link index used by the access
if the acsknd member is set to ULKSCN.
106
The RHLI Structures
The UATHINF Structure: Schema
Information
The UATHINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UAID aid;
/* Authorization ID
/* information retrieval class: I (UCLASS1) */
UXID xid;
/* reserved for future use
char authnm[U_ATHNMLN + 1]; /* pointer to the
/* schema name
} UATHINF;
*/
*/
*/
*/
The UATHINF structure is used by the uinfath function to retrieve
information about a schema. A schema is also called an authorization.
The aid member contains the authorization ID of the schema.
The xid member is reserved for future use.
The authnm member contains the name of the schema as it would be
referenced for name-binding.
The RHLI Structures
107
The UATHMAP Structure:
Authorization ID Mapping
The UATHMAP structure has the following declaration.
typedef struct
{
char * athnm;
UAID aid;
UAID remapid;
} UATHMAP;
/* pointer to runtime schema name
/* compile-time Authorization ID
/* runtime Auth. ID (returned)
*/
*/
*/
The UATHMAP structure is used by the umapath function to specify
information about runtime ID-mapping on a compile-time schema.
Tip
Use the INIATHMAP mapping macro to initialize the UATHMAP
structure.
The athnm member contains the runtime name of the schema.
To reset the value of a previously mapped authorization ID, set the value
of athnm to (char *)0 or the null-string (“”).
The aid member contains an authorization ID that uniquely identifies the
schema. The authorization ID can be supplied by you or can be generated
by the ucc compiler.
If you supply the authorization ID (aid), be sure that the number you pick
is compatible with the data type UAID.
To generate a unique compile-time authorization ID by using ucc,
initialize aid with the following compiler directive (athnm is the name of
the schema):
$(UATH:AID)athnm$
The remapid member, upon successful completion of the ID-mapping
operation, contains the runtime ID to which the compile-time ID is
mapped. This value is for internal use only.
108
The RHLI Structures
The UBTINF Structure: B-tree
Information
The UBTINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UBTID btid;
/* B-tree this struct describes
UBTID remapid;
/* logical B-tree ID (if remapped)
*/
*/
/* information retrieval class: I (UCLASS1) */
UOPTS btopts; /* DB_DUPSOK || DB_DUPNOK
UTID tid;
/* Table ID this B-tree indexes
*/
*/
/* information retrieval class: II (UCLASS2) */
int count;
/* length of B-tree column list
UBTCINF *btcinf; /* pointer to UBTCINF structure list
*/
*/
/* information retrieval class: III (UCLASS3) */
char btnm[U_NAMELEN + 1]; /* name of B-tree index
} UBTINF;
*/
The UBTINF structure is used by the uinfbt function to retrieve B-tree
information.
The btid member contains the B-tree index ID that the structure
describes. If the ID represents a remapped btree index, the ID is the
compile-time B-tree index ID (the ID with which the user remapped the
B-tree index).
The remapid member contains the logical B-tree index ID that the
structure describes. If the ID represents a remapped B-tree index, the ID
is the runtime B-tree index ID (the actual Database ID). Otherwise,
remapid is identical to the btid member.
The btopts member contains the B-tree creation options:
DB_DUPNOK no duplicate keys
DB_DUPSOK
allow duplicate keys
DB_NORMAL DB_DUPNOK is the default value used
The tid member contains the table ID to which all of the columns
comprising the B-tree index belong.
The RHLI Structures
109
The count member contains the count of the number of entries in the
B-tree index column information list btcinf.
The btcinf member contains a pointer to a list of UBTCINF B-tree index
column information structures which describes the columns comprising
the B-tree index. The list contains ncol entries.
See the description of the UBTCINF structure below.
The btname member contains the name of the B-tree, if any. If the B-tree
index does not have a name, the member contains an empty string.
The UBTCINF Structure
The UBTCINF structure contains B-tree column information. The
UBTCINF structure has the following declaration.
typedef struct
{
int rank;
UCID cid;
UOPTS btcopts;
} UBTCINF;
/* 0 top rank – lowest rank
/* Column IDs (cid’s)
/* DB_ASCEND || DB_DESCND
*/
*/
*/
The maximum number of columns in the B-tree is 128.
The rank member contains the rank, or position, of the corresponding
column in the B-tree index. The rank value starts at zero, indicating the
most significant column in the B-tree.
The cid member contains the column ID of a column member of the
B-tree index. All column IDs in a single B-tree index belong to the same
table.
The btcopts member contains the B-tree column processing options as
they relate to the corresponding column:
DB_ASCEND
ascending key value
DB_DESCND
descending key value
DB_NORMAL DB_ASCEND is the default value used
110
The RHLI Structures
The UBTMAP Structure: B-tree ID
Mapping
The UBTMAP structure has the following declaration.
typedef struct
{
char * btnm;
UBTID bid;
UBTID remapid;
} UBTMAP;
/* pointer to runtime B-tree name
/* compile-time B-tree ID
/* runtime B-tree ID (returned)
*/
*/
*/
The UBTMAP structure is used by the umapbt function to specify
runtime ID-mapping on a compile-time B-tree object.
Tip
Use the INIBTMAP mapping macro to initialize the UBTMAP structure.
The btnm member contains the runtime name of the B-tree. The
remapping operation fails if the B-tree specified in the btnm member
does not exist in the database.
The bid member contains a B-tree ID that uniquely identifies the B-tree.
The ID can be supplied by you or can be generated by the ucc compiler.
If you supply the ID (bid), be sure that the number you pick is compatible
with the type UBTID.
To generate a unique compile-time B-tree ID using ucc, initialize bid with
the following compiler directive (btnm is the name of the B-tree):
$(UBT:BID)btnm$
The remapid member, upon successful completion of the ID-mapping
operation, contains the runtime ID to which the compile-time ID was
mapped. This value is for internal use only.
The RHLI Structures
111
The UCGPINF Structure: Column
Group Information
The UCGPINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UCID cid;
/* its Column ID
int coltyp;
/* data type of column
int ncol;
/* # Column IDs in grpcidl
UCID * grpcidl;
/* list of Column IDs in the group
/* OR the groups the column is a
/* member of
} UCGPINF;
*/
*/
*/
*/
*/
*/
The UCGPINF structure is used by the uinfcgp function to retrieve
information about a column group and its component columns, or for a
column and all of the column groups of which it is a component.
The cid member contains the column ID this structure describes. The
column ID can describe either a column or column group.
The coltyp member contains the column’s Unify DataServer database
type, just as it does for the DBTABLE structure.
The ncol member contains the number of column IDs in the column
group ID list grpcidl. If the value of ncol is zero (0), the grpcidl member
is not allocated and should not be referenced.
The grpcidl member contains the list of column IDs to which the
component column belongs, or the list of column IDs which belong to the
column group.
For column groups successfully retrieved, storage space is allocated by
Unify DataServer for grpcidl. This space should be released after the
retrieval operation is complete by calling the free function.
112
The RHLI Structures
The UCOLINF Structure: Column
Information
The UCOLINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UTID tid;
/* table to which column belongs
UAID aid;
/* authorization/schema of the table
UCID cid;
/* the column’s Column ID
UCID remapid;
/* logical Column ID (if remapped)
*/
*/
*/
*/
/* information retrieval class: I (UCLASS1) */
UDEFID defid;
/* column Definition ID
UDEFID chgid;
/* column Modification ID
UMAPID mapid;
/* column summation ID
int coltyp;
/* Unify DataServer data type
int collen;
/* column storage precision
int colscl;
/* column storage scale
UOPTS colopts;
/* column processing options
*/
*/
*/
*/
*/
*/
*/
/* information retrieval class: II (UCLASS2) */
int dsplen;
* column display precision
int dspscl;
/* column display scale
*/
*/
/* information retrieval class: III (UCLASS3) */
int nbt;
/* # of B-trees the column
/* participates in
int nhsh;
/* # of hash-tables the column
/* belongs to
int nplnk;
/* # of links the column
/* is parent of
int nclnk;
/* # of links the column
/* is child of (0/1)
*/
*/
*/
*/
*/
*/
*/
*/
/* information retrieval class: IV (UCLASS4) */
char * dsppict;
/* pointer to column display picture
/* (or NIL)
char * coldesc;
/* pointer to column description
/* (or NIL)
} UCOLINF;
*/
*/
*/
*/
The UCOLINF structure is used by the uinfcol function to retrieve
information about a column and its attributes.
The cid member contains the column ID that the structure describes. If
the ID represents a remapped column, the ID is the compile-time column
ID (the ID with which the user remapped the column).
The RHLI Structures
113
The remapid member contains the logical column ID that the structure
describes. If the ID represents a remapped column, the ID is the runtime
column ID (the actual Database ID). Otherwise, remapid is identical to
the cid member.
The tid member contains the table ID to which the column belongs.
The aid member contains the authorization ID(schema) to which the
column’s table belongs, and to which the column indirectly belongs.
The defid member contains the column’s current Definition ID. The
Definition ID changes whenever a physical modification is made to the
column, such as modifying the column’s type or length.
The chgid member contains the column’s current Change ID. The Change
ID changes whenever a logical modification is made to the column, such
as modifying the column’s name.
The mapid member contains the column’s current Mapping ID. The
Mapping ID serves as a checksum of the column’s physical attributes,
such as the column’s type and length.
The coltyp member contains the column’s database type. Options are
listed with the coltyp member of the DBCOL description of the DBTABLE
structure on page 92.
The collen and colscl members contain the column’s internal storage
precision and scale, as follows:
U_INT, U_HINT, U_GINT
collen is the number of digits as specified (or
implied) when the column was created; colscl
is 0.
U_DATE, U_TIME, U_HDATE, U_VTXT, U_VBIN
collen and colscl are both 0.
U_REAL, U_FLT, U_DBL
collen is the number of bits of floating point
representation for the internal, or stored, value:
32 for U_REAL and 64 for U_FLT and U_DBL;
colscl is 0.
U_BYT, U_STR
114
collen is the number of bytes or characters
specified (or implied) when the column was
created; colscl is 0.
The RHLI Structures
U_AMT, U_HAMT
collen is the number of digits of precision
(possible digits to the left of the radix point plus
possible digits to the right of the radix point) as
specified. It will be >= to 3. colscl is 2.
U_GAMT
collen is the number of digits of precision
(possible digits to the left of the radix point plus
possible digits to the right of the radix point) as
specified. It will be > colscl.
colscl is the defined scale (0-8); It will be <
collen.
The dsplen member contains the external display precision or length of
the column. Display length can be specified as any length (zero or
greater). A zero (0) display length indicates no display length.
The colopts member contains the column’s processing options. See page
98.
The dspscl member contains the column’s display scale, if applicable, in
characters.
Valid values allowed for dsplen and dspscl are defined in the rhli.h
header file.
The nbt member contains the number of B-trees the column participates
in.
The nhsh member contains the number of hash tables the column
participates in.
The nplnk member contains the number of links the column is a parent
of.
The nclnk member contains the number of links the column is a child of.
Note that nclnk can only contain the values zero (0) or one (1).
The dsppict member contains the column’s display picture clause, if any.
The coldesc member contains the column’s description, if any.
For columns successfully retrieved by specifying the UCLASS4 or
UALLINFO retrieval classes, storage space is allocated by Unify
DataServer for coldesc and dsppict members. This space should be
released after the retrieval operation is complete by calling the free
function.
The RHLI Structures
115
The UCOLMAP Structure: Column ID
Mapping
The UCOLMAP structure has the following declaration.
typedef struct
{
char * colnm;
UCID cid;
UCID remapid;
UDEFID defid;
UMAPID mapid;
} UCOLMAP;
/*
/*
/*
/*
/*
pointer to runtime column name
compile-time Column ID
runtime Column ID (returned)
compile-time column definition
compile-time column summation
*/
*/
*/
*/
*/
The UCOLMAP structure is used by the umapcol function to specify
information about runtime ID-mapping on a compile-time column object.
Tip
It is highly recommended that you use the INICOLMAP mapping macro
to initialize the UCOLMAP structure.
The colnm member contains the runtime name of the column.
The cid member contains the compile-time column ID. The ID can be
supplied by you or can be generated by the ucc compiler.
If you supply the ID (cid), be sure that the number you pick is compatible
with the type UCID.
To generate a unique compile-time ID using ucc, initialize cid with the
following compiler directive (colnm is the name of the column):
$(UCOL:CID)colnm$
The remapid member, upon successful completion of the ID-mapping
operation, contains the runtime ID to which the compile-time ID was
mapped. This value is for internal use only.
The defid member contains the table’s compile-time Definition ID, which
is a time-stamped ID that is used by Unify DataServer to verify the
accuracy of remapid.
116
The RHLI Structures
The Definition ID (defid) must be initialized with the following compiler
directive syntax (colnm is the name of the column):
$(UCOL:DEFID)colnm$
The mapid member contains the table’s compile-time Mapping ID, which
is a checksum value that is used by Unify DataServer to verify the
accuracy of remapid. This value is for internal use only.
The Mapping ID (mapid) must be initialized with the following compiler
directive syntax (colnm is the name of the column):
$(UCOL:MAPID)colnm$
The RHLI Structures
117
The UDBINF Structure: Database
Information
The UDBINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UDBID dbid;
/* database ID
int isremote;
/* Is database remote? flag
*/
*/
/* information retrieval class: I (UCLASS1) */
UDEFID defid;
/* database definition ID
*/
/* Operating System Specific Values (See: chmod, chown)
*/
int dbmode;
/* database file access modes (u/g/o)*/
int dbusrid;
/* database file Owner ID
*/
int dbgrpid;
/* database file Group ID
*/
/* information retrieval class: II (UCLASS2) */
long nvol;
/* # of volumes in the database
UVID * uvidlst;
/* pointer to volume information
*/
*/
/* information retrieval class: III (UCLASS3) */
char * descrpt;
/* pointer to database description (or NIL )*/
char ownernm[U_USRNMLN + 1];
/* buffer for the database creator name
*/
char dbname[U_NAMELEN + 1];
/* buffer for the database name
*/
} UDBINF;
The UDBINF structure is used by the uinfdb function to retrieve
information about a database.
The dbid member contains the database ID which is described by the
information in this structure.
The isremote member specifies if the database to be accessed is a remote
database. If the database is remote, isremote will be set to 1; if the
database is local, isremote will be set to 0.
The defid member contains the current Definition ID for the database.
The dbmode member contains the database Unix access modes, as
described in section 2 of your Unix system manual. All database files are
created with these file access permissions.
118
The RHLI Structures
The dbusrid member contains the database Unix owner ID, as described
in section 2 of your Unix system manual. All database files are created
with these file user ownership.
The dbgrpid member contains the database Unix group ID, as described
in section 2 of your Unix system manual. All database files are created
with these file group ownership.
The nvol member contains the number of volumes in the database. A
database always includes at least 1 volume: the root volume.
The uvidlst member contains a list of volume IDs which belong to the
database.
The descrpt member contains the database description.
The ownernm member contains the name of the user who created the
database.
The dbname member is the name of the database as it would be
referenced for name-binding.
The RHLI Structures
119
The UGRTDS Structure: Grant
Privilege Descriptor
The UGRTDS structure has the following declaration.
typedef struct
{
union
{
UAID aid;
UOID uid;
} gte;
UCAPS rqstcaps;
UOBJDS obj;
UCAPS gtecaps;
} UGRTDS;
/*
/*
/*
/*
Grantee
Capabilites to be granted
Object to grant on
Capabilities actually granted
*/
*/
*/
*/
The UGRTDS structure is used by the uaddprv function to specify
information about the privileges to grant.
The aid member contains the authorization ID of a schema to which
schema privileges are to be granted.
The uid member contains the user ID to which permissions are to be
granted.
The gte member contains the ID of the object to which the user authority
is granted. The object to which the privileges are to be granted is known
as the grantee.
Because gte is a union, either a schema or a user can be granted a
privilege, but not both.
The rqstcaps member contains the set of permissions that are to be
granted. The set of permissions determines whether the type of the
grantee is a schema or a user.
When you grant permissions, you can grant only those permissions that
you have permission to grant.
To grant authority, initialize the rqstcaps member as follows:
120
UDBA
for DBA authority
USCH
for SCHEMA authority
UDALL
for both DBA and SCHEMA authority
The RHLI Structures
To grant schema privileges, initialize the rqstcaps member as follows:
USSEL
for SELECT operations
USINS
for INSERT operations
USUPD
for UPDATE operations
USDEL
for DELETE operations
USALL
for all grantable operations (SELECT, INSERT,
UPDATE and DELETE)
UGRTCAP
to specify that the operation (one of the above)
is grantable
If a schema grants schema privileges to another schema, all tables in the
schema granting the privilege are accessible. However, if a schema grants
table privileges to another schema, only the specified tables are
accessible.
To grant table privileges to a schema, initialize the rqstcaps member as
follows:
UTSEL
for SELECT operations
UTINS
for INSERT operations
UTUPD
for UPDATE operations
UTDEL
for DELETE operations
UTALL
for all grantable operations (SELECT, INSERT,
UPDATE and DELETE)
UGRTCAP
to specify that the operation (one of the above)
is grantable
To grant column privileges to a schema, initialize the rqstcaps member as
follows:
The RHLI Structures
UCSEL
for SELECT operations
UCINS
for INSERT operations
UCUPD
for UPDATE operations
UCALL
for all grantable operations (SELECT, INSERT
and UPDATE)
UGRTCAP
to specify that the operation (one of the above)
is grantable
121
You can specify more than one option by separating the options with the
bitwise logical OR operator (|).
The obj member is a structure (UOBJDS) that contains a description of
the object which the privilege affects. See below for a description of the
UOBJDS structure.
The gtecaps member contains the set of privileges actually granted to the
grantee.
That is, if you granted SELECT schema privilege to a table, the value
contained in gtecaps would be equivalent to UTSEL; or, if you granted
SCHEMA authority to a user, if granted successfully, gtecaps would
contain a value equivalent to USCH.
Since the grantor may not have the privilege to grant certain privileges,
only those privileges actually grantable are granted.
For more information about the functionality of each of the operation
privileges, see “Controlling Database Object Access” in Unify
DataServer: Writing Interactive SQL/A Queries.
The UOBJDS Structure
The UOBJDS structure contains information about a database object and
is defined as:
typedef struct
{
UDBOBJ objid;
int objknd;
} UOBJDS;
/* object ID
/* the type of object
*/
*/
The objid member contains a database object ID whose type is described
by the objknd member. Options are:
UAID
Authorization ID
UDBID
Database ID
UCID
Column ID
UTID
Table ID
The objknd member contains a value that indicates what type of ID is
contained in the objid member. Options are:
122
UDBKND
database object
USCHKND
schema object
UTBLKND
table object
The RHLI Structures
UVWKND
view object
UCOLKND
column object
If you are granting a user privilege (DBA or SCHEMA authority), objid
and objknd must be set to the current Database ID (see the uopndb
function) and UDBKND, respectively.
The RHLI Structures
123
The UHSHMAP Structure: Hash Table
ID Mapping
The UHSHMAP structure has the following declaration.
typedef struct
{
char * hshnm;
UHID hid;
UHID remapid;
} UHSHMAP;
/*
/*
/*
/*
pointer to runtime hash
table name
compile-time Hash Table ID
runtime Hash Table ID (returned)
*/
*/
*/
*/
The UHSHMAP structure is used by the umaphsh function to specify
information about runtime ID-mapping on a compile-time hash table
object.
It is highly recommended that you use the INIHSHMAP mapping macro
to initialize the UHSHMAP structure.
The hshnm member contains the runtime name of the hash table.
The hid member contains the compile-time hash table ID.
The hash table ID (hid) can be hardcoded by the programmer (with a
unique custom ID) or be supplied by the Unify DataServer C compiler,
ucc.
If you choose to hardcoded a unique hash table ID (hid), be sure that the
number you pick is compatible with the type UHID.
To generate a unique compile-time hash table ID using ucc, initialize hid
with the following compiler directive (hshnm is the name of the hash
table):
$(UHSH:HID)hshnm$
The remapid member, upon successful completion of the ID-mapping
operation, contains the runtime ID to which the compile-time ID was
mapped. This value is for internal use only.
124
The RHLI Structures
The UHTINF Structure: Hash Table
Information
The UHTINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UHID hid;
/* hash table this struct describes
UHID remapid;
/* logical hashtb ID (if remapped)
*/
*/
/* information retrieval class: I (UCLASS1) */
long hthibkt;
/* highest primary bucket
long htsplvl;
/* split level
long hthshvl;
/* primary hash value
long htthrsh;
/* split threshold value
long htovfsz;
/* hash table overflow bucket size
int htbchsz;
/* # of buckets in hash table cache
UOPTS htopts;
/* DB_DUPSOK || DB_DUPNOK
*/
*/
*/
*/
*/
*/
*/
/* information retrieval class: II (UCLASS2) */
long count;
/* length of hash column list
UCID * htloc;
/* pointer to Column ID list
*/
*/
/* information retrieval class: III (UCLASS3) */
char htnm[U_NAMELEN + 1]; /* name of hash table
} UHTINF;
*/
The UHTINF structure is used by the uinfhsh function to retrieve
information about a hash table.
The hid member contains the hash table ID that the structure describes. If
the ID represents a remapped hash table, the ID is the compile-time hash
table ID (the ID with which the user remapped the hash table).
The remapid member contains the logical hash table ID that the structure
describes. If the ID represents a remapped hash table, the ID is the
runtime hash table ID (the actual Database ID). Otherwise, remapid is
identical to the hid member.
The hthibkt member contains the current number of primary buckets in
the hash table; this values increases as rows are added and decreases as
rows are deleted. The value of hthibkt ranges from the value of hthshvl to
twice that value.
The RHLI Structures
125
The htsplvl member contains the number of times the hash table has
doubled in size; the value one (1) means that the hash table is at its
original size.
The hthshvl member contains the base size of the hash table, which is
used to compute the primary bucket address for a given key value. When
the value of hthibkt reaches twice the value of hthshvl, the value of
htsplvl is incremented and the value of hthshvl is doubled.
The htovfsz member contains the size, in blocks, of a segment that
contains overflow buckets. This size corresponds to the number of
overflow buckets that are allocated as a group.
The htthrsh member contains the measurement used to determine when a
primary bucket needs to be split. The value indicates the number of
internal overflow chains of key values that should have been able to fit
into a primary bucket.
The htbchsz member contains the number of buckets that can be cached
in user memory during an atomic hash table operation.
The htopts member contains the hash table processing options. Options
are:
DB_DUPNOK disallow duplicate keys
DB_DUPSOK
allow duplicate keys
DB_NORMAL DB_DUPNOK is the default value used
The count member contains the number of column IDs in the hash table
Member ID list htloc. If the value of count is zero (0), the htloc member
is not allocated and should not be referenced.
The htloc member contains the list of column IDs that comprise the hash
table index.
The htnm member contains the name of the hash table, if any. If the hash
table does not have a name, htnm contains an empty string.
126
The RHLI Structures
The UJRNINF Structure: Journal
Information
The UJRNINF structure has the following declaration.
typedef struct {
UJRNID ids;
UTXID txid;
long txdate;
UTID tid;
URID rid;
short opknd;
union{
IDML insert;
UDML update;
DDML delete;
} txinfo;
} UJRNINF;
/*
/*
/*
/*
/*
/*
/*
Custom log information.
User ID information.
Transaction ID.
Timestamp of transaction.
ID of affected table.
ID of affected row.
Context for the union:
/* Insert DML information.
/* Update DML information.
/* Delete DML information.
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
The UJRNINF structure is used by the ufchjrn function to retrieve
information on the next update operation contained in the transaction
journal.
The UJRNID Structure
The ids member of type UJRNID is a structure identifying the operating
system user ID, database user ID, and schema ID of the user that
performed the update operation. The UJRNID structure has the following
declaration.
typedef struct {
int
uid;
UOID
uoid;
UAID
uaid;
} UJRNID
/*
/*
/*
/*
User ID information.
Unix User ID.
Database User ID.
Database authorization ID.
*/
*/
*/
*/
The txid member is the transaction ID of the transaction that performed
the update operation.
The txdate member is the timestamp at which the transaction performing
the update operation was committed. The txdate member is in the same
format as a value returned by the operating system time function.
The tid member is the table ID of the table updated.
The RHLI Structures
127
The rid member is the row ID of the row updated.
The opknd member identifies the type of operation and thereby
determines the context for the txinfo union. Types of operations consist
of insert, update, and delete. These are identified by the constants
UINSOPR, UUPDOPR, and UDELOPR respectively and are defined as
follows:
#define UINSOPR 1
#define UUPDOPR 2
#define UDELOPR 3
The IDML Structure
/* Insert DML information.
/* New row’s UNIPCOL list.
*/
*/
The update member of type UDML is a structure which contains pointers
to UNIPCOL structures for the before and after images of the row
updated. The UDML structure has the following declaration.
typedef struct {
UNIPCOLL *newucol;
UNIPCOLL *olducol;
} UDML;
The DDML Structure
*/
*/
*/
The insert member of type IDML is a structure which contains a pointer
to a UNIPCOL structure for the after image of the row inserted. The
IDML structure has the following declaration.
typedef struct {
UNIPCOLL *newucol;
} IDML;
The UDML Structure
/* txknd is an insert operation
/* txknd is an update operation
/* txknd is a delete operation
/* Update DML information.
/* New row’s UNIPCOL list.
/* Old row’s UNIPCOL list.
*/
*/
*/
The delete member of type DDML is a structure which contains a pointer
to a UNIPCOL structure for the before image of the row deleted. The
DDML structure has the following declaration.
typedef struct {
UNIPCOLL *olducol;
} DDML;
/* Delete DML information.
/* Old row’s UNIPCOL list.
*/
*/
For a description of the UNIPCOL structure, see page 131.
128
The RHLI Structures
The ULNKINF Structure: Link
Information
The ULNKINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
ULID lid;
/* Link ID
ULID remapid;
/* logical Link ID (if remapped)
*/
*/
/* information retrieval class: I (UCLASS1) */
long count;
/* # of Column IDs in lists
UCID * ploc;
/* pointer to the parent list of
/* Column IDs
UCID * cloc;
/* pointer to the child list of
/* Column IDs
*/
*/
*/
*/
*/
/* information retrieval class: II (UCLASS2) */
char lnknm[U_NAMELEN + 1]; /* name of link
} ULNKINF;
*/
The ULNKINF structure is used by the uinflnk function to retrieve
information about a link.
The lid member contains the link ID that the structure describes. If the ID
represents a remapped link, the ID is the compile-time Link ID (the ID
with which the user remapped the link).
The remapid member contains the logical link ID that the structure
describes. If the ID represents a remapped link, the ID is the runtime link
ID (the actual Database ID). Otherwise, remapid is identical to the lid
member.
The count member contains the number of column IDs in the link
member ID list ploc and cloc. If the value of count is zero (0), the ploc
and cloc members are not allocated and should not be referenced.
The ploc member contains the list of parent column IDs.
The cloc member contains the list of child column IDs.
The lnknm member contains the name of the link, if any. If the link does
not have a name, the member contains an empty string.
The RHLI Structures
129
The ULNKMAP Structure: Link ID
Mapping
The ULNKMAP structure has the following declaration.
typedef struct
{
char * lnknm;
ULID lid;
ULID remapid;
} ULNKMAP;
/* pointer to the runtime link name
/* compile-time Link ID
/* runtime Link ID (returned)
*/
*/
*/
The ULNKMAP structure is used by the umaplnk function to specify
information about runtime ID-mapping on a compile-time link object.
It is highly recommended that you use the INILNKMAP mapping macro
to initialize the ULNKMAP structure.
The lnknm member contains the runtime name of the link.
The lid member contains the compile-time Link ID.
The Link ID (lid) can be hardcoded by the programmer (with a unique
custom ID) or be supplied by the Unify DataServer C compiler, ucc.
If you choose to hardcoded a unique Link ID (lid), be sure that the
number you pick is compatible with the type ULID.
To generate a unique compile-time Link ID using ucc, initialize lid with
the following compiler directive (lnknm is the name of the hash table):
$(ULNK:LID)lnknm$
The remapid member, upon successful completion of the ID-mapping
operation, contains the runtime ID to which the compile-time ID was
mapped. This value is for internal use only.
130
The RHLI Structures
The UNIPCOLL Structure: Column
Access Information
The UNIPCOLL structure describes how and where column data is stored
and manipulated and is used by the following functions:
ualctbl
uextint
ufchlnk
ufchrow
ufchtbl
uinsrow
uintext
upkfrow
uupdrow
The UNIPCOLL structure has the following declaration:
typedef struct
{
UCID * cidl;
UDBVAL * dbvall;
int ncol;
} UNIPCOLL;
/* list of Column IDs
/* list of column values
/* # of entries in cidl/dbvall
*/
*/
*/
The dbvall member contains members that are structures and unions. The
following diagram shows the components of the UNIPCOLL structure.
The RHLI Structures
131
UNIPCOLL
UCID 0
UCID 1
UCID 2
UDBVAL 1
UDBVAL 2
...
UCID n-1
UCID
UDBVAL
ncol (=n)
UDBVAL 0
UNIP
UNIP
UNIP
UOPTS
UOPTS
UOPTS
UDBVAL n-1
...
UNIP
UOPTS
UNIP
UTP_TIME
UTP_DATE
UTP_HDTE
UTP_AMT
UTP_HAMT
UTP_INT
UTP_HINT
UTP_FLT
UTP_GINT
UTP_STRP
UTP_GAMT
UTP_VDDS
Corresponding
Column Data Buffer
val
scale
vd_buf
Data Buffer
vd_filnm
vd_bufnx
vd_nbyts
vd_mode
vd_colnx
Data File
vd_rbyts
vd_colsz
TEXT/BINARY
Column Buffer
132
The RHLI Structures
The ncol member contains the number of entries in the cidl and dbvall
lists. The number of entries in the list can be zero, and for variable-length
data, can exceed the total number of columns that belong to the table.
(See the description for the UTP_VDDS structure on page 136.)
The cidl member contains a pointer to a list of column identifiers. The
size of the list must be identical to the number of columns specified in the
ncol member. All of the identifiers contained in the column identifier list
must belong to the same table.
If the ncol member is zero (0), the cidl member is not examined and may
contain a null pointer.
The dbvall member contains a pointer to a list of UDBVAL data value
structures. The size of the list must be identical to the number of columns
specified in the ncol member. If the member ncol is zero, the dbvall
member is not examined and can contain a null pointer.
The first entry in the column identifier list (cidl) corresponds to the first
entry in the data value list (dbvall), and so forth.
The UDBVAL Structure
The UDBVAL structure describes the column’s data to be inserted,
updated, or retrieved. Each entry in the data value structure list
corresponds to the respective identifier entry in the column identifier list.
The UDBVAL structure has the following declaration.
typedef struct
{
UNIP
unip;
UOPTS
valopts;
} UDBVAL;
/* pointer to column’s value buffer
/* column value options
*/
*/
The valopts member is a set of options that describe the data in the user
data buffer.
It is important to initialize valopts for both retrieval and insert/update
operations. After retrieval operations, the system reinitializes the valopts
member to describe the data that was placed in the user’s buffer. With
insert and update operations, however, column values are only verified;
valopts is not set.
Warning
Column values are verified and valopts is set for all fetch (or retrieval)
operations unless UIGNORE is specified. This is true even if the application has
set valopts explicitly. Fetch operations are upkfchrow, ufchlnk, ufchscn,
ufchrow, ufchtbl, and ufchord.
The RHLI Structures
133
The valopts member can contain the following options:
UNORMAL
value is valid & defined
UNULLVAL
value is null
UIGNORE
ignore column value; do not use
URETVAL
return initialized data value
UNOTDEF
reserved for user application use; not a valid
option. Used to indicate that the value is
undefined which is distinct from null.
To specify more than one option, separate multiple options with the
bitwise logical OR operator (|) in the argument list.
The UNORMAL option indicates that the user buffer contains valid or
null data.
The UNULLVAL option indicates that the data in the user buffer is null.
The UIGNORE option indicates that the system is to ignore this structure
entry completely; no work is to be performed. The UIGNORE option is
useful when the user want to selectively activate various columns in the
UNIPCOLL structure without rebuilding the structure.
Every column can have the UIGNORE option set; this is similar to setting
the ncol member’s value to zero.
The URETVAL option indicates that the system is to return to the user’s
buffer the value of the data that was inserted into the database (after DIS
default values have been applied).
The URETVAL option is only applicable for insert and update operations.
This option cannot be used for columns of type TEXT or BINARY.
The URETVAL option can retrieve the default values applied to a column
during an insert operation. This way, you do not have to perform a
retrieval operation after the insert operation completes. If the URETVAL
option is used for this purpose, the UIGNORE option must also be
specified. Otherwise, the buffer is assumed to contain valid data, which
might not be the case.
The option UNORMAL is represented by the bit value 0 and, thus, cannot
be used as a bit mask.
134
The RHLI Structures
Data is defined to be either null or not null. Therefore, specifying the
UNULLVAL option as a bit mask is appropriate, while specifying the
UNORMAL option is not correct. For example, the expression
valopts & UNORMAL
is always false, while the expression
valopts & UNULLVAL
is true if the data is null, or, false, if the data is not null.
The unip Union
The unip member is of type UNIP which contains a union of pointers, one
for each database data type.
The unip points to the user’s buffer where the system either places
retrieved data or acquires the data to be inserted or updated. The structure
is a union of pointers. The compiler accepts the assignment of the actual
pointer to a buffer of the column’s correct data type.
The UNIP union has the following declaration.
typdef union
{
UTP_TIME *
UTP_DATE *
UTP_HDTE *
UTP_AMT *
UTP_HAMT *
UTP_GAMT *
UTP_INT *
UTP_HINT *
UTP_GINT *
UTP_FLT *
UTP_STRP
UTP_BYTP
UTP_REAL *
UTP_DBL *
UTP_VDDS *
} UNIP;
timep;
datep;
ldatep;
amtp;
hamtp;
gamtp;
intp;
hintp;
gintp;
fltp;
strp;
bytp;
realp;
dblp;
vdp;
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
––>
––>
––>
––>
––>
––>
––>
––>
––>
––>
––>
––>
––>
––>
––>
”TIME” column buffer
”DATE” column buffer
”HUGE DATE” column buffer
”AMOUNT” column buffer
”HUGE AMOUNT” column buffer
”CURRENCY” column buffer
”INT” column buffer
”SMALL INT” column buffer
”HUGE INT(64-bit)” col buffer
”FLOAT” column buffer
”STRING” column buffer
”BYTE column buffer
”REAL column buffer
”DOUBLE column buffer
”TEXT/BINARY” column buffer
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
All members of the UNIP union are pointers to a buffer which contains
the column’s corresponding data.
The pointer of the applicable column’s data type is assigned to a buffer of
the same type; mixing pointer and buffer types is not recommended and
may be flagged by the compiler as invalid.
The RHLI Structures
135
Unify DataServer expects the data buffer identified by the UNIP member
to be correctly aligned for the data type of the column. For example, if
the column is of type FLOAT, the buffer to contain the float value should
be correctly aligned for the FLOAT type.
When amtp data is retrieved from a database, the data temporarily loses
the scale of 2. Therefore, AMOUNT data stored in amtp variables change
their scale to zero and record pennies rather than dollars.
If you want to print or display the host variable value, you must divide
the value by 100 to restore the default scale of 2. If the host variable
value is being applied to a database, you do not need to divide the value
by 100; Unify DataServer applies a precision of 2 to AMOUNT values.
Except for UTP_VDDS, all members of the UNIP union are atomic data
types. For example, int, long and char.
UTP_VDDS is a structure that describes variable-length data for use with
data type TEXT or BINARY columns.
The UTP_VDDS
Structure
The UTP_VDDS structure has the following declaration.
typedef struct
{
char * vd_buf;
char * vd_filnm;
long vd_bufnx;
long vd_nbyts;
int vd_mode;
long vd_colnx;
long vd_rbyts;
long vd_colsz;
} UTP_VDDS;
/*
/*
/*
/*
/*
/*
/*
/*
data buffer
file to use as data buffer
starting offset in buffer
# of bytes to fetch/store
update mode
starting offset in database col
# of bytes actually read/written
total size of database column
*/
*/
*/
*/
*/
*/
*/
*/
The UTP_VDDS structure allows you to use a memory buffer or file to
either store variable length data into or read from when manipulating
variable-length data.
If you choose to store or read the variable length data into or from a
buffer, the member vd_buf must be set to point to the buffer that contains
the variable length value. Also, when using a buffer to store or read
variable length data to or from, the member vd_filnm must be set to (char
*)0.
If you want to store or read variable-length data into or from a file
instead of a buffer, vd_buf must be set to (char *)0 and the member
vd_filnm must point to a file name of an existing file that contains or will
contain the variable-length data.
136
The RHLI Structures
To assign a null value to a variable-length member, initialize an empty
UTP_VDDS structure as follows:
dbval.unip.valopts = UNULLVAL;
dbval.unip.vds = (UTP_VDDS *)0;
Variable text data can only be stored in standard Unix files (as opposed to
devices).
The vd_bufnx member specifies the byte offset from the beginning of the
buffer or file that contains the variable length data. To read the buffer or
file from the beginning, set vd_bufnx to 0.
The vd_nbyts member specifies the number of bytes of data to read from
or write to a buffer or file (specified by vd_buf or vd_filnm from offset
position vd_bufnx). The number of bytes are counted beginning at offset
position vd_colnx.
When writing to a file (and you want to retrieve the entire var_len value),
set vd_nbyts to a value that is large enough to fetch all bytes of data. If
you do not know the size of the data, set vd_nbyts to an artificially high
value, such as 2,147,483,647, to ensure that all data is retrieved.
Warning
Make sure that the starting offset plus the number of bytes requested (that
is, vd_bufnx + vd_nbyts), does not exceed the size of the data buffer.
Otherwise, if you read from a buffer that is too small, you will retrieve
“garbage” data; or, if you write to a buffer that is too small, you will
corrupt memory.
Also, an error occurs if vd_bufnx + vd_nbyts exceeds:
the actual file size when reading from a file
the maximum file size when writing to a file
To read a file from the vd_bufnx offset position to “end-of-file,” set
vd_nbyts to –1. This option is used when you are reading data from a file
for insert or update operations.
The –1 option is used when reading from a file only; not to read from a
buffer or the database.
The vd_mode member specifies the update mode to use when operating
on variable length data found in a buffer or file, and the data stored in a
database column.
The RHLI Structures
137
Valid vd_mode values are:
V_TRUNC
Truncates (or removes) a database column
value starting at offset position vd_colnx to the
end of the variable length column value. The
removed data is replaced with vd_nbyts of data
from a buffer or file.
V_OVERWR
Replaces (or overwrites) a database column
value starting at position vd_colnx for a length
of vd_nbyts with data from a buffer or file.
V_APPEND
Appends (or adds) vd_nbyts of data from a
buffer or file to the end of the database column
value.
V_INSERT
Inserts to a database column value, vd_nbyts of
data from a buffer or file, before the byte
pointed to by vd_colnx.
V_DELETE
Deletes (or removes) data from a database
column value starting at position vd_colnx for a
length of vd_nbyts.
V_FETCH
Fetches (or retrieves) vd_nbyts of data from a
database column value starting at position
vd_colnx for a length of vd_nbyts, and writes the
retrieved data into a buffer or file.
Specifying more columns than exist in the table (where the value of ncol
exceeds the actual number of columns in the table), is known as
overloading an operation.
Overloading is most useful for inserting and updating TEXT/BINARY
column operations, where the same column is specified multiple times
and different vd_mode modes within a single database operation may be
applied.
The vd_colnx member specifies a byte offset from the beginning of the
database column value. To set the offset position at the beginning of the
database column value, set vd_colnx to 0.
The vd_rbyts member contains the actual number of bytes read from or
written to a buffer or file. This value is returned after the operation has
completed.
For update modes V_TRUNC, V_OVERWR, V_APPEND, V_INSERT,
when the update is successful vd_rbyts reflects the value of vd_nbyts.
138
The RHLI Structures
For V_DELETE operations, vd_rbyts contains the number of actual bytes
deleted from the database column.
For the fetch mode, V_FETCH, vd_rbyts will contain the actual number
of bytes retrieved. Note that the number of bytes retrieved will be less
than the requested number of bytes, vd_nbyts, if the end of the column
value is reached.
The vd_colsz member contains the number of bytes remaining in the
database column after the database operation has completed.
The RHLI Structures
139
The UNIPEXT Structure: Column
Conversion Information
The UNIPEXT structure is used by the uextint and uintext functions to
specify column storage locations for conversion from internal to external
formats (and vice versa).
The UNIPEXT structure has the following declaration.
typedef struct
{
UNIV
univ;
UOPTS
valopts;
} UNIPEXT;
/* pointer to column’s external value
/* column value options
*/
*/
The UNIPEXT structure is laid out identically to the UDBVAL structure,
except that the UNIP member is named UNIV. See the UDBVAL structure
on page 133.
140
The RHLI Structures
The UOACOLS Structure: Ordered
Access Row Order
The UOACOLS structure has the following declaration.
typedef struct
{
UCID
oacid;
UOPTS
oacopts;
} UOACOLS;
/* column identifier
/* column sort option
*/
*/
The UOACOLS structure is used by the ubegord function to specify the
order to be placed on the rows of a table for ordered access. Specify one
UOACOLS structures for each column to be part of the order.
The oacid member contains the column ID of a column of the order
specification.
The oacopts member contains the order specification for the
corresponding column. Options are:
DB_ASCEND
ascending column value
DB_DESCND
descending column value
DB_NORMAL DB_ASCEND is the default value used
The RHLI Structures
141
The URVKDS Structure: Revoke
Privilege Descriptor
The URVKDS structure has the following declaration.
typedef struct
{
union
{
UAID aid;
UOID uid;
} gte;
UCAPS rvkcaps;
UOBJDS obj;
} URVKDS;
/* Grantee
/* Privileges to be revoked
/* Object to revoke
*/
*/
*/
The URVKDS structure is used by the udrpprv function to specify
information about the privileges to revoke.
The aid member contains the authorization ID from which authorization
privileges are to be revoked.
The uid member contains the user ID from which permissions are to be
revoked.
The gte member contains the ID of the object from which the privilege is
to be revoked. The object to which privileges have been granted is known
as the grantee.
Because gte is a union, either a schema or a user can be revoked a
privilege, but not both.
The rvkcaps member contains the set of privileges that are to be revoked
from the specified object. The set of privileges determines whether the
type of the grantee is a schema or a user.
To revoke authority, initialize the rvkcaps member as follows:
142
UDBA
for DBA authority
USCH
for SCHEMA authority
UDALL
for both DBA and SCHEMA authority
The RHLI Structures
To revoke schema privileges to a schema, initialize the rvkcaps member
as follows:
USSEL
for SELECT operations
USINS
for INSERT operations
USUPD
for UPDATE operations
USDEL
for DELETE operations
UTALL
for all operations (SELECT, INSERT, UPDATE
and DELETE)
If the schema privileges to a schema are revoked, all
tables in the schema are inaccessible.
To revoke schema privileges to a table, initialize the rvkcaps member as
follows:
UTSEL
for SELECT operations
UTINS
for INSERT operations
UTUPD
for UPDATE operations
UTDEL
for DELETE operations
UTALL
for all operations (SELECT, INSERT, UPDATE
and DELETE)
To revoke schema privileges to a column, initialize the rvkcaps member
as follows:
UCSEL
for SELECT operations
UCINS
for INSERT operations
UCUPD
for UPDATE operations
UCALL
for all operations (SELECT, INSERT and
UPDATE)
If you want to revoke more than one operation privilege for the same
object, separate multiple options with the bitwise logical OR operator (|).
The obj member is a structure (UOBJDS) that contains a description of
the object that the privilege affects.
The RHLI Structures
143
The UOBJDS Structure
The UOBJDS structure has the following declaration.
typedef struct
{
UDBOBJ objid;
int objknd;
} UOBJDS;
/* object ID
/* the type of object
*/
*/
The objid member contains a database object ID whose type is described
by the objknd member. Options are:
UAID
Authorization ID
UDBID
Database ID
UCID
Column ID
UTID
Table ID
The objknd member contains a value that indicates what type of ID is
contained in the objid member. Options are:
UDBKND
database object
USCHKND
schema object
UTBLKND
table object
UVWKND
view object
UCOLKND
column object
If you are revoking a user privilege (DBA or SCHEMA authority), objid
and objknd must be set to the current Database ID (see the uopndb
function) and UDBKND, respectively.
After the privileges revoke operation, the rvkcaps element (in the
structure URVKDS), contains the privileges that were revoked.
That is, if you revoke SELECT schema privilege from a table, the value
contained in rvkcaps is equivalent to UTSEL. If you revoked SCHEMA
authority from a user, rvkcaps contains a value equivalent to USCH.
Additional Help
For information about security and privileges, see “Setting Up and
Managing Security” in Unify DataServer: Managing a Database.
144
The RHLI Structures
The UTBLINF Structure: Table
Information
The UTBLINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UTID tid;
/* table this struct describes
UTID remapid;
/* logical Table ID (if remapped)
UAID aid;
/* Authorization ID of this table
*/
*/
*/
/* information retrieval class: I (UCLASS1) */
UDEFID defid;
/* Table Definition ID
UDEFID chgid;
/* Table Modification ID
UMAPID mapid;
/* Table Summation ID
long segsz;
/* desired segment size (bytes)
long tblbase;
/* direct table base value
UOPTS tblopts;
/* table processing options
*/
*/
*/
*/
*/
*/
/* information retrieval class: II (UCLASS2) */
int ncol;
/* # of columns in table
UCID * ucidlst;
/* pointer to table Column ID list
int nbtree;
/* # of btrees in table
UBTID * ubidlst;
/* pointer to table B-tree ID list
int nhsh;
/* # of hash-tables in table
UHID * uhidlst;
/* pointer to the table’s Hash
/* Table ID list
int nlnk;
/* # of links in table
ULID * ulidlst;
/* pointer to the table’s Link ID
/* list
int nkey;
/* # of columns in key column list
UCID * keycidl;
/* primary key Column ID
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
/* information retrieval class: III (UCLASS3) */
int nvol;
/* # of volumes specified for table
UVID * uvidlst;
/* pointer to table’s Volume ID list
*/
*/
/* information retrieval class: IV (UCLASS4) */
long expnum;
/* expected number of rows
char * tbldesc;
/* pointer to table description
} UTBLINF;
*/
*/
The UTBLINF structure is used by the uinftbl function to retrieve
information about a table.
The tid member contains the table ID that the structure describes. If the
ID represents a remapped table, the ID is the compile-time table ID (the
ID with which the user remapped the table).
The RHLI Structures
145
The remapid member contains the logical table ID that the structure
describes. If the ID represents a remapped table, the ID is the runtime
table ID (that is, the actual object ID in the database). Otherwise, the
value of remapid is identical to the tid member value.
The aid member contains the authorization ID to which this table
belongs.
The defid member contains the table’s current Definition ID. The
Definition ID changes whenever a physical modification is made to the
table, such as adding or dropping columns.
The chgid member contains the table’s current Change ID. The Change
ID changes whenever a logical modification is made to the table, such as
modifying the table’s name.
The mapid member contains the table’s current Mapping ID. The
Mapping ID serves as a checksum of the table’s physical attributes, such
as the columns contained in the table.
The segsz member contains the table’s designated segment size, if any, in
bytes.
The tblbase member contains the table’s base value, if the table has been
specified as being a direct table. Otherwise, the value of tblbase is zero
(0).
The tblopts member contains one or more of the following options:
DB_ORDNRY
create ordinary table
DB_DIRECT
create directĆkeyed table
DB_RDONLY
table is readĆonly
DB_SCATTR
scatter data across volumes
DB_USEVOL
must use specified preference volumes
DB_FIXSIZE
table size is fixed at value specified by expnum
DB_KEYED
create a primary key
DB_NORMAL DB_ORDNRY is the default value used
The ncol member contains the number of columns in the table column ID
list ucidlst. If the value of ncol is zero (0), the ucidlst member is not
allocated and should not be referenced.
146
The RHLI Structures
The ucidlst member contains a list of column IDs that belong to the table.
The list is sorted in the chronological order in which the columns were
added to the table.
The nbtree member contains the number of B-trees in the B-tree ID list
ubidlst. If the value of nbtree is zero (0), the ubidlst member is not
allocated and should not be referenced.
The ubidlst member contains a list of B-tree IDs that belong to the table.
The nhsh member contains the number of hash tables in the hash table ID
list uhidlst. If the value of nhsh is zero (0), the uhidlst member is not
allocated and should not be referenced.
The uhidlst member contains a list of hash table IDs that belong to the
table.
The nlnk member contains the total number of links in the Link ID list
ulidlst. If the value of nlnk is zero (0), the ulidlst member is not allocated
and should not be referenced.
The ulidlst member contains a list of Link IDs that belong to the table.
Note that the list contains both parent and child Link IDs, and does not
differentiate between the two.
The nkey member contains the number of columns in the table primary
key list keycidl. If the value of nkey is zero (0), the keycidl member is not
allocated and should not be referenced.
The keycidl member contains a list of the column IDs that constitute the
designated primary key for the table. The IDs are sorted in their
designated order.
The nvol member contains the number of volumes in the volume
preference list uvidlst. If the value of nvol is zero (0), the uvidlst member
is not allocated and should not be referenced.
The uvidlst member contains a list of the volume IDs that have been
preferenced for the table.
The expnum member contains the expected number of records, if any,
that was designated when the table was created.
The tbldesc member contains the table’s variable length description, if
any.
The RHLI Structures
147
The UTBLMAP Structure: Table ID
Mapping
The UTBLMAP structure has the following declaration.
typedef struct
{
char * tblnm;
UTID tid;
UTID remapid;
UDEFID defid;
UMAPID mapid;
} UTBLMAP;
/*
/*
/*
/*
/*
pointer to the runtime table name
compile-time Table ID
runtime Table ID (returned)
compile-time table Definition ID
compile-time table Mapping ID
*/
*/
*/
*/
*/
The UTBLMAP structure is used by the umaptbl function to perform
runtime ID-mapping on a compile-time table object.
The tblnm member contains the runtime name of the table.
The tid member contains the compile-time table ID.
The table ID (tid) can be hardcoded by the programmer (with a unique
custom ID) or be supplied by the Unify DataServer C compiler, ucc.
If you choose to hardcoded a unique table ID (tid), be sure that the
number you pick is compatible with the type UTID.
To generate a unique compile-time table ID using ucc, initialize tid with
the following compiler directive (tblnm is the name of the table):
$(UTBL:TID)tblnm$
The remapid member, upon successful completion of the ID-mapping
operation, contains the runtime ID to which the compile-time ID was
mapped. This value is for internal use only.
The defid member contains the table’s compile-time Definition ID, which
is a time-stamped ID that is used by Unify DataServer to verify the
accuracy of remapid.
The Definition ID (defid) must be initialized with the following compiler
directive syntax (tblnm is the name of the table):
$(UTBL:DEFID)tblnm$
148
The RHLI Structures
The mapid member contains the table’s compile-time Mapping ID, which
is a checksum value that is used by Unify DataServer to verify the
accuracy of remapid. This value is for internal use only.
The Mapping ID (mapid) must be initialized with the following compiler
directive syntax (tblnm is the name of the table):
$(UTBL:MAPID)tblnm$
Tip
It is highly recommended that you use the INITBLMAP mapping macro
to initialize the UTBLMAP structure.
The RHLI Structures
149
The UTXINF Structure: Transaction
Information
The UTXINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UTXID txid;
/* Transaction ID
int logflag; /* is logging on (1=yes/0=no)
/* information
long nupd;
int txtyp;
int state;
int lckphas;
int nlck;
int nlgpg;
int opsknd;
} UTXINF;
*/
*/
retrieval class: I (UCLASS1) */
/* number of update operations
/* transaction type
/* current state of the transaction
/* Lock phase ascend/descend
/* number of locks held by transact.
/* number of log pages written
/* kind of operations in tx
*/
*/
*/
*/
*/
*/
*/
The UTXINF structure is used by the uinftx function to retrieve
transaction information.
The txid member contains the transaction ID described by this structure.
The logflag member contains a Boolean value that indicates whether
transaction logging is turned on for the user. A value of one (1) indicates
that transaction logging is on, a value of zero (0) indicates that
transaction logging is off.
The nupd member contains the count of the number of update operations
that have been performed on behalf of this transaction. An update
operation is one that does not retrieve data.
The txtyp member contains the transaction type. Options are:
150
UTXTYPE0
Type 0 transactionĊ read only
UTXTYPE1
Type 1 transactionĊupdate, limited
concurrency
UTXTYPE2
Type 2 transactionĊupdate, twoĆphase locking
The RHLI Structures
The state member contains the current state of the system. Options are:
UTXSTRT
Start transaction
UTXACT
Transaction active
UTXSUSP
Suspend transaction
UTXCMT
Commit transaction
UTXPREP
Prepare transaction
UTXCMPL
Complete transaction
UTXEND
End transaction
UTXABRT
Abort transaction
The lckphas member contains an indicator of what phase the transaction
is currently operating under, if the transaction is a type 2 transaction
(two-phase locking). A value of 1 indicates that the transaction is in the
unlock phase, a value of 0 (zero) indicates that the transaction is in the
lock phase.
The nlck member contains the count of the number of row locks, both
shared and exclusive, currently held by the transaction.
The nlgpg member contains the count of the number of log buffers
written to the transaction log for this transaction. This value does not
include any log buffers maintained in shared memory.
The RHLI Structures
151
The UTXOPT Structure: Begin
Transaction Options
The UTXOPT structure has the following declaration.
typedef struct
{
long cmtfreq;
int txknd;
UOPTS waitflg;
} UTXOPT;
/* # of operations before batch commit */
/* Transaction kind
*/
/* wait to start transaction log
*/
The UTXOPT structure is used by the ubegtx and ucbgtx functions to
specify options for beginning a transaction.
The cmtfreq member specifies the number of operations after which the
current batch transaction is to be committed. Also see the description of
the UBATCH option of waitflg.
The txknd member specifies the transaction level. Options are:
UTXTYPE2
Transactions enforce any shared or exclusive
locks acquired by the transaction. No locks are
released until the transaction ends.
UTXTYPE1
Transactions also enforce any shared or
exclusive locks acquired by the transaction;
however, shared locks can be released before
the transaction ends.
UTXTYPE0
Transactions are special purpose transactions
that allow reading of uncommitted data. No
updates are allowed for a transaction of this
type.
UTXTYPE0 is the only valid value for txknd
when the database has been opened in
readĆonly mode (see the uopndb function).
152
The RHLI Structures
The waitflg member contains a value that controls batch transactions and
whether transactions should wait for a resource to become available or to
return immediately in case of insufficient resources. Options are:
UAUTO
Commit a batch transaction if resources are
scarce
UBATCH
Transaction is to operate in batch mode; the
cmtfreq member must be specified
UCOMMIT
Commit transaction on the uclsdb function
UNOWAIT
Do not wait for a resource before starting a
transaction
UWAIT
Wait for an available resource before starting a
transaction
DB_NORMAL UNOWAIT is the default value used
If you specify the UBATCH option, the UCOMMIT option is implicitly
specified.
UAUTO can be used in cases where you want to allow the system to react
to influences from other users that affect database resources. For
example, if shared memory is more than 75% full, or the transaction log
space cannot be reserved, the batch transaction is implicitly committed if
UAUTO is set. If you specify the UAUTO option, you must also specify
the UBATCH option.
UBATCH specifies that the transaction operates in batch mode..
The RHLI Structures
153
The UUSRINF Structure: User
Information
The UUSRINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UOID uoid;
/* User/Owner ID
*/
/* information retrieval class: I (UCLASS1) */
UAID aid;
/* user default Authorization ID
UAID curaid;
/* user current Authorization ID
*/
*/
/* information retrieval class: II (UCLASS2) */
int nauth;
/* # of authorizations in ’aidlst’
UAID * aidlst;
/* pointer to list of valid Auth IDs
/* (schemas) for user
*/
*/
*/
/* information retrieval class: III (UCLASS3) */
char usernm[U_USRNMLN + 1]; /* pointer to user name
} UUSRINF;
*/
The UUSRINF structure is used by the uinfusr function to retrieve
information about a user.
The uoid member contains the user ID described by the information in
this structure.
The aid member contains the authorization ID of the user’s default
schema upon entry to the system.
The curaid member contains the authorization ID of the user’s current
schema.
The nauth member contains the number of entries in the authorization list
aidlst. If the value of nauth is zero (0), aidlst has not been allocated and
should not be referenced.
The aidlst member contains a list of authorization IDs to which the user
has been granted access.
The usernm member is the name of the user as it would be referenced for
name-binding.
154
The RHLI Structures
The UVOLINF Structure: Volume
Information
The UVOLINF structure has the following declaration.
typedef struct
{
/* information always retrieved */
UVID vid;
/* Volume ID
UVID remapid;
/* logical Volume ID (if remapped)
*/
*/
/* information retrieval class: I (UCLASS1) */
long voloff;
/* volume offset (bytes)
long vollen;
/* volume length
long volused;
/* allocated (used) space
long volpgsz;
/* volume page size (bytes)
UOPTS volopts;
/* volume processing options
*/
*/
*/
*/
*/
/* information retrieval class: II (UCLASS2) */
int ntbl;
/* # of tables clustered in volume
UTID * utidlst;
/* pointer to the clustered Table
/* ID list
*/
*/
*/
/* information retrieval class: III (UCLASS3) */
char volfile[U_FILELEN + 1]; /* pointer to the volume
/* file name
char volname[U_NAMELEN + 1]; /* volume name, if any
} UVOLINF;
*/
*/
*/
The UVOLINF structure is used by the uinfvol function to retrieve
information about a volume.
The vid member contains the volume ID that the structure describes. If
the ID represents a remapped volume, the ID is the compile-time volume
ID (the ID with which the user remapped the volume).
The remapid member contains the logical volume ID that the structure
describes. If the ID represents a remapped volume, the ID is the runtime
volume ID (the actual Database ID). Otherwise, the remapid value is
identical to the vid member value.
The voloff member contains the volume’s initial offset in the volume’s
device. If the volume is a regular or contiguous file, voloff is zero (0). A
non-zero value indicates the number of bytes into the device at which the
device can be found.
The RHLI Structures
155
The vollen member indicates the length of the volume. If DB_BIG is set
in the volopts member, vollen represents the number of pages. Otherwise,
it represents the number of bytes; this value is converted internally into
the corresponding number of pages. The volume length is used by
volume storage routines to determine how much data can fit onto the disk
partition. If the volume is a contiguous file or a device, vollen contains a
non-zero value. For a regular file, a zero value (0) indicates that the
volume size is unconstrained and can dynamically grow as needed.
The volused member contains the amount of the volume that is allocated.
The DB_BIG member controls whether this value is specified as pages or
bytes, as for vollen.
The volpgsz member contains the volume’s page size, in bytes.
The volopts member contains the volume’s processing options. Options
are:
DB_ORDNRY
volume is ordinary
DB_DEVICE
volume is a device
DB_RDONLY
reserved for future use
DB_FORCE
force volume preĆallocation
DB_ALLOC
volume is a preĆallocated file
DB_BIG
Indicates that the vollen specification is in pages
rather than bytes.
DB_CONTIG
reserved for future use
DB_NORMAL DB_ORDNRY is the default value used
Your application should test the DB_BIG bit to determine the volume size.
For example:
156
The RHLI Structures
UVOLINF *volinfl; /* ––> vols info list */
int
inx;
/* its for–loop index */
...
if ( (volinfl+inx)–>volopts & DB_BIG )
{
/* lengths are # of 2k pages */
printf(”vollen = %ld KB, ”,
(volinfl+inx)–>vollen *
((volinfl+inx)–>volpgsz/1024));
printf(”volused = %ld KB.”,
(volinfl+inx)–>volused *
((volinfl+inx)–>volpgsz/1024));
}
else /* volume is not > 2 GB */
{
printf(”vollen = %ld bytes, ”,
(volinfl+inx)–>vollen);
printf(”volused = %ld bytes.”,
(volinfl+inx)–>volused);
}
...
The ntbl member contains the number of entries in the table ID list
utidlst. If ntbl contains a zero value (0), utidlst has not been allocated and
should not be referenced.
The utidlst member contains a list of all of the table IDs that have
preferenced this volume. The table’s processing options need to be
examined to determine if the volume is a required or advisory preference.
The volfile member contains the full path name of the volume file or
device.
The volname member contains the name of the volume as it would be
referenced for name-binding.
The RHLI Structures
157
The UVOLMAP Structure: Volume ID
Mapping
The UVOLMAP structure has the following declaration.
typedef struct
{
char * volnm;
UVID vid;
UVID remapid;
} UVOLMAP;
/* pointer to runtime volume name
/* compile-time Volume ID
/* runtime Volume ID (returned)
*/
*/
*/
The UVOLMAP structure is used by the umapvol function to perform
runtime ID-mapping on a compile-time volume object.
It is highly recommended that you use the INIVOLMAP mapping macro
to initialize the UVOLMAP structure.
The volnm member contains the runtime name of the volume.
The vid member contains the compile-time volume ID.
The volume ID (vid) can be hardcoded by the programmer (with a unique
custom ID) or be supplied by the Unify DataServer C compiler, ucc.
If you choose to hardcoded a unique volume ID (vid), be sure that the
number you pick is compatible with the type UVID.
To generate a unique compile-time volume ID using ucc, initialize vid
with the following compiler directive (volnm is the name of the volume.):
$(UVOL:VID)volnm$
The remapid member, upon successful completion of the ID-mapping
operation, contains the runtime ID to which the compile-time ID was
mapped. This value is for internal use only.
158
The RHLI Structures
Function Reference
159
160
Function Reference
uabttx
Abort a transaction
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uabttx( txid, status )
UTXID txid;
USTATUS *status;
Arguments
Description
txid
Transaction ID
status
Returned status of the function
Aborts the specified active transaction and rolls back all database operations
performed during the transaction. Database operations include insert, delete, and
update operations.
An active transaction is a transaction that has not been committed or aborted.
To use this function, transaction logging must be on (that is, the LOGTX configuration
variable must be set to TRUE).
This function releases all locks associated with the transaction and closes all scans
active in the transaction.
Warning
Do not abort a transaction by calling the UNIX kill command. This command can
cause irreversible damage to the database. Use the uabttx function to abort a
transaction.
Security
No privileges needed.
161
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
ubegtx, ucbgtx, ucmttx, uinftx
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
162
uaddath
Add a schema to a database
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uaddath( txid, nauth, dbauth, statusl, status )
UTXID txid;
int nauth;
DBAUTH *dbauth;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nauth
Number of schemas in the dbauth list
dbauth
List of DBAUTH structures, each describing a separate schema to add
statusl
Returned list of status values, one for each dbauth entry
status
Returned status of the function
Validates the schemas described in the dbauth list and adds the schemas to the
database.
Each DBAUTH structure in the dbauth list contains information about a schema.
For a complete description of the DBAUTH structure, see page 80.
Security
To add a schema, you must have one of the following permissions.
DBA authority
SCHEMA authority
163
To grant DBA and SCHEMA authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
udrpath, uallath, ubndath, ufchath, uaddprv, uinfath, umapath, umodath,
unumath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
164
uaddbt
Define a B-tree index
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uaddbt( txid, nbt, dbbtree, statusl, status )
UTXID txid;
int nbt;
DBBTREE *dbbtree;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nbt
Number of B-trees in the dbbtree list
dbbtree
List of DBBTREE structures, each defining a separate B-tree to add
statusl
Returned list of status values, one for each dbbtree entry
status
Returned status of the function
Validates the B-trees defined in the dbbtree list and adds the B-trees to the database.
B-trees facilitate range searches and random access on one or more columns. B-trees
can be built referencing a composite key made up of the maximum number of
columns allowed (128.)
B-trees are created by specifying any column or combination of columns in a
database table as the indexes, except those columns that are of the data type TEXT
(U_VTXT) or BINARY (U_VBIN).
Each DBBTREE structure in the dbbtree list contains information about a B-tree.
165
For a description of the DBBTREE structure, see page 81.
Security
To define a B-tree for a table, the table must be in the current schema and you must
have one of the following permissions.
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
udrpbt, uinfbt, umodbt
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using B-trees, see “Choosing an Access Method” and
“Managing the Database Files” in Unify DataServer: Managing a Database.
166
uaddcgp
Add a column group to a table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uaddcgp( txid, ncgrp, dbcgrp, statusl, status )
UTXID txid;
int ncgrp;
DBCGRP *dbcgrp;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ncgrp
Number of column groups in the dbcgrp list
dbcgrp
List of DBCGRP structures, each describing a column group to add
statusl
Returned list of status values, one for each dbcgrp entry
status
Returned status of the function
Validates the column groups listed in dbcgrp and adds the column groups to a table in
the database.
If a column group already exists, this function combines the requested options with
the existing options for that column group.
Each DBCGRP structure in the dbcgrp list contains information about a column
group. For a description of the DBCGRP structure, see page 83.
If the add operation is successful, a column group ID is returned (to DBCGRP
member grpcid) for each added column group in the dbcgrp list.
You cannot specify uniqueness constraints on a column if the column contains data.
167
Security
To add a column group to a table, the table must be in the current schema and you
must have one of the following permissions.
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
The following example uses the uaddcgp function to define a column group for a
table.
/* initialize the DBCGRP structure */
if ( uaddcgp(txid, ncgrp, dbcgrp, statusl, &status) != USUCCESS )
printf(”Couldn’t add column group: status = %ld\n”, status);
See Also
udrpcgp, uinfcgp
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
168
uaddcnm
Add a column name (or synonym)
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uaddcnm( txid, ncol, dbcolnm, statusl, status )
UTXID txid;
int ncol;
DBCOLNM *dbcolnm;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ncol
Number of column names in the dbcolnm list
dbcolnm
List of DBCOLNM structures, each describing a separate column
name to add
statusl
Returned list of status values, one for each dbcolnm entry
status
Returned status of the function
Validates the column names listed in dbcolnm and adds the column names to the
database.
Once a synonym for a column has been added, name binding operations can be
performed by specifying the new column name.
Column groups can also be assigned synonyms by specifying the column group ID
(in place of the column ID) in the dbcolnm list.
Each DBCOLNM structure in the dbcolnm list contains information about a column’s
name.
169
For a description of the DBCOLNM structure, see page 85.
Column names must be unique within a table.
Security
To add a column name to a column, the table containing the column must be in the
current schema, and you must have one of the following permissions.
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uaddcnm function to add a column synonym to the
part_number column.
dbcolnm.cid = $parts.part_number$;
dbcolnm.colnm = ”p_no”;
...
if (uaddcnm(txid, 1, &dbcolnm, statusl, &status) != USUCCESS )
{
fprintf(stderr,
”Error naming column: status = %ld\n”,status);
}
See Also
udrpcnm
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
170
uadddb
Create a new, empty database
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uadddb( dbinfo, status )
DBINFO *dbinfo;
USTATUS *status;
Arguments
Description
dbinfo
Pointer to a DBINFO structure that describes the database to create
status
Returned status of the function
Creates a root volume and a new, empty database.
The new database is described with a DBINFO structure which contains root volume
information and other database creation options. For a description of the DBINFO
structure, see page 88.
Before you create a database:
If you want the new database to have a configuration file during the creation
process, its configuration file must exist before you create the database.
However, anytime you open the database, it will apply the configuration
variables defined in the configuration file, even if you created that file after the
creating the databse.
You can optionally choose a new set of shared memory keys for the database
by specifying the keys in the new database’s configuration file.
The advantage of choosing a new key is that if one database is corrupted (by a
killed process, for example), the corrupted database does not affect other
databases that have separate shared memory segments. The disadvantage is
that if many databases exist at the same time, they require many shared
memory segments.
171
Security
To create a new database, you need no special privileges.
However, if you want to overwrite an existing database, you must have DBA
authority for the database you are overwriting. (An existing database is overwritten
by setting the member dbopts in the structure DBINFO to DB_OVERWR.)
To grant DBA authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uadddb function to create a database.
USTATUS status;
DBINFO dbinfo;
DBVOLM dbvolm;
/* initialize values */
dbvolm.volfile = ”/usr/db/parts.db”;
dbvolm.volopts = DB_BIG;
dbvolm.voloff = 0;
dbvolm.vollen = 20480;
/* actual size is 41943040 bytes */
dbvolm.volpgsz = 2048;
/* 2k is only supported page size */
dbinfo.rootvol = &dbvolm;
dbinfo.descrpt = ”parts database”;
dbinfo.dbopts = (DB_CONFIG | DB_OVERWR);
/* create the database */
if ( uadddb(&dbinfo, &status) != USUCCESS)
fprintf(stdout, ”creation failed; status: %ld\n”, status);
See Also
uopndb, umoddb, uaddvol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
172
uaddhsh
Define a hash table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uaddhsh( txid, nhsh, dbhashl, statusl, status )
UTXID txid;
int nhsh;
DBHASH *dbhashl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Current transaction ID
nhsh
Number of hash tables in the dbhashl list
dbhashl
List of DBHASH structures, each describing a separate hash table to
add
statusl
Returned list of status values, one for each dbhashl entry
status
Returned status of the function
Validates the hash tables defined in the dbhashl list and adds the hash tables to the
database.
Hash table indexes on a set of columns in a table provide very fast access when
ordering is not needed.
Each DBHASH structure in the dbhashl list contains information about a hash table.
For a description of the DBHASH structure, see page 86.
To add a hash table to a table that already contains rows, you must first perform a
complete scan of the table before adding the hash table. This can be a lengthy
operation, depending upon the amount of data in the table.
173
Security
To define a hash table index for a table, the table must be in the current schema and
you must have one of the following permissions.
DBA authority
SCHEMA authority
To specify a volume for a hash table (the vid member in the DBHASH structure), you
must have DBA authority.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uaddhsh function to create a hash table index on the manf
table.
colidl[0] = $manf.mano$;
dbhash.htname = “#mano_ht”;
dbhash.ncol = 1;
dbhash.colidl = colidl;
dbhash.htopts = DB_NORMAL;
...
if ( uaddhsh(txid, 1, &dbhash, statusl, &status) != USUCCESS )
{
printf(”Error adding a hash index: status = %ld\n”, status);
printf(”hash index status = %ld\n”, *statusl);
}
See Also
udrphsh, uinfhsh, umodhsh
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using hash tables, see “Managing the Database Files,”
“Choosing an Access Method,” and “Tuning the Access Methods” in Unify
DataServer: Managing a Database.
174
uaddlnk
Define a link
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uaddlnk( txid, nlnks, dblinkl, statusl, status )
UTXID txid;
int nlnks;
DBLINK *dblinkl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nlnks
Number of links in the dblinkl list
dblinkl
List of DBLINK structures, each describing a separate link to add
statusl
Returned list of status values, one for each dblinkl entry
status
Returned status of the function
Validates the link descriptions listed in dblinkl and adds a link for a pair of tables.
Each DBLINK structure in the dblinkl list contains information about a link. For a
description of the DBLINK structure, see page 90.
A link is composed of a parent column (or set of columns) and a corresponding child
column (or set of columns).
When a link exists between two tables, each row in the child table is associated with a
row in the parent table. The association is based on the linked columns’ values. The
child row is associated to the parent row that has the same values in the linked
columns.
175
If a particular column value does not exist in any parent table row, then you cannot
insert a child row with that column value. This characteristic makes links useful for
enforcing referential integrity.
Also, if a null value is allowed in a child table column, the column will not be
associated with a parent column.
Performance
The link access method can also significantly increase the performance of retrieval
operations requiring related information from different tables.
If the link is on more than one column, then the order of column IDs in the lists
indicates which columns are to be linked between the two tables.
A column can be specified only once per link.
Each column in the child list must have the same type as the corresponding column in
the parent list.
Variable-length columns (of data type U_VTXT or U_VBIN) cannot be used in links.
A column or set of columns can be the child of one link only.
To add a link to a table that already contains rows, you must first perform a complete
scan of the table before adding the link. This can be a lengthy operation, depending
upon the amount of data in the table.
Security
To define a link index for a table, you must have one of the following permissions.
DBA authority
SCHEMA authority
Also, the two tables comprising the link definition must be made accessible by one of
these methods:
Make the schema that contains both linked tables current.
If the tables are located in two separate schemas, make the schema that
contains the first table current and have schema access permission to the
schema that contains the second table.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function. To grant schema access permission, see the
uaddprm function.
176
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uaddlnk function to define a link index on columns in a table.
pcid = $parts.part_number$;
ccid = $orders.p_no$;
...
dblink.lnkname = ”@part_num_link”;
dblink.ptblid = $parts$;
dblink.ctblid = $orders$;
dblink.ncol
= 1;
dblink.pcolidl = &pcid;
dblink.ccolidl = &ccid;
...
if ( uaddlnk(txid, 1, &dblink, statusl, &status) != USUCCESS )
{
printf(”Error adding link: status = %ld\n”, status);
printf(”link status = %ld\n”, *statusl);
}
See Also
udrplnk, umodlnk, uinflnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
177
uaddprf
Add a volume preference for a table
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uaddprf( txid, tid, nvol, vidl, statusl, status )
UTXID txid;
UTID tid;
int nvol;
UVID *vidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of table to add volume preference
nvol
Number of volumes in the vidl list
vidl
List of volume IDs, each ring to a separate volume pence to add
statusl
Returned list of status values, one for each vidl entry
status
Returned status of the function
Registers the volume preferences designated by the list of volumes for the specified
table.
The table ID (tid) and volume IDs (listed in vidl) must be valid existing entries in the
database before calling the uaddprf function.
Security
To add volume preferences for a table, you must be located in the schema that
contains the table, and you must have DBA authority.
178
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uaddprf function to add a volume preference to a table.
/* Add the volume preferences */
if ( uaddprf(txid, tid, nvol, vidl, statusl, &status) != USUCCESS)
{
printf(“Unable to add volume preference: %ld\n”, status);
for ( i = 0; i < nvol; ++i )
printf(“Entry %d volume: %ld status: %ld\n”, i, vidl[i],statusl[i]);
uexit(1);
}
See Also
uadddb,uaddtbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
179
uaddprm
Grant schema access permission
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uaddprm( txid, userid, nauth, authl, statusl, status )
UTXID txid;
UOID userid;
int nauth;
UAID authl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
userid
User ID of user to be granted schema access permission
nauth
Number of authorization IDs (associated with schemas) listed in the
authl list
authl
List of authorization IDs, each referring to a schema for which a user
(userid) is to be granted schema access permission
statusl
Returned list of status values, one for each authl entry
status
Returned status of the function
Grants a user schema access permission to one or more schemas.
Schema access permission allows a user (specified by userid) to access the schema
(specified in authl). When a user is first added to the database (with the uaddusr
function), the user is granted schema access permission to the PUBLIC schema only.
To access other schemas in the database, you must use this function to grant schema
access permission for each schema the user needs to access.
180
To revoke schema access permission from a user, use the udrpprm function.
Security
To grant schema access permission to a user, you must DBA authority or both of the
following must be true:
The schema must be the current schema.
You have SCHEMA authority.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the uaddprm function to grant schema access permission to user
lcc:
/* define required parameters */
UTXID txid;
UOID userid;
int nauth;
UAID authl;
USTATUS statusl;
USTATUS * status;
/* Retrieve authorization ID (authl) */
...
/* Grant schema access permission */
nauth = 1;
userid = ”lcc”;
if ( uaddprm(txid, userid, nauth, authl, statusl, &status) != USUCCESS)
{
printf(“Unable to add privileges: %ld\n”, status);
uexit(1);
}
See Also
udrpprm, uaddusr, udrpusr, uaddath, udrpath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
181
uaddprv
Grant user authority or schema privileges
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uaddprv( txid, nrqstds, rqstdsl, statusl, status )
UTXID txid;
int nrqstds;
UGRTDS rqstdsl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nrqstds
Number of privileges described in the rqstdsl list
rqstdsl
List of UGRTDS structures, each describing a separate privilege to
grant
statusl
Returned list of status values, one for each rqstdsl entry
status
Returned status of the function
Grants one or more of the following permissions:
DBA authority
SCHEMA authority
schema privileges to a schema
schema privileges to a table
schema privileges to a column
DBA authority allows a user to create, drop, access, and modify any object in the
database. SCHEMA authority, however, allows a user to create and drop schemas and
objects within those schemas only. Both of these privileges are granted to users only.
182
Schema privileges are privileges granted to a schema. The privileges specify access
to all objects in another schema or a table or column within the schema.
For each set of privileges you want to grant with this function, you must first describe
the privileges by initializing the UGRTDS structure. For a description of the UGRTDS
structure, see page 120.
If a schema grants schema privileges to another schema, all tables in the schema
granting the privilege are accessible. If a schema grants schema privileges to a table,
only the specified table is accessible.
To revoke user or schema privileges, use the udrpprv function.
Security
To grant DBA or SCHEMA authority, you must have DBA authority.
To grant schema privileges to a schema, you must make current the schema that is
granting the privileges.
To grant schema privileges to a table or column, you must make the schema that
contains the table or column to receive the privileges the current schema.
To make a schema current, use the ufchath function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the uaddprv function to grant select and insert privileges on the
company table to the admin schema:
/* define required parameters */
UTXID txid;
USATUS status;
/* Retrieve authorization ID (aid) for admin schema */
...
/* Retrieve table ID for company table (tidl) in SQL_books schema */
...
/* Initialize UGRTDS structure elements */
rqstdsl.gte.aid = aid;
rqstdsl.rqstcaps = UTSEL | UTINS;
rqstdsl.obj.objid = tidl.tid;
rqstdsl.obj.objknd = UTBLKND;
/* Grant privileges */
if ( uaddprv(txid, 1, &rqstdsl, statusl, &status) != USUCCESS)
printf(”Unable to grant privileges: status = %ld\n”,status);
183
See Also
uaddath, uaddprm, udrpath, udrpprm, udrpprv
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
184
uaddtbl
Add a table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uaddtbl( txid, ntbl, dbtable, statusl, status )
UTXID txid;
int ntbl;
DBTABLE *dbtable;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ntbl
Number of tables described in the dbtable list
dbtable
List of DBTABLE structures, each describing a separate table to add
statusl
Returned list of status values, one for each dbtable entry
status
Returned status of the function
Validates the table described in each DBTABLE structure, pointed to by dbtable, and
add the table to the database.
For a description of the DBTABLE structure, see page 92.
If the add operation is successful, this function returns a table ID (into DBTABLE
member tid) for each added table in the dbtable list.
Storage space for rows within the added table are allocated either on the default
volume or on the preferred volume specified by DBTABLE member vid.
The order of the columns added to the table is undefined. The column order returned
from the uinftbl routine may differ from the order specified in the DBCOL list
(contained in the DBTABLE structure).
185
Security
To add a table to a schema, you schema where you want the table to reside must be
the current schema, and you must have one of the following authority levels:
DBA authority
SCHEMA authority
To specify a volume for a table (the vid member in the DBTABLE structure), you
must have DBA authority.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uaddtbl function to add a table.
ncol = 2;
/* number of DBCOL column entries */
dbcol[0].coltyp = U_HINT;
/* column type */
dbcol[0].collen = ULD_HINT;
/* column format precision */
dbcol[0].colscl = 0;
/* column format scale */
dbcol[0].dsplen = UDL_HINT;
/* column display precision */
dbcol[0].dspscl = 0;
/* column display scale */
dbcol[0].colopts = DB_NORMAL;
/* column processing options */
dbcol[0].colnm = ”part_number”; /* column name */
dbcol[0].coldesc = ”part number”; /* column description */
dbcol[0].dsppict = ””;
/* column display picture clause */
dbcol[1].coltyp = U_STR;
dbcol[1].collen = UDL_STR;
dbcol[1].colscl = 0;
dbcol[1].dsplen = UDL_HINT;
dbcol[1].dspscl = 0;
dbcol[1].colopts = DB_NORMAL;
dbcol[1].colnm = ”part_name”;
dbcol[1].coldesc = ”part name”;
dbcol[1].dsppict = ””;
/*
ntbl = 1;
186
/* column type */
/* column display length */
/* column format scale */
/* column display precision */
/* column display scale */
/* column processing options */
/* column name */
/* column description */
column display picture clause */
dbtable[0].dbcol = dbcol;
/* array of column information */
dbtable[0].vid = UNULLVID;
/* initial pence volume */
dbtable[0].expnum = 10000L;
/* expected number of rows */
dbtable[0].statusl = statusl; /* array of column status codes */
dbtable[0].tblopts = DB_NORMAL; /* table processing options */
dbtable[0].ncol = ncol;
/* # of columns in ’dbcol’ */
dbtable[0].tblnm = ”parts index”; /* table name */
dbtable[0].tbldesc = ”part index”; /* table description */
/* Add the tables */
if (uaddtbl(txid, ntbl, dbtable, statusl, &status) != USUCCESS)
{
fprintf(stderr,”Unable to create new table: %ld\n”, status);
for ( i = 0; i < ntbl; ++i )
for ( j = 0; j < dbtable[i].ncol; ++j )
printf(”Table %d column %d status: %ld\n”,
i, j, dbtable[i].statusl[j]);
uexit(1);
}
See also Appendix A for more examples.
See Also
udrptbl, uinftbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
187
uaddtnm
Add a table name (or synonym)
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uaddtnm( txid, ntbl, dbtblnm, statusl, status )
UTXID txid;
int ntbl;
DBTBLNM *dbtblnm;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ntbl
Number of table names in the dbtblnm list
dbtblnm
List of DBTBLNM structures, each describing a separate table name
to add
statusl
Returned list of status values, one for each dbcolnm entry
status
Returned status of the function
Adds an alternate name (or synonym) for the table specified by a DBTBLNM
structure.
Synonyms for a table can be used to reference (and bind to) the same table. This
feature is useful in applications where you need to reference the same table by
different names.
Each DBTBLNM structure in the dbcolnm list contains the table ID and for the table
and the alternate table name. For a description of the DBTBLNM structure, see page
99.
Table names must be unique within a schema.
188
Security
To add a synonym to a table, the schema where the table resides must be current, and
you must have one of the following permissions.
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uaddtnm function to add a table synonym.
/* Initialize DBTBLNM structure */
dbtblnm.tid = $parts$;
dbtblnm.tblnm = “parts_data”;
if ( uaddtnm(txid, 1, &dbtblnm, statusl, &status) != USUCCESS)
printf(“Error naming table: status = %ld\n”, status);
if ( ubndtbl(txid, 1, &(dbtblnm.tblnm), USLCK, &tid, &status) != USUCCESS)
printf( “Error using new table name: status=%ld\n”,status);
See Also
udrptnm
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
189
uaddusr
Add a user to a database and set a user’s default schema
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uaddusr( txid, nuser, dbuser, statusl, status )
UTXID txid;
int nuser;
DBUSER *dbuser;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nuser
Number of users in the dbuser list
dbuser
List of DBUSER structures, each describing a separate user to add to
the database
statusl
Returned list of status values, one for each dbuser entry
status
Returned status of the function
Adds the users and user schema defaults described by the dbuser list and adds them
to the database.
Each DBUSER structure in the dbuser list contains information about a user’s name.
For a description of the DBUSER structure, see page 100.
Security
To add a user to a database (grant a user access permission), you must have DBA
authority. When a user is added to a database, the user is granted access to the
database and schema access permission to the PUBLIC schema.
190
To grant DBA and SCHEMA authority, use the uaddprv function. To grant schema
access permission to a schema, use the udrpprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the uaddusr function to add two users to the database.
/* define required parameters */
UTXID
txid;
DBUSER * dbuser;
USTATUS statusl[2];
USTATUS status;
int
nuser;
/* Initialize DBUSER structure */
dbuser[0].usernm = ”rick”;
/* owner (login) name #0 */
dbuser[0].aid = UNULLAID;
/* Assume default schema */
dbuser[1].usernm = ”bill”;
/* owner (login) name #1 */
dbuser[1].aid = UNULLAID;
/* Assume default schema */
/* Add the users */
nuser = 2;
if (uaddusr(txid, nuser, dbuser, statusl, &status) != USUCCESS)
{
printf(”Unable to create new users: %ld\n”, status);
for ( i = 0; i < nuser; ++i )
printf(”Entry %d users %s status: %ld\n”,
i, dbuser[i].usernm, statusl[i]);
exit(1);
}
See Also
uaddprm, udrpprm, uaddath, udrpath, uadddb, udrpusr
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
191
uaddvol
Add a volume
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uaddvol( txid, nvol, dbvolm, statusl, status )
UTXID txid;
int nvol;
DBVOLM *dbvolm;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nvol
Number of volumes in the dbvolm list
dbvolm
List of DBVOLM structures, each describing a separate volume to
add to the database
statusl
Returned list of status values, one for each dbvolm entry
status
Returned status of the function
Adds a new, empty volume to an existing database.
Each DBVOLM structure in the dbvolm list contains information about a volume.
A volume ID is returned into the DBVOLM vid member, and can be used for future
reference to the volume.
For a description of the DBVOLM structure, see “The RHLI Structures.”
Security
To add a volume to a database you must have DBA authority.
To grant DBA authority, use the uaddprv function.
192
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uaddvol function to add a volume to a database.
int nvol;
USTATUS status;
DBVOLM dbvolm;
USTATUS statusl[1];
/* Initialize DBVOLM structure */
nvol = 1;
dbvolm.volfile = ”/dev/rdsk3”;
dbvolm.volopts = DB_DEVICE | DB_BIG;
dbvolm.voloff = 0;
dbvolm.vollen = 20480;
/* actual size is 41943040 bytes */
dbvolm.volpgsz = 2048;
/* 2k is only supported page size */
/* attempt to add volume */
if ( uaddvol(txid, nvol, &dbvolm, statusl, &status) != USUCCESS)
fprintf(stdout, ”Volume addition failed. status: %ld\n”,status);
See Also
umodvol, uaddtbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
193
ualcscn
Allocate a scan information structure
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ualcscn( txid, nsel, nsrt, ncol, scaninf, status )
UTXID txid;
int nsel;
int nsrt;
int ncol;
char **scaninf;
USTATUS *status;
Arguments
Description
txid
Transaction ID.
nsel
Optional; number of OR-groups in selection criteria; this value
represents the number of calls to the uinsor function.
nsrt
Optional; number of sort criteria.
ncol
Optional; number of columns in the projection for the scan.
scaninf
Returned pointer to a scan information structure.
status
Returned status of the function.
Allocates a scan information structure and returns a pointer for future scan
initialization calls.
Performance
If the scan is well defined when the ualcscn function is called, specifying the number
of OR-groups (nsel), sort criteria (nsrt), and projection columns (ncol) can greatly
speed up the scan specification process for complex selection criteria. If you do not
194
know the values for these parameters, specify 0. In this case, portions of the scan
structure are allocated by the uinsor, uinsand, uinssrt, and uinsprj functions.
If the numbers specified for nsel, nsrt, or ncol are larger than those actually used by
the scan, some user memory will be wasted. If the numbers are smaller, calls to the
functions will cause portions of the scan structure to be reallocated. Choosing these
numbers is a tradeoff between user memory and the potential CPU overhead of
reallocating the structures.
When no longer needed, you must free the scan information structure’s memory
allocation by using the ufrescn function.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See appendix A.
See Also
uinsor, uinsand, uinssrt, uinsprj, ufrescn, ubegscn, uendscn, ufchscn
For information about scanning, see page 64.
195
ualctbl
Allocate a UNIPCOLL structure
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ualctbl( txid, ntbl, tidl, unipcol, statusl, status )
UTXID txid;
int ntbl;
UTID *tidl;
UNIPCOLL unipcol[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ntbl
Number of table IDs in the tidl list
tidl
An array of table IDs to allocate column data buffers for
unipcol
An array of UNIPCOLL structures that contain column data buffers
for each corresponding table in the tidl list
statusl
Returned list of status values, one for each tidl entry
status
Returned status of the function
Dynamically allocates the members of a UNIPCOLL structure for columns of each
table listed in the tidl list. When you no longer need the UNIPCOLL structure, you
must free each column buffer and the dbval and cidl structures. When freeing a
dbvall member, be sure to free each data type.
Each UNIPCOLL structure in the tidl list contains information about columns for a
table.
196
If the ncol member of a UNIPCOLL structure is set to zero, you do not need to free
any structures.
For a description of the UNIPCOLL structure, see page 131.
Security
To allocate a UNIPCOLL structure, you must have access to all tables listed in tidl.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
To allocate a UNIPCOLL structure:
#define NTBL 3
/* define required parameters */
UTXID tx;
/* Transaction ID */
int ntbl;
/* # tables listed in tidl */
UTID tidl[NTBL];
/* list of Table IDs */
UNIPCOLL unipcol[NTBL]; /* list of column list info */
USTATUS statusl[NTBL]; /* table status list */
USTATUS status;
/* function status buffer */
/* automatically generate a column list */
ntbl = NTBL;
tidl[0] = $PUBLIC.manf$;
tidl[1] = $PUBLIC.item$;
tidl[2] = $PUBLIC.taxes$;
if (ualctbl(tx, ntbl, tidl, unipcol, statusl, &status) != USUCCESS)
{
printf(“Error allocating UNIPCOLL structure: %ld”, status);
uexit(1);
}
197
To deallocate the allocated UNIPCOLL structure:
/* use existing unipcol values */
int tblidx;
UNIPCOLL * unipcolp;
int colidx;
char * charptr;
for ( tblidx = 0 ; tblidx < ntbl ; ++tblidx )
{
unipcolp = &unipcol[tblidx];
for ( colidx = 0; colidx < unipcolp–>ncol ; ++colidx )
free(unipcolp–>dbvall[colidx].unip.strp);
free((char *)unipcolp–>dbvall);
free((char *)unipcolp–>cidl);
}
See Also
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
198
uallath
Get a list of authorization IDs (schemas)
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uallath( txid, lcktype, nauth, aidl, status )
UTXID txid;
int lcktype;
int *nauth;
UAID **aidl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
lcktype
Lock type to place on the retrieved authorization IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nauth
Number of authorization IDs returned into aidl
aidl
Returned list of authorization IDs
status
Returned status of the function
Locks and retrieves the authorization IDs for all schemas in the current database.
Locking an authorization ID preserves the integrity of the definition for the associated
schema while the lock is held.
Authorization IDs returned (into aidl) are only valid within the scope of a single
transaction.
Unify DataServer allocates storage for the returned list of authorization IDs (aidl) by
calling the malloc function. After you have retrieved the authorization IDs, you must
recover this storage space by calling the free function.
199
If the number of authorization IDs (nauth) returned is zero (0), the malloc function
was not performed by Unify DataServer and you do not need to call the free function.
Security
Authorization IDs are returned only for schemas you have access to.
You always have access to the current schema. Additionally, you can access other
schemas if you have been granted schema access permission to the schema or if a
schema you can access has schema privileges to another schema (or a table or column
in the schema). If you have DBA authority, you can access any schema in the
database.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function. To grant schema access permission, use the
uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the uallath function to retrieve a list of authorization IDs.
/* define required parameters */
UAID * aidl;
int
nauth;
/* Retrieve authorization IDs into aidl*/
if ( uallath(txid, USLCK, &nauth, &aidl, &status) != USUCCESS )
printf(”Unable to get all Auth. IDs: status = %ld\n”,status);
/* free space used for aidl */
if ( nauth > 0 )
free((UAID *)aidl);
See Also
uaddath, ubndath, udrpath, ufchath, uinfath, umodath
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
200
uallbt
Get a list of B-tree IDs
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uallbt( txid, tid, lcktype, nbt, bidl, status )
UTXID txid;
UTID tid;
int lcktype;
int *nbt;
UBTID **bidl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of table containing the B-trees or UNULLTID
lcktype
Lock type to place on the retrieved B-tree IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nbt
Number of B-tree IDs returned into bidl
bidl
Returned list of B-tree IDs
status
Returned status of the function
Locks and retrieves a list of all B-tree IDs for the specified table. If tid is set to
UNULLTID, B-tree IDs are returned for all tables in the database you have access to.
Locking a B-tree ID preserves the integrity of the definition for the B-tree while the
lock is held.
B-tree IDs returned are valid within the scope of a single transaction only.
201
Unify DataServer allocates storage for the returned list of B-tree IDs (bidl) by calling
the malloc function. After you have retrieved the B-tree IDs, you must recover this
storage space by calling the free function.
If the number of B-tree IDs (nbt) returned is zero (0), the malloc function was not
performed by Unify DataServer and you do not need to call the free function.
Security
B-tree IDs are returned only for B-trees in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uallbt function to retrieve a list of B-tree IDs.
UBTID * bidl;
statusl = (USTATUS *)calloc(1, sizeof(USTATUS));
if ( uallbt(txid, UNULLTID, UNULLLCK, &nbt, &bidl, &status) != USUCCESS)
printf(”Unable to get all B-tree ID info: status = %ld\n”,status);
if ( nbt > 0 )
free((UBTID *)bidl);
See Also
ubndbt, ufchath, uinfbt, umodbt, uaddbt
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using B-trees, see “Choosing an Access Method” and
“Managing the Database Files” in Unify DataServer: Managing a Database.
202
uallcgp
Get a list of column group IDs
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uallcgp( txid, tid, lcktype, ngrp, cidl, status )
UTXID txid;
UTID tid;
int lcktype;
int *ngrp;
UCID *cidl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table containing the column groups or UNULLTID
lcktype
Lock type to place on the retrieved column group IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
ngrp
Number of column group IDs returned into cidl
cidl
Returned list of column group IDs
status
Returned status of the function
Locks and retrieves a list of all column group IDs for the specified table.
If tid is set to UNULLTID, column group IDs are returned for all tables in the
database that you have access to.
203
Locking a column group ID preserves the integrity of the definition for the column
group while the lock is held.
Column group IDs returned are valid within the scope of a single transaction only.
Unify DataServer allocates storage for the returned list of column group IDs (cidl) by
calling the malloc function. After you have retrieved the column group IDs, you must
recover this storage space by calling the free function.
If the number of column group IDs (ngrp) returned is zero (0), the malloc function
was not performed by Unify DataServer and you do not need to call the free function.
Security
Column group IDs are returned only for column groups in tables that you have access
to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uallcgp function to retrieve a list of column group IDs.
UTXID tx;
UTID tid;
/* Transaction ID
*/
/* Table ID the col group belongs to
/* (or NULLTID) */
int lcktype;/* requested lock type */
int ngrp;
/* # col groups returned in cidl
*/
UCID * cidl;
/* list of all Column Group IDs
USTATUS status; /* returned status */
int indx;
/* temp index variable */
/* attempt to retrieve all column groups for table ’customer’ */
204
*/
*/
tid = $customer.$
if (uallcgp(txid, tid, lcktype, &ngrp, &cidl, &status) != USUCCESS)
{
printf(”Unable to get all column Group ID info: status = %ld\n”,status);
uexit(99);
}
printf(”%d column groups found\n”, ngrp);
for ( indx = 0; indx < ngrp; ++indx )
printf(”column Group ID: %ld\n”, cidl[indx]);
if ( ngrp > 0 )
free((UCID *)cidl);
See Also
uaddcgp, udrpcgp, ufchath, uinfcgp, unumcgp
malloc(3) and free(3) in your UNIX system manual.
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
205
uallcol
Get a list of column IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uallcol( txid, tid, lcktype, ncol, cidl, status )
UTXID txid;
UTID tid;
int lcktype;
int *ncol;
UCID **cidl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table containing the columns or UNULLTID
lcktype
Lock type to place on the retrieved column IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
ncol
Number of column IDs returned into cidl
cidl
Returned list of column IDs
status
Returned status of the function
Locks and retrieves a list of all column IDs for the specified table.
If tid is set to UNULLTID, column IDs are returned for all tables in the database that
you have access to.
Locking a column ID preserves the integrity of the definition for the column while
the lock is held.
206
Column IDs returned (into cidl) are valid only within the scope of a single
transaction.
Unify DataServer allocates storage for the returned list of column IDs (cidl) by
calling the malloc function. After you have retrieved the column IDs, you must
recover this storage space by calling the free function.
If the number of column IDs (ncol) returned is zero (0), the malloc function was not
performed by Unify DataServer and you do not need to call the free function.
Security
Column IDs are returned only for columns in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant DBA and SCHEMA
authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uallcol function to retrieve a list of column IDs.
UCID * cidl;
if ( uallcol(txid, tid, lcktype, &ncol, &cidl, &status) != USUCCESS )
printf(”Unable to get all Column ID info: status = %ld\n”,status);
if ( ncol > 0 )
free((UCID *)cidl);
See Also
ualltbl, ubndcol, uaddcnm, udrpcnm, uaddtnm, udrptnm, ufchath, uinfcol,
uinftbl
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
207
uallhsh
Get a list of hash table IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uallhsh( txid, tid, lcktype, nhsh, hidl, status )
UTXID txid;
UTID tid;
int lcktype;
int *nhsh;
UHID **hidl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table containing the hash tables or UNULLTID
lcktype
Lock type to place on the retrieved hash table IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nhsh
Number of hash table IDs returned into hidl
hidl
Returned list of hash table IDs
status
Returned status of the function
Locks and retrieves a list of all hash table IDs for the specified table.
If tid is set to UNULLTID, hash table IDs are returned for all tables in the database
you have access to.
Locking a hash table ID preserves the integrity of the definition for the hash table
while the lock is held.
Hash table IDs returned (into hidl) are only valid within the scope of a single
transaction.
208
Unify DataServer allocates storage for the returned list of hash table IDs (hidl) by
calling the malloc function. After you have retrieved the hash table IDs, you must
recover this storage space calling the free function.
If the number of hash table IDs (nhsh) returned is zero (0), the malloc function was
not performed by Unify DataServer and you do not need to call the free function.
Security
Hash table IDs are returned only for hash indexes in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This examples uses the uallhsh function to retrieve a list of hash table IDs.
UHID * hidl;
if (uallhsh(txid, tid, lcktype, &nhsh, &hidl, &status) != USUCCESS)
printf(”Unable to get all Hash Table info; status = %ld\n”, status);
if ( nhsh > 0 )
free((UHID *)hidl);
See Also
ubndhsh, uaddhsh, udrphsh, umodhsh, ufchath, uinfhsh
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using hash tables, see “Choosing an Access Method” and
“Tuning the Access Methods” in Unify DataServer: Managing a Database.
209
ualllnk
Get a list of link IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ualllnk( txid, tid, lcktype, nlid, lidl, status )
UTXID txid;
UTID tid;
int lcktype;
int *nlid;
ULID **lidl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table containing the links or UNULLTID
lcktype
Lock type to place on the retrieved link IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nlid
Number of link IDs returned into lidl
lidl
Returned list of link IDs
status
Returned status of the function
Locks and retrieves a list of link IDs for the specified table. If tid is set to
UNULLTID, link IDs are returned for all tables in the database you have access to.
Locking a link ID preserves the integrity of the definition for the link while the lock
is held.
Link IDs returned (into lidl) are valid only in the scope of a single transaction.
210
Unify DataServer allocates storage for the returned list of link IDs (lidl) by calling the
malloc function. After you have retrieved the link IDs, you must recover this storage
space by calling the free function.
If the number of link IDs (nlid) returned is zero (0), a malloc was not performed by
Unify DataServer and you do not need to call the free function.
Security
Link IDs are returned only for links in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ualllnk function to retrieve a list of link index IDs.
ULID * lidl;
if (ualllnk(txid, tid, lcktype, &nlid, &lidl, &status) != USUCCESS)
printf(“Can’t get all Link ID info: status = %ld\n”,status);
if ( nlid > 0 )
free((ULID *)lidl);
See Also
ubndlnk, uaddlnk, udrplnk, umodlnk, ufchath, uinflnk
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
211
uallpid
Get a list of process IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uallpid( dbid, npid, pidl, status )
UDBID dbid;
int *npid;
UPROCID **pidl;
USTATUS *status;
Arguments
Description
dbid
Database ID of the database associated with the process IDs
npid
Number of process IDs returned into pidl
pidl
Returned list of process IDs
status
Returned status of the function
Retrieves the set of all process IDs of processes registered with the database.
A process is registered with the database when the database is opened, and
deregistered when the database is closed.
Unify DataServer allocates storage for the returned list of process IDs (pidl) by
calling the malloc function. After you have retrieved the process IDs, you must
recover this storage space by calling the free function.
If the number of process IDs (npid) returned is zero (0), the malloc function was not
performed by Unify DataServer and you do not need to call the free function.
Security
If you have DBA authority, you can retrieve all active process IDs. If you don’t have
DBA authority, you can retrieve your process ID only.
212
To grant DBA authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the uallpid function to retrieve the list of process IDs.
/* define require parameters */
UDBID
dbid;
int
npid;
UPROCID * pidl;
USTATUS status;
/* Open the database */
...
/* Retrieve process IDs */
if (uallpid(dbid, &npid, &pidl, &status) != USUCCESS)
fprintf(stderr,”Unable to get Process IDs: status = %ld\n”, status);
...
/ * free space allocated for pidl */
if ( npid > 0 )
free((char *) pidl);
See Also
ualltx, uinftx
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
213
ualltbl
Get a list of table IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ualltbl( txid, aid, lcktype, ntbl, tidl, status )
UTXID txid;
UAID aid;
int lcktype;
int *ntbl;
UTID **tidl;
USTATUS *status;
Arguments
txid
Transaction ID
aid
Authorization ID of the schema that contains the tables or
UNULLAID
lcktype
Description
Lock type to place on the retrieved table IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
ntbl
Number of table IDs returned into tidl
tidl
Returned list of table IDs
status
Returned status of the function
Locks and retrieves a list of table IDs.
If aid is set to UNULLAID, table IDs are returned for all schemas in the database you
have access to.
Locking a table ID preserves the integrity of the definition for the table while the lock
is held.
214
Table IDs returned (into tidl) are valid only in the scope of a single transaction.
Unify DataServer allocates storage for the returned list of table IDs (tidl) by calling
the malloc function. After you have retrieved the table IDs, you must recover this
storage space by calling the free function.
If the number of table IDs (ntbl) returned is zero (0), the malloc function was not
called by Unify DataServer and you do not need to call the free function.
Security
Table IDs are returned only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ualltbl function to retrieve a list of table IDs.
UTID * tidl;
aid = UNULLAID;
if (ualltbl(txid, aid, lcktype, &ntbl, &tidl, &status) != USUCCESS )
fprintf(stderr,”Unable to get all Table ID info: status = %ld\n”,status);
if ( ntbl > 0 )
free((UTID *)tidl);
See Also
uallcol, ubndtbl, uinftbl, uinfcol, uaddtnm, udrptnm, ufchath, ufchtnm
malloc(3) and free(3) in your UNIX system manual.
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
215
ualltx
Get a list of transaction IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ualltx( dbid, pid, ntx, txidl, status )
UDBID dbid;
UPROCID pid;
int *ntx;
UTXID **txidl;
USTATUS *status;
Arguments
Description
dbid
Database ID of database associated with the transaction IDs
pid
UNIX process ID for the current application (obtained from the UNIX
system call getpid) or UNULLPID
ntx
Number of transaction IDs returned into txidl
txidl
Returned list of transaction IDs
status
Returned status of the function
Retrieves the set of active transaction IDs for the specified process ID.
To specify active transactions for the current application, set pid to UNULLPID;
otherwise, set pid to a specific process ID. You can use the getpid UNIX function to
retrieve the process IDs.
Unify DataServer allocates storage for the returned list of transaction IDs (txidl) by
calling the malloc function. After you have retrieved the transaction IDs, you must
recover this storage space by calling the free function.
If the number of transaction IDs (ntx) returned is zero (0), the malloc function was
not called by Unify DataServer and you do not need to call the free function.
216
Security
If you have DBA authority you can set the process ID (pid) to any valid transaction
process ID for any application currently accessing the database.
If you don’t have DBA authority, transaction IDs can be returned only for transactions
that your application initiated.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uinftx, ubegtx
malloc(3), free(3), and getpid(2) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
217
uallusr
Get a list of user IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uallusr( txid, lcktype, nuser, uoidl, status )
UTXID txid;
int lcktype;
int *nuser;
UOID **uoidl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
lcktype
Lock type to place on the retrieved user IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nuser
Number of user IDs returned into uoidl
uoidl
Returned list of user IDs
status
Returned status of the function
Locks and retrieves user IDs for all users who have access to the current database.
Locking a user ID preserves the integrity of the definition for the user while the lock
is held.
User IDs returned (into uoidl) are valid only in the scope of a single transaction.
Unify DataServer allocates storage for the returned list of user IDs (uoidl) by calling
the malloc function. After you have retrieved the user IDs, you must recover this
storage space by calling the free function.
218
If the number of user IDs (nuser) returned is zero (0), the malloc function was not
called by Unify DataServer and you do not need to call the free function.
Security
User IDs are returned as follows:
If you have DBA authority, all user IDs for the database are returned.
If you don’t have DBA authority, only your user ID is returned.
To grant DBA and SCHEMA authority, use the uaddprv function. To grant schema
access permission to a schema, use the udrpprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the uallusr function to retrieve the list of database users.
/ * define required parameters */
UOID
* uoidl;
UTXID
txid;
int
* nuser;
USTATUS status;
/* Retrieve user list (uoidl) */
if (uallusr(txid, USLCK, &nuser, &uoidl, &status) != USUCCESS)
fprintf(stderr,”Unable to get all User IDs: status = %ld\n”,status);
/* free space allocated by uoidl */
if ( nuser > 0 )
free((UOID *)uoidl);
See Also
uaddusr, ubndusr, udrpusr, uinfusr
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
219
uallvol
Get a list of volume IDs
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uallvol( txid, lcktype, nvol, vidl, status )
UTXID txid;
int lcktype;
int *nvol;
UVID **vidl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
lcktype
Lock type to place on the retrieved volume IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nvol
Number of volume IDs returned into vidl
vidl
Returned list of volume IDs
status
Returned status of the function
Locks and retrieves the volume IDs for all volumes registered in the current database.
Locking a volume ID preserves the integrity of the definition for the volume while
the lock is held.
Volume IDs returned (into vidl) are valid only in the scope of a single transaction.
Unify DataServer allocates storage for the returned list of volume IDs (vidl) by
calling the malloc function. After you have retrieved the volume IDs, you must
recover this storage space by calling the free function.
220
If the number of volume IDs (nvol) returned is zero (0), the malloc function was not
called by Unify DataServer and you do not need to call the free function.
Security
To get a list of all volume IDs defined for the current database, you must have DBA
authority.
To grant DBA authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uallvol function to retrieve a list of volume IDs.
UVID * vidl;
if (uallvol(txid, USLCK, &nvol, &vidl, &status) != USUCCESS)
fprintf(stderr,”Unable to get all Volume IDs: status = %ld\n”,status);
if ( nvol > 0 )
free((UVID *)vidl);
See Also
uaddvol, ubndvol, udrpvol, ufchath, uinfvol
malloc(3) and free(3) in your UNIX system manual.
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
221
ubegord
Begin an ordered access
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ubegord (txid, tid, ncol, uoacols, oaccid, statusl, status)
UTXID txid;
UTID tid;
int ncol;
UOACOLS *uoacols;
UOACCID *oaccid;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the target table for the ordered access
ncol
Number of columns in the uoacols list
uoacols
List of UOACOLS structures, each describing a column comprising
the order
oaccid
Pointer to returned ordered access ID
statusl
Returned status value for each column listed in the oaccid field of
each UOACOLS structure
status
Returned status of the function
Sets up the specified table for ordered access.
The table’s rows are set up for access in ascending or descending order on a set of
columns as specified by the column order list (uoacols).
222
Currently, the specified order must be supported by an underlying B-tree or direct
key. For B-trees, its key columns must match or exceed that specified by the column
order list. That is, the column order list can specify a subset of an actual B-tree index
key as long as the leading columns match. The B-tree index is not opened at this
time. It is opened the first time it is accessed by a ufchord, uposord, or uskrord
function call.
The order specified by UOACOLS can be in either the same or opposite order of that
of the underlying access method. If it is in the opposite order then the B-tree or direct
key is traversed in reverse order.
The returned ordered access ID is specified in future references to the ordered access.
Rows are retrieved from the ordered access with the ufchord function.
The current position is set to just before the first row of the order. The current
position within an ordered access on a table can be changed with the ufchord,
uposord, or uskrord function.
When the ordered access is no longer needed, the uendord function closes the
ordered access and frees up the resources (such as memory) held by the ordered
access.
If the transaction ends before the uendord function is called, the ordered access is
automatically closed, unless the USCAN option is specified to the ucbgtx function.
Security
To begin an ordered access, you must be able to access the table.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, see the ufchath function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
223
Example
See Appendix A.
See Also
uendord, ufchord, uposord
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
224
ubegscn
Begin a scan
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubegscn( txid, lcktype, scaninf, scanid, status )
UTXID txid;
int lcktype;
char *scaninf;
int *scanid;
USTATUS *status;
Arguments
Description
txid
Transaction ID
lcktype
Lock type to place on the scanned rows. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
scaninf
Pointer to a scan information structure
scanid
Pointer to returned scan ID
status
Returned status of the function
Given a fully specified scan, the ubegscn function optimizes the scan information
(contained in scaninf) and returns a scan ID (into scanid).
The returned scan ID can be used for future references to the scan.
Activities that should occur before beginning a scan include:
Allocation of a scan information structure (ualcscn)
Establishing the target table (uinstbl)
Specifying the scan selection criteria (uinsor, uinsand, uinsprj)
Specifying the scan sort criteria (uinssrt)
225
Rows are retrieved from the scan with the ufchscn function.
When the scan is complete, the uendscn function is used to close the scan and free up
the resources (such as memory) held by the scan.
If the transaction ends before the uendscn function is called, the scan is closed.
Security
To begin a scan, one of the following conditions must be true:
You have DBA authority.
The target table is in the current schema.
You have SELECT schema privilege on the target table.
You have SELECT schema privilege on all columns projected from the table.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ualcscn, uendscn, ufchscn, ufrescn, uinsand, uinsor, uinsprj, uinssrt, uinstbl
For information about scanning, see page 64.
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
226
ubegtx
Begin a transaction
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubegtx( dbid, prtx, txid, txopt, status )
UDBID dbid;
UTXID prtx;
UTXID *txid;
UTXOPT *txopt;
USTATUS *status;
Arguments
Description
dbid
Database ID (issued by the uopndb function)
prtx
Must be set to UROOTTXID
txid
Returned unique transaction ID issued to the current transaction
txopt
Pointer to UTXOPT structure that describes the new transaction’s
options
status
Returned status of the function
Begins a new transaction and returns a unique transaction ID. The transaction ID is
used in subsequent function calls.
To begin a transaction with this function, a UTXOPT structure (pointed to by txopt)
must first be initialized. The UTXOPT structure describes the new transaction. For a
complete description of the UTXOPT structure, see page 152.
Data definition (DDL) and data manipulation (DML) operations cannot occur in the
same transaction. Use separate transactions for DDL and DML operations.
To commit one transaction and begin another, use the ucbgtx function.
227
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ucbgtx, ucmttx, ualltx, ubegtx, uinftx
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
228
ubndath
Bind a schema name to an authorization ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndath( txid, nauth, authnml, lcktype, aidl, statusl, status )
UTXID txid;
int nauth;
char * authnml[];
int lcktype;
UAID aidl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nauth
Number of schema names in the authnml list
authnml
List of schema names
lcktype
Lock type to place on the retrieved authorization IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
aidl
Returned list of authorization IDs
statusl
Returned list of status values, one for each aidl entry
status
Returned status of the function
Locks and retrieves an authorization ID for each schema name specified in authnml.
Locking an authorization ID preserves the integrity of the name binding while the
lock is held. Also see “Transaction Types” on page 62 of this manual.
229
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the schemas you are binding to.
Therefore, there is no guarantee that the schemas you bound to will be the same or
even exist by the time you commit the transaction.
Security
To bind a schema name to an authorization ID you must have one of the following
permissions:
DBA authority (any authorization ID can be returned)
Schema access to the schema
Access to a schema with a privilege granted on one of the following:
– the schema itself (DELETE, INSERT, SELECT, or UPDATE)
– a table within the schema (DELETE, INSERT, SELECT, or UPDATE)
– a column within the schema (INSERT, SELECT, or UPDATE)
To grant DBA authority and schema privileges, use the uaddprv function. To grant
access permission to a schema, use the uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uaddath, uallath, udrpath, uinfath, umodath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
230
ubndbt
Bind a B-tree name to a B-tree ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndbt( txid, tid, nbt, btnml, lcktype, bidl, statusl, status )
UTXID txid;
UTID tid;
int nbt;
char *btnml[];
int lcktype;
UBTID *bidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of table the B-tree is defined for or UNULLTID
nbt
The number of B-tree names in the btnml list
btnml
List of B-tree names
lcktype
Lock type to place on the retrieved B-tree IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
bidl
Returned list of nbt B-tree IDs
statusl
Returned list of status values, one for each btnml/bidl entry
status
Returned status of the function
Locks and retrieves a B-tree ID for each B-tree name specified in btnml.
Locking a B-tree ID preserves the integrity of the name binding while the lock is
held.
231
If the table value (tid) is specified as UNULLTID, all tables in the current schema is
assumed.
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the B-trees you are binding to.
Therefore, there is no guarantee that the B-trees you bind to will be the same or even
exist by the time you commit the transaction.
Security
To bind a B-tree name to a B-tree ID one of the following must be true:
You have DBA authority (any B-tree ID can be returned).
The B-tree is in the current schema.
The current schema has been granted one of the following schema privileges:
– DELETE, INSERT, SELECT or UPDATE privilege for the schema that
contains the B-tree.
– DELETE, INSERT, SELECT or UPDATE privilege for the table that contains
the B-tree.
– INSERT, SELECT or UPDATE privilege for all the columns that comprise
the B-tree definition.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Example
See Appendix A.
See Also
ualllnk, ubndlnk, uaddlnk, udrplnk, umodlnk, uinflnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
232
ubndcol
Bind a column name to a column ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndcol( txid, tid, ncol, colnml, lcktype, cidl, statusl, status )
UTXID txid;
UTID tid;
int ncol;
char *colnml[];
int lcktype;
UCID *cidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
The table ID of table containing the columns, or, UNULLTID
ncol
The number of column names in the colnml list
colnml
List of column names
lcktype
Lock type to place on the retrieved column IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
cidl
Returned list of ncol column IDs
statusl
Returned list of status values, one for each colnml/cidl entry
status
Returned status of the function
Locks and retrieves a column ID for each column name specified in colnml.
Locking a column ID preserves the integrity of the name binding while the lock is
held.
233
If the table value (tid) is specified as UNULLTID, all tables in the current schema is
assumed.
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the columns you are binding to.
Therefore, there is no guarantee that the columns you bound to will be the same or
even exist by the time you commit the transaction.
Security
To bind a column name to a column ID one of the following must be true:
You have DBA authority (any column ID can be returned).
The column is in the current schema.
The current schema has been granted one of the following schema privileges:
– DELETE, INSERT, SELECT or UPDATE privilege for the schema that
contains the column.
– DELETE, INSERT, SELECT or UPDATE privilege for the table that contains
the column.
– INSERT, SELECT or UPDATE privilege for the column.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function. To grant schema access permission, use
the uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddcgp, uaddcnm, uallcol, udrpcgp, udrpcnm, ufchcnm, uinfcol, umapcol,
unumcol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
234
ubnddb
Bind a database name to a database ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubnddb( txid, dbname, lcktype, dbid, status )
UTXID txid;
char *dbname;
int lcktype;
UDBID *dbid;
USTATUS *status;
Arguments
Description
txid
Transaction ID
dbname
A database name
lcktype
Lock type to place on the retrieved database ID. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
dbid
Returned database ID
status
Returned status of the function
Locks and retrieves a database ID for the database specified in dbname.
Locking a database preserves the integrity of the name binding while the lock is held.
Binding to a database name does not open or reopen the database.
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the database you are binding to.
Therefore, there is no guarantee that the database you bound to (and are currently
accessing) will have the same design or layout when you commit the transaction.
235
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uadddb, uclsdb, uinfdb, uopndb
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
236
ubndhsh
Bind a hash table name to a hash table ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndhsh( txid, tid, nhsh, hshnml, lcktype, hidl, statusl, status )
UTXID txid;
UTID tid;
int nhsh;
char *hshnml[];
int lcktype;
UHID *hidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of table the hash table is defined for or UNULLTID
nhsh
Number of hash table names in the hshnml list
hshnml
List of hash table names
lcktype
Lock type to place on the retrieved hash table IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
hidl
Returned list of nhsh hash table IDs
statusl
Returned list of status values, one for each hshnml entry
status
Returned status of the function
Locks and retrieves a hash table ID for each hash table name specified in hshnml.
Locking a hash table ID preserves the integrity of the name binding while the lock is
held.
If the table value (tid) is specified as UNULLTID, all tables in the current schema is
assumed.
237
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the hash tables you are binding to.
Therefore, there is no guarantee that the hash tables you bound to will be the same or
even exist by the time you commit the transaction.
Security
To bind a hash table name to a hash table ID one of the following must be true:
You have DBA authority: any hash table ID can be returned.
The hash table is in the current schema.
The current schema has been granted one of the following schema privileges:
– DELETE, INSERT, SELECT or UPDATE privilege for the schema that
contains the hash table.
– DELETE, INSERT, SELECT or UPDATE privilege for the table that contains
the hash table.
– INSERT, SELECT or UPDATE privilege for all the columns that comprise
the hash table definition.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddhsh, uaddprm, uallhsh, udrphsh, uaddprv, uinfhsh, umaphsh, umodhsh
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
For information about using hash tables, see “Managing the Database Files,”
“Choosing an Access Method,” and “Tuning the Access Methods” in Unify
DataServer: Managing a Database.
238
ubndlnk
Bind a link name to a link ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndlnk( txid, tid, nlnk, lnknml, lcktype, lidl, statusl, status )
UTXID txid;
UTID tid;
int nlnk;
char *lnknml[];
int lcktype;
ULID *lidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of table the links are defined for or UNULLTID
nlnk
The number of link names in the lnknml list
lnknml
List of link names
lcktype
Lock type to place on the retrieved link IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
lidl
Returned list of nlnk link IDs
statusl
Returned list of status values, one for each lnknml/lidl entry
status
Returned status of the function
Locks and retrieves a link ID for each link name specified in lnknml. Locking a link
ID preserves the integrity of the name binding while the lock is held.
If the table value (tid) is specified as UNULLTID, all tables in the current schema is
assumed.
239
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the links you are binding to.
Therefore, there is no guarantee that the links you bound to will be the same or even
exist by the time you commit the transaction.
Security
To bind a link name to a link ID one of the following must be true:
You have DBA authority: any link ID can be returned.
Both tables are in the current schema.
Access to a schema with a privilege granted on one of the following:
– DELETE, INSERT, SELECT or UPDATE privilege for the schemas that
contain the linked tables.
– DELETE, INSERT, SELECT or UPDATE privilege for the tables that contain
columns comprising the link definition.
– INSERT, SELECT or UPDATE privilege for all the columns that comprise
the link definition.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
ualllnk, ubndlnk, uaddlnk, udrplnk, umodlnk, uinflnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
For information about using links, see “Choosing an Access Method in Unify
DataServer: Managing a Database.
240
ubndtbl
Bind a table name to a table ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndtbl( txid, aid, ntbl, tblnml, lcktype, tidl, statusl, status )
UTXID txid;
UAID aid;
int ntbl;
char* tblnml[];
int lcktype;
UTID *tidl;
USTATUS statusl[];
USTATUS *status;
Arguments
txid
Transaction ID
aid
The authorization ID of the schema containing the table IDs or
UNULLAID
Description
ntbl
Number of table names in the tblnml list
tblnml
List of table names
lcktype
Lock type to place on the retrieved table IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
tidl
Returned list of ntbl table IDs
statusl
Returned list of status values, one for each tblnml entry
status
Returned status of the function
Locks and retrieves a table ID for each table name specified in tblnml.
The authorization ID (aid) specifies the schema that contains the table. If aid is
specified as UNULLAID, the tables contained in the user’s current schema are used.
241
If a table name (specified in tblnml) contains a prefixed schema name, the schema
specified by aid is overridden.
Locking a table ID preserves the integrity of the name binding while the lock is held.
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the tables you are binding to.
Therefore, there is no guarantee that the tables you bound to will be the same or even
exist by the time you commit the transaction.
Security
To bind a table name to a table ID one of the following must be true:
DBA authority: any table ID can be returned.
The table is in the current schema.
Access to a schema with a privilege granted on one of the following:
– DELETE, INSERT, SELECT, or UPDATE privilege for the schema that
contains the table.
– DELETE, INSERT, SELECT, or UPDATE privilege for the table itself.
– INSERT, SELECT, or UPDATE privilege for a column in the table.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ualltbl, ubndcol, uinftbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
242
ubndusr
Bind a user name to a user ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndusr( txid, nuser, usernml, lcktype, uoidl, statusl, status )
UTXID txid;
int nuser;
char *usernml[];
int lcktype;
UOID *uoidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nuser
Number of user names in the usernml list
usernml
List of user names
lcktype
Lock type to place on the retrieved user IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
uoidl
Returned list of user IDs
statusl
Returned list of status values, one for each usernml/uoidl entry
status
Returned status of the function
Locks and retrieves a user ID for each user name specified in usernml. Locking a user
ID preserves the integrity of the name binding while the lock is held.
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the users you are binding to.
Therefore, there is no guarantee that the users you bound to will be the same or even
exist by the time you commit the transaction.
243
Security
To bind a user name to a user ID, one of the following conditions occur:
If you have DBA authority, you can specify any user name in usernml.
If you don’t have DBA authority, only your user ID can be returned.
To grant DBA authority, use the uaddprv function. To grant access to a database, use
the uaddusr function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddusr, uallusr, udrpusr, uinfusr
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
244
ubndvol
Bind a volume name to a volume ID
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ubndvol( txid, nvol, volnml, lcktype, vidl, statusl, status )
UTXID txid;
int nvol;
char* volnml[];
int lcktype;
UVID *vidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nvol
Number of volume names in the volnml list
volnml
List of volume names
lcktype
Lock type to place on the retrieved volume IDs. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
vidl
Returned list of volume IDs
statusl
Returned list of status values, one for each volnml/vidl entry
status
Returned status of the function
Locks and retrieves a volume ID for each volume name specified in volnml. Locking
a volume ID preserves the integrity of the name binding while the lock is held.
If you use a Type 0 transaction (which allows no locking) when performing
name-binding, no definition locks are placed on the volumes you are binding to.
Therefore, there is no guarantee that the volumes you bound to will be the same or
even exist by the time you commit the transaction.
245
Security
To bind a volume name to a volume ID, you must have DBA authority.
To grant DBA authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddvol, uallvol, udrpvol, uinfvol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database. Also see “Transaction Types” on
page 62 of this manual.
246
ucbgtx
Commit a transaction and begin a new transaction
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ucbgtx( prtx, txid, unlcktype, newtx, txopt, status )
UTXID prtx;
UTXID txid;
int unlcktype;
UTXID *newtx;
UTXOPT *txopt;
USTATUS *status;
Arguments
prtx
Must be set to UROOTTXID
txid
The transaction ID of the transaction that is being committed.
unlcktype
An unlock type for the committing transaction’s locks. The unlcktype
member options controls whether locks are released or inherited by
the new transaction, or scans are closed or inherited by the new
transaction. Options are:
URELEASE
Release all locks
UDEMOTE
Inherit all locks but demote exclusive locks to shared
locks
URETAIN
Inherit all locks without demoting exclusive locks to
shared locks
USCAN
Preserve scans and ordered accesses
When specifying USCAN, you must also specify either UDEMOTE
or URETAIN.
newtx
Returned unique transaction ID issued to the new transaction
txopt
Pointer to a UTXOPT structure that describes the new transaction’s
options
247
status
Description
Returned status of the function
Commits the current active transaction and begins another transaction against the
specified database.
To start a transaction with this function, the UTXOPT structure (pointed to by txopt)
must first be initialized. UTXOPT describes the new transaction.
For a complete description of the UTXOPT structure, see page 152.
Data definition (DDL) and data manipulation (DML) operations cannot use the same
transaction. Use separate transactions for DDL and DML operations.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
ubegtx, ucmttx, uinftx, uabttx, ualltx
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
248
uclritr
Clear a process interrupt
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uclritr( status )
USTATUS *status;
Arguments
status
Description
Allows processing to resume after an interrupt has been set by the usetitr function.
This function should not be called from a signal handler routine; instead, it should be
called from the main program.
Returned status of the function
All child processes are terminated at a point where the database is in a known
consistent state. Process interruption by any other mechanism may require database
recovery and is not recommended.
Before clearing an interrupt with the uclritr function, be sure that a database is open.
If the DB_NOEXIT option was specified when the current database was opened by
calling the uopndb function, all RHLI function calls and Embedded SQL/A
statements fail (with a status value of UEINTRPT) when an interrupt signal is
received by Unify DataServer until the signal is cleared with the uclritr function.
If the database is opened with Embedded SQL/A CONNECT or OPEN DATABASE
statements, DB_NOEXIT option is implicit.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
249
See Also
usetitr
signal(2) in your UNIX system manual
250
uclsdb
Close a database
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uclsdb( dbid, clsopts, status )
UDBID dbid;
UOPTS clsopts;
USTATUS *status;
Arguments
dbid
The database ID of the database you want to close
clsopts
The database close options. Valid options are:
DB_NORMAL Normal operation
DB_ABTTX
status
Description
Abort any active transactions
Returned status of the function
Closes a database opened by the uopndb function and deallocates all the dynamically
allocated memory obtained at the time of the open and during the database access.
If clsopts is specified as DB_NORMAL, this function fails if any transactions are still
active.
However, if the DB_ABTTX option is specified:
and transaction logging is on (the LOGTX configuration parameter is set to
TRUE), all active transactions are aborted before the database is closed.
However, if any transactions were started (by calling the ubegtx or ucbgtx
function) with the UCOMMIT option specified (see the UTXOPT structure
waitflg member), then only those transactions are committed.
and transaction logging is off (the LOGTX configuration variable is set to
FALSE), all active transactions are committed before the database is closed.
251
Before opening another database or ending an application program, any previously
opened database must be closed with a call to the uclsdb function.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uopndb
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
For information about transaction logging, see “Preventing Data Loss” in Unify
DataServer: Managing a Database.
252
uclsjrn
Close transaction journal file.
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uclsjrn (jrnfd, status)
int *jrnfd;
USTATUS *status;
Arguments
jrnfd
Pointer to a returned file descriptor for the opened journal file
status
Returned status of the function
Description
Closes a transaction journal file. All resources associated with processing a journal
file are released.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Security
No privileges required.
Example
See Appendix A.
See Also
ufchjrn, uopnjrn
253
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
For information about transaction logging and using a journal, see “Preventing Data
Loss” in Unify DataServer: Managing a Database.
254
ucmttx
Commit a transaction
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ucmttx( txid, status )
UTXID txid;
USTATUS *status;
Arguments
Description
txid
Transaction ID
status
Returned status of the function
Commits an active transaction. When a transaction is committed, any changes made
during the transaction that affected the database are permanently written to the
database.
Committing a transaction with this function releases all locks acquired during the
transaction and closes any currently active scans against the transaction.
To commit one transaction and begin another, use the ucbgtx function.
Warning
Once a transaction is committed, you cannot rollback any changes that were made to
the database during the transaction.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
255
Example
See Appendix A.
See Also
uabttx, ubegtx, ucbgtx, uinftx, ualltx
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
256
ucrypwd,
Encrypt a password
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ucrypwd( pwd, crywdp, status )
char * pwd;
char **crywdp;
USTATUS * status;
Arguments
Description
pwd
Password to encrypt.
crywdp
Returned pointer to the encrypted password.
The ucrypwd function accepts a password and encrypts it in a format that can be
used for the database user identity, as in, for example, the DBUSER configuration
variable or the dbname argument to the uopndb function.
If the function executes successfully, the memory used for storing the encrypted
password has been allocated using malloc. You must recover the storage space using
free.
If the function does not execute successfully, the memory used for the encrypted
password has not been allocated. In this case, do not call free.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
257
Example
/* encrypt password */
if (ucrypwd(inpass, &outpass, &status) != USUCCESS )
{
(void) printf(”ucrypwd error;”);
if ((errmsg = ufchmsg(status, &msgstat)) == NULL)
printf(”error %ld fetching message \n”, (long) msgstat);
else
printf(”error is ’%s’\n”, errmsg);
exit(1);
} /* endif */
/* put encrypted password to standard output */
(void) printf(”encrypted password is ’%s’\n”, outpass);
free(outpass);
outpass = NULL;
See Also
“Accessing a Remote Database” and “Using the uopndb dbname Argument” in
Unify/Net Guide.
258
udelrow
Delete a row
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udelrow( txid, tid, rid, status )
UTXID txid;
UTID tid;
URID rid;
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table that contains the row
rid
Row ID of the row to delete
status
Returned status of the function
Deletes the row requested (rid) from the table specified (tid).
A row deletion can fail for any of the following reasons:
The row is referenced as a parent in a link index
The lock on the row could not be obtained
The transaction log is full
Before you can delete a parent row of a link index, you must drop or change the value
of any related rows in the child table. For more information about links, see the
uaddlnk function.
Security
To delete a row from a table, one of the following conditions must be true:
You have DBA authority.
The table is in the current schema.
You have DELETE schema privilege on the table that contains the row.
259
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uinsrow, uupdrow
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
260
udrpath
Drop a schema
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpath( txid, nauth, authl, statusl, status )
UTXID txid;
int nauth;
UAID *authl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nauth
Number of authorization IDs (schemas) listed in authl
authl
List of authorization IDs associated with the schemas to be dropped
statusl
Returned list of status values, one for each authl list entry
status
Returned status of the function
Validates the authorization IDs listed in authl and drops the associated schemas from
the database.
Before dropping a schema, all tables and views within the schema must be dropped.
When you drop a schema, all privileges associated with the schema are also dropped.
You cannot drop a schema that is in use. For instance, you cannot drop the current
schema or any schema that has privileges being used.
If the schema that is dropped is the default schema for any user, the PUBLIC schema
becomes the new default schema for the user.
Function Reference
261
The PUBLIC schema cannot be dropped from a database. The PUBLIC schema is
removed when the database is removed.
Before dropping any schemas, the udrpath function first attempts to acquire an
exclusive lock on the specified schemas. If the schema is in use, the udrpath
function cannot acquire an exclusive lock on the schema and the drop operation fails.
Security
To drop a schema, you must have one of the following permissions:
DBA authority
SCHEMA authority and schema access permission
For information about granting DBA and SCHEMA authority, see uaddprv; for
information about granting schema access permission, see uaddprm.
To grant DBA and SCHEMA authority, use the uaddprv function. To grant schema
access permission, use the uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
262
Function Reference
udrpbt
Drop a B-tree
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpbt( txid, nbt, bidl, statusl, status )
UTXID txid;
int nbt;
UBTID bidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nbt
Number of B-tree IDs listed in bidl
bidl
List of B-tree IDs for B-trees to drop
statusl
Returned list of status values, one for each bidl list entry
status
Returned status of the function
Validates the B-tree IDs listed in bidl and drops the B-trees from the database.
Warning
For B-trees that are stored in separate files instead of the database file, when a B-tree
is dropped, Unify DataServer removes the external B-tree file (named btxxx.idx) and
creates a temporary file (named plxxxxxx) where xxx/xxxxxx are internal index
numbers. Do not remove this temporary file because database corruption can occur.
Security
To drop a B-tree, the schema containing the B-tree must be current, and you must
have one of the following permissions:
DBA authority
SCHEMA authority
Function Reference
263
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uaddbt
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using B-trees, see “Managing the Database Files” and
“Choosing an Access Method” in Unify DataServer: Managing a Database.
264
Function Reference
udrpcgp
Drop a column group
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpcgp( txid, ncgrp, dbcgrp, statusl, status )
UTXID txid;
int ncgrp;
DBCGRP *dbcgrp;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ncgrp
Number of column groups in the dbcgrp list
dbcgrp
List of DBCGRP structures, each describing a separate column group
statusl
Returned list of status values, one for each dbcgrp entry
status
Returned status of the function
Drops the column groups specified in the dbcgrp list from the database.
Also, this function can be used to modify column group options for a column group.
If all options for a column group are dropped, then the column group is dropped from
the database table.
Each DBCGRP structure in the dbcgrp list contains column group information.
For a description of the DBCGRP structure, see page 83.
Before dropping a column group, the udrpcgp function first acquires an exclusive
lock on each column member of the column group and then drops the column group
specification, leaving the underlying columns unaffected. If any member column is in
use, the exclusive lock attempt fails, and the drop column group operation also fails.
Function Reference
265
Security
To drop a column group, the schema containing the column group definition must be
current, and, you must have one of the following permissions:
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the udrpcgp function to drop a column group described in the
dbcgrp argument.
if (udrpcgp(txid, ncgrp, dbcgrp, statusl, &status) != USUCCESS)
{
fprintf(stderr,
”Couldn’t drop column groups: status = %ld\n”,status);
}
See Also
uaddcgp
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
266
Function Reference
udrpcnm
Drop a column name (or synonym)
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpcnm( txid, ncol, dbcolnm, statusl, status )
UTXID txid;
int ncol;
DBCOLNM *dbcolnm;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ncol
Number of column name descriptors in dbcolnm
dbcolnm
List of DBCOLNM structures, each containing a separate column
name (or synonym) to drop
statusl
Returned list of status values, one for each dbcolnm entry
status
Returned status of the function
Validates the column synonyms listed in dbcolnm and drops the column names from
the database.
Once a column name is dropped, any future reference to the dropped column name
fails.
Each DBCOLNM structure in the dbcolnm list contains column name information.
Column group synonyms can also be dropped by specifying the column group ID (in
place of the column ID) in the dbcolnm list.
For a description of the DBCOLNM structure, see page 85.
Function Reference
267
Security
To drop a column name (or synonym), the schema containing the column must be
current and you must have one of the following privileges:
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddcnm, ufchcnm
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
268
Function Reference
udrphsh
Drop a hash table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrphsh( txid, nhsh, hidl, statusl, status )
UTXID txid;
int nhsh;
UHID *hidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nhsh
Number of hash tables in the hidl list
hidl
List of hash table IDs of the hash tables to drop
statusl
Returned list of status values, one for each hidl entry
status
Returned status of the function
Validates the hash table IDs listed in hidl and drops the associated hash tables from
the database.
Before dropping a hash table, this function attempts to acquire an exclusive lock on
the hash table. If the hash table is in use, the udrphsh function cannot acquire an
exclusive lock on the hash table and the drop operation fails.
Adding or dropping a hash table on a column can have a significant effect on retrieval
times of unordered accesses.
Security
To drop a hash table, the schema containing the hash table definition must be current,
and, you must have one of the following permissions:
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Function Reference
269
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the udrphsh function to drop a hash table index.
if ( udrphsh(txid, 1, &hid, statusl, &status) != USUCCESS )
printf(”Failure dropping a hash table: status = %ld\n”,status);
See Also
uaddhsh
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using hash tables, see “Managing the Database Files,”
“Choosing an Access Method,” and “Tuning the Access Methods” in Unify
DataServer: Managing a Database.
270
Function Reference
udrplnk
Drop a link
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrplnk( txid, nlnks, lidl, statusl, status )
UTXID txid;
int nlnks;
ULID *lidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nlnks
Number of link IDs in the lidl list
lidl
List of link IDs to drop
statusl
Returned list of status values, one for each hidl entry
status
Returned status of the function
Validates the link IDs listed in lidl and drops the associated links for the parent and
child tables/columns.
Once dropped, a link no longer enforces referential integrity across the two tables.
Before you can delete a parent row, you must first drop or change the value of any
related rows in the child table. Rows are related through links. For more information
about links, see the uaddlnk function. To delete a row, use the udelrow function.
When a link is dropped, Unify DataServer places an exclusive lock on both the linked
parent and the child columns.
Function Reference
271
Security
To drop a link, the current schema must contain one or both of the linked tables and
you must have one of the following permissions:
DBA authority
Schema access permission and SCHEMA authority on the schemas that contain
the tables that comprise the link definition
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function. To grant schema access permission, use
the uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This function uses the udrplnk function to drop a link index on a table.
if ( udrplnk(txid, 1, &lid, statusl, &status) != USUCCESS )
printf(”Error dropping a link: status = %ld\n”,status);
See Also
uaddlnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
272
Function Reference
udrpprf
Drop a volume preference for a table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpprf( txid, tid, nvol, vidl, statusl, status )
UTXID txid;
UTID tid;
int nvol;
UVID *vidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of table to drop volume preferences for
nvol
Number of volume IDs in the vidl list
vidl
List of volume IDs describing the volume preferences to drop
statusl
Returned list of status values, one for each vidl list entry
status
Returned status of the function
Validates the volume IDs listed in vidl for table tid, and drops the associated volume
preferences from the database.
The table ID and volume preferences listed must be valid existing entries in the
database before the call to the udrpprf function.
Security
Function Reference
To drop a volume preference for a table, the schema containing the table must be
current, and, you must have DBA authority.
273
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the udrpprf function to drop a volume preference from a table.
/* Drop the volume preferences */
if (udrpprf(txid, tid, nvol, vidl, statusl, &status) != USUCCESS)
{
fprintf(stderr, ”Unable to drop volume preferences: %ld\n”,
status);
for ( i = 0; i < nvol; i++ )
printf(stderr, ”Entry %d volume: %ld status: %ld\n”,
i, vidl[i], statusl[i]);
exit(1);
}
See Also
uadddb, uaddprf, uaddtbl, uaddvol, udrpvol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
274
Function Reference
udrpprm
Revoke schema access permission
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpprm( txid, userid, nauth, authl, statusl, status )
UTXID txid;
UOID userid;
int nauth;
UAID authl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
userid
User ID of user from whom to drop schema access permission
nauth
Number of authorization IDs listed in authl
authl
List of authorization IDs for which schema access permission is
dropped
statusl
Returned list of status values, one for each authl list entry
status
Returned status of the function
Revokes schema access permission from a user for the authorization IDs (schemas)
listed in authl. Schema access permission allows a user to access a specified schema.
When a user is first added to the database (by calling the uaddusr function), the user
is granted schema access permission to the PUBLIC schema.
To access other schemas in the database, however, a user must be granted schema
access permission for each schema the user needs to access.
Function Reference
275
If the schema for which schema access permission is being revoked is a user’s default
schema, that user’s default schema is reset to the PUBLIC schema.
Security
To revoke schema access permission from a user, you must have DBA authority or
both of the following must be true:
The schema is current.
You have SCHEMA authority.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function. To grant schema access permission, use
the uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the udrpprm function to revoke schema access permission from a
user.
/* define required parameters */
UTXID txid;
UOID
userid;
UAID
athl;
USTATUS statusl;
STATUS * status;
int
nauth;
/* Revoke schema access permission from a user */
if ( udrpprm(txid, userid, nauth, authl, statusl, &status) != USUCCESS )
{
fprintf(stderr, ”Unable to drop privileges: %ld\n”, status);
exit(1);
}
See Also
uadddb, uaddprm, uaddath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
276
Function Reference
udrpprv
Revoke user authority or schema privileges
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpprv( txid, nrqstds, rqstdsl, statusl, status )
UTXID txid;
int nrqstds;
URVKDS rqstdsl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nrqstds
Number of privileges described in the rqstdsl list
rqstdsl
List of URVKDS structures, each describing a separate privilege to
revoke
statusl
Returned list of status values, one for each rqstdsl entry
status
Returned status of the function
Revokes one or more of the following permissions:
DBA authority
SCHEMA authority
Schema privileges to a schema
Schema privileges to a table
Schema privileges to a column
DBA authority allows a user to access and modify any object in the database.
SCHEMA authority, however, allows a user to create and drop schemas only. Both of
these privileges are granted to users only.
Function Reference
277
Schema privileges are privileges granted to a schema. The privileges specify access
to another schema or a table or column within the schema.
For each set of privileges you want to revoke with this function, you must first
describe the privileges by initializing the URVKDS structure. For a description of the
URVKDS structure, see page 142.
To grant user or schema privileges, use the uaddprv function.
Security
To revoke DBA or SCHEMA authority, you must have DBA authority.
To revoke schema privileges, you must make the schema that granted the privileges
the current schema.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the udrpprv function to revoke schema privileges granted to the
company table.
/* define required parameters */
UTXID txid;
UOID
userid;
UAID
uathl;
USTATUS statusl;
STATUS * status;
int
nauth;
/* Retrieve the authorization ID (aid) for schema ”admin” */
...
/* Retrieve the table id (tid) for the company table */
...
/* Initialize URVKDS structure elements */
rqstdsl.aid = aid;
rqstdsl.rvkcaps = UTSEL;
rqstdsl.obj.objknd = UTBLKND;
rqstdsl.obj.objid = tidl.tid;
/* Revoke from schema ”admin” the privilege to perform SELECT
operations on table ”company” */
if (udrpprv(txid, 1, &rqstdsl, statusl, &status) != USUCCESS )
{
fprintf(stderr,
”Unable to revoke SELECT privilege: status = %ld\n”,
status);
}
278
Function Reference
See Also
uaddprv, uaddath, uaddprm, uaddusr, udrpath, udrpprm, udrpusr
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
Function Reference
279
udrptbl
Drop a table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrptbl( txid, ntbl, tidl, statusl, status )
UTXID txid;
int ntbl;
UTID *tidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ntbl
Number of table IDs listed in the tidl list
tidl
List of table IDs to drop
statusl
Returned list of status values, one for each tidl list entry
status
Returned status of the function
Validates the table IDs listed in tidl and drops the associated tables from the database.
When a table is dropped, all privileges, B-trees, hash tables, and links defined for the
table are also dropped.
Before dropping a table, you must remove all Data Integrity Subsystem (DIS)
definitions for the table. For information about editing a DIS file, see Unify
DataServer: Managing a Database
When dropping a table, Unify DataServer acquires an exclusive lock on the specified
tables, then drops them. If the table is in use, this function cannot acquire an
exclusive lock on the table.
280
Function Reference
Security
To drop a table, the schema containing the table must be current, and you must have
one of the following privileges:
DBA authority
SCHEMA authority
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the udrptbl function to drop a table from the database.
ntbl = 3;
tidl[0] = $qualified_vendors.$;
tidl[1] = $vendor_info.$;
tidl[2] = $vendor_transactions.$;
/* Drop the tables */
if ( udrptbl(txid, ntbl, tidl, statusl, &status) != USUCCESS )
{
fprintf(stderr, ”Unable to drop table: %ld\n”, status);
for ( j = 0; j < ntbl; ++j )
printf(stderr, ”Table %ld status: %ld\n”,tidl[j], statusl[j]);
exit(1);
}
See Also
uaddtbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
Function Reference
281
udrptnm
Drop a table name (or synonym)
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrptnm( txid, ntbl, dbtblnm, statusl, status )
UTXID txid;
int ntbl;
DBTBLNM *dbtblnm;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ntbl
Number of table name descriptors in dbtblnm list
dbtblnm
List of DBTBLNM structures, each containing a separate table name
to drop
statusl
Returned list of status values, one for each dbtblnm entry
status
Returned status of the function
Drops the names (or synonyms) for a table. After dropping a table name, any future
references to the dropped table name fail.
If all names for a table are dropped, the table can be referenced by its table ID only.
Each DBTBLNM structure in the dbauth list contains information about each table
name. For a description of the DBTBLNM structure, see page 99.
Security
To drop a table name, the schema containing the table must be current, and, you must
have one of the following privileges:
DBA authority
SCHEMA authority
282
Function Reference
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function. To grant schema access permission, use
the uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the udrptnm function to drop a table synonym.
/* Initialize the DBTBLNM structure */
dbtblnm.tblnm = ”partsdata.”;
dbtblnm.tid = $parts.$;
if (udrptnm(txid, 1, &dbtblnm, statusl, &status) != USUCCESS)
printf(”Error dropping a table name: status = %ld\n”,status);
See Also
uaddtnm
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
Function Reference
283
udrpusr
Drop a user
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpusr( txid, nuser, useridl, statusl, status )
UTXID txid;
int nuser;
UOID *useridl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nuser
Number of user IDs listed in the useridl list
useridl
List of user IDs to drop
statusl
Returned list of status values, one for each useridl list entry
status
Returned status of the function
Validates the user IDs listed in useridl and drops the associated users from the
database.
You cannot drop yourself or any other users currently accessing the database.
Security
To drop a user from the database, you must have DBA authority.
To grant DBA authority, use the uaddprv function.
Status
Values
284
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Function Reference
Example
This example calls the udrpusr function to remove a user from the database.
/* define required parameters */
UTXID txid;
int
nuser, i;
USTATUS statusl;
USTATUS status;
UOID * useridl;
/* Initialize the useridl structure */
...
useridl[0] = usrinf[0].uoid; /* Returned from uinfusr() */
useridl[1] = usrinf[1].uoid;
/* Drop the users */
nuser = 2;
if ( udrpusr(txid, nuser, useridl, statusl, &status) != USUCCESS)
{
fprintf(stderr, ”Unable to drop users: %ld\n”, status);
for ( i = 0; i < nuser; ++i )
printf(stderr, ”Entry %d user %s status: %ld\n”,
i, dbuser[i].usernm, statusl[i]);
exit(1);
}
See Also
uaddusr, uaddath, uadddb, uaddprm, uaddusr, udrpath, udrpprm, uinfusr
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
Function Reference
285
udrpvol
Drop a volume
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int udrpvol( txid, nvol, vidl, statusl, status )
UTXID txid;
int nvol;
UVID *vidl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nvol
Number of volume IDs listed in the vidl list
vidl
List of volume IDs to drop
statusl
Returned list of status values, one for each vidl list entry
status
Returned status of the function
Validates the volumes listed in vidl and drops the associated volumes from the
database.
The root volume cannot be dropped, and any volume which has active storage
allocated cannot be dropped. Use the uinfvol function to determine if the volume has
any active storage.
Volumes designated as a preference volume for a table cannot be dropped. To drop a
preference volume, you must first drop all of the preferences by calling the udrpprf
function.
Warning
When a volume that is defined as a file is dropped, Unify DataServer removes the
volume file and creates a temporary file (named plxxxxxx, where xxxxxx is an internal
index number). Do not remove this temporary file; database corruption will occur.
286
Function Reference
Security
To drop a volume definition from a database, you must have DBA authority. To grant
DBA authority, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the udrpvol function to drop a volume from the database.
/* Initialize volume specifications */
nvol = 1;
/* number of volumes to drop */
vidl[0] = 2;
/* drop volume #2 */
...
/* Drop the volume */
if (udrpvol(txid, nvol, vidl, statusl, &status) != USUCCESS)
{
fprintf(stderr, ”Unable to drop volumes: %ld\n”, status);
for ( i = 0; i < nvol; ++i )
printf(”Entry %d Volume ID %ld status: %ld\n”,i, vidl[i], statusl[i]);
uexit(1);
}
See Also
uadddb, uaddvol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
Function Reference
287
uendord
End an ordered access
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uendord (oaccid, status)
UOACCID oaccid;
USTATUS *status;
Arguments
Description
oaccid
Ordered access ID of the ordered access to end, as returned from the
ubegord function
status
Returned status of the function
Ends (or deactivates) an ordered access (specified by oaccid) and releases temporary
memory allocated for the ordered access.
If a transaction that contains active ordered accesses is ended (with the uabttx,
ucbgtx or ucmttx functions), the active ordered accesses are automatically ended.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ubegord, ufchord, uposord, uskrord
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
288
uendscn
End a scan
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uendscn( scnid, status )
int scnid;
USTATUS *status;
Arguments
Description
scnid
Scan ID of the scan to end, as returned from the ubegscn function
status
Returned status of the function
Ends (or deactivates) a scan (specified by scnid) and releases temporary memory
used for the scan.
If a transaction that contains active scans is ended (by calling the uabttx, ucbgtx or
ucmttx function), the active scans are ended.
To deallocate a scan information structure, use the ufrescn function.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
289
See Also
uabttx, ualcscn, ubegscn, ucbgtx, ucmttx, ufchscn, ufrescn
For information about scanning, see page 64.
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
290
uexit
Terminate a process
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
void uexit( exit_code )
int exit_code;
Arguments
exit_code
Description
Terminates a process with the following consequences:
An integer exit code. This value is passed to the exit operating
system function.
All active read-only (type 0) transactions in the calling process are committed.
All other active update (type 1 or 2) transactions in the calling process are
rolled back.
The open database in the calling process is closed.
The exit operating system function is called.
Failure to use this function to terminate a process will result in the above activities
being performed at a later time. This function, as well as the exit operating system
function, does not return control to the calling procedure.
Security
No privileges required.
Example
See Appendix A.
See Also
fork(2), wait(2), and exit(3) in your UNIX operating system manual
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
291
uextint
Convert column values from external format to internal format
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uextint( txid, tid, unipext, unipcoll, statusl, status )
UTXID txid;
UTID tid;
UNIPEXT *unipext;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table columns contained in UNIPEXT
unipext
A pointer to a UNIPEXT structure that contains column values in
external-format to be converted into internal format
unipcoll
A pointer to a UNIPCOLL structure that will contain the converted
values
statusl
Returned status value for each column listed in the UNIPCOLL
column list cidl
status
Returned status of the function
Converts a list of data values from an external (display) format to an internal database
format.
This function must be used before inserting or updating data into columns of data
type U_DATE, U_HDATE and U_TIME .
To read and display date and time data in a Unify DataServer database, you must first
convert the data into external format by calling the uintext function.
292
For each column in the external format list described by the UNIPEXT structure
(pointed to by unipext), each external column data value is converted to internal
format and stored in a UNIPCOLL structure (pointed to by unipcoll).
The entries in the unipext list must contain the same number of entries as in the
unipcoll list.
For a description of the UNIPEXT and UNIPCOLL structures, see pages 140 and 131.
All columns specified in each UNIPEXT structure must belong to the specified table
ID (tid).
Any valopts member contained in the UNIPCOLL structure that contains a value of
UIGNORE is by-passed and the entry for statusl is set to UENOWRK.
All column values must be converted to internal format before being inserted into the
database. See the uinsrow or uupdrow function for more information.
If the destination column structure value pointer is null, storage space is allocated by
Unify DataServer. This space must later be deallocated by calling the system
subroutine free function. If the value pointer is not null, it is assumed that enough
space exists for the converted value.
A value that cannot be converted is rejected. Check each status value in statusl to
determine which values could not be converted.
Security
To convert column values, you must have access to the column that you want to
convert.
You can always access all columns in the tables in the current schema. Additionally,
you can access tables (or just columns within a table) in other schemas if your current
schema has been granted schema privileges to the other schema. If you have DBA
authority, you can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
293
Example
See Appendix A.
See Also
uintext, uinsrow, ufchrow, uupdrow, udelrow
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
294
ufchath
Change the current schema
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ufchath( txid, authid, status )
UTXID txid;
UAID authid;
USTATUS *status;
Arguments
Description
txid
Transaction ID
authid
Authorization ID (for a schema) obtained from a previous call to the
ubndath function
status
Returned status of the function
Changes a user’s current schema to the schema specified by authid.
The current schema is the schema available to a user. Only one schema can be current
at any given time. If the user has adequate access permission, the user can make
another schema the current schema.
Security
To change a current schema, you must have one of the following permissions.
DBA authority
Schema access permission for the schema you are changing to
To grant DBA authority, use the uaddprv function. To grant schema access
permission, use the uaddprm function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
295
Example
This example calls the ufchath function to make the PUBLIC schema the current
schema.
/* define required parameters */
UTXID
txid;
USTATUS * status;
/* open the database and begin a transaction */
...
/* make the PUBLIC schema the current schema */
if ( ufchath(txid, $PUBLIC..$, &status) != USUCCESS)
printf(”Could not set the current schema: status = %ld\n”, status);
See Appendix A for more examples.
See Also
uaddath, uallath, ubndath, udrpath, uinfath, umapath, umodath, unumath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
296
ufchcnm
Fetch column names (or synonyms)
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ufchcnm( txid, cid, ncnames, colnml, status )
UTXID txid;
UCID cid;
int *ncnames;
char ***colnml;
USTATUS *status;
Arguments
Description
txid
Transaction ID
cid
Column ID of the column to fetch the name and synonyms from
ncnames
Number of column names returned into the colnml list
colnml
Returned list of column names
status
Returned status of the function
Validates the given column ID and retrieves all names assigned to the column.
Each column can have one or more names associated with the column. See uaddcnm
for more information about adding column names (or synonyms).
All names contained in colnml are zero-byte terminated strings. Also, colnml should
be accessed by specifying an argument like argv[ ][ ].
Unify DataServer allocates storage for the returned list of column names (colnml) by
calling the malloc function. After you have retrieved the column names, you must
recover this storage space by calling the free function.
297
If the number of column names (ncnames) returned is zero (0), the malloc function
was not performed by Unify DataServer and you do not need to call the free function.
Security
Column names are returned only for columns in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ufchcnm function to retrieve all column names associated
with the co_id column in the company table.
/* define required parameters */
char ** colnml;
int * ncnames;
TXID txid;
USTATUS status;
...
/* find all the names the ”co_id” column is known by */
if (ufchcnm(txid, $co_id$, &ncnames, &colnml, &status) != USUCCESS)
{
printf(”Error fetching column names: status = %ld\n”,status);
exit( 3 );
}
...
/* print the column names */
for( idx = 0; idx < ncnames; ++idx )
printf(”%s\n”, colnml[idx]);
...
/* free the space used by colnm */
if ( ncnames > 0 )
free((char *)colnml);
See Also
uaddtnm, udrptnm, uaddcnm, udrpcnm, uaddtbl
298
free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
299
ufchjrn
Retrieve journal information structure
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ufchjrn (jrnfd, jrninfo, status)
int jrnfd;
UJRNINF *jrninfo;
USTATUS *status;
Arguments
Description
jrnfd
The file descriptor of the opened journal file
jrninfo
A pointer to a UJRNINF structure that contains the returned journal
information on the next update operation contained in the journal; for
a complete description of the UJRNINF structure, see page 127.
status
Returned status of the function
Retrieves the journal information structure for the next update operation contained in
the journal.
For delete and update operations, the before image of the row is returned in a
UNIPCOL structure. For add and update operations, an after image is returned. For a
description of the UNIPCOL structure, see page 131.
The UNIPCOL structures for the before and after row images are dynamically
allocated by the ufchjrn function. These structures should be freed using the C
function, free, to prevent running out of memory.
Data for variable length data type fields is not returned by the ufchjrn function. All
variable length data is skipped.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
300
Security
To process a journal file, one of the following conditions must be true:
You have DBA authority.
You have schema privilege on all the tables and columns that are referenced in
the journal.
Example
See Appendix A.
See Also
uopnjrn, uclsjrn
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management and using the transaction journal, see
“Managing Transactions and Locks”and “Preventing Data Loss” in Unify
DataServer: Managing a Database.
301
ufchlnk
Fetch the parent row through a link index
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ufchlnk( txid, crid, lid, lcktype, rid, unipcoll, statusl, status )
UTXID txid;
URID crid;
ULID lid;
int lcktype;
URID *rid;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
302
txid
Transaction ID
crid
Row ID of a child row of a link
lid
Link ID of the table to search
lcktype
Lock type to place on the retrieved row ID. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
rid
Returned as the row ID of the parent row retrieved
unipcoll
A pointer to a UNIPCOLL structure specifying the column retrieval
list that corresponds to the parent column
statusl
Returned list of status values, one for each column described in
unipcoll
status
Returned status of the function
Description
Retrieves columns of the parent row from the implied table through a link access
method. All columns specified in the UNIPCOLL structure must belong to the parent
table.
Before fetching the parent row, you must obtain the child row ID and specify this
value in crid.
The UNIPCOLL structure describes the data being retrieved from the database. This
structure contains several lists which describe both the column and the column’s
value. For a description of the UNIPCOLL structure, see page 131.
Warning
Column values are verified and valopts is set for all fetch (or retrieval)
operations unless UIGNORE is specified. This is true even if the application has
set valopts explicitly.
Security
A row can be returned for linked tables that you have access to only.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
303
Example
This example uses the ufchlnk function to fetch a row.
#define NCOL
3
/* define required parameters */
UTXID
txid;
URID
crid;
URID
rid;
USTATUS statusl[NCOL];
USTATUS status;
UNIPCOLL unipcoll;
...
/* retrieve crid */
...
/* retrieve the row */
if ( ufchlnk(txid, crid, $ULNK:LIDparts_used$, USLCK, &rid,
&unipcoll, statusl, &status) != USUCCESS)
{
printf(”Cannot fetch parent row: status=%ld\n”, status);
uexit(2);
}
See Also
uaddlnk, ufchtbl, ufchrow, upkfrow
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
304
ufchmsg
Retrieve the message text corresponding to a status error code
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
char *ufchmsg( errnum, status )
USTATUS errnum;
USTATUS *status;
Arguments
Description
errnum
Status error code of the message to fetch
status
Returned status of the function
Fetches the error message text for the status error code specified by errnum. The
status error code is usually the status code returned by a previous RHLI function call.
Most RHLI functions return a status code into the status argument. This status code
reflects the condition of the function operation. A UENORM status code indicates the
function operated successfully; all other status codes indicate an error condition.
For a listing of status codes and associated mnemonics, see the rhlierr.h header file.
For a complete description of error messages, see Unify DataServer: Error Messages.
If the ufchmsg function is unable to fetch a message for the error code provided, a
status code describing the error is returned into the status argument.
Security
No privileges required.
Return
Values
Returns a pointer to the error message text. If this function cannot retrieve the error
message text, the value (char*) 0 is returned.
305
Example
See Appendix A.
See Also
uinimsg, ulogmsg
For information about error handling, see page 51.
306
ufchord
Fetch a row from within an ordered access
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ufchord (txid, oaccid, dir, lcktype, ridp, unipcoll, statusl, status)
UTXID txid;
UOACCID oaccid;
int dir;
int lcktype;
URID *ridp;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
txid
Transaction ID
oaccid
An ordered access ID as returned from the ubegord function
dir
Direction to fetch the row, relative to the current position. Options
are:
lcktype
USAME
Get same (current) row
UFIRST
Get first row
UNEXT
Get next row
UPREV
Get previous row
ULAST
Get last row
Lock type to place on retrieved row. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
307
Description
ridp
Returned as the row ID of the retrieved row
unipcoll
A pointer to a UNIPCOLL structure specifying the column retrieval
list
statusl
Returned list of status values, one for each column value returned
into the unipcoll list
status
Returned status of the function
Retrieves columns of the row indicated by dir from the specified ordered access. The
order in which the rows are retrieved is specified by the column order list
(UOACOLS) for the order access (initiated by the ubegord function).
Warning
Column values are verified and valopts is set for all fetch (or retrieval)
operations unless UIGNORE is specified. This is true even if the application has
set valopts explicitly.
The UNIPCOLL structure describes the data being retrieved from the database. This
structure contains several lists which describe both the column and the column’s
value.
If the function returns USUCCESS, the row ID and requested columns are returned
with a lock no lower than the requested lock. The current position within the ordered
access is set to the retrieved row.
The UNEXT option can be specified (instead of UFIRST) immediately after the
ubegord function call to fetch the first row of the table.
The txid specified to the ufchord function may differ from the txid used by the
ubegord function. If a different txid is used for the ufchord function, then the
transaction can be committed to release locks on the current record without affecting
the ordered access.
The direction parameter is the order specified by the UOACOLS structure, not the
physical order of the underlying access method. Therefore, for an ascending order,
UFIRST refers to the row whose columns have the lowest value and ULAST to the
row whose columns have the highest value.
For a descending order, UFIRST refers to the row whose columns have the highest
value and ULAST to the row whose columns have the lowest value.
308
Columns specified in UNIPCOLL must belong to the table associated with the
ordered access.
If the function fails due to the inability to obtain the specified row lock, the current
position is set to the fetched row.
Additional Help
See “Function Structures,” for a description of the structure UNIPCOLL.
Security
To retrieve the column values for the row, one of the following conditions must be
true:
You have DBA authority.
The target table is in the current schema.
You have SELECT schema privilege on the target table.
You have SELECT schema privilege on all columns to be retrieved.
To make a schema current, see the ufchath function; for information about granting
DBA authority and schema privileges, see the uaddprv function.
UEDBCLS
Database is closed
UEBDATYP
Bad access type (not an ordered access ID)
UEBDSCN
Invalid ordered access ID
UENODIR
Invalid direction specification
Example
See Appendix A.
See Also
ubegord, uendord, uposord, uskrord
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
309
ufchrow
Fetch a row
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ufchrow( txid, tid, lcktype, rid, unipcoll, statusl, status )
UTXID txid;
UTID tid;
int lcktype;
URID rid;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table to fetch from
lcktype
Lock type to place on the retrieved row ID. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
rid
Row ID of the row to retrieve
unipcoll
A pointer to a UNIPCOLL structure specifying the column retrieval
list
statusl
Returned list of status values, one for each column specified in the
unipcoll column list
status
Returned status of the function
Given valid table and row IDs, this function retrieves specified columns of the row.
Columns specified in UNIPCOLL must belong to the specified table ID.
Warning
Column values are verified and valopts is set for all fetch (or retrieval)
operations unless UIGNORE is specified. This is true even if the application has
set valopts explicitly.
310
The UNIPCOLL structure describes the data retrieved from the database. This
structure contains several lists describing the column and its value. For a description
of the UNIPCOLL structure, see page 131.
Security
A row can only be returned for tables you have access to. You can always access all
tables in the current schema. Additionally, you can access tables (or just columns
within a table) in other schemas if your current schema has been granted schema
privileges to the other schema. If you have DBA authority, you can access any table in
the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ufchrow function to fetch a row from the company table.
#define NCOL 3
/* define required parameters */
UTXID
txid;
URID
rid;
/* Row ID */
USTATUS
status;
/* function status */
USTATUS
statusl[NCOL]; /* status value list */
UNIPCOLL
unipcoll;
...
/* Retrieve rowid of row to be fetched */
...
/* Fetch the row */
if (ufchrow(txid, $company.$, USLCK, rid, &unipcoll, statusl,
&status) != USUCCESS )
{
printf(”data retrieval failed: %ld\n”, status);
uexit(101);
}
See Appendix A for more examples.
See Also
upkfrow, ufchlnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
311
ufchscn
Retrieve the next row from a scan
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ufchscn( scanid, ridp, dbvall, prevlck, statusl, status )
int scanid;
URID *ridp;
UDBVAL *dbvall;
int *prevlck;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
scanid
A scan ID as returned from the ubegscn function
ridp
Returned as a row ID of the retrieved row
dbvall
Pointer to a list of UDBVAL structures, each specifying a different
column retrieval buffer
prevlck
Returned as the previous lock status of the retrieved row
statusl
Returned list of status values, one for each column value returned
into the dbvall list
status
Returned status of the function
Retrieves the next row along the specified scan. The order in which the rows are
retrieved is specified by the sort criteria for the scan.
Warning
Column values are verified and valopts is set for all fetch (or retrieval)
operations unless UIGNORE is specified. This is true even if the application has
set valopts explicitly.
312
A list of UDBVAL structures should be allocated to correspond to the elements of the
previously specified projection list. The order of the columns returned is the same as
that of the projection list. The UDBVAL structure can be allocated by the application
or through the uinfscn function. For a description of UDBVAL, found in the structure
UNIPCOLL, see page 131.
If the function returns USUCCESS, the row ID and requested columns are returned
with a lock no lower than the requested lock. The prevlck member is set to the lock
previously held on the row by the calling transaction. If the function returns
UFAILURE, the rowid and column values are undefined. If a row is passed but the
lock could not be granted (STATUS = UELMOUT) then prevlck is set to the
conflicting lock type.
If the application did not call uinsprj (the number of projected columns is zero) then
dbvall and statusl may be null.
When inserting into or updating columns of type U_STR (string), Unify DataServer
adds trailing blanks to values less than the total size defined for the column.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ualcscn, uendscn, ubegscn, ufrescn, uinfscn, ufchscn, uinsprj, uinssrt, uinsor
For information about scanning, see page 64.
313
ufchtbl
Fetch a row sequentially
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ufchtbl( txid, tid, dir, lcktype, rid, unipcoll, statusl, status )
UTXID tx;
UTID tid;
int dir;
int lcktype;
URID *rid;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
txid
Transaction ID
tid
Table ID of the table to fetch from
dir
Direction to fetch the row, relative to the current position. Options
are:
lcktype
rid
314
UFIRST
Get first row
UNEXT
Get next row
UPREV
Get previous row
ULAST
Get last row
Lock type to place on the retrieved row ID. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
The row ID. Used for UNEXT and UPREV operations (specified by
dir), the next or previous row is relative to the row ID passed in. For
all operations the row ID of the row retrieved is returned.
Description
unipcoll
A pointer to a UNIPCOLL structure specifying the column retrieval
list
statusl
Returned list of status values, one for each column specified in the
unipcoll column list
status
Returned status of the function
Retrieves columns of the indicated row from the specified table. Columns specified
in UNIPCOLL must belong to the specified table ID.
The UFIRST option must be used when retrieving the first row of the table. This sets
the current position for subsequent retrievals.
Warning
Column values are verified and valopts is set for all fetch (or retrieval)
operations unless UIGNORE is specified. This is true even if the application has
set valopts explicitly.
The UNIPCOLL structure describes the data retrieved from the database. This
structure contains several lists which describe both the column and the column’s
value. For a description of the UNIPCOLL structure, see page 131.
Security
A row can be returned only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant DBA authority and
schema privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
315
Example
This example uses the ufchtbl function to fetch a row from the company table.
#define NCOL 2
/* define required parameters */
int
dir;
/* fetch direction */
UTXID
txid;
URID
rid;
/* Row ID */
USTATUS
status;
/* function status */
USTATUS
statusl[NCOL]; /* status value list */
UNIPCOLL
unipcoll;
...
/* Retrieve rowid of row to be fetched (rid) */
...
/* Fetch the row */
dir = UFIRST;
if (ufchtbl(txid, $company.$, dir, USLCK, &rid, &unipcoll, statusl,
&status) != USUCCESS)
{
printf(”data retrieval failed: %ld\n”, status);
uexit(101);
}
See Also
ufchlnk, ufchrow, upkfrow
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
316
ufchtnm
Fetch table names (or synonyms)
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ufchtnm( txid, tid, ntnames, tblnml, status )
UTXID txid;
UTID tid;
int *ntnames;
char ***tblnml;
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table to fetch names from
ntnames
Number of table names returned to tblnml
tblnml
Returned list of pointers to table names
status
Returned status of the function
Validates the table (specified by tid) and retrieves all names assigned to the table.
Each table can have one or more names associated with the table. See the uaddtnm
function for more information about adding table names (or synonyms).
All table names returned into tblnml are zero byte-terminated strings.
Unify DataServer allocates storage for the returned list of table names (tblnml) by
calling the malloc function. After you have retrieved the table name, you must
recover this storage space by calling the free function.
If the number of table names (ntnames) returned is zero (0), the malloc function was
not called by Unify DataServer and you do not need to call the free function.
317
Security
Table names are returned only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ufchtnm function to fetch and print all names that the
company table is known by.
#define NCOL 2
/* define required parameters */
int
* ntnames;
char
** tblnml;
UTXID
txid;
USTATUS
status;
/* function status */
USTATUS
statusl[NCOL]; /* status value list */
...
}
/* find all the names the ”company” table is known by */
if (ufchtnm(txid, $company$, &ntnames, &tblnml, &status) != USUCCESS)
{
fprintf(stderr,”Error fetching table names: status = %ld\n”,status);
uexit(99);
}
for( idx = 0; idx < ntnames; ++idx )
printf(”%s\n”, tblnml[idx]);
/* free the space used by tblnml */
if ( ntnames > 0 )
free((char *)tblnml);
See Also
uaddcnm, uaddtnm, udrpcnm, udrptnm, ufchcnm
free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
318
ufrescn
Free or clear a scan information structure
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ufrescn( txid, scaninf, rlsopts, status )
UTXID txid;
char **scaninf;
UOPTS rlsopts;
USTATUS *status;
Arguments
txid
Transaction ID
scaninf
A scan information structure to free as returned from the ualcscn
function
rlsopts
Operation indicator; options are:
DB_RESET
Reset the scan structure; do not release.
The DB_RESET option is used to reuse the scan
structure and should not be used with any other
options.
status
DB_RELEAS
Release the scan information structure.
DB_FREPRJ
Release only the projection specification.
DB_FRESEL
Release only the selection criteria.
DB_FRESRT
Release only the sort order specification.
Returned status of the function
Description
Frees the memory belonging to the scan information structure indicated. This
function does not deactivate the scan. A scan stays active until a call is made to the
uendscn function.
Security
No privileges required.
319
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ualcscn, ubegscn, uendscn, ufchscn, uinssrt, uinsprj, uinsor, uinsand
For information about scanning, see page 64.
320
uinfacs
Retrieve access information for a scan or ordered access
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinfacs( scnid, acsinfp, status )
int scnid;
UACSINF *acsinfp;
USTATUS *status;
Arguments
Description
scnid
The ID returned by either the ubegscn or ubegord function
acsinfp
UACSINF structure to hold access information
status
Contains a value that indicates the status of the function’s operation.
The uinfacs function should be called after the ubegscn or ubegord function is
called, and before the ufchscn or ufchord function is called.
When a scan or ordered access is initiated with the ubegscn or ubegord function, the
optimizer analyzes the selection and database criteria, and chooses the most efficient
access method. The uinfacs function retrieves this access type information by filling
a UACSINF structure for the given ID. The information includes the access type
chosen by the optimizer, and can be one of the following:
USQSCN
Sequential access
UDKSCN
Direct key access
UBTSCN
BĆtree index access
UHKSCN
Hash index access
ULKSCN
Link index access
UNULLSCN
No access type, not initialized
321
UFAILURE
A failure occurred during the operation; check status value
for the error.
And, depending on access type, may include other information:
UBTSCN
BĆtree ID and number of components used.
UHKSCN
Hash table ID
ULKSCN
Link ID
Other functions may then be used to retrieve additional information about the
particular index chosen by the optimizer. For example:
uinfbt
BĆtree information
uinfhsh
Hash table information
uinflnk
Link information.
Security
Subject to the same restrictions as the scan or ordered access in question.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uinfbt, uinfhsh, uinflnk
For information about scanning, see page 64.
For information about access methods, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
322
uinfath
Retrieve schema information
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinfath( txid, nauth, athidl, infclas, athinfl, statusl, status )
UTXID txid;
int nauth;
UAID *athidl;
UOPTS infclas;
UATHINF *athinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nauth
Number of authorization IDs in the athidl list
athidl
List of authorization IDs (associated with schemas) to retrieve
information about
infclas
Type of information requested. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UALLINFO
Retrieve all information
athinfl
List of UATHINF structures, each containing retrieved information
about each authorization ID listed in athidl
statusl
Returned list of status values, one for each athidl/athinfl entry
status
Returned status of the function
Returns a UATHINF schema information structure for each authorization ID listed in
athidl. For a description of the UATHINF structure, see “The RHLI Structures”
chapter.
The parameter infclas controls how much schema information is returned to each
UATHINF structure.
323
Information retrieval classes (specified by inflclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
UATHINF structure is to be retrieved. No optional information is retrieved.
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1 category (which is defined in the structure UATHINF) retrieves the
specified information for that class only.
The UALLINFO option specifies that all the information defined for the UATHINF
structure is to be retrieved.
You can specify more than one retrieval class by separating options with the bitwise
logical OR operator (|).
Security
Schema information is returned only for schemas that you have access to.
You always have access to the current schema. Additionally, you can access other
schemas if you have been granted schema access permission to the schema or if a
schema you can access has schema privileges to another schema (or a table or column
in the schema). If you have DBA authority, you can access any schema in the
database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function. To grant schema access, use the uaddprm
function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
324
Example
This example calls the uinfath function to retrieve information about the current
schema.
/* define required parameters */
UTXID
txid;
int
nauth;
UAID
* athidl;
UATHINF * athinfl;
USTATUS
statusl;
STATUS
status;
/* retrieve authorization ID (athidl) */
...
/* retrieve authorization information */
if ( uinfath(txid, 2, athidl, UALLINFO, athinfl, statusl,&status) != USUCCESS)
printf(”Unable to get info on schema: status = %ld\n”,status);
See Also
uaddath, uallath, ubndath, udrpath, ufchath, umapath, umodath, unumath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
325
uinfbt
Retrieve B-tree information for a list of B-trees
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uinfbt( txid, nbt, btidl, infclas, btinfl, statusl, status )
UTXID txid;
int nbt;
UBTID *btidl;
UOPTS infclas;
UBTINF *btinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
326
txid
Transaction ID
nbt
Number of B-tree IDs in the btidl list
btidl
List of B-tree IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UCLASS3
Retrieve Class 3 information only
UALLINFO
Retrieve all information
btinfl
Returned list of UBTINF structures, each containing information
about a separate B-tree (corresponding to the B-tree IDs listed in
btidl)
statusl
Returned list of status values, one for each btinfl entry
status
Returned status of the function
Description
Returns a UBTINF B-tree information structure for each B-tree ID listed in btidl.
The parameter infclas controls how much B-tree information is returned to each
UBTINF structure. You can specify more than one option by separating the options
with the bitwise logical operator (|).
Information retrieval classes (specified by infclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
UBTINF structure is to be retrieved. No optional information is desired.
The UNOCLASS option information is always retrieved, no matter which retrieval
class you choose.
The UCLASS1, UCLASS2 and UCLASS3 categories (which are described in the
structure UBTINF), retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the UBTINF
structure is to be retrieved.
For a description of the UBTINF structure, see “The RHLI Structures” chapter.
Security
B-tree information can be retrieved only for B-trees on tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Volume information is only returned if you have DBA authority.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function. To grant schema access, use the uaddprm
function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
327
Example
This example uses the uinfbt function to retrieve B-tree information.
if ((btidl = (UBTID *)calloc(2, sizeof(UBTID))) == NULL)
uexit(1);
if (ubndbt(txid, $parts$, 1, ”part_number”, &btidl[0], &statusl[0],&status)
!= USUCCESS)
{
free (btidl);
uexit(1);
}
if (ubndbt(txid, $parts$, 1, ”ord_number”, &btidl[1], &statusl[1],
&status) != USUCCESS)
{
free (btidl);
uexit(1);
}
if ((btinfl = (UBTINF *)calloc(2, sizeof(UBTINF))) == NULL)
{
free (btidl);
uexit(1);
}
if (uinfbt(txid, 2, btidl, (UCLASS1|UCLASS2), btinfl, statl, &status)
!= USUCCESS)
{
printf(”Unable to get info on B-trees: status = %ld\n”,status);
free (btidl);
free (btinfl);
uexit(1);
}
See Also
ubndbt
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using B-trees, see “Managing the Database Files” and
“Choosing an Access Method” in Unify DataServer: Managing a Database.
328
uinfcgp
Retrieve column group information for a list of columns
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinfcgp( txid, ncol, cidl, infclas, colinfl, statusl, status )
UTXID txid;
int ncol;
UCID *cidl;
UOPTS infclas;
UCGPINF *cgpinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ncol
Number of column IDs in the cidl list
cidl
List of column IDs to retrieve information about
infclas
Information retrieval class. Must be set to UNOCLASS.
cgpinfl
Returned list of UCGPINF structures, each containing information
about a separate column group (corresponding to the cidl list)
statusl
Returned list of status values, one for each cgpinfl entry
status
Returned status of the function
Returns a UCGPINF column group information structure for each column ID listed in
cidl. Any column ID listed in cidl can be either a group member or a group leader.
If a column’s type is U_CGP, the returned list of column IDs is of the component
group members. Otherwise, the list of column IDs is of the column groups the
component participates in.
329
The parameter infclas should be set to UNOCLASS. This indicates that essential
information is to be retrieved. All column group information is essential, and
therefore is retrieved.
The parameter cginfl points to a list of UCGPINF structures that contain the returned
column group information. For a description of the structure UCGPINF, see “The
RHLI Structures” chapter.
For successfully retrieved information structures where the number of column IDs
returned is non-zero, the UCGPINF structure member grpcidl, is allocated storage
space by calling the malloc function. This space should be released when the
information is no longer needed by calling the free function.
Security
Column group information can be retrieved only for columns in tables that you have
access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uinfcgp function to retrieve information about a column
group.
pcol[0] = ”part_number”;
pcol[1] = ”part_name”;
/* Retrieve the Column IDs to get info on */
if (ubndcol(txid, $parts$, 2, pcol, USLCK, &cidl, statusl, &status) !=
USUCCESS)
uexit(1);
if ( uinfcgp(txid,2,cidl,UALLINFO,cgpinfl,statusl,&status) != USUCCESS )
{
printf(”Unable to get info on col. group: status = %ld\n”,status);
uexit(1);
}
330
See Also
uaddcgp, uallcgp, udrpcgp, unumcgp
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
331
uinfcol
Retrieve column information for a list of columns
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uinfcol( txid, ncol, cidl, infclas, colinfl, statusl, status )
UTXID txid;
int ncol;
UCID *cidl;
UOPTS infclas;
UCOLINF *colinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
332
txid
Transaction ID.
ncol
Number of column IDs in the cidl list
cidl
List of column IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UCLASS3
Retrieve Class 3 information only
UCLASS4
Retrieve Class 4 information only
UALLINFO
Retrieve all information
colinfl
Returned list of UCOLINF structures, each containing information
about a separate column (corresponding to the cidl list)
statusl
Returned list of status values, one for each colinfl entry
status
Returned status of the function
Description
Returns a UCOLINF column information structure for each column ID listed in cidl.
The parameter infclas controls how much column information is returned to each
UCOLINF structure. You can specify more than one option by separating the options
with the bitwise logical operator (|).
Information retrieval classes (specified by infclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
UCOLINF structure is to be retrieved. No optional information is retrieved.
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1, UCLASS2, UCLASS3 and UCLASS4 categories (which are defined in
the structure UCOLINF), retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the UCOLINF
structure is to be retrieved.
For a description of the UCOLINF structure, see “The RHLI Structures” chapter.
For columns successfully retrieved by specifying UCLASS4 or UALLINFO retrieval
classes, storage space is allocated by Unify DataServer for UCOLINF structure
members coldesc and dsppict calling the malloc function. This space should be
released when the information is no longer needed by calling the free function.
Security
Column information can be retrieved only for columns you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
333
Example
This example uses the uinfcol function to retrieve information about a column.
pcol[0] = ”part_number”;
pcol[1] = ”part_name”;
/* Retrieve the Column IDs to get info on */
if (ubndcol(txid, $parts$, 2, pcol, USLCK, &cidl, statl, &status) != USUCCESS)
uexit(1);
if (uinfcol(txid,2,cidl,UALLINFO,colinfl,statusl,&status) != USUCCESS)
{
printf(”Unable to get info on columns: status = %ld\n”,status);
uexit(1);
}
See Also
ubndtbl, ubndcol
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
334
uinfdb
Retrieve database information
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinfdb( txid, ndb, dbidl, infclas, dbinfl, statusl, status )
UTXID txid;
int ndb;
UDBID *dbidl;
UOPTS infclas;
UDBINF *dbinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
ndb
The number of database IDs in the dbidl list
dbidl
List of database IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UCLASS3
Retrieve Class 3 information only
UALLINFO
Retrieve all information
dbinfl
Returned list of UDBINF structures, each containing information
about a separate database (corresponding to the dbidl list)
statusl
Returned list of status values, one for each dbinfl entry
status
Returned status of the function
Returns a UDBINF database information structure for each valid database ID.
The parameter infclas controls how much database information is returned to each
UDBINF structure. You can specify more than one option by separating the options
with the bitwise logical operator (|).
335
Information retrieval classes are ordered according to system overhead usage:
UNOCLASS information uses the least amount of overhead, while UALLINFO uses
the most.
The UNOCLASS option specifies that only essential information defined by the
UDBINF structure is to be retrieved. No optional information is retrieved.
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1, UCLASS2 and UCLASS3 categories, which are defined in the
structure UDBINF, retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the UDBINF
structure is to be retrieved.
For a description of the UDBIN structure, see “The RHLI Structures” chapter.
For columns successfully retrieved by specifying UCLASS2, UCLASS3 or
UALLINFO retrieval classes, storage space is allocated by Unify DataServer for
UDBINF structure members uvidlst and descrpt by calling malloc function. This
space should be released when the information is no longer needed by calling the free
function.
Security
No privileges required.
However, volume information is only returned if you have DBA authority.
For information about granting DBA authority, see uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
336
Example
This example uses the uinfdb function to retrieve information about the current
database.
if (uinfdb(txid,ndb,dbidl,UALLINFO,dbinfl,statusl,&status) != USUCCESS)
{
printf(”Unable to get info on database: status = %ld\n”,status);
uexit(1);
}
else {
for(dbindx=0; dbindx < ndb; ++dbindx)
{
prdbinf(&dbinfl[dbindx]);
for(volindx=0; volindx < dbinfl[dbindx].nvol; ++volindx)
prvolin(&(dbinfl[dbindx].uinfvol[volindx]));
if ( ndb > 0 )
free(dbinfl[dbindx].uinfvol);
}
}
See Also
uadddb, ubnddb, uclsdb, ulckdb, umoddb, uopndb
chmod(2), chown(2), malloc(3), and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
337
uinfhsh
Retrieve hash index information
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uinfhsh( txid, nht, hidl, infclas, hinfl, statusl, status )
UTXID txid;
int nht;
UHID *hidl;
UOPTS infclas;
UHTINF *hinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nht
Number of hash table IDs in the hidl list
hidl
List of hash table IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UCLASS3
Retrieve Class 3 information only
UALLINFO
Retrieve all information
hinfl
Returned list of UHTINF structures, each containing information
about a separate hash table (corresponding to the hidl list)
statusl
Returned list of status values, one for each hinfl entry
status
Returned status of the function
Returns a UHTINF hash table information structure for each hash table ID listed in
hidl.
The parameter infclas controls how much hash table information is returned to each
UHTINF structure. You can specify more than one option by separating the options
with the bitwise logical operator (|).
338
Information retrieval classes (specified by infclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
UHTINF structure is to be retrieved. No optional information is retrieved.
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1, UCLASS2 and UCLASS3 categories (which are defined in the
structure UHTINF), retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the UHTINF
structure is to be retrieved.
For a description of the UHTINF structure, see “The RHLI Structures” chapter.
For columns successfully retrieved by specifying UCLASS2 or UALLINFO retrieval
classes, storage space is allocated by Unify DataServer for UHTINF structure
member htloc by calling the malloc function. This space should be released (by
calling the free function) when the information is no longer needed.
Security
Hash table information can be retrieved only for hash indexes on tables that you have
access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Volume information is only returned if you have DBA authority.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
339
Example
This example uses the uinfhsh function to retrieve information about a hash index.
if (ubndhsh(txid, $parts$, 1, ”part_number”, &hidl[0], &statusl[0],
&status) != USUCCESS)
uexit(1);
if (ubndhsh(txid, $parts$, 1, ”ord_number”, &hidl[1], &statusl[1],
&status) != USUCCESS)
uexit(1);
if (uinfhsh(txid,2,hidl,UALLINFO,hinfl,statusl,&status) != USUCCESS)
{
printf(”Unable to get info on hash tables: status = %ld\n”,status);
uexit(1);
}
See Also
uaddhsh, uallhsh, ubndath, udrphsh, umaphsh, umodhsh
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using hash tables, see “Managing the Database Files,”
“Choosing an Access Method,” and “Tuning the Access Methods” in Unify
DataServer: Managing a Database.
340
uinflck
Retrieve data lock information
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinflck( txid, tid, rid, lcktype, status )
UTXID txid;
UTID tid;
URID rid;
int *lcktype;
USTATUS *status;
Arguments
txid
The current transaction ID
tid
The table ID of the row’s table or UNULLTID
rid
The row ID of the row whose locking status is checked or
UNULLRID
lcktype
status
Description
Returned lock type of the object. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
Returned status of the function
Retrieves data lock information for a row, table, or database. The lock type is
returned into lcktype.
To retrieve lock information for a row, set tid to the row table ID and rid to the row
ID.
To retrieve data lock information for a table, set tid to the row’s table ID and rid to
UNULLRID.
341
To retrieve data lock information for a database, set tid to UNULLTID and rid to
UNULLRID.
The lock information being retrieved must match exactly with the lock placed on the
object. For example, if a row lock is promoted to a table lock and you retrieve lock
information for a row in that table, uinflck function returns an error.
To retrieve definition lock information for a table, use the uinfsch function.
Security
Table data lock information can be retrieved only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uinflck function to retrieve information about row, table, and
database locks.
/* define required parameters */
int lcktype
URID rid;
int prevlck;
USTATUS fstatus;
UTXID txid;
USTATUS status;
...
/* open the database */
...
/* retrieve row ID */
...
/* retrieve row lock information */
if (uinflck(txid, $company.$, rid, &lcktype, &status) != USUCCESS)
{
printf(”row is not locked\n”);
uexit(101);
}
printf(”row is locked with type %d\n”, lcktype);
342
/* retrieve table lock information */
if (uinflck(txid, $company.$, UNULLRID, &lcktype, &status) != USUCCESS)
{
printf(”table is not locked\n”);
uexit(102);
}
printf(”table is locked with type %d\n”, lcktype);
/* retrieve database lock information */
if (uinflck(txid, UNULLTID, UNULLRID, &lcktype, &status) != USUCCESS)
{
printf(”database is not locked\n”);
uexit(103);
}
printf(”database is locked with type %d\n”, lcktype);
See Also
uinfsch, ulckdb, ulckrow, ulcksch, ulcktbl, uulkdb, uulkrow, uulksch, uulktbl
For information about lock management, see “Managing Transactions and Locks” in
Unify DataServer: Managing a Database.
343
uinflnk
Retrieve link information
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uinflnk( txid, nlnk, lidl, infclas, lnkinfl, statusl, status )
UTXID txid;
int nlnk;
ULID *lidl;
UOPTS infclas;
ULNKINF *lnkinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
344
txid
Transaction ID
nlnk
Number of Link IDs in the lidl list
lidl
List of Link IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UALLINFO
Retrieve all information
lnkinfl
Returned list of ULNKINF structures, each containing information
about a separate link (corresponding to the lidl list)
statusl
Returned list of status values, one for each lnkinfl entry
status
Returned status of the function
Description
Returns a ULNKINF link information structure for each valid Link ID listed in lidl.
The parameter infclas controls how much link information is returned to each
ULNKINF structure. You can specify more than one option by separating the options
with the bitwise logical operator (|).
Information retrieval classes (specified by infclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
ULNKINF structure is to be retrieved. No optional information is retrieved.
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1 and UCLASS2 categories (which are defined in the structure
ULNKINF), retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the ULNKINF
structure is to be retrieved.
For a description of the ULNKINF structure, see “The RHLI Structures” chapter.
For columns successfully retrieved by specifying UCLASS1 or UALLINFO retrieval
classes, storage space is allocated by Unify DataServer for UHTINF structure
members ploc and cloc by calling the malloc function. This space should be released
(by calling the free function) when the information is no longer needed.
Security
Link information is returned only for links on tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
345
Example
This example uses the uinflnk function to retrieve link information.
if (ubndlnk(txid, $parts$, 1, ”part_number”, &lidl[0], &statusl[0],&status)
!= USUCCESS)
{
uexit(1);
}
if (ubndlnk(txid, $parts$, 1, ”ord_number”, &lidl[1], &statusl[1],
&status) != USUCCESS)
if ((lnkinfl = (ULNKINF *)calloc(2, sizeof(ULNKINF))) == NULL)
{
uexit(1);
{
if (uinflnk(txid,2,lidl,UALLINFO,lnkinfl,statusl,&status) != USUCCESS )
{
fprintf(stderr,”Unable to get info on links: status = %ld\n”,status);
uexit(1);
}
See Also
uaddlnk, ualllnk, ubndlnk, udrplnk, ufchlnk, umaplnk, umodlnk
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
346
uinfsch
Retrieve definition lock information for a table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinfsch( txid, tid, lcktype, status )
UTXID txid;
UTID tid;
int *lcktype;
USTATUS *status;
Arguments
txid
The current transaction ID
tid
The table ID for the table you are inquiring about
lcktype
Returned lock type of the table. Options are:
status
Description
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
Returned status of the function
Retrieves the current definition lock type (lcktype) on the specified table (tid).
A definition lock prevents any other transactions from changing the definition of the
table. A data lock, however, prevents other operations from changing data contained
in the table rows.
To retrieve data lock information for a table, use the uinflck function.
Security
Table definition lock information can be retrieved only for tables you have access to.
347
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uinfsch function to retrieve information about object
definition locks on the company table. The lock type is printed.
/* define required parameters */
int lcktype
UTXID txid;
USTATUS status;
...
/* retrieve table definition lock information */
if (uinfsch(txid, $company.$, &lcktype, &status) != USUCCESS )
printf(”Table definition is not locked\n”);
else
printf(”Table definition is locked with type %d\n”, lcktype);
See Also
uinflck, ulcksch, uulksch
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about lock management, see “Managing Transactions and Locks” in
Unify DataServer: Managing a Database.
348
uinfscn
Create a list used for scan data retrieval
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinfscn( txid, scaninf, dbvallp, status )
UTXID txid;
char *scaninf;
UDBVAL **dbvallp;
USTATUS *status;
Arguments
Description
txid
Transaction ID
scaninf
Pointer to a scan information structure
dbvallp
Location for storing the pointer to the allocated UDBVAL list
status
Returned status of the function
Builds a database value list from a pre-established scan projection list.
The scaninf member points to the scan information structure created by the ualcscn
function. The projection criteria for the scan must be specified (by calling the uinsprj
function) before calling the uinfscn function.
The uinfscn function allocates a UDBVAL list (and column value buffers) that
matches the projection criteria specified in scaninf. The pointer to the allocated
UDBVAL list is returned in the location pointed to by dbvallp. The UDBVAL items
appear in the same order that the columns were specified in the uinsproj function
reference.
The allocated UDBVAL list is used in future calls to the ufchscn function. When the
scan is completed, you must free the memory that was allocated for the UDBVAL list.
For a description of the UDBVAL structure, see the UNIPCOLL structure description
on “The RHLI Structures” chapter.
349
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uinsor, uinsand, uinssrt, uinsprj, ufchscn, ufrescn, ubegscn, uendscn, ufchscn
For information about scanning, see page 64.
350
uinftbl
Retrieve table information
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinftbl( txid, ntbl, tidl, infclas, tblinfl, statusl, status )
UTXID txid;
int ntbl;
UTID *tidl;
UOPTS infclas;
UTBLINF *tblinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
txid
Transaction ID
ntbl
Number of table IDs in the tidl list
tidl
List of table IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UCLASS3
Retrieve Class 3 information only
UCLASS4
Retrieve Class 4 information only
UALLINFO
Retrieve all information
tblinfl
Returned list of UTBLINF structures, each containing information
about a separate table (corresponding to the tidl list)
statusl
Returned list of status values, one for each tblinfl entry
status
Returned status of the function
351
Description
Returns a UTBLINF table information structure for each valid table ID in the tidl list.
The parameter infclas controls how much table information is returned to each
UTBLINF structure. You can specify more than one option by separating the options
with the bitwise logical operator (|).
Information retrieval classes (specified by infclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
UTBLINF structure is to be retrieved. No optional information is retrieved.
The UNOCLASS option information is always retrieved, no matter which retrieval
class you choose.
The UCLASS1, UCLASS2, UCLASS3 and UCLASS4 categories, (which are defined in
the structure UTBLINF), retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the UTBLINF
structure is to be retrieved.
For a description of the UTBLINF structure, see “The RHLI Structures” chapter.
For table successfully retrieved by specifying UCLASS2, UCLASS3, UCLASS4 or
UALLINFO retrieval classes, storage space is allocated byUnify DataServer for
UTBLINF structure members ucidlst, ubidlst, uhidlst, ulidlst, keycidl and uvidlst by
calling the malloc function. This space should be released (by calling free function)
when the information is no longer needed.
Security
Table information can be retrieved only for tables and access methods you have
access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Volume information is only returned if you have DBA authority.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
352
Example
The following example uses the uinftbl function to retrieve table information.
#define FREEIT(nitem, sptr) if (nitem > 0) free(sptr);
if (ualltbl(txid, UNULLAID, USLCK, &ntbl, tidl, &status) != USUCCESS)
uexit(1);
if ((tblinfl = (UTBLINF *)calloc(ntbl, sizeof(UTBLINF))) == NULL)
uexit(1);}
if (uinftbl(txid, ntbl, tidl, UALLINFO, tblinfl, statusl, &status)!=USUCCESS)
{
printf(”Unable to retrieve info on tables: status = %ld\n”,status);
FREEIT(ntbl, tblinfl)
FREEIT(ntbl, statusl)
uexit(1);
}
/* Print contents of TBLINF structure and deallocate space */
for ( tblindx = 0; tblindx < ntbl; ++tblindx )
{
/* Print table information */
prtblinf(&tblinfl[tblindx]);
for ( colindx = 0; colindx < tblinfl[tblindx].ncol; ++colindx )
/* Print column information */
prcolin(tblinfl[tblindx].ucidlst[colindx]);
FREEIT(colindx, tblinfl[tblindx].ucidlst)
for ( volindx = 0; volindx < tblinfl[tblindx].nvol; ++volindx )
/* Print volume information */
prvolin(tblinfl[tblindx].uvidlst[volindx]));
FREEIT(volindx, tblinfl[tblindx].uvidlst)
FREEIT(tblinfl[tblindx].nbtree, tblinfl[tblindx].ubidlst)
FREEIT(tblinfl[tblindx].nhsh, tblinfl[tblindx].uhidlst)
FREEIT(tblinfl[tblindx].nlnk, tblinfl[tblindx].ulidlst)
FREEIT(tblinfl[tblindx].nkey, tblinfl[tblindx].keycidl)
FREEIT(ntbl, statusl)
}
See Also
uaddtbl, ualltbl, ubndtbl, udrptbl, ufchtbl, uinfsch, uinstbl, ulcktbl, umaptbl,
unumtbl, uulktbl
malloc(3) and free(3) in your UNIX system manual
353
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
354
uinftx
Retrieve transaction information
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinftx( dbid, ntx, txl, infclas, txinfl, statusl, status )
UDBID dbid;
int ntx;
UTXID *txl;
UOPTS infclas;
UTXINF *txinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
The database ID (issued by the uopndb function)
ntx
Number of transaction IDs in the txl list
txl
List of transaction IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve transaction ID and whether logging is on
UCLASS1
Retrieve Class 1 information
UALLINFO
Retrieve all information
txinfl
Returned list of UTXINF structures, each containing information
about a separate transaction (corresponding to the txl list) for the
current database (specified by dbid)
statusl
Returned list of status values, one for each txinfl entry
status
Returned status of the function
Returns a UTXINF transaction information structure for each valid transaction ID in
the txl list.
The infclas parameter controls how much transaction information is returned to each
UTXINF structure. You can specify more than one option by separating the options
with the bitwise logical OR operator (|).
355
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1 category, retrieves the specified information for that class only. See
the UTXINF structure for a list of the UCLASS1 retrieved information.
The information retrieval classes (specified by infclas) require different amounts of
system overhead usage: UNOCLASS information uses the least amount of overhead,
while UALLINFO uses the most.
For a description of the UTXINF structure, see “The RHLI Structures” chapter.
You must allocate the storage space required for the transaction information
structures. When the space is no longer needed, you must free the space.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uabttx, ualltx, ubegtx, ucbgtx, ucmttx
For information about transaction management, see “Managing Transactions and
Locks” in Unify DataServer: Managing a Database.
356
uinfusr
Retrieve user information
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinfusr( txid, nuser, usridl, infclas, usrinfl, statusl, status )
UTXID txid;
int nuser;
UOID *usridl;
UOPTS infclas;
UUSRINF *usrinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nuser
Number of user IDs in the usridl list
usridl
List of user IDs to retrieve information about or UNULLUID
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UCLASS3
Retrieve Class 3 information only
UALLINFO
Retrieve all information
usrinfl
Returned list of UUSRINF structures, each containing information
about a separate user (corresponding to the usridl list)
statusl
Returned list of status values, one for each usrinfl entry
status
Returned status of the function
Returns a UUSRINF user information structure for each valid user ID. Returns curaid
in usrinfl only for the current user, and UNULLAID for other users. For a description
of the UUSRINF structure, see “The RHLI Structures” chapter.
The parameter infclas controls how much user information is returned to each
UUSRINF structure.
357
Information retrieval classes (specified by infclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
UUSRINF structure is to be retrieved. No optional information is retrieved.
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1, UCLASS2 and UCLASS3 categories (which are defined in the
structure UUSRINF), retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the UUSRINF
structure is to be retrieved.
You can combine retrieval classes by OR’ing the infclas values together, separated by
single bars (|).
If the usridl member points to UNULLUID, this function returns information about
the current user.
For columns successfully retrieved by specifying UCLASS2 or UALLINFO retrieval
classes, storage space is allocated by Unify DataServer for UUSRINF structure
member aidlst by calling malloc function. This space should be released (by calling
the free function) when the information is no longer needed.
Security
User information is returned as follows:
If you have DBA authority, information about any user is available.
If you don’t have DBA authority, only information about your user ID is
available.
For information about granting DBA authority, see the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
358
Example
This example calls the uinfusr function to retrieve user information.
/* define required parameters */
UTXID
txid;
UOID
* usridl;
UUSRINF * usrinfl;
USTATUS
statusl;
USTATUS
status;
/* Retrieve user ID (usridl) */
...
/* Fetch user information */
if (uinfusr(txid, 2, usridl, UALLINFO, usrinfl, statusl, &status) != USUCCESS)
fprintf(stderr,”Unable to get info on user: status = %ld\n”, status);
See Also
uaddusr, uallusr, ubndusr, udrpusr, umodusr, unumusr
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
359
uinfvol
Retrieve volume information
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uinfvol( txid, nvol, vidl, infclas, volinfl, statusl, status )
UTXID txid;
int nvol;
UVID *vidl;
UOPTS infclas;
UVOLINF *volinfl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
nvol
Number of volume IDs in the vidl list
vidl
List of volume IDs to retrieve information about
infclas
Information retrieval class. Options are:
UNOCLASS
Retrieve essential information only
UCLASS1
Retrieve Class 1 information only
UCLASS2
Retrieve Class 2 information only
UCLASS3
Retrieve Class 3 information only
UALLINFO
Retrieve all information
volinfl
Returned list of UVOLINF structures, each containing information
about a separate volume (corresponding to the vidl list)
statusl
Returned list of status values, one for each volinfl entry
status
Returned status of the function
Returns a UVOLINF volume information structure for each valid volume ID.
The parameter infclas controls how much volume information is returned to each
UVOLINF structure. You can specify more than one option by separating the options
with the bitwise logical operator (|).
360
Information retrieval classes (specified by infclas) are ordered according to system
overhead usage: UNOCLASS information uses the least amount of overhead, while
UALLINFO uses the most.
The UNOCLASS option specifies that only essential information defined by the
UVOLINF structure is to be retrieved. no optional information is retrieved.
The UNOCLASS information is always retrieved, no matter which retrieval class you
choose.
The UCLASS1, UCLASS2 and UCLASS3 categories, which are defined in the
structure UVOLINF, retrieve the specified information for that class only.
The UALLINFO option specifies that all the information defined for the UVOLINF
structure is to be retrieved.
For a description of the UVOLINF structure, see “The RHLI Structures” chapter.
For columns successfully retrieved by specifying UCLASS2 or UALLINFO retrieval
classes, storage space is allocated by Unify DataServer for UVOLINF structure
member utidlst by calling the malloc function. This space should be released (by
calling the free function) when the information is no longer needed.
The volume length number (vollen) of volinf will be in bytes, wherever the volume
size is less than 2 GB. Otherwise, DB_BIG will be set in volopts, and vollen will
represent the number of pages.
Security
You must have DBA authority to retrieve volume information.
For information about granting DBA authority, see the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
The following example uses the uinfvol function to retrieve volume information.
if (uinfvol(txid, nvol, vidl, UALLINFO, volinfl, statusl,&status) != USUCCESS)
printf(“Unable to retrieve info on volumes: status = %ld\n”,status);
361
See Also
uadddb, uaddvol, uallvol, ubndvol, udrpvol, umapvol, umodvol, unumvol
malloc(3) and free(3) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
362
uinimsg
Initialize the message-logging facilities
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinimsg( prgnm, status )
char *prgnm;
USTATUS *status;
Arguments
Description
prgnm
The name of the current application’s executable, typically argv[0]
status
Returned status of the function
Initializes the error-logging facilities of the database. Error logging is explicitly
accomplished by calling the ulogmsg function. Error logging also happens when a
serious error is encountered while performing a database operation.
If you do not call the uinimsg function, messages written to the error log do not
contain the executable name.
You normally call the uinimsg function once to perform one-time-only initialization
operations. Subsequent calls to the uinimsg function can change the current
executable name.
The uinimsg function should be called prior to opening a database.
Security
No privileges required.
363
Example
This example uses the uinimsg function to initialize the error-logging file (errlog).
Error messages are logged to the errlog file by using the ulogmsg function.
/* define required RHLI parameters */
USTATUS status;
USTATUS lstats;
...
/* initialize the logging facilities */
if ( uinimsg(argv[0], &status) != USUCCESS))
{
printf (”error initializing error logging with program name;”);
if ((errmsg = ufchmsg(status, &fstatus)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is : %s\n”,errmsg);
}
/* open the database */
if ( uopndb ( dbname, DB_NORMAL, &dbid, &status) != USUCCESS )
{
printf (”unable to open the database;”);
if ((errmsg = ufchmsg(status, &fstatus)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is : %s\n”,errmsg);
}
/* log error messages
...
*/
See Appendix A for more examples.
See Also
ufchmsg, ulogmsg
For information about message handling, see “Error Handling” on page 51.
364
uinsand
Allocate a criteria structure for a scan
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinsand( txid, scaninf, numexp, status )
UTXID txid;
char *scaninf;
int numexp;
USTATUS *status;
Arguments
Description
txid
Transaction ID
scaninf
Pointer to the scan information structure
numexp
Number of expressions in conditions associated with the query that
builds the scan
status
Returned status of the function
Allocates the storage for a criteria structure. The criteria structure is determined by
the uinsor function.
You must call this function before you call the uinsor function.
The numexp parameter specifies the number of expressions in the OR-groups
associated with the scan.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
365
Example
See Appendix A.
See Also
uinsprj, ualcscn, ufrescn, uinssrt, uinsor
366
uinsbuf
Allocate buffer
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinsbuf( txid, scaninf, rmtbufsz, status )
UTXID txid;
char * scaninf;
long rmtbufsz;
USTATUS * status;
Arguments
Description
txid
The current Transaction ID.
scaninf
Pointer to the scan information structure
rmtbufsz
Remote row buffer size in number of rows
status
Pointer to the value that indicates the status of the function’s
operation
The remote buffer size is the number of rows to buffer. If uinsbuf is not used to
specify the remote row buffer size, the value of the shared configuration variable
RMTROWBUFSZ is used to determine this size.
Any required locking occurs when the rows are placed in the buffer.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
367
Example
The following example shows how to use uinsbuf.
USTATUS
status; /*
USTATUS
fchstat; /*
UDBID
dbid;
/*
UTXID
txid;
/*
char
* scaninf; /*
UDBVAL
tstval;
UDBVAL
* prjvall;
USTATUS
statusl[4];
UTP_HINT
monumv;
int
scnid;
URID
rowid;
int
prevlck;
status returned by RHLI functions */
status returned by ufchmsg( ) */
Database ID from uopndb( ) */
Transaction ID */
scan descriptor */
/* Allocating a Scan Structure */
if ( ualcscn(txid, 2, 0, 3, &scaninf, &status) == UFAILURE )
{
printf(”ualcscn( ) failed;\n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
/* Adding selection criteria */
if ( uinstbl(txid, scaninf, $model.$, &status) == UFAILURE )
{
printf(”uinstbl( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
/* set remote scan buffer size */
if ( uinsbuf(txid, scaninf, 20L, &status) == UFAILURE )
{
printf(”uinsbuf( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
if ( (uinsprj(txid,scaninf,$model.monum$,&status) == UFAILURE)
||
(uinsprj(txid,scaninf,$model.momano$,&status) == UFAILURE)
||
(uinsprj(txid,scaninf,$model.mdes$,&status) == UFAILURE) )
368
{
printf(”uinsprj( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
if ( uinsand(txid, scaninf, 1, &status) == UFAILURE )
{
printf(”uinsand( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
tstval.unip.hintp = &monumv;
tst.val.unip.valopt = UNORMAL
monumv = 5;
if ( uinsor(txid, scaninf, $model.monum$, UGTTST, &tstval,
(UDBVAL *)0, &status) == UFAILURE )
{
printf(”uinsor( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
if ( uinsand(txid, scaninf, 1, &status) == UFAILURE )
{
printf(”uinsand( ) failed:\n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
monumv = 17;
if ( uinsor(txid, scaninf, $model.monum$, ULTTST, &tstval,
(UDBVAL *)0, &status) == UFAILURE )
{
printf(”uinsor( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
369
if ( uinfscn(txid, scaninf, &prjvall, &status) == UFAILURE )
{
printf(”uinfscn( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
if ( ubegscn(txid,USLCK,scaninf,&scnid,&status) == UFAILURE )
{
printf(”ubegscn( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
printf(”Scanning for ’monum’ values between 5 and 17\n”);
while ( ufchscn(scnid, &rowid, prjvall, &prevlck, statusl,
&status) != UFAILURE )
{
printf(”rowid = %ld\n”, rowid);
printf(”monum = %ld\n”, *prjvall[0].unip.hintp);
printf(”momano = %d\n”, *prjvall[1].unip.intp);
}
if ( uendscn(scnid, &status) == UFAILURE )
{
printf(”uendscn( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
free((char
free((char
free((char
free((char
*)prjvall[0].unip.hintp);
*)prjvall[1].unip.intp);
*)prjvall[2].unip.strp);
*)prjvall);
/* Resetting the Scan Info. Structure */
if ( ufrescn(txid, scaninf, DB_RESET, &status) == UFAILURE )
{
printf(”ufrescn( ) failed: \n”);
if ((errmsg = ufchmsg(status, &fchstat)) == NULL)
printf(”error fetching message\n”);
else
printf(”error is %s\n”, errmsg);
uexit(1);
}
370
See Also
ualcscn, ufrescn, uinsand, uinsor, uinsprj, uinssrt, uinstbl, ualcscn.
RMTROWBUFSZ configuration variable description in Unify DataServer:
Configuration Variable and Utility Reference.
371
uinsor
Insert an expression into an OR group of the scan selection criteria
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uinsor( txid, scaninf, cid, rop, val1, val2, status )
UTXID txid;
char *scaninf;
UCID cid;
int rop;
UDBVAL *val1;
UDBVAL *val2;
USTATUS *status;
Arguments
Description
txid
Transaction ID
scaninf
Pointer to the scan information structure
cid
Column ID of the column to be compared
rop
A value indicating the relational operator for the comparison
val1
Pointer to a UDBVAL structure that contains the first value to
compare against column values for the selection criteria
val2
Pointer to a UDBVAL structure that contains the second value to
compare against column values for the selection criteria
status
Returned status of the function
Adds a unary, binary, or range expression to the selection criteria for a column.
The values cid, rop, and optionally val1 and val2 make up a selection criterion. If you
specify more than one selection criterion on the same column, the criteria are grouped
to form a logical OR-group.
372
If more than one OR-group exists, the OR-groups are logically ANDed to comprise
the selection criteria.
To initialize the selection criteria for a scan, call the uinsand function. The target
table must be established by calling the uinstbl function before calling the uinsor
function.
By using this function, you can represent most database queries. Queries that can be
expressed on a single form of an ACCELL/SQL application can be performed using a
single scan. Other queries require more than one scan.
Performance
If the number of expressions passed into the uinsand function (numexp) is greater
than zero (which reflects the number of calls to the uinsor function), all the storage
space is pre-allocated for maximum performance. To further enhance performance,
specify the total number of OR-groups when calling the ualcscn function.
The value of rop indicates a unary, binary or a range selection criterion. Unary
operators are the following null value tests:
UISNULL
Null value
UNOTNULL
Not a null value
UTTST
Always true
UFTST
Always false
Binary operators require only val1 to be passed in. Valid binary operators for rop are:
UEQTST
Equal
UNETST
Not equal
ULTTST
Less than
ULETST
Less than or equal
UGTTST
Greater than
UGETST
Greater than or equal
ULIKE
Like pattern matching
%" matches 0 or more characters
_" matches a single character
\" escapes any character
UREGEXP
Regular expression pattern matching
373
UGLOB
GLOB pattern matching (GLOB is a UNIX pattern matching
operation)
For more information about pattern matching, see the “Selecting Rows and Columns”
chapter in Unify DataServer: Writing Interactive SQL/A Queries.
Range operators require both val1 and val2 and specification of end point inclusion.
Valid range operators for rop are:
URNGOO
Range: points(open,open)
URNGOC
Range: points(open,closed)
URNGCO
Range: points(closed,open)
URNGCC
Range: points(closed,closed)
Open end points mean that the end point value is not included in the test range.
Closed end points mean that the end point value is included in the test range.
Parameters val1 and val2 are pointers to separate UDBVAL structures that contain
comparison values. For a description of the UDBVAL structure, see “The RHLI
Structures” chapter.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See appendix A.
See Also
ualcscn, ufrescn, uinsand, uinsprj, uinssrt, uinstbl
374
uinsprj
Add a column to the projection list of a scan
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinsprj( txid, scaninf, ncol, cidl, statusl, status )
UTXID txid;
char *scaninf;
int ncol;
UCID *cidl;
USTATUS *statusl;
USTATUS *status;
Arguments
Description
txid
Transaction ID
scaninf
Pointer to the scan information structure
ncol
Number of columns in the column ID list
cidl
Column ID list to add in the projection
status
Returned status of the function
Adds a column to the projection list of columns from rows returned from a scan. The
uinsprj function must be used for each column that is to be included in the
projection.
The order in which columns are added to the projection by calling the uinsprj
function defines the order of the columns in the rows returned from the scan.
Multiple calls to the same scan are allowed.
The target table must be established by calling the uinstbl function before calling the
uinsprj function.
Security
No privileges required.
375
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uinssrt, ufrescn, ualcscn, uinsor, uinsand
376
uinsrow
Insert a row into a table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinsrow( txid, tid, rid, unipcoll, statusl, status )
UTXID txid;
UTID tid;
URID *rid;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table
rid
Row ID of the newly created row
unipcoll
A pointer to a UNIPCOLL structure which specifies the values of the
columns of the row to insert
statusl
Returned status value for each column listed in the UNIPCOLL
column list cidl
status
Returned status of the function.
Creates a new row and initializes the row’s column values with the values passed in
from the UNIPCOLL structure. The UNIPCOLL structure (pointed to by unipcoll)
describes the data being inserted into or retrieved from the database. This structure
contains several lists which describe both the column and the column’s value.
All of the columns specified in UNIPCOLL must belong to the table ID specified in
tid. For a description of the UNIPCOLL structure, see “The RHLI Structures” chapter.
377
If no initial value is specified for a column and the column is not defined as a direct
key, Unify DataServer checks the Data Integrity Subsystem (DIS) file for a default
value. For more information about DIS, see Unify DataServer: Managing a Database.
If the non-initialized column is defined as a direct key, Unify DataServer assigns the
next consecutive value to the column.
If no DIS value is defined for column (or the column is not a direct key), then the
non-initialized column is set to a null value.
If a primary key has been specified for the table, a value for the key column must be
defined (in UNIPCOLL) or the new row is rejected. If any portion of the row insert is
in error, the entire row is rejected and an error is generated.
When inserting into or updating columns of type U_STR (string), Unify DataServer
adds trailing blanks to values less than the total size defined for the column.
Security
A row can be inserted into a table that you have access to only.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted insert schema privileges to the other schema. If you have DBA authority,
you can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
udelrow
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about the data integrity subsystem (DIS), see “Initializing a
Database” in Unify DataServer: Managing a Database.
378
uinssrt
Insert a column to the sort criteria
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinssrt( txid, scaninf, cid, ascflg, status )
UTXID txid;
char *scaninf;
UCID cid;
int ascflg;
USTATUS *status;
Arguments
txid
Transaction ID
scaninf
Pointer to the scan information structure
cid
Column ID of the column to be a sort key
ascflg
Specifies the order of comparison for the key. Options are:
status
Description
DB_ASCEND
Ascending key value
DB_DESCND
Descending key value
Returned status of the function
Adds a column to the sort criteria, specifying the comparison order.
The column ID specified (as cid) is added as a sort key of the order in which the
ufchscn function returns a projection from a scan.
The uinssrt function adds each column to the sort criteria in calling order. The first
call to the uinssrt function defines the primary sort key, the second call defines the
secondary sort key, and so on.
This function must be used for each column that is to be included in the sort key.
Before calling the uinssrt function, you must establish the target table by calling the
uinstbl function.
379
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uinsprj, ualcscn, ufrescn, uinsor, uinsand
For information about scanning, see page 64.
380
uinstbl
Specify the target table for a scan.
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uinstbl( txid, scaninf, tid, status )
UTXID txid;
char *scaninf;
UTID tid;
USTATUS *status;
Arguments
Description
txid
Transaction ID
scaninf
Pointer to the scan information structure
tid
Table ID of the target table for the scan
status
Returned status of the function
Establishes the target table for a scan.
If a target table has already been set, an error occurs. The uinstbl function must be
called before any calls to the uinsor, uinsprj, uinssrt, or ubegscn functions.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ualcscn, ufrescn, uinsand, uinsor, uinsprj, uinssrt
For information about scanning, see page 64.
381
uintext
Convert column values from internal format to external format
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uintext( txid, tid, unipcoll, unipext, statusl, status )
UTXID txid;
UTID tid;
UNIPCOLL *unipcoll;
UNIPEXT *unipext;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table columns contained in UNIPCOLL
unipcoll
A pointer to a UNIPCOLL structure containing column values in
internal format to be converted into external format
unipext
A pointer to a UNIPEXT structure that is to contain the converted
column values from internal to external format. This list must
contain the same number of entries as the number of internal format
entries in UNIPCOLL (pointed to by unipcoll).
statusl
Returned status value for each column listed in the UNIPCOLL
column list cidl
status
Returned status of the function
Converts a list of data values from an internal format to the external format used by
the database.
To read and display data contained in columns of data type U_DATE, U_HDATE and
U_TIME it is necessary to first convert the data from internal (database) format to
external (display) format.
382
To update or insert date and time data into a Unify DataServer database, you must
first convert the data into internal format by calling the uextint function.
For each column in the internal format list described by the structure UNIPCOLL
(pointed to by unipcoll), each internal column data value is converted to external
format and stored in a UNIPEXT structure (pointed to by unipext).
For a description of the UNIPEXT and UNIPCOLL structures, see “The RHLI
Structures” chapter.
All columns specified in each UNIPCOLL structure must belong to the specified table
ID (tid).
Any valopts member contained in the UNIPCOLL structure that contains a value of
UIGNORE is bypassed; no value is converted for that entry. Also, the entry for statusl
is set to UENOWRK.
All column values must be converted to external format after being retrieved from the
database. See the ufchrow function for more information.
If the destination column structure value pointer is null, storage space is allocated by
Unify DataServer. This space must then be deallocated by calling the system
subroutine free function. If the value pointer is not null, it is assumed that enough
space exists for the converted value.
A value that cannot be converted is rejected. Check each status value in statusl to
determine which values could not be converted.
Security
To convert column values, you must have access to the column value that you want to
convert.
You can always access all columns in the tables in the current schema. Additionally,
you can access tables (or just columns within a table) in other schemas if your current
schema has been granted schema privileges to the other schema. If you have DBA
authority, you can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
383
Example
See Appendix A.
See Also
uextint, uinsrow, ufchrow, uupdrow
free(3) in your UNIX system manual
For information about converting from internal to external formats, see page 35.
384
ulckdb
Lock a database
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ulckdb( txid, lcktype, nretry, prevlck, status )
UTXID txid;
int lcktype;
long nretry;
int *prevlck;
USTATUS *status;
Arguments
Description
txid
Transaction ID
lcktype
The lock type to place on the database. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nretry
The number of times to attempt acquiring the lock before failing; if
set to 0L, then the value set by the LMNRETRY configuration variable
is used
prevlck
Pointer to the previous lock type. If the database lock was not
granted, the lock type returned is the conflicting lock value.
status
Returned status of the function
Locks the database associated with the transaction. No changes can be made to the
database by other transactions while the lock is held. A database lock locks all tables
and rows for that database.
If the database lock is granted, the previous lock type is returned into prevlck;
otherwise, the conflicting lock value is returned.
385
You cannot acquire an exclusive lock on the database unless all users have opened the
database (by calling the uopndb function) with the DB_NOLOCK option. You may
not be able to acquire an exclusive lock if data definition locks placed by Unify
DataServer conflict with database lock requests.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ulckdb function to acquire a shared lock on the database
associated with the dbid value.
/* define required parameters */
UTXID
txid;
UDBID
dbid;
int
lcktype;
long
nretry;
int
prevlck;
USTATUS status;
...
/* open the database and begin a transaction */
...
/* lock the database */
lcktype = USLCK;
nretry = 10;
if ( ulckdb(txid,lcktype, nretry, &prevlck, &status) != USUCCESS )
{
printf(”Unable to get database lock: status = %ld\n”,status);
uexit(99);
}
See Also
ulcksch, uulksch, ulckrow, uulkrow, ulcktbl, uulktbl, uulkdb
For more information about setting configuration variables, see Unify DataServer:
Configuration Variable and Utility Reference.
For information about lock management, see “Managing Transactions and Locks” in
Unify DataServer: Managing a Database.
386
ulckrow
Lock a row
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int ulckrow(txid, tid, rid, lcktype, nretry, prevlck, status)
UTXID txid;
UTID tid;
URID rid;
int lcktype;
long nretry;
int *prevlck;
USTATUS *status;
Arguments
txid
Transaction ID
tid
Table of the row to lock
rid
Row ID of the row to lock
lcktype
The lock type to place on the row. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nretry
The number of times to attempt acquiring the lock before failing; if
set to 0L, then the value set by the LMNRETRY configuration variable
is used
prevlck
Pointer to the previous lock type. If the lock was not granted, the
lock type returned is the conflicting lock value.
status
Returned status of the function.
387
Description
Locks the row associated with the row ID for the specified table. No changes can be
made to the row data by other transactions while the lock is held.
If the row lock is granted, the previous lock type is returned into prevlck; otherwise,
the conflicting lock value is returned.
Security
Rows can be locked only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ulckrow function to acquire a shared lock on the row in the
company table with a rowid of 3.
/* define required parameters */
UTXID
txid;
URID
rid;
int
lcktype;
long
nretry;
int
prevlck;
USTATUS status;
...
/* open the database and begin a transaction */
...
/* lock the row */
lcktype = USLCK;
nretry = 10;
rid = 3;
if ( ulckrow(txid, $company.$, rid, lcktype, nretry, &prevlck,&status)
!= USUCCESS )
{
printf(”Unable to get a row lock: status = %ld\n”,status);
uexit(99);
}
...
388
See Also
uulkrow, ulcktbl, uulktbl, ulckdb, uulkdb
For more information about setting configuration variables, see Unify DataServer:
Configuration Variable and Utility Reference.
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about lock management, see “Managing Transactions and Locks” in
Unify DataServer: Managing a Database.
389
ulcksch
Lock a table definition
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
bool ulcksch( txid, tid, lcktype, nretry, prevlck, status )
UTXID txid;
UTID tid;
int lcktype;
long nretry;
int *prevlck;
USTATUS *status;
Arguments
Description
txid
Current transaction ID
tid
Table ID of the table to lock
lcktype
The lock type to place on the table. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nretry
The number of times to attempt acquiring the lock before failing; if
set to 0L, then the value set by the LMNRETRY configuration variable
is used
prevlck
Pointer to the previous lock type. If the lock was not granted, the
lock type returned is the conflicting lock value.
status
Returned status of the function
Locks the definition for a table. A definition lock prevents any other transaction from
changing or deleting the definition for a table while table data is being accessed.
A table definition lock is separate from and does not interfere with data locks. To
acquire a data lock see the ulcktbl or the ulckrow function.
390
If the table definition lock is granted, the previous lock type is returned into prevlck;
otherwise, the conflicting lock value is returned.
To remove a table definition lock, call the uulksch function.
Security
Definition locks can only be acquired on tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ulcksch function to acquire an object definition lock on the
company table.
/* define required parameters */
UTXID
txid;
int
lcktype;
int
prevlck;
USTATUS status;
...
/* lock the table definition */
if (ulcksch(txid, $company.$, USLCK, 0L, &prevlck, &status) != USUCCESS)
{
printf(”SLOCK of company table failed—%ld\n”,status);
uexit(99);
}
See Also
uulksch
For more information about setting configuration variables, see the Unify
DataServer: Configuration Variable and Utility Reference.
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about lock management, see “Managing Transactions and Locks” in
Unify DataServer: Managing a Database.
391
ulcktbl
Lock a table
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ulcktbl( txid, tid, lcktype, nretry, prevlck, status )
UTXID txid;
UTID tid;
int lcktype;
long nretry;
int *prevlck;
USTATUS *status;
Arguments
Description
txid
Transaction ID
tid
Table ID of the table to lock
lcktype
The lock type to place on the table. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
nretry
The number of times to attempt acquiring the lock before failing; if
set to 0L, then the value set by the LMNRETRY configuration variable
is used
prevlck
Pointer to the previous lock type. If the lock was not granted, the
lock type returned is the conflicting lock value.
status
Returned status of the function
Locks all rows in the table. No changes can be made to the table data by other
transactions while the lock is held.
If the table lock is granted, the previous lock type is returned into prevlck; otherwise,
the conflicting lock value is returned.
392
Security
Only tables you have access to can be data locked.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the ulcktbl function to acquire a lock on the company table.
/* define RHLI interface required parameters */
UTXID
txid;
UDBID
dbid;
int
lcktype;
long
nretry;
int
prevlck;
USTATUS status;
...
/* open the database and begin a transaction */
...
/* lock the table */
lcktype = USLCK;
nretry = 10;
if ( ulcktbl(txid, $parts.$, lcktype, nretry, &prevlck, &status) != USUCCESS )
{
printf(”Unable to get table lock: status = %ld\n”, status);
uexit(100);
}
See Also
uulkrow, ulckrow, uulktbl, ulckdb, uulkdb
For more information about setting configuration variables, see the Unify
DataServer: Configuration Variable and Utility Reference.
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about lock management, see “Managing Transactions and Locks” in
Unify DataServer: Managing a Database.
393
ulogmsg
Append a message to the error log
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int ulogmsg( callfnm, errnum, xtrainfo, status )
char *callfnm;
USTATUS errnum;
char *xtrainfo;
USTATUS *status;
Arguments
Description
txid
Transaction ID
callfnm
Name of the function from which the error logging is performed
errnum
The status error code
xtrainfo
Pointer to a character string containing any other relevant
information, or a null pointer if there is no other information
status
Returned status of this function
Appends the status error code (errnum), a corresponding error message, and related
information to the error log file DBNAME.err.
The error log file is searched for in the directory specified by the DBPATH
configuration variable. If the file is not found, error messages are written to the file
errlog. The error file DBNAME.err is usually linked to the file errlog.
If errlog cannot be found or cannot be opened or written to, this function fails.
Use the uinimsg function to initialize the error logging facilities.
Security
No privileges required.
394
Example
This example uses the ulogmsg function to log error messages to the errlog file. The
errlog file is initialized by using the uinimsg function.
See function uinimsg for the code.
See Appendix A for more examples.
See Also
ufchmsg, uinimsg
For information about error handling, see page 51.
395
umapath
Map a compile-time authorization ID to its runtime equivalent
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umapath( dbid, nath, athmapl, statusl, status )
UDBID dbid;
int nath;
UATHMAP athmapl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
Database ID issued by the uopndb function
nath
Number of authorization IDs in the athmapl list
athmapl
List of UATHMAP structures, each containing information about a
separate schema
statusl
Returned list of status values, one for each athmapl entry
status
Returned status of the function
Maps the compile-time authorization IDs stored in each UATHMAP structure to
runtime authorization IDs. Each UATHMAP structure must be initialized with schema
information. To initialize the UATHMAP structure, use the mapping macro command
INIATHMAP. For a description of the UATHMAP structure, see “The RHLI
Structures” chapter.
The mapping operation fails in these cases:
The schema specified in the athnm member of the UATHMAP structure does
not exist in the database.
The schema’s runtime mapping ID specified in the member remapid does not
match the compile-time mapping ID.
Multiple values are mapped to the same runtime authorization ID.
396
To map the value of an authorization ID that is already mapped, you must reset the
athnm member to (char *)0 or the null-string (“”). You cannot reset the ID of a
schema which has not been mapped.
Cross-mapping of authorization IDs is allowed.
The runtime authorization ID to which a compile-time authorization ID has been
mapped can also be obtained by calling the uinfath function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Security
Authorization IDs can be re-mapped only for schemas you have access to.
You always have access to the current schema. Additionally, you can access other
schemas if you have been granted schema access permission to the schema or if a
schema you can access has schema privileges to another schema (or a table or column
in the schema). If you have DBA authority, you can access any schema in the
database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function. To grant schema access, use the uaddprm
function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uaddath, uallath, ubndath, udrpath, ufchath, uinfath, umodath, unumath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
397
umapbt
Map a compile-time B-tree ID to its runtime equivalent
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umapbt( dbid, nbt, btmapl, statusl, status )
UDBID dbid;
int nbt;
UBTMAP btmapl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
Database ID issued by calling the uopndb function
nbt
Number of B-tree IDs in the btmapl list
btmapl
List of UBTMAP structures, each containing information about a
separate B-tree
statusl
Returned list of status values, one for each btmapl entry
status
Returned status of the function.
Maps the compile-time B-tree IDs stored in each UBTMAP structure to runtime
B-tree IDs. Each UBTMAP structure must be initialized with B-tree information. To
initialize UBTMAP, use the mapping macro command INIBTMAP.
For a description of the UBTMAP structure, see “The RHLI Structures” chapter.
The mapping operation fails in these cases:
The B-tree specified in the UBTMAP member btnm does not exist in the
database.
The B-tree’s runtime mapping ID specified in the member remapid does not
match the compile-time mapping ID.
Multiple values are mapped to the same runtime B-tree ID.
398
You cannot map the value of a B-tree that is already mapped, or reset the ID of a
B-tree which has not been mapped.
To reset the value of a previously mapped B-tree ID, set the value of UBTMAP
member btnm to (char *)0 or the null-string (“”).
Cross-mapping of B-tree IDs is allowed.
The runtime B-tree ID to which a compile-time B-tree ID has been mapped can also
be obtained by calling the uinfbt function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Security
B-tree IDs can be re-mapped only for B-trees on tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddbt, uallbt, ubndbt, udrpbt, uinfbt, umodbt
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
399
umapcol
Map a compile-time column ID to its runtime equivalent
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umapcol( dbid, ncol, colmapl, statusl, status )
UDBID dbid;
int ncol;
UCOLMAP colmapl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
Database ID issued by the uopndb function
ncol
Number of column IDs in the colmapl list
colmapl
List of UCOLMAP structures, each containing information about a
separate column
statusl
Returned list of status values, one for each colmapl entry
status
Returned status of the function
Maps the compile-time column IDs stored in each UCOLMAP structure to runtime
column IDs. Each UCOLMAP structure must be initialized with column information
that is used to re-map a compile-time column ID to its runtime equivalent.
To initialize UCOLMAP, use the mapping macro command INICOLMAP. For a
description of the UCOLMAP structure, see “The RHLI Structures” chapter.
The mapping operation fails in these cases:
The column specified in the UCOLMAP member colnm does not exist in the
database.
The column’s runtime mapping ID specified in the member remapid does not
match the compile-time mapping ID.
Multiple values are mapped to the same runtime authorization ID.
400
You cannot map the value of a column that is already mapped, or reset the ID of a
column which has not been mapped.
To reset the value of a previously mapped column ID, set the value of UCOLMAP
member colnm to (char *)0 or the null-string (“”) .
Cross-mapping of column IDs is allowed.
The runtime column ID to which a compile-time column ID has been mapped can
also be obtained by calling the uinfcol function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Security
Column IDs can be re-mapped only for columns in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uaddcnm, uallcol, ubndcol, udrpcnm, uextint, ufchcnm, uinfcol, uintext,
umapcol, unumcol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
401
umaphsh
Map a compile-time hash table ID to its runtime equivalent
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umaphsh( dbid, nhsh, hshmapl, statusl, status )
UDBID dbid;
int nhsh;
UHSHMAP hshmapl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
Database ID issued by the uopndb function
nhsh
Number of hash table IDs in the hshmapl list
hshmapl
List of UHSHMAP structures, each containing information about a
separate hash table
statusl
Returned list of status values, one for each hshmapl entry
status
Returned status of the function
Maps the compile-time hash table IDs stored in each UHSHMAP structure to runtime
hash table IDs. Each UHSHMAP structure must be initialized with hash table
information that is used to re-map a compile-time hash table ID to its runtime
equivalent.
To initialize UHSHMAP, use the mapping macro command INIHSHMAP. For a
description of the UHSHMAP structure, see “The RHLI Structures” chapter.
The mapping operation fails in these cases:
The hash table specified in the UHSHMAP member hshnm does not exist in the
database.
The hash table’s runtime mapping ID specified in the member remapid does
not match the compile-time mapping ID.
Multiple values are mapped to the same runtime hash table ID.
402
You cannot map the value of a hash table that is already mapped, or reset the ID of a
hash table which has not been mapped. To reset the value of a previously mapped
hash table IDset the value of UHSHMAP member hshnm to (char *)0 or the
null-string (””). Cross-mapping of hash table IDs is allowed.
The runtime hash table ID to which a compile-time hash table ID has been mapped
can also be obtained by calling the uinfhsh function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Security
Hash table IDs can be re-mapped only for hash tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddhsh, uallhsh, undhsh, udrphsh, uinfhsh, umodhsh
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
403
umaplnk
Map a compile-time link ID to its runtime equivalent
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umaplnk( dbid, nlnk, lnkmapl, statusl, status )
UDBID dbid;
int nlnk;
ULNKMAP lnkmapl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
Database ID issued by the uopndb function
nlnk
Number of Link IDs in the lnkmapl list
lnkmapl
List of ULNKMAP structures, each containing information about a
separate link
statusl
Returned list of status values, one for each lnkmapl entry
status
Returned status of the function
Maps the compile-time Link IDs stored in each ULNKMAP structure to runtime Link
IDs. Each ULNKMAP structure must be initialized with link information. To initialize
ULNKMAP, use the mapping macro command INILNKMAP. For a description of the
ULNKMAP structure, see “The RHLI Structures” chapter.
The mapping operation fails in these cases:
The link specified in the ULNKMAP member lnknm does not exist in the
database.
The link’s runtime mapping ID specified in the member remapid does not
match the compile-time mapping ID.
Multiple values are mapped to the same runtime link ID.
404
You cannot map the value of a link that is already mapped, or reset the ID of a link
which has not been mapped.
To reset the value of a previously mapped link ID, set the value of ULNKMAP
member lnknm to (char *)0 or the null-string (“”) .
Cross-mapping of Link IDs is allowed.
The runtime Link ID to which a compile-time Link ID has been mapped can also be
obtained by calling the uinflnk function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Security
Link IDs can be re-mapped only for links in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddlnk, ualllnk, ubndlnk, udrplnk, ufchlnk, uinflnk, umodlnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
405
umaptbl
Map a compile-time table ID to its runtime equivalent
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umaptbl( dbid, ntbl, tblmapl, statusl, status )
UDBID dbid;
int ntbl;
UTBLMAP tblmapl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
Database ID issued by the uopndb function
ntbl
Number of table IDs in the tblmapl list
tblmapl
List of UTBLMAP structures, each containing information about a
separate table
statusl
Returned list of status values, one for each tblmapl entry
status
Returned status of the function
Maps the compile-time table IDs stored in each UTBLMAP structure to runtime table
IDs. Each UTBLMAP structure must be initialized with table information. To
initialize UTBLMAP, use the mapping macro command INITBLMAP. For a
description of the UTBLMAP structure, see “The RHLI Structures” chapter.
The mapping operation fails in these cases:
The table specified in the UTBLMAP member tblnm does not exist in the
database.
The table’s runtime mapping ID specified in the member remapid does not
match the compile-time mapping ID.
Multiple values are mapped to the same runtime table ID.
406
You cannot map the value of a table that is already mapped, or reset the ID of a table
which has not been mapped.
To reset the value of a previously mapped table ID, set the value of UTBLMAP
member tblnm to (char *)0 or the null-string (“”) .
Cross-mapping of table IDs is allowed.
The runtime table ID to which a compile-time table ID has been mapped can also be
obtained by calling the uinftbl function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Security
Table IDs can be re-mapped only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
uaddtbl, uaddtnm, ualltbl, ubndtbl, udrptbl, udrptnm, ufchtnm, uinftbl,
ulcksch, ulcktbl, unumtbl, uulksch, uulktbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
407
umapvol
Map a compile-time volume ID to its runtime equivalent
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umapvol( dbid, nvol, volmapl, statusl, status )
UDBID dbid;
int nvol;
UVOLMAP volmapl[];
USTATUS statusl[];
USTATUS *status;
Arguments
Description
dbid
Database ID issued by uopndb function
ntbl
Number of volume IDs in the volmapl list
volmapl
List of UVOLMAP structures, each containing information about a
separate table
statusl
Returned list of status values, one for each volmapl entry
status
Returned status of the function
Maps the compile-time volume IDs stored in each UVOLMAP structure to runtime
volume IDs. Each UVOLMAP structure must be initialized with volume information.
To initialize UVOLMAP, use the mapping macro command INIVOLMAP. For a
description of the UVOLMAP structure, see “The RHLI Structures” chapter.
The mapping operation fails in these cases:
The volume specified in the UVOLMAP member volnm does not exist in the
database.
The volume’s runtime mapping ID specified in the member remapid does not
match the compile-time mapping ID.
Multiple values are mapped to the same runtime volume ID.
408
You cannot map the value of a volume that is already mapped, or reset the ID of a
volume which has not been mapped.
To reset the value of a previously mapped volume ID, set the value of UVOLMAP
member volnm to (char *)0 or the null-string (“”) .
Cross-mapping of volume IDs is allowed.
The runtime volume ID to which a compile-time volume ID has been mapped can
also be obtained by calling the uinfvol function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Security
You must have DBA authority to re-map a volume ID.
For information about granting DBA authority, see uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uaddprf, uaddvol, uallvol, ubndvol, udrpprf, udrpvol, uinfvol, umodvol,
unumvol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
409
umodath
Modify a schema name
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umodath( txid, nauth, dbauthl, statusl, status )
UTXID txid;
int nauth;
DBAUTH *dbauthl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
The transaction ID
nauth
Number of schemas in the dbauthl list
dbauthl
List of DBAUTH structures, each describing a separate schema to
modify
statusl
Returned list of status values, one for each dbauthl entry
status
Returned status of the function
Modifies the schema name for one or more schemas listed in the dbauthl list. Each
DBAUTH structure in the dbauthl list contains information about a schema. For a
description of the DBAUTH structure, see “The RHLI Structures” chapter.
Schema names specified in the dbauthl list must be unique within the database.
Security
To modify a schema name, you must have one of the following permissions.
DBA authority: the name for any schema in the database can be changed
SCHEMA authority and schema access permission: the name for the current
schema only can be changed
410
For information about granting DBA and SCHEMA authority, see the uaddprv
function; for information about granting schema access permission, see the uaddprm
function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the umodath function to change a schema name.
if ( ubndath(txid, 1, &argv[1], USLCK, &aid, statusl, &status) != UFAILURE )
{
dbauthl.authnm = argv[2];
/* Change schema name */
dbauthl.aid = aid;
/* Authorization ID */
/* Modify the schema */
if ( umodath(txid, 1, &dbauthl, &statusl, &status) != USUCCESS)
{
fprintf(stderr, ”Unable to modify schema: %ld\n”,status);
fprintf(stderr,”Schema name %s Auth. ID. %ld status: %ld\n”,
dbauthl.authnm, dbauthl.aid, statusl);
uexit(1);
}
}
else
fprintf(stderr, ”Schema %s not in database\n”, argv[1]);
See Also
uaddath, uallath, ubndath, udrpath, ufchath, uinfath, umapath, unumath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
411
umodbt
Modify a B-tree name
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umodbt( txid, nbt, dbbtl, statusl, status )
UTXID txid;
int nbt;
DBBTREE *dbbtl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
The transaction ID
nbt
Number of B-trees in the dbbtl list
dbbtl
List of DBBTREE structures, each describing a separate B-tree to
modify
statusl
Returned list of status values, one for each dbbtl entry
status
Returned status of the function
Modifies the B-tree name for one or more B-trees listed in the dbbtl list. Each
DBBTREE structure in the dbbtl list must be specified with the new B-tree name.
Because the umodbt function can change only a B-tree name, initialize the
DBBTREE structure members btname and btid only. For a description of the
DBBTREE structure, see “The RHLI Structures” chapter.
B-tree names specified in the dbbtl list must be unique within a table.
Security
To modify the name for a B-tree, the B-tree must be in the current schema and you
must have one of the following permissions.
DBA authority
SCHEMA authority
412
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
If the database was opened with the DB_REMAP or DB_PARTMAP options,
compileĆtime IDs are automatically mapped to their runtime equivalents for all
database objects. Therefore, you do not need to map the object IDs by calling
the mapping functions. If you do call a mapping function for an already mapped
object, the UEISMAP error is returned. You can ignore this error.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the umodbt function to change the name of a B-tree index.
if ((dbbtl = (DBBTREE *)calloc(1, sizeof(DBBTREE))) == NULL)
uexit(1);
dbbtl.btid
= $parts.*part_num_btree$;
dbbtl.btname = ”PARTS”;
if ((dbbtl.statusl = (USTATUS *)calloc(1, sizeof(USTATUS))) == NULL)
{
free (dbbtl);
uexit(1);
}
if ( umodbt(txid, 1, dbbtl, statusl, &status) != USUCCESS )
{
fprintf(stderr,”Failure modifying B-tree name: status = %ld\n”,status);
free (dbbtl);
uexit(1);
}
See Also
uaddbt, ubndbt, udrpbt
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about ID mapping, see page 42.
413
umoddb
Modify a database
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umoddb( txid, dbinfo, status )
UTXID txid;
DBINFO *dbinfo;
USTATUS *status;
Arguments
Description
txid
The transaction ID
dbinfo
Database information descriptor
status
Returned status of the function.
Modifies the following attributes of a database:
file access mode (dbmode)
file owner ID (dbusrid)
file group ID (dbgrpid)
database description (descprt)
database name (dbname)
Database parameters are modified by initializing a DBINFO structure (pointed to by
dbinfo). For a description of the DBINFO structure, see “The RHLI Structures”
chapter.
The variable name following each parameter in the list above is the corresponding
DBINFO structure member to initialize.
Security
You must have DBA authority to modify a database. For information about granting
DBA authority, see uaddprv function.
414
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the umoddb function to modify database attributes.
dbinfo.dbmode
dbinfo.dbusrid
dbinfo.dbgrpid
dbinfo.descrpt
database”;
dbinfo.dbname
=
=
=
=
0666;
0;
/* owned by root (see /etc/passwd) */
0;
/* group root (see /etc/group) */
”Inventory, capacity, & production planning
= ”parts_data_base”;
if ( umoddb(txid, &dbinfo, &status) != USUCCESS )
fprintf(stderr,”Failure modifying database: status = %ld\n”,status);
See Also
uadddb, udrpdb
chmod(2) and chown(2) in your UNIX system manual
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
415
umodhsh
Modify a hash table name
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umodhsh( txid, nmods, dbhashl, statusl, status )
UTXID txid;
int nmods;
DBHASH *dbhashl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
The transaction ID
nmods
Number hash tables in the dbhashl list
dbhashl
List of DBHASH structures, each describing a separate hash table to
modify
statusl
Returned list of status values, one for each dbhashl entry
status
Returned status of the function
Modifies the hash table name for one or more hash tables listed in the dbhashl list.
Each DBHASH structure in the dbhashl list must be specified with the new hash table
name. Hash table names specified in the dbhashl list must be unique within a table.
Because the umodhsh function can change only a hash table name, initialize the
DBHASH structure members htname and hid only. For a description of the DBHASH
structure, see “The RHLI Structures” chapter.
Security
To modify the name for a hash table, the hash table must be in the current schema and
you must have one of the following permissions.
DBA authority
SCHEMA authority
416
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the umodhsh function to change the hash table name.
dbhash.hid
dbhash.htname
= $manf.#mano_ht$;
= ”mano_hshtbl”;
if ( umodhsh(txid, 1, &dbhash, statusl, &status) != USUCCESS )
{
fprintf(stderr,”Failure modifying a hash index: status = %ld\n”,status);
fprintf(stderr, ”index status = %ld\n”, *statusl);
}
See Also
uaddhsh, ubndhsh, udrphsh
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
417
umodlnk
Modify a link name
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umodlnk( txid, nlnks, dblinkl, statusl, status )
UTXID txid;
int nlnks;
DBLINK *dblinkl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
The transaction ID
nlnks
Number of links in the dblinkl list
dblinkl
List of DBLINK structures, each describing a separate link to modify
statusl
Returned list of status values, one for each dblinkl entry
status
Returned status of the function.
Modifies the link name for one or more links listed in the dblinkl list. Each DBLINK
structure in the dblinkl list must be specified with the new link name.
Because the umodlnk function can change a link name only, initialize only the
DBLINK structure members lnkname and lid. For a description of the DBLINK
structure, see “The RHLI Structures” chapter.
The new link name must be unique within both the parent and child tables.
Security
To modify a link, the link must be in the current schema and you must have one of
the following permissions.
DBA authority
SCHEMA authority
418
Also, the two tables comprising the link definition must be made accessible by one of
these methods:
Make the schema that contains both tables current.
If the tables are located in two separate schemas, make the schema that
contains the first table current and have schema access to the schema that
contains the second table.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function. To grant schema access, use the uaddprm
function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the umodlnk function to modify the link index name.
dblink.lid
= $parts.@part_num_link$;
dblink.lnkname = ”part_number_link”;
if ( umodlnk(txid, 1, &dblink, statusl, &status) != USUCCESS )
{
fprintf(stderr,
”Error modifying link: status = %ld\n”, status);
fprintf(stderr, ”link status = %ld\n”, *statusl);
}
See Also
uaddlnk, ubndlnk, udrplnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
419
umodusr
Modify a user name and default schema
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umodusr( txid, nuser, dbuserl, statusl, status )
UTXID txid;
int nuser;
DBUSER *dbuserl;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
The transaction ID
nuser
Number of users in the dbuserl list
dbuserl
List of DBUSER structures, each describing a separate user’s
information to modify
statusl
Returned list of status values, one for each dbuserl entry
status
Returned status of the function
Modifies the name and default schema for each user listed in the dbuserl list. Each
DBUSER structure in the dbuserl list must be specified with the new user or default
schema name information; one of these items may be omitted by specifying a null
value.
For a description of the DBUSER structure, see “The RHLI Structures” chapter.
Security
A user’s name and default schema can be modified only under the following
conditions:
If you have DBA authority, any user name or default schema can be modified.
If you don’t have DBA authority, only your user name can be modified; the
default schema can be changed only if you have schema access permission to
the new schema.
To grant DBA authority, use the uaddprv function. To grant schema access
permission, use the uaddprm function.
420
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the umodusr function to change a user name.
/* define required parameters */
UTXID
txid;
DBUSER * dbuserl;
USTATUS statusl;
USTATUS status;
/ * Retrieve user ID (uoid) */
...
/* Initialize DBUSER structure */
dbuserl.uoid = uoid; /* User ID to change */
dbuserl.usernm = argv[2]; /* New user name */
dbuserl.aid = UNULLAID; /* Keep same default schema */
/* Modify the user information */
if (umodusr(txid, 1, &dbuserl, &statusl, &status) != USUCCESS){
fprintf(stderr, ”Unable to modify user: %ld\n”, status);
fprintf(stderr, ”Users %s auth. id. %ld status: %ld\n”,
dbuserl.usernm, dbuserl.aid, statusl);
uexit(1);
}
else
fprintf(stderr, ”User %s not registered in database\n”,argv[1]);
See Also
uaddusr, udrpusr
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
421
umodvol
Modify a volume name
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int umodvol( txid, nmods, dbvolml, statusl, status )
UTXID txid;
int nmods;
DBVOLM *dbvolml;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
The transaction ID
nmods
Number of volumes in the dbvolml list
dbvolml
List of DBVOLM structures, each describing a separate volume to
modify
statusl
Returned list of status values, one for each dbvolml entry
status
Returned status of the function.
Modifies the volume name for each volume listed in the dbvolml list. Each DBVOLM
structure in the dbvolml list contains information about a volume.
Because the umodvol function can change a volume name only, initialize only the
DBVOLM structure members volname and vid. For a description of the DBVOLM
structure, see “The RHLI Structures” chapter.
The new volume name must be unique within the current database.
Security
You must have DBA authority to modify a volume. For information about granting
DBA authority, see the uaddprv function.
422
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the umodvol function to change a volume name.
dbvolml.volname = ”master parts database”;
if ( umodvol(txid, 1, &dbvolml, statusl, &status) != USUCCESS )
{
fprintf(stderr,
”Failure modifying a volume: status = %ld\n”,status);
fprintf(stderr, ”volume status = %ld\n”, *statusl);
}
See Also
uaddvol, udrpvol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
423
unumath
Retrieve the number of schemas in the database
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumath( txid, count, status )
UTXID txid;
long *count;
USTATUS *status;
Arguments
txid
The transaction ID
count
Pointer to the number of schemas currently in the database
status
Returned status of the function
Description
Returns the number of schemas registered in the database.
Security
The number of schemas is returned only for schemas to which you have access.
You always have access to the current schema. Additionally, you can access other
schemas if you have been granted schema access permission to the schema or if a
schema you can access has schema privileges to another schema (or a table or column
in the schema). If you have DBA authority, you can access any schema in the
database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function. To grant schema access, use the uaddprm
function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
424
Example
This example calls the unumath function to retrieve the number of accessible
schemas.
/* define required parameters */
UTXID
txid;
long
count;
USTATUS status;
/* open the database and begin a transaction */
...
/* Retrieve number of accessible schemas */
if (unumath(txid, &count, &status) != USUCCESS)
{
printf(”Cannot get the auth. count: status = %ld\n”,
status);
}
See Also
uinfath, ubndath
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
425
unumcgp
Retrieve the number of columns in a column group
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumcgp( txid, cid, ngid, status )
UTXID txid;
UCID cid;
long *ngid;
USTATUS *status;
Arguments
Description
txid
The transaction ID
cid
Column ID of a column
ngid
Pointer to a buffer which contains the number of columns in the
column group, or, if the specified column is not a column group, the
number of column groups to which this column belongs
status
Returned status of the function.
If the column ID (specified by cid) is member of a column group, the unumcgp
function returns the total number of members in that column group that are available.
Otherwise, the number of column groups to which the ordinary column belongs is
returned.
There is no indication as to which count is returned; for further information on how
to identify the type of column, see the uinfcol function.
426
Security
The unumcgp function counts and returns the number of columns in column groups
of tables that you have access to only.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function. To grant schema access, use the uaddprm
function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the unumcgp function to retrieve the number of column groups in
the parts table.
/* define RHLI interface required parameters */
UTXID
txid;
long
count;
USTATUS status;
if (unumcgp(txid, $parts.$, &count, &status) != USUCCESS)
{
printf(”Could not get the number of column groups:”);
printf(” status = %ld\n”, status);
uexit(101);
}
See Also
unumtbl, unumrow, ubndtbl, uinfcol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
427
unumchd
Retrieve the number of child rows for a link
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumchd( txid, ptid, prid, lid, nchild, status )
UTXID txid;
UTID ptid;
URID prid;
ULID lid;
long *nchild;
USTATUS *status;
Arguments
txid
The transaction ID
ptid
Table ID of the parent row of the link
prid
Row ID of the parent row of the link
lid
Link ID of the link
nchild
Pointer to the number of rows that are children of the known parent
row
status
Returned status of the function.
Description
Given a parent row ID, returns the number of rows that are children of the specified
parent row of a link. Because multiple links can exist on a given parent table, the
Link ID is used to determine the child table to query.
Security
Link information is returned only for links in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
428
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function. To grant schema access, use the uaddprm
function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the unumchd function to retrieve the number of child rows in the
link index.
/* define RHLI interface required parameters */
UTXID
txid;
URID
prid;
long
nchild;
USTATUS status;
/* this assumes a database is open & a transaction begun */
if ( unumchd(txid, $parts.$, prid, $@parts_avail$, &nchild,
&status) != USUCCESS )
{
printf(”Cannot get the child row count: status = %ld\n”,
status);
uexit(99);
}
See Also
uaddlnk, ubndtbl, udrplnk, unumcol, unumprn
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
429
unumcol
Retrieve the number of columns in a table
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumcol( txid, tid, ncol, status )
UTXID txid;
UTID tid;
long *ncol;
USTATUS *status;
Arguments
txid
The transaction ID
tid
Table ID of the table containing the columns
ncol
Pointer to the number of columns in the table specified
status
Returned status of the function.
Description
Returns the number of available columns for the specified table.
Security
Column information can be retrieved only for columns in tables that you have access
to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
430
Example
This example uses the unumcol function to retrieve the number of accessible
columns in the parts table.
/* define RHLI interface required parameters */
UTXID
txid;
long
ncol;
USTATUS status;
if ( unumcol(txid, $parts.$, &ncol, &status) != USUCCESS)
{
printf(”Could not get the number of columns:”);
printf(” status = %ld\n”, status);
uexit(99);
}
See Also
unumtbl, unumrow, ubndtbl, uinftbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
431
unumprn
Retrieve the number of parent rows for a link
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumprn( txid, ctid, crid, lid, nparent, status )
UTXID txid;
UTID ctid;
URID crid;
ULID lid;
int *nparent;
USTATUS *status;
Arguments
Description
txid
The transaction ID
ctid
Table ID of the child row of the link
crid
Row ID of the child row of the link
lid
Link ID of the link
nparent
Pointer to the number of parent rows
status
Returned status of the function.
Given a child row ID, returns the number of rows (0 or 1) that are parents of the
specified child row of the link.
A return value of zero for nparent implies the child row link column has a null value.
Because multiple links can exist on a given parent table, the Link ID must be
specified to determine the parent table to query.
A child row can have only zero or one parent.
432
Security
Link information is returned only for links in tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the unumprn function to determine if a row is a parent row in a
link index.
/* define required parameters */
UTXID
txid;
URID
crid;
long
nparent;
USTATUS status;
if ( unumprn(txid, $parts.$, crid, $@parts_used$, &nparent,
&status) != USUCCESS)
{
printf(”Cannot get the parent row count: status = %ld\n”,
status);
uexit(99);
}
See Also
uaddlnk, udrplnk, unumcol, unumchd
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about using links, see “Choosing an Access Method” in Unify
DataServer: Managing a Database.
433
unumrow
Retrieve the number of rows in a table
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumrow( txid, tid, count, status )
UTXID txid;
UTID tid;
long *count;
USTATUS *status;
Arguments
txid
The transaction ID
tid
Table ID of the table
count
Pointer to the number of rows currently in the table
status
Returned status of the function.
Description
Returns the number of available rows in the specified table.
Security
Row information is returned only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
434
Example
This example uses the unumrow function to return the number of accessible rows.
/* define required parameters */
UTXID
txid;
long
count;
USTATUS status;
/* this assumes a database is open & a transaction begun */
if ( unumrow(txid, $parts.$, &count, &status) != USUCCESS)
{
printf(”Cannot get the row count: status = %ld\n”,
status);
uexit(99);
}
See Also
unumcol, unumtbl, ubndtbl
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
435
unumtbl
Retrieve the number of tables in the database
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumtbl( txid, aid, ntbl, status )
UTXID txid;
UAID aid;
long *ntbl;
USTATUS *status;
Arguments
Description
txid
The transaction ID
aid
A valid authorization ID for a schema or UNULLAID
ntbl
Pointer to the number of tables currently in the database
status
Returned status of the function.
Returns the number of available tables in the database.
If aid is set to UNULLAID, the unumtbl function returns the total number of tables
the current schema has access to; otherwise, if aid is set to an authorization ID for a
schema, the number of tables that are accessible to the specified schema is returned.
Security
The count is returned for tables that you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
To make a schema current, use the ufchath function. To grant authority or schema
privileges, use the uaddprv function.
436
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the unumtbl function to return the number of accessible tables.
/* define required parameters */
UTXID
txid;
long
ntbl;
USTATUS status;
if ( unumtbl(txid, aid, &ntbl, &status) != USUCCESS)
{
printf(”Cannot get the table count: status = %ld\n”,
status);
uexit(99);
}
printf(”There are currently %ld tables in the database.\n”,
ntbl);
See Also
unumcol, unumrow
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
437
unumusr
Retrieve the number of users in the database
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumusr( txid, nuser, status )
UTXID txid;
long *nuser;
USTATUS *status;
Arguments
txid
The transaction ID
nuser
Pointer to the number of users currently in the database
status
Returned status of the function
Description
Returns the number of users registered in the database.
Security
The number of users are returned as follows:
If you have DBA authority, the count of all users currently accessing the
database is returned.
If you don’t have DBA authority, only your user ID is counted.
For information about granting DBA authority, see the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
438
Example
This example calls the unumusr function to return the number of database users.
/* define required parameters */
UTXID
txid;
long
nuser;
USTATUS status;
/* open the database and begin a transaction */
...
/* retrieve number of users */
if ( unumusr(txid, &nuser, &status) != USUCCESS )
{
printf(”Cannot get the user count: status = %ld\n”,
status);
uexit(99);
}
See Also
unumrow, unumcol, unumtbl, unumvol
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
439
unumvol
Retrieve the number of volumes in the database
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int unumvol( txid, nvol, status )
UTXID txid;
int *nvol;
USTATUS *status;
Arguments
txid
The transaction ID
nvol
Number of volumes currently in the database
status
Returned status of the function.
Description
Counts the number of volumes in the database.
Security
You must have DBA authority to retrieve the number of volumes in the database. For
information about granting DBA authority, see the uaddprv function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the unumvol function to retrieve the number of active volumes in
the database:
/* define RHLI interface required parameters */
UTXID
txid;
long
nvol;
USTATUS status;
440
/* this assumes a database is open & a transaction begun */
if ( unumvol(txid, &nvol, &status) != USUCCESS )
{
printf(”Cannot get the volume count: status = %ld\n”,
status);
uexit(99);
}
See Also
unumrow, unumcol, unumtbl, unumusr
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about managing database volumes, see “Managing the Database
Files” in Unify DataServer: Managing a Database.
441
uopndb
Open a database
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uopndb( db_name, opnopts, dbid, status )
char *db_name;
UOPTS opnopts;
UDBID *dbid;
USTATUS *status;
Arguments
Description
db_name
A fully-qualified database name. If parts of the fully-qualified name
are omitted (or have the value (char *)0), the values in the DBHOST,
DBUSER, DBPATH, and DBNAME configuration variables determine
the missing part.
opnopts
Database open options; see the following sections
dbid
Pointer to a returned database ID that uniquely describes this
database
status
Returned status value of the operation
Opens the database specified by database name. The values of the DBNAME, DBPATH,
DBHOST, and DBUSER configuration variables affect the default database as described
in Unify DataServer: Configuration Variable and Utility Reference.
When a database is opened, a database ID is returned (pointed to by dbid). This
database ID should be used for all future references to the database.
A database opened during the execution of a program must be closed (by calling the
uclsdb function) before the program terminates.
Only one database can be opened at a time. Be sure to close an open database (by
calling the uclsdb function) before opening a new one.
442
When the uopndb function is called for the first time, several daemons that Unify
DataServer uses to manage database operations are started up. These daemons stay
running until the database is shut down (by using the shutdb utility).
Once the daemons have been started, all subsequent calls to the uopndb function (by
any transaction) do not have to re-start the daemons, causing the database to be
opened faster than the first time.
1. Database Valid opnopts values are described below. To specify more than one option,
Open Options separate options in the argument list with the bitwise logical OR operator (|).
DB_NORMAL Normal mode; default actions are taken for all categories of options
described below. If DB_NORMAL is combined with any other
option, that option overrides the default behavior in its category.
Definition Lock Options
DB_LCKSCH
Lock all table definitions in the database regardless of whether or not
the object is referenced. If you specify this option, no data definition
operations can be performed in the database. That is, no adding or
dropping of tables, columns, or indexes is allowed.
DB_NOLOCK Do not lock any table definitions. If you specify this option, your
transaction can perform data definition operations in the database.
You can acquire and release definition locks explicitly at runtime by
calling the ulcksch and uulksch functions. You can use the name
binding functions to perform all name binding at runtime.
If no definition lock options are specified, the DB_NORMAL option places shared
locks only on object definitions that are referenced at compile time by your
application. These locks prevent all transactions (including your own) from
redefining any of these database objects while this application has the database open.
Unify DataServer uses an object ID list created by the Unify DataServer linker, uld,
to lock objects referenced at compile time when the DB_NORMAL option is chosen.
If you do not use ucc and uld to compile and link your application programs, no
definition locks are acquired.
Definition locks acquired by the DB_NORMAL option are released only when the
database is closed.
443
If you specify DB_NOLOCK, you cannot also specify DB_REMAP. You cannot
specify both DB_NOLOCK and DB_LCKSCH.
Signal Handling Options
DB_NOEXIT
Do not exit when an interrupt occurs; interrupt signals should be
handled by Unify DataServer. When an interrupt signal is received,
all RHLI functions after the signal fail with a status value of
UEINTRPT until the signal is cleared with the uclritr function.
The effect of DB_NOEXIT is ignored in these cases:
The DB_NOSIGS option is also specified.
The DB_EXIT option was specified on a previous usetitr call.
DB_NOSIGS
Do not install signal handlers when you open the database. Possible
reasons for wanting to use the DB_NOSIGS option are:
You are certain that stray interrupt signals from other users will
not occur.
You want to handle interrupt signals yourself.
You want increased performance when opening the database since
the signal handlers do not need to be installed.
The signal handlers monitor and handle interrupt signals while the
database is opening. For example, if a “kill” signal is received (such
as a kill –3), Unify DataServer makes every attempt to bring the
database to a consistent state (by ending transactions, releasing locks,
writing updates to the disk, etc.) before aborting the current
operation.
Warning
Some signals, if not handled by your application, can corrupt your
database. Use DB_NOSIGS with caution.
Compile-time ID Mapping Options
DB_REMAP
Remap compile-time objects produced during compile-time
name-binding, to runtime object IDs. This runtime feature is useful
for cases where your application is run on machines where the
database may have been redefined, causing the original object IDs to
have changed.
When specifying the DB_REMAP option, your application must be
loaded by using the Unify DataServer loader, uld.
444
If you specify DB_REMAP, you cannot also specify DB_NOLOCK.
DB_PARTMAP Used with the DB_REMAP option to perform partial ID-mapping.
You must also specify the DB_REMAP option. You must use the
special syntax compiler directives in place of each object ID
referenced in the application program.
DB_CONDMAP Used with the DB_PARTMAP option to indicate conditional
ID-mapping. You must also specify the DB_REMAP option.
Performance
Specifying the DB_REMAP option can impact performance when opening a database
since remapping is performed on all object IDs defined for the database, whether or
not the IDs are accessed.
Database Update Options
The DB_RDONLY option means that only non-update, insert, or delete operations are
allowed. The database can be opened with DB_RDONLY mode even if other
processes have opened the database for update operations.
If DB_RDONLY is not specified, DB_NORMAL opens the database in read/write
mode.
Security
To open a database, one of the following conditions must be true:
You are the creator of the database.
You have access to the database.
For information about creating a database, see the uadddb function; for information
about granting database access, see the uaddusr function.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
445
Example
This example uses the uopndb function to open the database.
/* define required parameters */
UDBID
dbid;
char * dbname = ”parts.db”;
USTATUS status;
...
/* open ’parts.db’ database */
if ( uopndb(dbname, DB_NORMAL, &dbid, &status) != USUCCESS)
{
printf(”Unable to open parts database %s\n”, dbname);
uexit(1);
}
See Appendix A for more examples.
See Also
ubegtx, uclsdb, uinfdb, ulcksch
fflush(3) in your UNIX system manual
AUTOSTART configuration variable in Unify DataServer: Configuration Variable and
Utility Reference
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
446
uopnjrn
Open a journal file
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uopnjrn(dbname, jrnname, jrnfd, sequence, status)
char *dbname;
char *jrnname;
int *jrnfd;
long *sequence;
USTATUS *status;
Arguments
Description
dbname
Pointer to the path name of the database associated with the journal
jrnname
Pointer to the path name of the journal file to open
jrnfd
Pointer to the returned file descriptor for the opened journal file
sequence
Pointer to the returned journal sequence number of the journal header
status
Returned status of the function
Opens the specified journal file. The uopnjrn function call returns a file descriptor of
the opened journal file and the journal sequence number contained in the journal
header.
The sequence number is a unique number assigned to each journal file when it is
created. The first journal created following a backup of the database is assigned a
sequence number of 1. The sequence number is incremented for each subsequent
journal file.
Information in the journal can then be read using the ufchjrn function call. After
processing the journal file, the uclsjrn function closes the journal and frees up
resources.
447
The uopnjrn function implicitly opens and closes the database in order to extract
schema information needed to process the journal file. Therefore the database cannot
be opened at the time that the uopnjrn function call is called.
Only one journal file can be open at a time.
Security
To open and process the journal, one of the following conditions must be true:
You have DBA authority.
You have access to the tables and columns that are referenced in the journal.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
See Appendix A.
See Also
ufchjrn, uclsjrn
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction management and using the transaction journal, see
“Managing Transactions and Locks”and “Preventing Data Loss” in Unify
DataServer: Managing a Database.
448
upkfrow
Fetch a row by the value of its primary key
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int upkfrow(txid, tid, lcktype, rid, keycoll, unipcoll, statusl, status)
UTXID txid;
UTID tid;
int lcktype;
URID *rid;
UNIPCOLL *keycoll;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
txid
The transaction ID
tid
Table ID of the table that contains the row to fetch
lcktype
Lock type to place on the fetched row. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
rid
Returned row ID of the retrieved row
keycoll
A pointer to a UNIPCOLL structure that specifies the primary key
column list
unipcoll
A pointer to a UNIPCOLL structure that specifies the column
retrieval list
statusl
Returned list of status values, one for each keycoll/unipcoll list entry
status
Returned status of the function
449
Description
Retrieves columns of the indicated row from the specified table by using the supplied
primary key.
For the keycoll argument, specify any multiple key column values in any order. A
primary key column cannot be a null value.
UNIPCOLL contains several lists that describe both the column and the column’s
value. All of the columns specified in the column list structure must belong to the
table ID specified. For a description of how to initialize the UNIPCOLL structure, see
“The RHLI Structures” chapter.
Security
A row can be returned only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
ufchrow, ufchtbl, ufchlnk
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
450
uposord
Position by values to a row within an ordered access
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uposord (txid, oaccid, rop, keyvall, lcktype, ridp, statusl, status)
UTXID txid;
UOACCID oaccid;
int rop;
UDBVAL *keyvall;
int lcktype;
URID *ridp;
USTATUS statusl[];
USTATUS *status;
Arguments
txid
Current transaction ID
oaccid
An ordered access ID as returned from the ubegord function
rop
A value indicating the relational operator (in comparison with the
beginning of the order) for the comparison. Options are:
ULTTST
Greatest value less than.
ULETST
Greatest value less than or equal to.
UEQTST
Equal to.
UGETST
Least value greater than or equal to.
UGTTST
Least value greater than.
keyvall
A pointer to a list of UDBVAL structures, one for each key column
whose value is to be positioned to.
lcktype
Lock type to place on row positioned to. Options are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
451
Description
ridp
Returned as the row ID of the new current row
statusl
Returned list of status values, one for each column value specified in
the keyvall list
status
Returned status of the operation
Alters the current position within the ordered access specified by oaccid.
If the function returns USUCCESS, the current position is set to the row whose
column values in conjunction with the relational operator match the column values
specified by the keyvall list. The row is locked with a lock no lower than the
requested lock.
The relational operator is in terms of the order specified by the UOACOLS structure
list passed to the ubegord function, not the physical order of the underlying access
method. For example, for an ascending order with values 1, 2, 3, 3, 3, 4, and 5,
UGTTST on value 3 will position to value 4. For the same values with a descending
order (5, 4, 3, 3, 3, 2, 1) UGTTST on value 3 will position to value 2.
A call to the ufchord function with a direction parameter of USAME, UNEXT, or
UPREV immediately following a call to the uposord function returns the row
positioned to by the uposord function.
If the function returns USUCCESS, the row ID of the new current row is returned with
a lock no lower than the requested lock.
If the function fails due to the inability to obtain the specified row lock, the current
position does not change. The position remains set to the position before the uposord
function was called.
Security
No privileges required.
Example
See Appendix A.
See Also
ubegord, uendord, ufchord, uskrord
452
usetitr
Set an interrupt; disallow database operations
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int usetitr( itropts, status )
UOPTS itropts;
USTATUS status;
Arguments
itropts
Process interrupt option. Options are:
DB_EXIT
Gracefully exit the application after an interrupt has
occurred
DB_NORMAL Return to the application after an interrupt has
occurred
DB_NOEXIT
status
Description
Do not exit when an interrupt occurs
Returned status of the function
Causes the current process to disallow database operations both in RHLI and in
Embedded SQL/A. The usetitr function should be called only when an interrupt
signal has been caught by a signal handler routine in your application program.
All database operations are disallowed while the interrupt is set, with the exception of
certain operations providing for process termination and closing of the database.
The database interrupts are not implemented through the UNIX signal function
interfaces.
Once an interrupt is set, all Unify DataServer-managed child processes are terminated
at a point where the database is in a known consistent state. Process interruption by
any other mechanism may require database recovery and is not recommended.
Before setting an interrupt with usetitr, be sure that a database is currently open.
453
If a database is opened by specifying the DB_NOEXIT option to the uopndb
function, or if the database is opened by using the Embedded SQL/A CONNECT or
OPEN DATABASE statements, the current application does not exit when an interrupt
occurs. However, if you specify the DB_EXIT option (for itropts) when calling the
usetitr function, the uopndb function DB_NOEXIT option is overridden, and the
application exits on this interrupt.
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example calls the usetitr function when the SIGQUIT signal occurs.
/* add include files */
#include <stdio.h>
#include <signal.h>
#include <include/rhli.h>
/* a signal handler routine */
void syncsig(syssig)
int syssig;
/* signal value received */
{
USTATUS status;
/* function status */
...
(void)signal(syssig, syncsig);
/* determine the signal type */
switch ( syssig )
{
case SIGHUP:
{
syncprt(); /* print statistics */
break;
}
case SIGQUIT:
{
usetitr(DB_EXIT, &status); /* exit application */
break;
}
case SIGUSR1:
{
sleeptm = 1;
/* reset global sleep time */
break;
454
}
default:
{
printf(”unknown signal caught: %d\n”, syssig);
break;
}
}
return;
}
See Also
uclritr
signal(2) in your UNIX system manual
455
uskrord
Alter the current position within the ordered access
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uskrord (txid, oaccid, lcktype, rid, status)
UTXID txid;
UOACCID oaccid;
int lcktype;
URID rid;
USTATUS *status;
Arguments
Description
txid
Current transaction ID (from the ubegtx or ucbgtx functions)
oaccid
An ordered access ID as returned from the ubegord function
lcktype
Lock type to place on row positioned to. Valid lock type values are:
UNULLLCK
No lock
USLCK
Shared lock
UXLCK
Exclusive lock
rid
Row ID of the row to seek to
status
Returned status of the operation
Given a valid Row ID, the uskrord function alters the current position within the
ordered access specified by oaccid. The current position is set to the row specified by
rid.
If the function fails due to the inability to obtain the specified row lock, the current
position does not change. The position remains set to the position before the uposord
function was called.
456
A call to the ufchord function with a direction parameter of USAME, UNEXT, or
UPREV immediately following a call to the uskrord function returns the row
positioned to by the uskrord function.
If the function returns USUCCESS, the row is locked with a lock no lower than the
requested lock.
Security
No privileges required.
Example
See Appendix A.
See Also
ubegord, uendord, ufchord, uposord
457
utrnctbl
Truncate a table
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int utrnctbl( txid, tid, status)
UTXID txid;
UTID tid;
USTATUS *status;
Arguments
txid
Transaction ID
tid
Table ID of the table to be truncated. The table cannot be a child in a link
index and it can only be a parent in a link index if the child tables are
empty. The table cannot have any B-trees stored in external files
(.idx)
status
Description
Returned status of the function
The utrnctbl function deallocates the allocated segments for the specified table and
returns the segments to the volume free space. All data in the table and in its indexes
is permanently dropped. The table definition and any index definitions that the table
has, however, are retained. Any triggers on the table are not executed and any DIS
definitions for the table are ignored.
Use the utrnctbl function when you want to quickly free up the segments being used
by a table but retain the table definition for future use. (The udrptbl function also
frees the allocated segments but does not retain the table definition.)
Although this is a DML operation, it is not recoverable. The table truncation is
logged however, and therefore replayable by the irma utility.
The utrnctbl function must be performed within its own transaction and the
transaction cannot be rolled back.
458
If the table being truncated contains variable-length data, the space held in the
variable–length data volumes must be released. For information on how to do this,
see the entry titled “Reclaim utility is no longer available” in the Unify DataServer
README.
The utrnctbl() function is not available with remote access.
Security
To use this statement, one of the following conditions must be true:
you have DBA authority
the table is in the current schema
the table is in another schema and the current schema has DELETE privilege
on the table or the schema containing the table
Example
The following example uses the utrnctbl() function to truncate a table.
/* define required parameters */
UTXID
txid;
USTATUS status;
...
/* start a new transaction */
...
/* xlock the table to be truncated */
...
/* truncate table scratchTbl */
if ( utrnctbl(txid, $scratchTbl.$, &status) != SUCCESS )
{
/* handle error */
fprintf(stderr, “Error truncating scratchTbl: status = %ld\n”,
status);
...
}
/* commit the transaction */
...
459
uulkdb
Unlock a database
#include <include/rhli.h>
#include <include/rhlierr.h>
Syntax
int uulkdb( txid, status )
UTXID txid;
USTATUS *status;
Arguments
Description
txid
The transaction ID.
status
Returned status of the function
Unlocks the database that acquired a lock during the specified transaction. Unlocking
a database releases all locks on the tables and rows in the database.
An exclusive lock is not released until the transaction that acquired the exclusive lock
is committed or aborted (by calling the ucmttx, ucbgtx, or uabttx function).
Security
No privileges required.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Example
This example uses the uulkdb function to unlock the database.
if ( uulkdb(txid, &status) != USUCCESS ) {
printf(”Unable to unlock database: status = %ld\n”, status);
uexit(99);
}
See Also
ulckrow, uulkrow, ulcktbl, uulktbl, ulckdb, ubegtx
For information about transaction and lock management, see “Managing Transactions
and Locks” in Unify DataServer: Managing a Database.
460
uulkrow
Unlock a row
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uulkrow( txid, tid, rid, status )
UTXID txid;
UTID tid;
URID rid;
USTATUS *status;
Arguments
Description
txid
The transaction ID.
tid
Table ID of the table containing the row to unlock
rid
Row ID of the row to unlock
status
Returned status of the function
Unlocks the row ID for the specified table so that other transactions can change the
row’s column data.
An exclusive lock is not released until the transaction that acquired the exclusive lock
is committed or aborted (by calling the ucmttx, ucbgtx, or uabttx function).
Security
Rows can be unlocked only for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
461
Example
This example uses the uulkrow function to unlock a row (with a rowid of 3) in the
company table.
/* define RHLI interface required parameters
UTXID
txid;
URID
rid;
USTATUS status;
/* open the database and begin a transaction
...
/* unlock the row */
rid = 3;
if ( uulkrow(txid, $company.$, rid, &status)
{
printf(”Unable to unlock row %ld: status
status);
uexit(99);
}
See Also
*/
*/
!= USUCCESS )
= %ld\n”, rid,
ulckdb, ulckrow, ulcktbl, uulktbl, uulkdb
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction and lock management, see “Managing Transactions
and Locks” in Unify DataServer: Managing a Database.
462
uulksch
Unlock a table definition
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
bool uulksch( txid, tid, status )
UTXID txid;
UTID tid;
USTATUS *status;
Arguments
Description
txid
Current transaction ID
tid
Table ID of the table to unlock
status
Returned status of the function
Unlocks (or releases) a table definition lock placed by the ulcksch function. A table
definition lock prevents any other transactions from changing or deleting the
definition for a table while table data is being accessed.
A table definition lock is separate from and does not interfere with a data lock. To
release a data lock, see the uulktbl or uulkrow function.
Security
Definition locks can only be released on tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
463
Example
This example uses the uulksch function to release a table definition lock for the
company table.
/* define RHLI interface required parameters */
UTXID
txid;
USTATUS status;
/* open the database and begin a transaction */
...
/* Unlock the table definition lock */
if (uulksch(txid, $company.$, &status) != USUCCESS)
{
printf(”definition unlock of company table failed—%ld\n”,
status);
uexit(99);
}
See Also
ulcksch, uinfsch
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction and lock management, see “Managing Transactions
and Locks” in Unify DataServer: Managing a Database.
464
uulktbl
Unlock a table
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uulktbl( txid, tid, status )
UTXID txid;
UTID tid;
USTATUS *status;
Arguments
Description
txid
Current transaction ID
tid
Table ID of the table to unlock
status
Returned status of the function
Unlocks all rows in that table specified by the table ID.
An exclusive lock is not released until the transaction that acquired the exclusive lock
is committed or aborted (by calling the ucmttx, ucbgtx or uabttx function).
Security
Only tables that you have access to can be unlocked.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
465
Example
This example uses the uulktbl function to unlock the company table.
/* define RHLI interface required parameters */
UTXID
txid;
USTATUS status;
/* open the database and begin a transaction */
...
/* lock the table */
if ( uulktbl(txid, $company.$, &status) != USUCCESS )
{
printf(”Unable to unlock table: status = %ld\n”,
status);
uexit(99);
}
See Also
ulckrow, uulkrow, ulcktbl, ulckdb, uulkdb
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
For information about transaction and lock management, see “Managing Transactions
and Locks” in Unify DataServer: Managing a Database.
466
uupdrow
Update a row
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
int uupdrow( txid, tid, rid, unipcoll, statusl, status )
UTXID txid;
UTID tid;
URID rid;
UNIPCOLL *unipcoll;
USTATUS statusl[];
USTATUS *status;
Arguments
Description
txid
Current transaction ID
tid
Table ID of the table containing the row to update
rid
Row ID of the row to update
unipcoll
A pointer to a UNIPCOLL structure specifying the column update list
statusl
Returned list of status values, one for each of the columns listed in
unipcoll
status
Returned status of the function
Updates a row according to the column values specified by the structure UNIPCOLL.
Columns specified in UNIPCOLL must belong to the table ID specified by tid.
UNIPCOLL contains several lists which describe both the column and the column
value. For a description of how to initialize the UNIPCOLL structure, see “The RHLI
Structures” chapter.
If any column has legal values defined by the Data Integrity Subsystem (DIS), the
valid DIS value is checked before any update is allowed. If any column value is
rejected, the entire row remains unmodified. For more information about DIS, see
Unify DataServer: Managing a Database.
467
When inserting into or updating columns of type U_STR (string), Unify DataServer
adds trailing blanks to values less than the total size defined for the column.
Security
Rows can only be updated for tables you have access to.
You can always access all tables in the current schema. Additionally, you can access
tables (or just columns within a table) in other schemas if your current schema has
been granted schema privileges to the other schema. If you have DBA authority, you
can access any table in the database.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
See Also
uinsrow, udelrow
For information about database security, see “Setting Up and Managing Security” in
Unify DataServer: Managing a Database.
468
uXMLAddAttribute()
Adds a new attribute to an element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLAddAttribute ( xmlObj, xmlStatus, attributeName, attributeValue )
xml_obj* xmlObj;
USTATUS xmlStatus;
const char* attributeName;
const char* attributeValue;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
attributeName Name of the new attribute to be added
attributeValue Value of the new attribute
Description
Adds a new attribute and its value to the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
469
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
const char* attributeName= “mothername”;
const char* attributeValue= “Maria”;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” for wellformedness,
parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program adds a new attribute to the current element. If
the current element pointer for element is at “<name>” , and
attributeName=”mothername” and attributeValue=”Maria”, then the XML becomes:
<_>
<name surname=”anderson” fathername=”mike”
mothername=”Maria”>Jack</name>
<_>
result = uXMLAddAttribute(xmlObj,&xmlStatus,attributeName,attributeValue);
See Also
uXMLCreateElement
470
uXMLCreateElement()
Creates a new element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLCreateElement ( xmlObj, xmlStatus, elementName, elementValue )
xml_obj* xmlObj;
USTATUS xmlStatus;
const char* elementName;
const char* elementValue;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
elementName
Name of the element
elementValue
Value of the element
Description
Creates a new element and appends it as child element to the current element. The
value of the child element is set to the specified elementValue.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
471
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
const char* elementName= “country”;
const char* elementValue= “USA”;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” for wellformedness,
parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program adds a new element to the current document
as a child element of the current element. If the current element pointer is at
<person>, elementName=”country” and elementValue=”USA”, then XML document
after the function is called becomes:
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
<country>USA</country>
</person>
result =uXMLCreateElement(xmlObj,&xmlStatus,elementName,elementValue);
See Also
uXMLAddAttribute
472
uXMLDeleteAttribute()
Deletes an attribute
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLDeleteAttribute( xmlObj, xmlStatus, attributeName )
xml_obj* xmlObj;
USTATUS xmlStatus;
const char* attributeName;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function attribute
Name
Name of the attribute to be deleted
Description
Deletes the specified attribute from the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information can be obtained by calling getErrorInfo().
Security
No privileges needed.
The following lines in the person.xml file define a person element.
473
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* xmlfile=”person.xml”;
xml_obj xmlObj;
int result = 0;
const char* attributeName= fathername ;
USTATUS xmlStatus;
....
The following lines in an RHLI program checks the person.xml file for
wellformedness, parses it, and prints the result.
result = uXMLParse( &xmlObj, &xmlStatus, xmlfile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program deletes the attribute of the current element. If
the current element pointer is set to <name> and the function is called with
attributeName= fathername”, the XML becomes:
<&>
<name surname=”anderson” >Jack</name>
<&. >
result =uXMLDeleteAttribute(xmlObj,&xmlStatus,attributeName);
See Also
uXMLChangeAttributeValue
474
uXMLDeleteCurrentElement()
Deletes the current element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLDeleteCurrentElement ( xmlObj, xmlStatus )
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function.
Description
Deletes the current element from the document and sets the current element pointer to
the parent element of the deleted element. If this function is called with the current
element set to the root element of the document, then the entire underlying document
structure is removed.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
USTATUS xmlStatus;
....
475
The following lines in an RHLI program check the “person.xml” file for
wellformedness, parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program deletes the current element from the
document. If the current element pointer is at element <name>, and the function
uXMLDeleteCurrentElement() is called, it deletes the <name> element from the
document. The XML document becomes:
<person>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
result =uXMLDeleteCurrentElement(xmlObj,&xmlStatus);
See Also
uXMLDeleteElementValue, uXMLModifyElementValue, uXMLDeleteAttribute
476
uXMLDeleteCurrentElementValue()
Deletes the value of an element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLDeleteCurrentElementValue ( xmlObj, xmlStatu s)
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function.
Description
Deletes the value of the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
const* char elementName= “name”;
USTATUS xmlStatus;
....
477
The following lines in an RHLI program check the “person.xml” file for
wellformedness, parse it, and print the results.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following lines in an RHLI program delete the value of the current element. If
the current element pointer is at element <age> then the
uXMLDeleteCurrentElementValue() function deletes the value for the element
<age>. The document becomes
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”></age>
<me>John</me>
</person>
result =uXMLDeleteCurrentElementValue(xmlObj, &xmlStatus);
478
uXMLDestroy
Destroys an XML object
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <uXML.h>
int uXMLDestroy (xmlObj, xmlStatus)
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
Pointer to Object reference
xmlStatus
Returned status of the function.
Description
Destroys the given xmlObj Reference.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Security
No privileges needed.
Example
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness, parse it, and print the results.
479
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
result =uXMLDestroy(&xmlObj, &xmlStatus);
480
uXMLGetAttributeCount()
Returns the number of attributes
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLGetAttributeCount ( xmlObj, xmlStatus, count )
xml_obj* xmlObj;
USTATUS xmlStatus;
int* count;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
count
Returned count of attributes of an element
Description
Returns the count of attributes associated with the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
int count;
char* name;
USTATUS xmlStatus;
....
481
The following lines in an RHLI program checks the “person.xml” file for
wellformedness, parses it, and prints the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program returns the number (integer value) of
attributes associated with current element. If the current element is <name> then the
uXMLGetAttributeCount() function sets the count variable to 2.
result = uXMLGetAttributeCount( xmlObj, &xmlStatus, &count );
See Also
uXMLGetAttributeNames, uXMLGetAttributeValues.
482
uXMLGetAttributeNames()
Returns the attribute names of an element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLGetAttributeNames ( xmlObj, xmlStatus, attributeNames )
xml_obj* xmlObj;
USTATUS xmlStatus;
char*** attributeNames;
Arguments
xmlObj
Object reference
xmlStatus
Returned status of the function
attributeNames Pointer to an array of attribute names, which are allocated and
returned by the function. The array is terminated by a NIL string.
Description
The function allocates an array of attribute names as strings.
The calling program is responsible to free the memory occupied by the array.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
483
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char * attributeNames;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” for wellformedness,
parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program assigns the list of the attribute names to
“result”. If the current element pointer is at <name>,the function returns
attributeNames as an array of character pointers terminated by NIL(char):
surname, fathername.
result = uXMLGetAttributeNames(xmlObj, &xmlStatus, &attributeNames);
...
/* use attributeNames */
char ** name = attributeNames;
printf(”\nThe attribute names are:\n”);
for( ; *name != NIL(char); ++name )
{
printf(”\t%s\n”, *name);
free(*name);
}
free(attributeNames);
attributeNames = 0;
See Also
uXMLGetAttributeValues, uXMLGetAttributeCount
484
uXMLGetAttributeValue()
Returns an attribute value
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLGetAttributeValue ( xmlObj, xmlStatus, attributeName,
attributeValue )
xml_obj* xmlObj;
USTATUS xmlStatus;
const char* attributeName;
char** attributeValue;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
attributeName Name of the attribute whose value you want to retrieve
attributeValue Returned value of attribute
Description
Returns the value of the specified attribute (attributeName) of the current element.
The calling program is responsible to free the memory occupied by the attributeValue
variable.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
For a list of the most commonly occurring function status values, see the status code
at beginning of this document. For a complete list of status returns and the associated
error messages with their explanations and corrections, see Unify DataServer: Error
messages.
485
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
const char* attributeName= “fathername”;
char* attributeValue;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” for wellformedness,
parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program returns the value of an attribute of the current
element. If the current element pointer is set to <name> and the
uXMLGetAttributeValue() function is called with attributeName=”fathername”, the
returned attribute value is ”mike”.
result = uXMLGetAttributeValue(xmlObj, &xmlStatus, attributeName,
&attributeValue)
See Also
uXMLGetAttributeValues, uXMLGetAttributeNames
486
uXMLGetAttributeValues()
Returns the attribute values of an element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLGetAttributeValues ( xmlObj, xmlStatus, attributeValues )
xml_obj* xmlObj;
USTATUS xmlStatus;
char** attributeValues;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
attributeValues Pointer to an array of attribute values, which are allocated and
returned by the function. the array is terminated by a NIL string.
Description
This function allocates an array of attribute names as strings.
The calling program is responsible to free the memory occupied by the
attributeValues variable.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
487
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* attributeValues;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” for wellformedness,
parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program assigns the list of the attribute values to
“result”. If the current element pointer is at <name>, the function returns the values
of all attributes as an array of character pointers terminated by NIL(char), such as:
Sanderson, mike
result=uXMLSetAttributeValues(xmlObj, &xmlStatus, &attributeValues);
...
/* use attributeNames */
char ** name = attributeValues;
printf(”\n the attribute values are:\n”);
for( ; *name != NIL(char); ++name )
{
printf(”\t%s\n”, *name);
free(*name);
}
free(attributeValues);
attributeValues = 0;
}
See Also
uXMLGetAttributeNames, uXMLGetAttributeCount
488
uXMLGetCurrentElementName()
Returns the tag name of the current element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLGetCurrentElementName ( xmlObj, xmlStatus, name )
xml_obj* xmlObj;
USTATUS xmlStatus,
char** name;
Arguments
Description
xmlObj
DOM object reference
xmlStatus
Returned status of the function
name
Returned tag name (allocated)
Returns the tag name of the current element in the name argument.
The calling program is responsible to free the memory occupied by name.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
489
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* name;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness and parse it.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following lines in an RHLI program print the current element name. If the
current element pointer is at element <person>, the uXMLGetCurrentElementName
function sets the name to “person”.
result = uXMLGetCurrentElementName( xmlObj, &xmlStatus, &name );
printf( ”\n name of element = %s \n”, name );
free (name);
490
uXMLGetErrorInfo()
Returns an error description
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLGetErrorInfo ( xmlObj, xmlStatus, errorInfo )
xml_obj* xmlObj;
USTATUS xmlStatus;
char** errorInfo;
Arguments
Description
xmlObj
DOM object reference
xmlStatus
Returned status of the function.
errorInfo
Returned error information
Returns a description (errorInfo) about the last error that occurred during XML
processing.
The calling program is responsible to free the memory occupied by errorInfo.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
491
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
char* errorInfo;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness, parse it, and print the results.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program provide the information about the last error;
the errorInfo variable has the information on the error.
result =uXMLGetErrorInfo(xmlObj,&xmlStatus,&errorInfo);
492
uXMLGetValueOfCurrentElement()
Returns the value of the current element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLGetValueOfCurrentElement( xmlObj, xmlStatus, elementValue )
xml_obj* xmlObj;
USTATUS xmlStatus;
char** elementValue;
Arguments
Description
xmlObj
DOM object reference
xmlStatus
Returned status of the function
elementValue
Returned value of the current element
Returns the value of the current element in the elementValue argument.
The caller is responsible to free the memory occupied by the elementValue variable.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
493
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* elementValue;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness and parses it.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following lines in an RHLI program print the current element name. If the
current element pointer is at element <me>, the uXMLGetCurrentElementName()
function sets the name variable to “John”.
result = uXMLGetValueOfCurrentElement( xmlObj, &xmlStatus,
&elementValue );
printf( ”\n name of element = %s \n”, elementValue );
free (elementValue);
See Also
uXMLGetCurrentElementName
494
uXMLModifyElementValue()
Modifies the value of an element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLModifyElementValue ( xmlObj, xmlStatus, elementValue )
xml_obj* xmlObj;
USTATUS xmlStatus;
const char* elementValue;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
elementValue
New value of the element
Description
Modifies the current value of an element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
495
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me></person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
const char* elementValue=”Joseph”;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness, parse it, and then print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program sets the new value to the current element. If
the current element pointer is set to <me>, and the function is called with a new
element value of “Joseph” (elementValue=”Joseph”), the function modifies the
document as:
<_>
<me>Joseph</me>
<_>
result =uXMLModifyElementValue(xmlObj,&xmlStatus,elementValue);
See Also
uXMLDeleteCurrentElement, uXMLCreateElement, uXMLDeleteElementValue
496
uXMLMoveToFirstChild()
Moves the current element pointer to the first child
Syntax
Arguments
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLMoveToFirstChild ( xmlObj, xmlStatus )
xml_obj* xmlObj;
USTATUS xmlStatus;
xmlObj
DOM object reference
xmlStatus
Returned status of the function
Description
Moves the current element pointer to the first child of the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* name;
USTATUS xmlStatus;
....
497
The following lines in an RHLI program check the “person.xml” file or
wellformedness and parse it.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following lines in an RHLI program move the current element pointer to the first
child of current element. If the current element is <person>, the
uXMLMoveToFirstChild() function sets the current element pointer to <name>.
result = uXMLMoveToFirstChild( xmlObj, &xmlStatus );
See Also
uXMLMoveToLastChild, uXMLMoveToNextSibling,
uXMLMoveToPreviousSibling, uXMLMoveToParentElement
498
uXMLMoveToLastChild()
Moves the current element pointer to the last child
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLMoveToLastChild ( xmlObj, xmlStatus )
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
Description
Moves the current element pointer to the last child of the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
499
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* name;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness and parse it.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program moves the current element pointer to the last
child of current element. If the current element is <person>, the
uXMLMoveToLastChild() function sets the current element pointer to <me>.
result = uXMLMoveToLastChild( xmlObj, &xmlStatus );
See Also
uXMLMoveToNextSibling,uXMLMoveToPreviousSibling,
uXMLMoveToFirstChild, uXMLMoveToParentElement
500
uXMLMoveToNextSibling()
Moves the current element pointer to next sibling
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLMoveToNextSibling ( xmlObj, xmlStatus )
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
Description
Moves the current element pointer to the next sibling of the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* name;
USTATUS xmlStatus;
....
501
The following lines in an RHLI program checks the “person.xml” file for
wellformedness, parses it, and prints the result status.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program moves the current element pointer to the next
sibling of the current element. If the current element is <name>, the
uXMLMoveToNextSibling() function sets the current element pointer to <age>.
result = uXMLMoveToNextSibling( xmlObj, &xmlStatus );
See Also
uXMLMoveToLastChild, uXMLMoveToPreviousSibling,
uXMLMoveToFirstChild, uXMLMoveToParentElement
502
uXMLMoveToParentElement()
Moves the current element pointer to the parent
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLMoveToParentElement ( xmlObj, xmlStatus )
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
Description
Moves the current element pointer to the parent of the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
For a list of the most commonly occurring function status values, see the status code
at beginning of this document. For a complete list of status returns and the associated
error messages with their explanations and corrections, see Unify DataServer: Error
messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
503
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* name;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness, parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program moves the current element pointer to the
parent element of current element. If the current element is <me> the
uXMLMoveToParentElement() function sets the current element pointer to <person>.
result = uXMLMoveToParentElement( xmlObj, &xmlStatus );
See Also
uXMLMoveToLastChild, uXMLMoveToNextSibling, uXMLMoveToFirstChild,
uXMLMoveToPreviousSibling
504
uXMLMoveToPreviousSibling()
Moves the current element pointer to the previous sibling
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLMoveToPreviousSibling ( xmlObj, xmlStatus )
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
Description
Moves the current element pointer to the pervious sibling of the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
505
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* name;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness and parse it.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program moves the current element pointer to the
previous sibling of the current element. If the current element is <me>, the
uXMLMoveToPreviousSibling() function sets the current element pointer to <age>.
result = uXMLMoveToPreviousSibling( xmlObj, &xmlStatus );
See Also
uXMLMoveToLastChild, uXMLMoveToNextSibling, uXMLMoveToFirstChild,
uXMLMoveToParentElement
506
uXMLMoveToRootElement()
Moves the current element pointer to the root element
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLMoveToRootElement ( xmlObj, xmlStatus )
xml_obj* xmlObj;
USTATUS xmlStatus;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
Description
Moves the current element cursor to the root element of the XML.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
char* name;
USTATUS xmlStatus;
....
507
The following lines in an RHLI program check the “person.xml” file for
wellformedness and parse it.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following lines in an RHLI program move the current element pointer to the root
element of the XML file. If the root element is <person>, the
uXMLMoveToRootElement() function sets the current element pointer to <person>.
result = uXMLMoveToRootElement( xmlObj, &xmlStatus );
508
uXMLParse()
Parses an XML file
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLParse ( xmlObj, xmlStatus, gXmlFile )
xml_obj* xmlObj;
USTATUS xmlStatus;
const char* gXmlfile;
Arguments
Description
xmlObj
DOM object reference
xmlStatus
Returned status of the function
gXmlfile
XML file name and absolute path
Parses the specified XML file (gXmlfile) and checks it for wellformedness.
The return value is 1 for success and 0 for failure.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”
>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
509
The following lines in an RHLI program check the “person.xml” file for
wellformedness and parse it:
const char* gXmlfile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
USTATUS xmlStatus;
....
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
510
uXMLSetAttributeValue()
Sets an attribute value
Syntax
#include <include/rhli.h>
#include <include/rhlierr.h>
#include <include/uXML.h>
int uXMLSetAttributeValue ( xmlObj, xmlStatus, attributeName,
attributeValue)
xml_obj* xmlObj;
USTATUS xmlStatus;
const char* attributeName;
const char* attributeValue;
Arguments
xmlObj
DOM object reference
xmlStatus
Returned status of the function
attributeName Name of the attribute whose value you want to change
attributeValue New value of the attribute
Description
Sets the attribute value (attributeValue) of the specified attribute (attributeName) of
the current element.
Status
Values
For a list of the most commonly occurring function status values, see page 54.
For a complete list of status returns and the associated error messages with their
explanations and corrections, Unify DataServer: Error Messages.
Additional information, if any, can be obtained by calling uXMLGetErrorInfo().
Security
No privileges needed.
511
Example
The following lines in the “person.xml” file define a person element.
<person>
<name surname=”anderson” fathername=”mike”>Jack</name>
<age dob=”12–12–1980” birth_place=”Sacramento”>20</age>
<me>John</me>
</person>
const char* gXmlFile=”person.xml”;
xml_obj* xmlObj;
int result = 0;
const char* attributeName= “fathername”;
const char* attributeValue= “Benjamin Martin”;
USTATUS xmlStatus;
....
The following lines in an RHLI program check the “person.xml” file for
wellformedness, parse it, and print the result.
result = uXMLParse( &xmlObj, &xmlStatus, gXmlFile );
printf( ”\n Parsed file result = %d:\n”, result );
....
The following line in an RHLI program modifies the value of the attribute of the
current element. If the current element pointer is set to <name> and the
uXMLSetAttributeValue() function is called with attributeName=”surname” and
attribute value=”Sanderson”, the XML becomes:
<_>
<name surname=”Sanderson” fathername=”mike”>Joseph</name>
<_>
result =uXMLSetAttributeValue(xmlObj,&xmlStatus,attributeName,
attributeValue );
See Also
uXMLDeleteAttribute
512
Appendixes
513
514
Appendix A:
Examples
This appendix contains complete and partial examples related to the
following areas:
Transaction handling
Scanning
An ordered access
Name binding
ID mapping
Transaction journalling
DDL
Text conversion
XML
All the RHLI functions used are listed before the examples.
Additional Help
For information about the structures used in the examples, see “The RHLI
Structures” on page 75.
515
Transaction Handling
This example performs various database transactions by using the
following RHLI functions: ualltx, ubegtx, uclsdb, ucmttx, ufchmsg,
uinftx, uinimsg, ulogmsg, and uopndb.
#include <rhli.h>
#include <rhlierr.h>
#define n_tx 10
main(argc, argv)
int argc;
char **argv;
{
int ntx = 2;
USTATUS status;
USTATUS fstatus;
USTATUS statusl[n_tx];
USTATUS lstats;
UDBID dbid;
char *dbname = ”file.db”;
UTXID txid, *txl;
UTXOPT txopt;
UTXID *txidl;
UTXINF txinfl[n_tx];
char *errmsg;
/* initialize the logging facilities */
if ( uinimsg(argv[0], &status) != USUCCESS)
{
printf (”error logging messages; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
516
Appendix A: Examples
/* open the database */
if ( uopndb ( dbname, DB_NORMAL, &dbid, &status) != USUCCESS )
{
printf (”unable to open the database; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
};
if (ulogmsg(”uopndb”, status, ”Opening database
DB_NORMAL”, &lstats) != USUCCESS)
{
printf (”error logging message; ”);
if ((errmsg = ufchmsg(lstats, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
}
else
printf (”Database is open.\n”);
/* begin a transaction */
txopt.txknd = UTXTYPE2;
txopt.waitflg = UWAIT;
if ( ubegtx (dbid, UROOTTXID, &txid, &txopt, &status) !=
USUCCESS )
{
printf (”unable to begin a transaction; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
uexit(1);
}
else
printf (”Transaction has begun. The transaction ID is: %d\n”,
txid);
Appendix A: Examples
517
/* retrieve information about the current transaction */
if (ualltx(dbid, UNULLPID, &ntx, &txidl, &status) != USUCCESS)
{
printf (”unable to get tx list; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
uexit(1);
}
printf (”%d\n”, ntx);
printf (”%d\n”, txidl[1]);
printf (”%d\n”, txidl[0]);
if (uinftx(dbid, ntx, txidl, UCLASS1, txinfl, statusl, &status)
!= USUCCESS)
{
printf (”unable to get tx information; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
free((UTXID *) txidl);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
free((UTXID *) txidl);
uexit(1);
};
}
else
printf (”The state of the first transaction is : %d\n”,
txinfl[0].state);
free((UTXID *) txidl);
518
Appendix A: Examples
/* end the transaction */
if ( ucmttx
(txid, &status) != USUCCESS )
{
printf (”unable to end transaction, ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
else
printf (”Transaction is committed.\n”);
/* close the database */
if ( uclsdb(dbid, DB_NORMAL, &status) != USUCCESS )
{
printf (”unable to close the database; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
else
printf (”Database is closed.\n”);
}
Appendix A: Examples
519
Scanning
This example uses the following RHLI functions: ualcscn, ubegscn,
ubegtx, uclsdb, ucmttx, uendscn, ufchmsg, ufchscn, ufrescn, uinfacs,
uinfscn, uinsand, uinsor, uinsprj, uinssrt, uinstbl, and uopndb.
This example performs the following scan:
select nv_number,nv_description where
nv_number between 5000 and 5100 and
(nv_description=”Bookcase, Steel” or
nv_description=”Bookends, oak”);
where
a1 = 5000, a2 = 5100, b1 = ”Bookcase, Steel”,
and b2 = ”Bookends, oak”
#include <rhli.h>
#include <rhlierr.h>
#include <stdio.h>
#define N_TABLE1_COL 6
UDBID dbid;
UTXID txid;
USTATUS status;
USTATUS statusl[N_TABLE1_COL];
UTXOPT txopt;
URID rid;
char *scaninf;
int scanid;
int prevlck;
UDBVAL search_dbv[5];
UDBVAL *prjvall;
UDBVAL *nulldbv;
UACSINF *acsinf;
UTID tid = $SQL_books.nvntry.$;
UCID cidl[] = {$SQL_books.nvntry.nv_number$,
$SQL_books.nvntry.nv_description$};
long a1,a2;
char b1[15],b2[15];
main ()
{
/* initialization */
init_dbvall();
txopt.txknd = UTXTYPE2;
txopt.waitflg = UWAIT;
520
Appendix A: Examples
/* open the database */
if (uopndb (””,DB_NORMAL,&dbid,&status) != USUCCESS)
fatal (”uopndb”);
/* begin a transaction */
if (ubegtx (dbid,UROOTTXID,&txid,&txopt,&status) != USUCCESS)
fatal (”ubegtx”);
/* perform scan */
if (ualcscn (txid,0,0,0,&scaninf,&status) != USUCCESS)
fatal (”ualcscn”);
if (uinstbl (txid,scaninf,tid,&status) != USUCCESS)
fatal (”uinstbl”);
if (uinsprj (txid,scaninf,2,cidl,statusl,&status) != USUCCESS)
fatal (”uinsprj”);
init_criteria();
if (uinsand (txid,scaninf,4,&status) != USUCCESS)
fatal (”uinsand”);
if (uinsor (txid,scaninf,$SQL_books.nvntry.nv_number$,URNGCC,
&search_dbv[0],&search_dbv[1], &status) != USUCCESS)
fatal (”uinsor”);
if (uinsor(txid,scaninf,$SQL_books.nvntry.nv_description$,ULIKE,
&search_dbv[2],nulldbv,&status) != USUCCESS)
fatal (”uinsor”);
if (uinsor(txid,scaninf,$SQL_books.nvntry.nv_description$,ULIKE,
&search_dbv[3], nulldbv,&status) != USUCCESS)
fatal (”uinsor”);
if (uinfscn (txid,scaninf,&prjvall,&status) != USUCCESS)
fatal (”uinfscn”);
/* define sort criteria */
if (uinssrt (txid, scaninf, $SQL_books.nvntry.nv_description$,
DB_ASCEND, &status) != USUCCESS)
fatal (”uinssrt”);
/* begin scan */
if (ubegscn (txid,USLCK,scaninf,&scanid,&status) != USUCCESS)
fatal (”ubegscn”);
Appendix A: Examples
521
/* retrieve access method type */
if (uinfacs (scanid, &acsinf, &status) != USUCCESS)
fatal (”uinfacs”);
else
printf (”Scan using : ”);
switch(acsinf.acsknd)
{
case USQSCN:
printf (”sequential access.\n”);
break;
case UBTSCN:
printf (”btree access.\n”);
break;
case UDKSCN:
printf (”direct access.\n”);
break;
case UHKSCN:
printf (”hash–key access.\n”);
break;
case ULKSCN:
printf (”link access.\n”);
break;
case UNULLSCN:
printf (”scan not initialized.\n”);
break;
default: printf (”undefined return from infacs.\n”);
}
while (ufchscn(scanid,&rid,prjvall,&prevlck,statusl,&status)
== USUCCESS)
printf (”%d | %s \n”, *(prjvall[0].unip.hintp),
prjvall[1].unip.strp);
if (status != UEEOSCN)
fatal (”ufchscn”);
if (uendscn (scanid,&status) != USUCCESS)
fatal (”uendscn”);
if (ufrescn (txid,&scaninf,DB_RESET,&status) != USUCCESS)
fatal (”ufrescn”);
if (ucmttx (txid,&status) != USUCCESS)
fatal (”ucmttx”);
if (uclsdb (dbid,DB_NORMAL,&status) != USUCCESS)
fatal (”uclsdb”);
uexit (0);
}
522
Appendix A: Examples
/* Since these buffers probably only need to be set up once,
no matter how often you do the query, it is best to initialize
them in some function once, and if possible call it only once.
This will save runtime CPU time.
*/
init_dbvall()
{
search_dbv[0].unip.hintp = &a1;
search_dbv[0].valopts = UNORMAL;
search_dbv[1].unip.hintp = &a2;
search_dbv[1].valopts = UNORMAL;
search_dbv[2].unip.strp = b1;
search_dbv[2].valopts = UNORMAL;
search_dbv[3].unip.strp = b2;
search_dbv[3].valopts = UNORMAL
nulldbv = (UDBVAL *) 0L;
}
/* The actual query is set up in terms of variables, not
constants.So the query reads: select nv_number,nv_description where
nv_number between a1 and a2
and (nv_description = b1 or nv_description = b2) ;
*/
init_criteria()
{
a1 = 5000;
a2 = 5100;
strcpy (b1,”Bookcase, Steel”);
strcpy (b2,”Bookends, oak”);
}
/* A simple error routine */
fatal (fn)
char *fn;
{
char
*errmsg;
USTATUS
fchstats;
printf (”An error occurred in %s;”, fn);
if ((errmsg = ufchmsg(status, &fchstats)) == (char *) 0)
printf (”error fetching message: %ld\n”, fchstats);
else
printf (”error is %s \n”, errmsg);
uexit(99);
}
Appendix A: Examples
523
An Ordered Access
The following example uses all ordered access functions ufchord,
uendord, uposord, and uskrord. ubegtx, uclsdb, ucmttx, and uopndb
are also called.
#include
#include
<rhli.h>
<rhlierr.h>
main(argc, argv)
int argc;
char **argv;
{
/* define required parameters */
UTXID
txid;
/* Transaction ID
UTID
tid;
/* Table ID
URID
rid;
/* Row ID
UOACCID
oaccid;
/* Order Access ID
UOACOLS
UNIPEXT
UNIPCOLL
UCID
UDBVAL
UTP_HINT
*/
URID
UDBVAL
USTATUS
USTATUS
ord_list[2]; /* column sort order list
unipext[3];
unipcoll;
cidl[3];
/* list of Column IDs
dbvall[3];
/* list of column values
maxsalesrep = 0; /* maximum company salesrep
*/
svrid = 0;
keyvall[2];
statusl[3];
status;
*/
/* Define
char
char
ETP_HINT
external and internal data types */
extaddress2[30];
extaddress1[30];
extsalesrep;
char
char
UTP_HINT
intaddress2[30];
intaddress1[30];
intsalesrep;
char
UTXOPT
UDBID
/* save area for Row ID
*/
*/
/* status value list
*/
/* status returned by RHLI functions */
*dbname;
txopt;
dbid;
/* Set up for ordered
ord_list[0].oacid
=
ord_list[0].oacopts =
ord_list[1].oacid
=
ord_list[1].oacopts =
524
*/
*/
*/
*/
access on the address */
$SQL_books.company.co_address_2$;
DB_ASCEND;
$SQL_books.company.co_address_1$;
DB_ASCEND;
Appendix A: Examples
dbname = ”file.db”;
if ( uopndb ( dbname, DB_NORMAL, &dbid, &status) != USUCCESS )
{
printf (”unable to open the database; ”);
uexit(1);
}
else
printf (”Database is open.\n”);
/* begin a transaction */
txopt.txknd = UTXTYPE2;
txopt.waitflg = UWAIT;
if (ubegtx (dbid, UROOTTXID, &txid, &txopt, &status)
!= USUCCESS )
{
printf (”unable to begin a transaction; ”);
uexit(1);
}
else
printf (”Transaction has begun. The transaction ID is:%ld\n”,
txid);
/* Begin ordered access on table company */
if ( ubegord (txid, $SQL_books.company.$, 2, ord_list, &oaccid,
statusl, &status) != USUCCESS )
{
printf(”ubegord failed. \n”);
uexit(1);
}
/* Position to second half of the alphabet */
keyvall[0].unip.strp = ”M”;
keyvall[1].unip.strp = ”A”;
if ( uposord (txid, oaccid, UGETST, keyvall, USLCK, &rid, statusl,
&status) != USUCCESS )
{
printf(”uposord failed. \n”);
uexit(1);
}
/* Initialize UNIPCOLL structure components */
unipcoll.ncol = 3;
unipcoll.cidl = cidl;
unipcoll.dbvall = dbvall;
/* Initialize (at compile–time) Column IDs list */
cidl[0] = $SQL_books.company.co_address_2$;
cidl[1] = $SQL_books.company.co_address_1$;
cidl[2] = $SQL_books.company.co_sales_rep$;
Appendix A: Examples
525
/* Define the internal–format buffer addresses */
dbvall[0].unip.strp = intaddress2;
dbvall[1].unip.strp = intaddress1;
dbvall[2].unip.hintp = &intsalesrep;
dbvall[0].valopts = UNORMAL;
dbvall[1].valopts = UNORMAL;
dbvall[2].valopts = UNORMAL;
/* Read each row looking for highest salesrep */
while ( ufchord(txid, oaccid, UNEXT, USLCK, &rid, &unipcoll,
statusl, &status) != UFAILURE )
{
if ( intsalesrep > maxsalesrep )
{
maxsalesrep = intsalesrep;
svrid = rid;
}
/* Reset valopts for next fetch */
unipcoll.dbvall[0].valopts = UNORMAL;
unipcoll.dbvall[1].valopts = UNORMAL;
unipcoll.dbvall[2].valopts = UNORMAL;
}
/* Error if other than end of file was returned */
if ( status != UEEOSCN )
{
printf(”ufchord failed. \n”);
uexit(1);
}
/* Seek row with highest salesrep */
if ( uskrord (txid, oaccid, USLCK, svrid, &status) != USUCCESS )
{
printf(”uskrord failed. \n”);
uexit(1);
}
/* Now fetch the address of the company and its salesrep */
if ( ufchord(txid, oaccid, USAME, &rid, &unipcoll, USLCK, statusl,
&status) != USUCCESS )
{
printf(”ufchord failed. \n”);
uexit(1);
}
/* Define the external–format buffer addresses */
unipext[0].univ.strp = extaddress2;
unipext[1].univ.strp = extaddress1;
unipext[2].univ.hintp = &extsalesrep;
/* Display external–format data */
printf(”Highest salesrep in M through Z locates at:\n %s\n%s\n”,
extaddress1, extaddress2);
printf(” with a salesrep of %ld\n”, extsalesrep);
526
Appendix A: Examples
/* End the ordered access and release resources */
if ( uendord (oaccid, &status) != USUCCESS )
{
printf(”uendord failed \n”);
uexit(1);
}
/* end the transaction */
if ( ucmttx (txid, &status) != USUCCESS )
{
printf (”unable to end transaction \n ”);
uexit(1);
}
else
printf (”Transaction is committed.\n”);
/* close the database */
if ( uclsdb(dbid, DB_NORMAL, &status) != USUCCESS )
{
printf (”unable to close the database \n ”);
uexit(1);
}
else
printf (”Database is closed.\n”);
}
Appendix A: Examples
527
Name Binding
This example performs name binding with the following function calls
involved: ubegtx, ubndath, ubndtbl, uclsdb, ucmttx, ufchath,
ufchmsg, ulogmsg, and uopndb.
#include <rhli.h>
#include <rhlierr.h>
main(argc, argv)
int argc;
char **argv;
{
USTATUS status;
USTATUS fstatus;
USTATUS statusl[3];
USTATUS lstats;
UDBID dbid;
char *dbname = ”file.db”;
UTXID txid;
UTXID *txl;
UTXOPT txopt;
UTXID *txidl;
UTXINF *txinfl;
int nauth;
char *authnml;
int ntbl = 3;
int i;
char * tblnml[3];
UTID *tidl[3];
UAID aid;
char * db_name;
DBUSER *dbuser;
int nuser;
char *errmsg;
528
Appendix A: Examples
/* open the database */
if ( uopndb ( dbname, DB_NORMAL, &dbid, &status) != USUCCESS )
{
printf (”unable to open the database; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
if (ulogmsg(”uopndb”, status, ”Opening database DB_NORMAL”,
&lstats) != USUCCESS)
{
printf (”error logging message; ”);
if ((errmsg = ufchmsg(lstats, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
}
else
printf (”Database is open.\n”);
/* begin a transaction */
txopt.txknd = UTXTYPE2;
txopt.waitflg = UWAIT;
if (
ubegtx (dbid, UROOTTXID, &txid, &txopt, &status)
!= USUCCESS )
{
printf (”unable to begin a transaction; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
else
printf (”Transaction has begun. The transaction ID is:%d\n”,
txid);
Appendix A: Examples
529
authnml = ”SQL_books”;
if ( ubndath(txid, 1, &authnml, USLCK, &aid, statusl,
&status) != USUCCESS )
{
printf(”Unable to get Auth.ID by name: status = %ld\n”, status);
uexit(1);
}
/* aid = UNULLAID; */
/* set schema to SQL_books */
if (ufchath(txid, aid, &status) != USUCCESS) {
printf(”Unable to change current schema.\n”);
uexit(1);
}
/* bind the table names to IDs */
tblnml[0] = ”company”;
tblnml[1] = ”orders”;
tblnml[2] = ”nvntry”;
if (ubndtbl(txid, aid, ntbl, tblnml, USLCK, tidl, statusl,
&status) != USUCCESS)
{
printf (”Unable to get tables ids; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
for (i = 0; i < ntbl; ++i)
printf (”The table ID is : %ld\n”, tidl[i]);
/* end the transaction */
if ( ucmttx (txid, &status) != USUCCESS )
{
printf (”unable to end transaction, ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
else
printf (”Transaction is committed.\n”);
530
Appendix A: Examples
/* close the database */
if ( uclsdb(dbid, DB_NORMAL, &status) != USUCCESS )
{
printf (”unable to close the database; ”);
if ((errmsg = ufchmsg(status, &fstatus)) == (char *) 0)
{
printf(”error %ld fetching message \n”, fstatus);
uexit(1);
}
else
{
printf(”error is %s \n”, errmsg);
uexit(1);
};
}
else
printf (”Database is closed.\n”);
}
Appendix A: Examples
531
ID Mapping
The following example uses the functions umapath, umapcol, and
umaptbl to map compile-time IDs to their runtime equivalents.
#define NATH 4
/* # of schemas in the database */
/* define required parameters */
USTATUS statusl[NATH]; /* schema status list */
USTATUS status;
/* function status */
UDBID dbid;
/* database ID */
UATHMAP uathmap[NATH]; /* schema mapping structure */
...
/* re-map compile-time Authorization IDs –> runtime IDs */
INIATHMAP(manf_schema, aidl[1], &uathmap[0]);
INIATHMAP(model_schema, aidl[2], &uathmap[1]);
INIATHMAP(item_schema, aidl[3], &uathmap[2]);
if (umapath(dbid, 3, uathmap, statusl, &status) != USUCCESS)
{
printf(”Auth. ID re-mapping error: status=%ld\n”, status);
uexit(99);
}
The following example uses the umapcol function to map a compile-time
ID to its runtime equivalent.
#define NCOL 3
#define NCOLMAP 3
#define NTBLMAP 2
/* define required parameters */
UTXID txid;
/* Transaction ID */
USTATUS
status;
/* function status */
...
/* define umapcok requirements */
UCOLMAP
colmapl[NCOLMAP]; /* column mapping structure */
USTATUS
cmapstl[NCOLMAP]; /* column status value list */
...
/* re-map compile-time Column IDs –> runtime IDs */
INICOLMAP(sales.revenues.cust_name,
$(UCOL:CID)sales.revenues.cust_name$,
&colmapl[0]);
INICOLMAP(sales.revenues.cust_id,
$(UCOL:CID)sales.revenues.cust_id$,
&colmapl[1]);
INICOLMAP(sales.revenues.sale_date,
$(UCOL:CID)sales.revenues.sale_date$,
&colmapl[2]);
532
Appendix A: Examples
if (umapcol(dbid, NCOLMAP, colmapl, cmapstl, &status) != USUCCESS)
{
printf(“Unable to re-map Column ID: status = %ld\n”,
status);
uexit(101);
}
/* re-map compile-time Table IDs –> runtime IDs */
INITBLMAP(sales.commissions, $(UTBL:TID)sales.commissions$,
&tblmapl[0]);
INITBLMAP(sales.revenues, $(UTBL:TID)sales.revenues$,
&tblmapl[1]);
if (umaptbl(dbid, NTBLMAP, tblmapl, tmapstl, &status) != USUCCESS)
{
printf(“Unable to re-map Table ID: status = %ld\n”, status);
uexit(101);
}
Appendix A: Examples
533
Transaction Journaling
This example uses the journaling functions uclsjrn, ufchjrn, and
uopnjrn to manipulate the journal file.
/* define required parameters */
char
*dbname = “”; /* use DBPATH */
int
jrnfd;
/* returned journal file descriptor */
long
seqn;
/* sequence number */
UJRNINF
jrninfo;
/* journal oper info structure */
USTATUS
status; /* status returned by uxxxjrn */
USTATUS
fchstat;
/* status returned by ufchmsg */
/* open journal file */
if (uopnjrn(dbname, “/usr/user/linda/db/file.jn”, &jrnfd, &seqn,
&status) != USUCCESS)
{
printf ( “uopnjrn failed: \n”);
uexit( 1 );
}
/* fetch journal information */
while ( ufchjrn ( jrnfd, &jrninfo, &status ) == USUCCESS)
{
switch ( jrninfo.opknd )
{
case UINSOPR:
printf (“Insert to table %ld by user %ld\n”,jrninfo.tid,
jrninfo.ids.uid );
free ( jrninfo.txinfo.insert.newucol );
break;
case UUPDOPR:
printf (“Update to table %ld by user%ld\n”,
jrninfo.tid,jrninfo.ids.uid );
free ( jrninfo.txinfo.update.newucol );
free ( jrninfo.txinfo.update.olducol ); break;
case UDELOPR:
printf (“Delete to table %ld by user,%ld\n”,
jrninfo.tid, jrninfo.ids.uid );
free ( jrninfo.txinfo.delete.olducol );
break;
}
}
534
Appendix A: Examples
if ( status != UENORM && status != UEJNEOTP )
{
printf (”ufchjrn() failed: \n”);
uexit( 1 );
}
/* close journal files */
if ( uclsjrn(jrnfd, &status) == UFAILURE )
{
printf (“uclsjrn() failed: \n”);
uexit( 1 );
}
Appendix A: Examples
535
DDL
This example creates a table named member.
The RHLI functions used are uaddtbl, ubegtx, ubndbt, uclsdb, ucmttx,
udrpbt, and uopndb.
#include <rhli.h>
#include <rhlierr.h>
UDBID dbid;
UTXID txid;
USTATUS status;
USTATUS statusl[4];
UTXOPT txopt;
DBCOL
dbcoll[4];
DBTABLE dbtablel[1];
int
i;
main(argc, argv)
int argc;
char **argv;
{
/* open the database */
if (uopndb ((char *) 0,DB_NORMAL,&dbid,&status) != USUCCESS)
fatal (”uopndb”, status);
printf(”Database opened.\n”);
/* begin a transaction */
txopt.txknd = UTXTYPE2;
txopt.waitflg = UWAIT;
if (ubegtx (dbid,UROOTTXID,&txid,&txopt,&status) != USUCCESS)
fatal (”ubegtx”, status);
printf(”Transaction begun.\n”);
/* add a table */
dbcoll[0].coltyp = U_INT;
dbcoll[0].collen = UIL_INT;
dbcoll[0].colscl = 0;
dbcoll[0].dsplen = UDL_INT;
dbcoll[0].dspscl = 0;
dbcoll[0].colopts = DB_NORMAL;
dbcoll[0].colnm = ”mem_id”;
dbcoll[0].coldesc = (char *) 0;
dbcoll[0].dsppict = (char *) 0;
dbcoll[1].coltyp = U_STR;
dbcoll[1].collen = 20;
536
Appendix A: Examples
dbcoll[1].colscl = 0;
dbcoll[1].dsplen = 20;
dbcoll[1].dspscl = 0;
dbcoll[1].colopts = DB_NONULL;
dbcoll[1].colnm = ”mem_name”;
dbcoll[1].coldesc = (char *) 0;
dbcoll[1].dsppict = (char *) 0;
dbcoll[2].coltyp = U_AMT;
dbcoll[2].collen = 9;
dbcoll[2].colscl = 2;
dbcoll[2].dsplen = 9;
dbcoll[2].dspscl = 0;
dbcoll[2].colopts = DB_NORMAL;
dbcoll[2].colnm = ”mem_sal”;
dbcoll[2].coldesc = (char *) 0;
dbcoll[2].dsppict = (char *) 0;
dbcoll[3].coltyp = U_HDATE;
dbcoll[3].collen = 0;
dbcoll[3].colscl = 0;
dbcoll[3].dsplen = 10;
dbcoll[3].dspscl = 0;
dbcoll[3].colopts = DB_NONULL;
dbcoll[3].colnm = ”mem_date”;
dbcoll[3].coldesc = (char *) 0;
dbcoll[3].dsppict = (char *) 0;
dbtablel[0].dbcol = dbcoll;
dbtablel[0].vid = UNULLVID;
dbtablel[0].segsz = 0L;
dbtablel[0].expnum = 1000;
dbtablel[0].statusl = statusl;
dbtablel[0].tblopts = DB_NORMAL;
dbtablel[0].ncol = 4;
dbtablel[0].tblnm = ”member”;
dbtablel[0].tbldesc = (char *) 0;
if (uaddtbl(txid, 1, dbtablel, statusl, &status) != USUCCESS)
{
for (i=0; i<4; i++)
printf(”Column %d status: %ld\n”, i, statusl[i]);
fatal (”uaddtbl”, status);
}
printf(”Table added. \n”);
/* commit the transaction and close the database */
if (ucmttx (txid, &status) != USUCCESS)
fatal (”ucmttx”, status);
printf(”Transaction committed.\n”);
if (uclsdb (dbid,DB_NORMAL, &status) != USUCCESS)
fatal (”uclsdb”, status);
printf(”Database closed.\n”);
uexit (0);
}
Appendix A: Examples
537
/* A simple error routine that prints out the function name and
the errorstatus of the last RHLI call that failed, and exit */
fatal (fctname, status)
char * fctname;
USTATUS status;
{
int i;
printf (”Fatal error on %s;”, fctname);
printf (”status is %d\n”, status);
uexit(1);
}
The following example drops two B-tree indexes.
/* allocate storage for the B-tree and status list */
bidl = (UBTID *)calloc(2, sizeof(UBTID));
statusl = (USTATUS *)calloc(2, sizeof(USTATUS));
...
/* bind the B-tree named ’part_number’ */
ubndbt(txid, $parts$, 1, ”part_number”, USLCK, &bidl[0],
&statusl[0], &status);
...
/* bind to the B-tree named ’ord_number’ */
ubndbt(txid, $parts$, 1, ”ord_number”, USLCK, &bidl[1],
&statusl[1], &status);
...
/* drop both B-trees */
if ( udrpbt(txid, 2, bidl, statusl, &status) != USUCCES)
{
fprintf(stderr,
”B-trees could not be dropped: status=%ld\n”,
status);
}
538
Appendix A: Examples
Text Conversion
This example uses the uextint function to convert data values before they
are inserted into a row by calling uinsrow.
#define NCOL 3
/* define external data types
ETP_INT
extpnum;
/*
ETP_STRP
extpnam[80];
/*
ETP_DATE
extpdat;
/*
*/
external–format part number */
external–format part name */
external–format part date */
/* define internal data types
UTP_INT
intpnum;
/*
char
intpnam[80];
/*
UTP_DATE
intpdat;
/*
*/
internal–format part number */
internal–format part name */
internal–format part date */
/* define RHLI interface required parameters */
URID
rid;
USTATUS
status;
USTATUS
statusl[NCOL];
UTXID
UNIPCOLL
UNIPEXT
UCID
UDBVAL
txid;
unipcoll;
unipext[NCOL];
cidl[NCOL];
dbvall[NCOL];
/* initialize UNIPCOLL structure components */
unipcoll.ncol = NCOL;
unipcoll.cidl = cidl;
unipcoll.dbvall = dbvall;
/* initialize (at compile–time) Column IDs list */
cidl[0] = $parts.part_name$;
cidl[1] = $parts.part_number$;
cidl[2] = $parts.part_date$;
/* define the internal–format buffer addresses */
dbvall[0].unip.strp = intpnam;
dbvall[1].unip.intp = &intpnum;
dbvall[2].unip.datep = &intpdat;
/* define the external–format buffer address */
unipext[0].univ.strp = extpnam;
unipext[0].valopts = UNORMAL;
Appendix A: Examples
539
unipext[1].univ.intp = &extpnum;
unipext[1].valopts = UNORMAL;
unipext[2].univ.datep = &extpdat;
unipext[2].valopts = UNORMAL;
/* define the external data values to be converted to internal
format */
sprintf(extpnam, ”Ronnieco %s”, ”Wedg–o–matic”);
extpnum = 1995;
extpdat.month = 12;
/* manufacture month */
extpdat.day
= 31;
/* manufacture day */
extpdat.year = 1987;
/* manufacture year */
/* this assumes the database is open & a transaction begun */
if (uextint(txid, $parts.$, unipext, &unipcoll, statusl,
&status) != USUCCESS)
{
printf(”data conversion failed: %ld\n”, status);
uexit(100);
}
/* insert the data into the database */
if (uinsrow(txid, $parts.$, &rid, &unipcoll, statusl,
&status) != USUCCESS)
{
printf(”data insertion failed: %ld\n”, status);
uexit(101);
}
The next example calls ufchrow to retrieve a row from a database table,
and uses the uintext function to convert data from internal format to
external format.
#define
NCOL
3
/* define external data types */
ETP_INT
extpnum;
/* external–format part number */
char
extpnam[80]; /* external–format part name */
ETP_DATE
extpdat;
/* external–format part date */
...
/* define internal data types */
UTP_INT
intpnum;
/* internal–format part number */
char
intpnam[80]; /* internal–format part name */
UTP_DATE
intpdat;
/* internal–format part date */
...
/* define required parameters */
UTXID
txid;
URID
rid;
USTATUS
status;
USTATUS
statusl[NCOL];
UNIPCOLL
unipcoll;
UNIPEXT
unipext[NCOL];
UCID
cidl[NCOL];
UDBVAL
dbvall[NCOL];
540
Appendix A: Examples
/* initialize UNIPCOLL structure components */
unipcoll.ncol = NCOL;
unipcoll.cidl = cidl;
unipcoll.dbvall = dbvall;
...
/* initialize (at compile–time) Column IDs list */
cidl[0] = $parts.part_name$;
cidl[1] = $parts.part_number$;
cidl[2] = $parts.part_date$;
...
/* define the internal–format buffer addresses */
dbvall[0].unip.strp = intpnam;
dbvall[0].valopts = UNORMAL;
dbvall[1].unip.intp = &intpnum;
dbvall[1].valopts = UNORMAL;
dbvall[2].unip.datep = &intpdat;
dbvall[2].valopts = UNORMAL;
...
/* define the external–format buffer address */
unipext[0].univ.strp = extpnam;
unipext[1].univ.intp = &extpnum;
unipext[2].univ.datep = &extpdat;
/* retrieve the internal–format data from the database */
if (ufchrow(txid, $parts.$, USLCK, rid, &unipcoll, statusl,
&status) != USUCCESS)
{
printf(”data retrieval failed: %ld\n”, status);
uexit(101);
}
...
/* convert the internal format data to external format */
if (uintext(txid, $parts.$, &unipcoll, &unipext, statusl,
&status) != USUCCESS)
{
printf(”data conversion failed: %ld\n”, status);
uexit(100);
}
/* now display the external–format data */
printf(”part–number: %d\n”, extpnum);
printf(”part–name:
%s\n”, extpnam);
printf(”part–date:
%02d/%02d/%02d\n”,
extpdat.month, extpdat.day, extpdat.year);
Appendix A: Examples
541
XML example
This example uses the XML processing RHLI functions to parse an XML
file. The XML file could be the result a previous select operation that
specified the AS XML clause or it could be from another source.
#include <stdio.h>
#include <def/globdefs.h>
#include <def/rhli.h>
#include <def/uXML.h>
int main(int argc,char* argv[])
{
const char *xmlFile = ”person.xml”;
xml_obj xmlObj = 0;
int
count;
char** attributeNames = 0;
char** attributeValues = 0;
int
result = 0;
char* attributeValue;
char* elementValue;
USTATUS xmlStatus;
char* elementName = 0;
if ( ! uXMLParse(&xmlObj, &xmlStatus, xmlFile) )
{
printf(”Error opening or parsing file ’%s’ error code=%d\n”,
xmlFile, xmlStatus);
exit(1);
}
542
Appendix A: Examples
if( ! uXMLMoveToRootElement(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToRootElement”, xmlStatus);
uXMLDestroy(&xmlObj, &xmlStatus);
exit(1);
}
/*
* The current element cursor now points to root element.
*/
if ( ! uXMLGetCurrentElementName(xmlObj, &xmlStatus, &elementName) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetCurrentElementName”, xmlStatus);
}
else
{
printf(”\n name of root element = %s \n”, elementName);
free(elementName);
}
if ( ! uXMLMoveToFirstChild(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToFirstChild”, xmlStatus);
}
/*
* The current element cursor now points to first child of root element.
*/
if ( ! uXMLGetCurrentElementName(xmlObj, &xmlStatus, &elementName) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetCurrentElementName”, xmlStatus);
}
else
{
printf(”\n name of first child =%s \n”, elementName);
free(elementName);
}
Appendix A: Examples
543
if ( ! uXMLGetAttributeNames(xmlObj, &xmlStatus, &attributeNames) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetAttributeNames”, xmlStatus);
}
else
{
/*
* The variable ”attributeNames” contains attribute names of
* current element i.e. ”name”, The variable attributeNames will
* contain ”surname, fathername”
*/
char ** name = attributeNames;
printf(”\nThe attribute names are:\n”);
for( ; *name != NIL(char); ++name )
{
printf(”\t%s\n”, *name);
free(*name);
}
free(attributeNames);
attributeNames = 0;
}
if ( ! uXMLGetAttributeValues(xmlObj, &xmlStatus, &attributeValues) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetAttributeValues”, xmlStatus);
}
else
{
/*
* The variable ”attributeValues” conatins attribute values of
* current element i.e. ”name”, the varibale attributeValues
* will contain ”anderson, mike”.
*/
char ** name = attributeValues;
printf(”\n the attribute values are:\n”);
for( ; *name != NIL(char); ++name )
{
printf(”\t%s\n”, *name);
free(*name);
}
free(attributeValues);
attributeValues = 0;
}
544
Appendix A: Examples
/* Get attribute count of an element */
if ( ! uXMLGetAttributeCount(xmlObj, &xmlStatus, &count) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetAttributeCount”, xmlStatus);
}
else
{
/* The variable ”count” should contain value 2 */
printf(”\n number of attributes are :%d ”, count);
}
if ( ! uXMLAddAttribute(xmlObj, &xmlStatus, ”mothername”, ”Maria”) )
{
printf(”Error in %s error code=%d\n”, ”uXMLAddAttribute”, xmlStatus);
}
if ( ! uXMLGetAttributeNames(xmlObj, &xmlStatus, &attributeNames) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetAttributeNames”, xmlStatus);
}
else
{
/*
* THE VARIABLE ”attributeNames” CONATINS ATTRIBUTE NAMES OF
* CURRENT ELEMENT i.e. ”name”, THE VARIBALE ”attributeNames” WILL
* CONTAIN ”surname, fathername, mothername”
*/
char ** name = attributeNames;
printf(”\nThe attribute names are:\n”);
for( ; *name != NIL(char); ++name )
{
printf(”\t%s\n”, *name);
free(*name);
}
free(attributeNames);
attributeNames = 0;
}
if ( ! uXMLMoveToNextSibling(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToNextSibling”, xmlStatus);
}
Appendix A: Examples
545
/* THE CURRENT ELEMENT CURSOR NOW POINTS TO NEXT SIBLING i.e.”age” */
if ( ! uXMLGetCurrentElementName(xmlObj, &xmlStatus, &elementName) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetCurrentElementName”, xmlStatus);
}
else
{
/* THE TAG NAME OF CURRENT ELEMENT i.e. ”age” */
printf(”\n the next sibling is= %s \n”, elementName);
free(elementName);
}
/* DELETE THE VALUE OF CURRENT ELEMENT i.e. ”age”
DELETES THE VALUE OF CURRENT ELEMENT i.e. 20 */
if ( ! uXMLDeleteCurrentElementValue(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLDeleteCurrentElementValue”, xmlStatus);
}
if ( ! uXMLMoveToParentElement(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToParentElement”, xmlStatus);
}
if ( ! uXMLMoveToLastChild(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToLastChild”, xmlStatus);
}
if ( ! uXMLGetCurrentElementName(xmlObj, &xmlStatus, &elementName) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetCurrentElementName”, xmlStatus);
}
else
{
printf(”\n name of last child = %s \n”, elementName);
free(elementName);
}
/* THE VALUE OF CURRENT ELEMENT i.e. ”me” IS ”john” */
if ( ! uXMLGetValueOfCurrentElement(xmlObj, &xmlStatus, &elementValue) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetValueOfCurrentElement”, xmlStatus);
}
else
{
printf(”\n the value of current element is = %s \n”, elementValue);
free(elementValue);
}
546
Appendix A: Examples
/* MODIFY THE VALUE OF CURRENBT ELEMENT i.e. ”me” FROM ”john”
TO ”Joseph”
*/
if ( ! uXMLModifyElementValue(xmlObj, &xmlStatus, ”Joseph”) )
{
printf(”Error in %s error code=%d\n”,
”uXMLModifyElementValue”, xmlStatus);
}
if ( ! uXMLGetValueOfCurrentElement(xmlObj, &xmlStatus, &elementValue) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetValueOfCurrentElement”, xmlStatus);
}
else
{
printf(”\n the new value is = %s \n”, elementValue);
free(elementValue);
}
if ( ! uXMLMoveToPreviousSibling(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToPreviousSibling”, xmlStatus);
}
if ( ! uXMLGetCurrentElementName(xmlObj, &xmlStatus, &elementName) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetCurrentElementName”, xmlStatus);
}
else
{
/* THE CURRENT ELEMENT CURSOR NOW POINTS TO PreviousSIBLING i.e.”age” */
printf(”\n the previous sibling is = %s \n”, elementName);
free(elementName);
}
if ( ! uXMLMoveToNextSibling(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToNextSibling”, xmlStatus);
}
if ( ! uXMLMoveToParentElement(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToParentElement”, xmlStatus);
}
Appendix A: Examples
547
/*
* THE CURRENT ELEMENT CURSOR NOW POINTS TO PARENT ELEMENT
* i.e. person
*/
if ( ! uXMLGetCurrentElementName(xmlObj, &xmlStatus, &elementName) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetCurrentElementName”, xmlStatus);
}
else
{
printf(”\n The parent element is = %s \n”, elementName);
free(elementName);
}
if ( ! uXMLMoveToFirstChild(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToFirstChild”, xmlStatus);
}
/* THE CURRENT ELEMENT CURSOR IS AT <name> TAG, THE VARIABLE
”attributeValue” will contain the value OF ATTRIBUTE
”fathername” i.e. ”mike”
*/
if ( ! uXMLGetAttributeValue(xmlObj, &xmlStatus,
”fathername”, &attributeValue) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetAttributeValue”, xmlStatus);
}
else
{
printf(”\n the attribute value is = %s \n”, attributeValue);
free(attributeValue);
}
/* TO DELETE AN ATTRIBUTE */
if ( ! uXMLDeleteAttribute(xmlObj, &xmlStatus,”mothername”) )
{
printf(”Error in %s error code=%d\n”,
”uXMLDeleteAttribute”, xmlStatus);
}
if ( ! uXMLDeleteAttribute(xmlObj, &xmlStatus, ”fathername”) )
{
printf(”Error in %s error code=%d\n”,
”uXMLDeleteAttribute”, xmlStatus);
}
548
Appendix A: Examples
if ( ! uXMLGetAttributeNames(xmlObj, &xmlStatus, &attributeNames) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetAttributeNames”, xmlStatus);
}
else
{
/* THE VARIABLE ”attributeNames” CONATINS ATTRIBUTE NAMES OF CURRENT
ELEMENT i.e. ”name”, THE VARIBALE attributeNames WILL CONTAIN
”surname”
*/
char ** name = attributeNames;
printf(”\nThe attribute names are:\n”);
for( ; *name != NIL(char); ++name )
{
printf(”\t%s\n”, *name);
free(*name);
}
free(attributeNames);
attributeNames = 0;
}
/* CHECKED TO SET ATTRIBUTE VALUE */
if ( ! uXMLSetAttributeValue(xmlObj, &xmlStatus, ”surname”, ”Sanderson”))
{
printf(”Error in %s error code=%d\n”,
”uXMLSetAttributeValue”, xmlStatus);
}
/* THE NEW ATTRIBUTE VALUE */
if ( ! uXMLGetAttributeValue(xmlObj, &xmlStatus, ”surname”, &attributeValue))
{
printf(”Error in %s error code=%d\n”,
”uXMLGetAttributeValue”, xmlStatus);
}
else
{
printf(”\n the attribute value is = %s \n”, attributeValue);
free(attributeValue);
}
if ( ! uXMLMoveToParentElement(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToParentElement”, xmlStatus);
}
/* CREATE ELEMENT country=’USA’ */
if ( ! uXMLCreateElement(xmlObj, &xmlStatus, ”country”, ”USA”) )
{
printf(”Error in %s error code=%d\n”,
”uXMLCreateElement”, xmlStatus);
}
Appendix A: Examples
549
/* THE CURRENT ELEMENT CURSOR POINTS TO TAG ”country” */
if ( ! uXMLGetCurrentElementName(xmlObj, &xmlStatus, &elementName) )
{
printf(”Error in %s error code=%d\n”,
”uXMLGetCurrentElementName”, xmlStatus);
}
else
{
/* THE TAG NAME OF CURRENT ELEMENT i.e. ”country” */
printf(”\n name of last child = %s \n”, elementName);
free(elementName);
}
if ( ! uXMLMoveToParentElement(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToParentElement”, xmlStatus);
}
if ( ! uXMLMoveToFirstChild(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLMoveToFirstChild”, xmlStatus);
}
if ( ! uXMLDeleteCurrentElement(xmlObj, &xmlStatus) )
{
printf(”Error in %s error code=%d\n”,
”uXMLDeleteCurrentElement”, xmlStatus);
}
/*DELETES THE CURRENT ELEMENT,
POINTS TO ”person” */
THE CURRENT ELEMENT CURSOR NOW
uXMLDestroy(&xmlObj, &xmlStatus);
exit(0);
}
550
Appendix A: Examples