Annotation of 43BSD/ingres/source/dbu/sysfunc.c, revision 1.1.1.1

1.1       root        1: # include      <ingres.h>
                      2: # include      <aux.h>
                      3: # include      <pv.h>
                      4: # include      <sccs.h>
                      5: # include      <symbol.h>
                      6: # include      <func.h>
                      7: 
                      8: 
                      9: SCCSID (@(#)sysfunc.c  8.2     1/15/85)
                     10: 
                     11: short          tTdbu[100];
                     12: extern int     sysfunc();
                     13: extern int     null_fn();
                     14: 
                     15: int            Noupdt = FALSE;
                     16: 
                     17: struct  fn_def SysFuncFn = 
                     18: {      
                     19:        "SYSMOD",
                     20:        sysfunc,
                     21:        null_fn,
                     22:        null_fn,
                     23:        NULL,
                     24:        0,
                     25:        tTdbu,
                     26:        100,
                     27:        'S',
                     28:        0
                     29: };
                     30: 
                     31: 
                     32: extern int     Status;
                     33: 
                     34: struct modtabl
                     35: {
                     36:        char    *rname;
                     37:        char    **parvec;
                     38:        int     goahead;
                     39:        int     normgo;
                     40:        int     optn;
                     41: };
                     42: 
                     43: char   *Relpar[] =
                     44: {
                     45:        "relation",     "hash",         "name",
                     46:        "relid",        NULL
                     47: };
                     48: 
                     49: char   *Attpar[] =
                     50: {
                     51:        "attribute",    "hash",         "name",
                     52:        "attrelid",     "attowner",     "#attid",
                     53:        NULL
                     54: };
                     55: 
                     56: char   *Indpar[] =
                     57: {
                     58:        "indexes",      "hash",         "name",
                     59:        "irelidp",      "iownerp",      "",
                     60:        "minpages",     "5",            NULL
                     61: };
                     62: 
                     63: char   *Trepar[] =
                     64: {
                     65:        "tree",         "hash",         "name",
                     66:        "treerelid",    "treeowner",    "treetype",
                     67:        NULL
                     68: };
                     69: 
                     70: char   *Propar[] =
                     71: {
                     72:        "protect",      "hash",         "name",
                     73:        "prorelid",     "prorelown",    NULL
                     74: };
                     75: 
                     76: char   *Intpar[] =
                     77: {
                     78:        "integrities",  "hash",         "name",
                     79:        "intrelid",     "intrelowner",  NULL
                     80: };
                     81: 
                     82: char   *Rdelpar[] =
                     83: {
                     84:        "rdelim",       "isam",         "name",
                     85:        "order",        "group",        "delim",
                     86:        NULL
                     87: };
                     88: 
                     89: struct modtabl  Modtabl[] =
                     90: {
                     91:        "relation",     &Relpar[0],     FALSE,  TRUE,   FALSE,
                     92:        "attribute",    &Attpar[0],     FALSE,  TRUE,   FALSE,
                     93:        "indexes",      &Indpar[0],     FALSE,  TRUE,   FALSE,
                     94:        "tree",         &Trepar[0],     FALSE,  TRUE,   TRUE,
                     95:        "protect",      &Propar[0],     FALSE,  TRUE,   TRUE,
                     96:        "integrities",  &Intpar[0],     FALSE,  TRUE,   TRUE,
                     97:        "rdelim",       &Rdelpar[0],    FALSE,  TRUE,   TRUE,
                     98:        0
                     99: };
                    100: 
                    101: 
                    102: /*
                    103: **     SYSMOD -- Modify system catalogs to a predetermined
                    104: **             storage structure with predetermined keys.
                    105: **
                    106: **             Flags:
                    107: **                     '-Rsystem relation name' will modify
                    108: **                     only the named relations
                    109: **
                    110: **             Trace flags:
                    111: **                     -S99
                    112: **
                    113: */
                    114: 
                    115: sysfunc (pc, pv)
                    116: int    pc;
                    117: PARM   *pv;
                    118: {
                    119:        register int    i;
                    120:        register int    j;
                    121:        register char   **av;
                    122:        char            *p;
                    123:        char            *argptr;
                    124: 
                    125: 
                    126: # ifdef xSTR1
                    127:        if (tTf(99,0))
                    128:        {
                    129:                printf("SYSFUNC: starting. \n");
                    130:                prvect(pc, pv);
                    131:        }
                    132: # endif
                    133: 
                    134: /*
                    135: **     if there are any arguments, verify that they are valid
                    136: **     names of relations which can be modified by this program.
                    137: **     if there are no arguments, assume all system relations are to be
                    138: **     modified.
                    139: */
                    140: 
                    141:        if (pv[0].pv_val.pv_str != NULL)
                    142:                if ((pv[1].pv_val.pv_str == NULL) && sequal(argptr = &pv[0].pv_val.pv_str[2], "all"))
                    143:                        for (i = 0; Modtabl[i].rname; i++)
                    144:                                Modtabl[i].goahead = TRUE;
                    145:                else
                    146:                        for ( i = 0; i <= pc; i++)
                    147:                        {
                    148:                                av = &pv[i].pv_val.pv_str;
                    149:                                if (( p = *av) == NULL)
                    150:                                        break;
                    151:                                
                    152:                                argptr = &p[2];
                    153:                                for (j = 0; Modtabl[j].rname; j++)
                    154:                                {
                    155:                                        if (sequal(argptr, Modtabl[j].rname))
                    156:                                        {
                    157:                                                if (Modtabl[j].goahead)
                    158:                                                {
                    159:                                                        printf("%s duplicate relation name\n", p);
                    160:                                                        return(1);
                    161:                                                }
                    162:                                                Modtabl[j].goahead = TRUE;
                    163:                                                break;
                    164:                                        }
                    165:                                }
                    166:                                if ((!Modtabl[j].rname) && !(p[1] == 'Z'))
                    167:                                {
                    168:                                        printf("%s is not a system relation\n", p);
                    169:                                        return(1);
                    170:                                }
                    171:                        }
                    172:        else
                    173:                for (i = 0; Modtabl[i].rname; i++)
                    174:                        Modtabl[i].goahead = Modtabl[i].normgo;
                    175: 
                    176:        for (i = 0; Modtabl[i].rname; i++)
                    177:        {
                    178:                if (Modtabl[i].goahead == 0 || optn_rel(&Modtabl[i]))
                    179:                        continue;
                    180:                argptr = Modtabl[i].rname;
                    181:                printf("modifying %s\n", argptr); 
                    182:                av = Modtabl[i].parvec;
                    183:                j = 0;
                    184:                initp();
                    185:                while (*av != NULL)
                    186:                {
                    187:                        setp(PV_STR, *av);
                    188:                        av++;
                    189:                }
                    190: 
                    191:                call( mdMODIFY, NULL);
                    192:        }
                    193:        printf("sysmod done\n");
                    194:        return(0);
                    195: }
                    196: 
                    197: 
                    198: optn_rel(mx)
                    199: struct modtabl *mx;
                    200: {
                    201:        register struct modtabl *m;
                    202:        register int            ret;
                    203:        char                    *temp;
                    204: 
                    205:        struct descriptor       des;
                    206: 
                    207:        m = mx;
                    208:        ret = FALSE;
                    209: 
                    210:        if (m->optn)
                    211:        {
                    212:                if (openr(&des, OR_RELTID, m->rname))
                    213:                {
                    214:                        ret = TRUE;
                    215:                }
                    216:        }
                    217:        return (ret);
                    218: }
                    219: 
                    220: /* rubproc()
                    221: {
                    222:        printf("sysmod interrupted\n");
                    223:        return(1);
                    224: } */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.