385 lines
14 KiB
C
385 lines
14 KiB
C
|
/******************************************************************************
|
||
|
*
|
||
|
* Declarations for UniVerse Database SICA routines
|
||
|
*
|
||
|
* Module %M% Version %I% Date %H%
|
||
|
*
|
||
|
* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved
|
||
|
* This is unpublished proprietary source code of Ardent Software Inc.
|
||
|
* The copyright notice above does not evidence any actual or intented
|
||
|
* publication of such source code.
|
||
|
*
|
||
|
*******************************************************************************
|
||
|
*
|
||
|
* Maintenence log - insert most recent change descriptions at top
|
||
|
*
|
||
|
* Date.... GTAR# WHO Description.........................................
|
||
|
* 10/14/98 23801 SAP Change copyrights.
|
||
|
* 05/02/97 20453 CSM Add trigger definitions
|
||
|
* 02/17/97 20038 LAG VARCHAR(n) enhancements
|
||
|
* 08/07/96 18144 CSM don't allow non-numeric val in numeric refd column
|
||
|
* 06/13/96 18582 CSM Add on update/delete fields to SICAREFER
|
||
|
* 07/28/94 14372 JBG Add define BASEKEYS
|
||
|
* 06/08/94 13825 MGM Add foriegn column list
|
||
|
* 05/20/94 13825 MGM Distinguish between column list and itype for RI
|
||
|
* 05/27/94 13825 MGM add referential constraints template
|
||
|
* 04/26/94 13806 MGM Add key ERR_CONS_TABUNIQUE
|
||
|
* 01/06/94 12807 CSM Rev 0 & 1 sica region structs, assoc/uniq constr regn
|
||
|
* 11/20/92 10590 RM added new data types
|
||
|
* 09/29/92 10102 JKW add error for too many key components
|
||
|
* 08/26/92 10113 RM split sicaperm.h off
|
||
|
* 07/13/92 10102 JKW add integrity constraints
|
||
|
* 07/13/92 9852 JKW add sica checking
|
||
|
* 08/03/92 9852 JKW add macro for fdesc pointer
|
||
|
******************************************************************************/
|
||
|
#ifndef UVSICA_H
|
||
|
#define UVSICA_H
|
||
|
|
||
|
#include "sicaperm.h"
|
||
|
#define BASEKEYS 30000
|
||
|
#ifdef CVTSICA
|
||
|
/* The following definitions are used by the convert_sica utility */
|
||
|
|
||
|
struct uvsicacolumn00
|
||
|
{ BITMAP set_flag:1, /* single or multi valued */
|
||
|
not_null:1, /* is field NOT NULL */
|
||
|
not_empty:1, /* is field NOT EMPTY */
|
||
|
unique_in_table:1, /* UNIQUE constraint */
|
||
|
unique_in_set:1, /* ASSOC_UNIQUE constraint */
|
||
|
is_key:1, /* is the part of the key */
|
||
|
default_type:2, /* default value type code */
|
||
|
/* 0 = EMPTY, 1 = NULL */
|
||
|
/* 2 = USER, 3 = <literal> */
|
||
|
spares:(8*sizeof(BITMAP)-8);
|
||
|
short position, /* amc in file record */
|
||
|
key_pos, /* position in the key */
|
||
|
name_length, /* length of column name/heading */
|
||
|
conv_length, /* length of default conversion mask */
|
||
|
format_length, /* length of default format mask */
|
||
|
default_length, /* length of literal default */
|
||
|
assoc_length, /* length of association name */
|
||
|
export_type, /* data type for export to NF1 model */
|
||
|
export_size; /* field size for export */
|
||
|
unsigned char column_data[1]; /* text data region */
|
||
|
};
|
||
|
|
||
|
typedef struct uvsicacolumn00 UVSICACOLUMN00;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
struct uvsicacolumn
|
||
|
{ BITMAP set_flag:1, /* single or multi valued */
|
||
|
not_null:1, /* is field NOT NULL */
|
||
|
not_empty:1, /* is field NOT EMPTY */
|
||
|
unique_in_table:1, /* UNIQUE constraint */
|
||
|
unique_in_set:1, /* ASSOC_UNIQUE constraint */
|
||
|
is_key:1, /* is the part of the key */
|
||
|
default_type:2, /* default value type code */
|
||
|
/* 0 = EMPTY, 1 = NULL */
|
||
|
/* 2 = USER, 3 = <literal> */
|
||
|
spares:(8*sizeof(BITMAP)-8);
|
||
|
short position, /* amc in file record */
|
||
|
key_pos, /* position in the key */
|
||
|
name_length, /* length of column name/heading */
|
||
|
conv_length, /* length of default conversion mask */
|
||
|
format_length, /* length of default format mask */
|
||
|
default_length, /* length of literal default */
|
||
|
assoc_length, /* length of association name */
|
||
|
nullc_length, /* length of null constraint name */
|
||
|
emptyc_length, /* length of empty constraint name */
|
||
|
export_type, /* data type for export to NF1 model */
|
||
|
export_size; /* field size for export */
|
||
|
unsigned char column_data[1]; /* text data region */
|
||
|
};
|
||
|
|
||
|
#define UVSICACOLUMN struct uvsicacolumn
|
||
|
|
||
|
struct sica_column
|
||
|
{
|
||
|
char *name, /* column name */
|
||
|
*conversion, /* conversion string */
|
||
|
*format, /* format string */
|
||
|
*defalt, /* default value */
|
||
|
*association, /* association name */
|
||
|
*nullc_name, /* null constraint name */
|
||
|
*emptyc_name; /* empty constrant name */
|
||
|
BITMAP singmult:1, /* single or multi value*/
|
||
|
not_null:1, /* not null */
|
||
|
not_empty:1, /* not empty */
|
||
|
unique_in_table:1, /* unique in table */
|
||
|
unique_in_set:1, /* unique in set */
|
||
|
is_key:1, /* part of primary key? */
|
||
|
default_type:2, /* default type */
|
||
|
spares:(8*sizeof(BITMAP)-8);
|
||
|
short position, /* field number */
|
||
|
key_pos, /* key position */
|
||
|
export_type, /* export type */
|
||
|
export_len; /* export length */
|
||
|
};
|
||
|
|
||
|
#define SICACOLUMN struct sica_column
|
||
|
|
||
|
/* defines for column export type */
|
||
|
#define EXP_INT 0 /* Export of INTEGER */
|
||
|
#define EXP_SMALLINT 1 /* Export of SMALLINT */
|
||
|
#define EXP_CHAR 2 /* Export of CHAR; export_len is length */
|
||
|
#define EXP_FLOAT 3 /* Export of FLOAT; export_len is precision */
|
||
|
#define EXP_REAL 4 /* Export of REAL */
|
||
|
#define EXP_DOUBLE 5 /* Export of DOUBLE */
|
||
|
#define EXP_VARCHAR 6 /* Export character varying */
|
||
|
#define EXP_DECIMAL 7 /* Export of DECIMAL */
|
||
|
#define EXP_NUMERIC 8 /* Export of NUMERIC */
|
||
|
#define EXP_DATE 9 /* Export of DATE */
|
||
|
#define EXP_TIME 10 /* Export of TIME */
|
||
|
|
||
|
/* defines for column export length */
|
||
|
#define EXP_CHAR_DEFLEN 1 /* default length */
|
||
|
#define EXP_CHAR_MAXLEN 254 /* maximum length */
|
||
|
#define EXP_VARCHAR_DEFLEN 254 /* default length */
|
||
|
#define EXP_VARCHAR_MAXLEN 65535 /* maximum length */
|
||
|
|
||
|
/* defines for single or multi valued field */
|
||
|
#define COL_SINGLE 0 /* Single valued column */
|
||
|
#define COL_MULTI 1 /* Multi valued Column */
|
||
|
|
||
|
/* defines for not_null */
|
||
|
#define IS_NULL 0 /* may contain null value */
|
||
|
#define NOT_NULL 1 /* is defined as NOT NULL */
|
||
|
|
||
|
/* defines for not_empty */
|
||
|
#define IS_EMPTY 0 /* may be empty */
|
||
|
#define NOT_EMPTY 1 /* is defined to be NOT EMPTY */
|
||
|
|
||
|
/* defines for unique_in_table and unique_in_set */
|
||
|
#define NUNIQUE 0 /* not unique */
|
||
|
#define UNIQUE 1 /* is unique */
|
||
|
|
||
|
/* defines for is_key */
|
||
|
#define NOT_KEY 0 /* not a part of the primary key */
|
||
|
#define IS_KEY 1 /* part of the primary key */
|
||
|
|
||
|
/* defines for default_type */
|
||
|
#define NODEFAULT 0 /* no default specified */
|
||
|
#define NULLDEF 1 /* a default of NULL */
|
||
|
#define USERDEF 2 /* a default of USER */
|
||
|
#define LITDEF 3 /* a default of a literal is specified */
|
||
|
|
||
|
struct uvsicaassoc
|
||
|
{ BITMAP order:2, /* unordered 0, implict 1, explict 2 */
|
||
|
order_type:2, /* if implicit ASC 0, DESC 1 */
|
||
|
/* if explicit AL 0, AR 1, DL 2, DR 3 */
|
||
|
empty_row:1, /* Empty row exists 1 or not 0 */
|
||
|
delete:1, /* Restrict 0 or cascade 1 */
|
||
|
check_rowu:1, /* check row-uniqueness 1 */
|
||
|
spares:(8*sizeof(BITMAP)-8);
|
||
|
short order_col; /* ordering column if explicit order */
|
||
|
short name_length, /* length of association name */
|
||
|
collst_length, /* length of list of cols in assoc */
|
||
|
keylst_length; /* length of list of key columns */
|
||
|
unsigned char assoc_data[1]; /* text data region */
|
||
|
};
|
||
|
|
||
|
#define UVSICAASSOC struct uvsicaassoc
|
||
|
|
||
|
struct sica_assoc
|
||
|
{
|
||
|
char *name, /* assoc name */
|
||
|
*collst, /* column list */
|
||
|
*keylst; /* key list */
|
||
|
BITMAP order:2, /* unordered, implicit, explicit */
|
||
|
order_type:2, /* ASC, DESC, AL, AR, DL, DR */
|
||
|
empty_row:1, /* Empty row exists or not */
|
||
|
delete:1, /* Restrict or cascade */
|
||
|
check_rowu:1, /* check row-uniqueness */
|
||
|
spares:(8*sizeof(BITMAP)-8);
|
||
|
short order_column; /* ordering column */
|
||
|
};
|
||
|
|
||
|
#define SICAASSOC struct sica_assoc
|
||
|
|
||
|
struct sica_constraint
|
||
|
{
|
||
|
char *name, /* constraint name, (char *)0 if none */
|
||
|
*collst,/* List of cols present in constraint */
|
||
|
*text, /* This is the text of the constraint */
|
||
|
*code; /* This is the code of the constraint */
|
||
|
int len; /* This is the length of the code */
|
||
|
};
|
||
|
|
||
|
#define SICACONSTRAINT struct sica_constraint
|
||
|
|
||
|
struct sica_uniquec
|
||
|
{
|
||
|
char *name, /* unique constraint name */
|
||
|
*collst, /* list of cols in constraint */
|
||
|
*index_file; /* index file name */
|
||
|
};
|
||
|
|
||
|
typedef struct sica_uniquec SICAUNIQUEC;
|
||
|
|
||
|
struct sica_refer
|
||
|
{
|
||
|
char *name, /* refer constraint name */
|
||
|
*tabnam, /* referencing or referenced table name */
|
||
|
*schnam, /* referencing or referenced schema name */
|
||
|
*colst, /* list of referenced column(s) */
|
||
|
*forcolst, /* list of referencing column(s) */
|
||
|
*itype; /* itype name */
|
||
|
BITMAP referenced:1, /* TRUE tab/sch points to referencing table */
|
||
|
/* FALSE tab/sch points to referenced table */
|
||
|
coltype:2, /* column(s) type */
|
||
|
/* 0 = PRIMARY, 1 = UNIQUE, 2 = OTHER */
|
||
|
on_delete:2, /* 0 no action, 1 set default */
|
||
|
on_update:2, /* 2 set null, 3 cascade */
|
||
|
refd_mv:1, /* 1 referenced col is multivalued */
|
||
|
refg_mv:1, /* 1 referencing col is multivalued */
|
||
|
refd_ntype:1, /* 1 referenced col is numeric */
|
||
|
spares:(8*sizeof(BITMAP)-10);
|
||
|
};
|
||
|
|
||
|
typedef struct sica_refer SICAREFER;
|
||
|
|
||
|
/*
|
||
|
* This is a description of the uvsicapermission structure. The uvsica
|
||
|
* structure is basically the same except for one small detail. In the
|
||
|
* uvsicapermissions structure, the columns which may be referenced, updated
|
||
|
* reference granted, and update granted are kept in the sica_data region,
|
||
|
* and their counts are kept in the update_count...reference_grant_count
|
||
|
* variables. In the uvsica structure these values are kept in the
|
||
|
* update_fields...reference_grant_fields variables. The first values in these
|
||
|
* variables are the counts, with the rest of the data following.
|
||
|
*
|
||
|
* user User id for which this record is being kept.
|
||
|
* select_ok The user may select this table.
|
||
|
* insert_ok The user may insert rows into this table.
|
||
|
* delete_ok The user may delete rows from this table.
|
||
|
* update_ok The user may update data in this table.
|
||
|
* alter_ok The user may alter this table definition.
|
||
|
* reference_ok The user may reference this table.
|
||
|
* select_grant_ok The user may grant select permission.
|
||
|
* insert_grant_ok The user may grant insert permission.
|
||
|
* delete_grant_ok The user may grant delete permission.
|
||
|
* update_grant_ok The user may grant update permission.
|
||
|
* alter_grant_ok The user may grant alter permission.
|
||
|
* reference_grant_ok The user may grant reference permission.
|
||
|
* spares In case we need to expand the definition.
|
||
|
* update_count Number of columns updatable
|
||
|
* reference_count Number of columns referencable
|
||
|
* update_grant_count Number of columns update grantable.
|
||
|
* reference_grant_count Number of columns reference grantable.
|
||
|
* sica_data List of all columns update, reference
|
||
|
* update grantable, reference grantable.
|
||
|
*/
|
||
|
|
||
|
struct uvsicapermissions
|
||
|
{
|
||
|
int user;
|
||
|
BITMAP select_ok:1,
|
||
|
insert_ok:1,
|
||
|
delete_ok:1,
|
||
|
update_ok:1,
|
||
|
alter_ok:1,
|
||
|
reference_ok:1,
|
||
|
select_grant_ok:1,
|
||
|
insert_grant_ok:1,
|
||
|
delete_grant_ok:1,
|
||
|
update_grant_ok:1,
|
||
|
alter_grant_ok:1,
|
||
|
reference_grant_ok:1,
|
||
|
spares:(8*sizeof(BITMAP)-12);
|
||
|
unsigned short update_count,
|
||
|
reference_count,
|
||
|
update_grant_count,
|
||
|
reference_grant_count;
|
||
|
unsigned short sica_data[1];
|
||
|
};
|
||
|
|
||
|
#define UVSICAPERM struct uvsicapermissions
|
||
|
|
||
|
/*
|
||
|
* if the user value is -1 the record is for the PUBLIC user
|
||
|
*/
|
||
|
#define USERPUBLIC -1
|
||
|
|
||
|
/*
|
||
|
* For both the uvsicahistory and the sica_history structures, the following
|
||
|
* are the possible values of grant:
|
||
|
* 1 select permission was granted.
|
||
|
* 2 insert permission was granted.
|
||
|
* 3 delete permission was granted.
|
||
|
* 4 update permission was granted.
|
||
|
* 5 alter permission was granted.
|
||
|
* 6 reference permission was granted.
|
||
|
* 7 grant select permission was granted.
|
||
|
* 8 grant insert permission was granted.
|
||
|
* 9 grant delete permission was granted.
|
||
|
* 10 grant update permission was granted.
|
||
|
* 11 grant alter permission was granted.
|
||
|
* 12 grant references permission was granted.
|
||
|
*
|
||
|
* For the grant types of 4,6,10, and 12 both the uvsicahistory element
|
||
|
* col_data, and the sica_history element columns will be a list of the columns
|
||
|
* for which this permission was granted. The first value of this list will be
|
||
|
* the number of elements remaining in the list. This value will be 0 for all
|
||
|
* other permissions.
|
||
|
*/
|
||
|
|
||
|
struct uvsicahistory
|
||
|
{
|
||
|
int grantor, /* id of user granting */
|
||
|
grantee, /* if of user receiving */
|
||
|
grant; /* type of access granted */
|
||
|
unsigned short col_data[1]; /* list of columns granted */
|
||
|
};
|
||
|
|
||
|
#define UVSICAHIST struct uvsicahistory
|
||
|
|
||
|
struct sica_history
|
||
|
{
|
||
|
int grantor, /* id of user granting */
|
||
|
grantee, /* id of user receiving */
|
||
|
grant; /* type of access granted */
|
||
|
unsigned short *columns; /* list of columns granted */
|
||
|
};
|
||
|
|
||
|
#define SICAHISTORY struct sica_history
|
||
|
|
||
|
#define ERR_CONS_SINGLE 1
|
||
|
#define ERR_CONS_NULL 2
|
||
|
#define ERR_CONS_EMPTY 3
|
||
|
#define ERR_CONS_ROWUNIQUE 4
|
||
|
#define ERR_CONS_UNIQUE 5
|
||
|
#define ERR_CONS_TABUNIQUE 6
|
||
|
#define ERR_CONS_ASSOCKEY 7
|
||
|
#define ERR_CONS_CHECK 8
|
||
|
#define ERR_CONS_BADKEY 9
|
||
|
#define ERR_CONS_REFER 10
|
||
|
#define ERR_CONS_REFIV 11
|
||
|
|
||
|
/* The following flags are for trig_casc_flags (in sicaregion) and events (in sicatrig) fields */
|
||
|
/* flags for trigger operations */
|
||
|
#define TRROBEINS 0x1 /* Trigger Row Before Insert */
|
||
|
#define TRROBEUPD 0x2 /* Trigger Row Before Update */
|
||
|
#define TRROBEDEL 0x4 /* Trigger Row Before Delete */
|
||
|
#define TRROAFINS 0x8 /* Trigger Row After Insert */
|
||
|
#define TRROAFUPD 0x10 /* Trigger Row After Update */
|
||
|
#define TRROAFDEL 0x20 /* Trigger Row After Delete */
|
||
|
|
||
|
#define ALLTRIGS 0xfff /* bits for all trigger events */
|
||
|
#define TRROINSUPD 0x1b /* Trigger Row Insert/Update */
|
||
|
|
||
|
/* values in between will be used for statement triggers */
|
||
|
|
||
|
/* flags for cascade operations */
|
||
|
#define CAONUPSDEF 0x1000 /* Cascade On Update Set Default */
|
||
|
#define CAONUPSNUL 0x2000 /* Cascade On Update Set Null */
|
||
|
#define CAONUPCASC 0x4000 /* Cascade On Update Cascade */
|
||
|
#define CAONDLSDEF 0x8000 /* Cascade On Delete Set Default */
|
||
|
#define CAONDLSNUL 0x10000 /* Cascade On Delete Set Null */
|
||
|
#define CAONDLCASC 0x20000 /* Cascade On Delete Cascade */
|
||
|
|
||
|
#define CAONUPDATE 0x7000 /* Cascade On Update Actions */
|
||
|
#define CAONDELETE 0x38000 /* Cascade On Delete Actions */
|
||
|
#endif
|
||
|
|