Difference between revisions of "Dbxkexpr()"

From Recital Documentation Wiki
Jump to: navigation, search
 
 
(One intermediate revision by one user not shown)
Line 12: Line 12:
  
 
<input parameters>
 
<input parameters>
char *dbx; /* Tagged index file descriptor */
+
char *dbx; /* Tagged index file descriptor */
  
 
<input/output parameters>
 
<input/output parameters>
int tagno; /* If tagno > 0, then it is used as input as the tag number, otherwise the tag number corresponding to the specified tagname is returned. */
+
int tagno; /* If tagno > 0, then it is used as input as the tag number, otherwise
char *tagname; /* If tagno <= 0, then it is used as input as the tagname, otherwise the tagname corresponding to the specific tagno is returned. */
+
the tag number corresponding to the specified tagname is returned. */
 +
char *tagname; /* If tagno <= 0, then it is used as input as the tagname, otherwise
 +
the tagname corresponding to the specific tagno is returned. */
  
 
<output parameters>
 
<output parameters>
char keytype; /* Tag key data type:
+
char keytype; /* Tag key data type:
'C' - Character
+
'C' - Character
'N' - Numeric
+
'N' - Numeric
'D' – Date */
+
'D' – Date */
char *keyexpr; /* Tag key  expression */
+
char *keyexpr; /* Tag key  expression */
char *forexpr; /* Tag for expression */
+
char *forexpr; /* Tag for expression */
int *keyexprlen; /* Length of the tag key expression */
+
int *keyexprlen; /* Length of the tag key expression */
int *keylen; /* Tag key length */
+
int *keylen; /* Tag key length */
int *keyunique; /* 1 if tag is unique, 0 otherwise */
+
int *keyunique; /* 1 if tag is unique, 0 otherwise */
int *keydescend; /* 1 if tag is in descending order, 0 otherwise */
+
int *keydescend; /* 1 if tag is in descending order, 0 otherwise */
 
</code>
 
</code>
  

Latest revision as of 13:48, 1 April 2009

PURPOSE

get the key expression for a specified tag


SYNOPSIS

#include "dbl.h"
 
	int	dbxkexpr(dbx, tagno, tagname, keytype, keyexpr, forexpr,
	keyexprlen, keylen, keyunique, keydescend);
 
	<input parameters>
	char	 	*dbx;		 	/* Tagged index file descriptor 	*/
 
	<input/output parameters>
	int	 	tagno;		 	/* If tagno > 0, then it is used as input as the tag number, otherwise
				 	 	 	the tag number corresponding to the specified tagname is returned.	*/
	char	 	*tagname;	 	/* If tagno <= 0, then it is used as input as the tagname, otherwise
				 	 	 	the tagname corresponding to the 	specific tagno is returned.		*/
 
	<output parameters>
	char 	keytype;	 	 	/* Tag key data type:
					 	 	 	'C' - Character
					 	 	 	'N' - Numeric
					 	 	 	'D' – Date		*/
	char 	 *keyexpr;	 	/* Tag key  expression	 	 	 	 	 	*/
	char 	 *forexpr;	 	/* Tag for expression	 	 	 	 	 	*/
	int	 	*keyexprlen;	 	/* Length of the tag key expression	 	 	 	*/
	int	 	*keylen;	 	 	/* Tag key length		 	 	 	 	 	*/
	int	 	*keyunique; 	 	/* 1 if tag is unique, 0 otherwise	 	 	 	*/
	int	 	*keydescend;	 	/* 1 if tag is in descending order, 0 otherwise 	*/


RETURN VALUE

The dbxkexpr() function returns 0 for success, or < 0 if an error occurs. See the section on return code values for a detailed list of return codes.


DESCRIPTION

The dbxkexpr() function obtains the index tag information from the specified tagged index file, .DBX for a tag number or name.


EXAMPLE

The following example opens the index for the shipwreck.dbf table, checks the number of tags, then returns detailed information about the tags


#include <stdio.h>
#include "dbl.h"		/* Recital/Library include file		*/
#include "dblproto.h"		/* Recital/Library prototype file	*/
 
	static	dBFIELD fields[6] = {
		"VESSEL",	'C',	18,	0,	0,
		"LAT",	'N',	4,	1,	0,
		"LONG",	'N',	4,	1,	0,
		"AMOUNT",	'N',	10,	0,	0,
		"DATE",	'D',	8,	0,	0,
		"FLAG",	'C',	9,	0,	0
	};
 
	static void errorproc(
		char	*func,
		char	*str,
		int	rc);
 
main()
{
	int	rc; 			/* Return Code for error handling	*/
	char	*dbf; 			/* File descriptor for table		*/
	char	*dbx; 			/* File descriptor for tagged index	*/
	char	keytype; 		/* Variable for varying keytype	*/
	char	tagname[21]; 		/* Storage location for tag name	*/
	char	keyexpr[512]; 		/* Storage location for key expr	*/
	char	forexpr[512]; 		/* Storage location for for expr	*/
	int	kexprlen; 		/* The key expression length		*/
	int	keylen; 		/* The key length			*/
	int	i; 			/* Loop control variable		*/
	int	keyunique;		/* Boolean for unqiue tag key		*/
	int	keydescend;		/* Boolean for descending tag key	*/
	int	notags;			/* Number of tags in a dbx file	*/
 
	rc = dbdcache(100);
	errorproc("dbdcache()","table cache specified.", rc);
	rc = dbicache(100);
	errorproc("dbicache()", "index cache specified.",rc);
	rc = dbfilemode(0,0);
	rc = dbopen("shipwreck.dbf", &dbf);
	errorproc("dbopen()","table opened in exclusive mode.", rc);
	rc = dbxopen(dbf, "shipwreck.dbx", &dbx);
	errorproc("dbxopen()","tagged index opened.", rc);	
	rc = dbxnotags(dbx, &notags);
	errorproc("dbxnotags()","tagged index count obtained.", rc);
	printf("t	  Key count: t%dn", notags );
 
	for (i = 1; i <= notags; i++) {
	rc = dbxkexpr(dbx, 
			  &i,
			  tagname,
			  &keytype, 
			  keyexpr, 
			  forexpr,
			  &kexprlen, 
			  &keylen,
			  &keyunique,
			  &keydescend);
	errorproc("dbxkexpr()", "key information retrieved.", rc);
	printf("t	  Key number: t%dn", i );
	printf("t	  Key name: t%sn", tagname );
	printf("t	  Key type: t%cn", keytype );
	printf("t	  Key expression: %sn", keyexpr);
	printf("t	  Key length: %d   Expression length: %dn", kexprlen, keylen);
	printf("t	  For expression: %sn", forexpr);
	printf("t	  Key unique: t%sn", keyunique ? "Yes" : "No" );
	printf("t	  Key descending: t%sn", keydescend?"Yes":"No" );
	}	
 
	rc = dbxclose(dbx);
	errorproc("dbxclose()", "tagged index closed.", rc);
	 rc = dbclose(dbf);
	errorproc("dbclose()", "table closed.", rc);
	exit(0);
}
 
	static void errorproc(func, str, rc)
	char	*func;
	char	*str;
	int	rc;
{
	if ( rc != SUCCESS ) {
	printf("n  Error performing function %s -> %dn", func, rc);
	exit(1);
	}
	printf("Function: t%s, t%s - Okn", func, str);
	return;
}


SEE ALSO

dbxclose(), dbxcreate(), dbxopen()