sets.c

来自「db.* (pronounced dee-be star) is an adva」· C语言 代码 · 共 656 行 · 第 1/2 页

C
656
字号
/*************************************************************************** *                                                                         * * db.*                                                                    * * open source database kernel                                             * *                                                                         * * Copyright (c) 2000 Centura Software Corporation. All rights reserved.   * *                                                                         * * Use of this software, whether in source code format, or in executable,  * * binary object code form, is governed by the CENTURA OPEN SOURCE LICENSE * * which is fully described in the LICENSE.TXT file, included within this  * * distribution of source code files.                                      *  *                                                                         * **************************************************************************/#include "db.star.h"/* ======================================================================    Set current member to current member*/int INTERNAL_FCN dsetmm(    int sett,                   /* set table entry number of target member */    int sets,                   /* set table entry number of source member */    DB_TASK *task,    int dbn)                    /* database number */{    int cmtype;                 /* current member type */    int mem, memtot;    SET_ENTRY *set_ptr;    int dbopen_sv;    if (dcmtype(sets, &cmtype, task, dbn) == S_OKAY &&        nset_check(sett, &sett, &set_ptr, task) == S_OKAY)    {        cmtype += task->curr_db_table->rt_offset - RECMARK;        sets   += task->curr_db_table->st_offset - SETMARK;        for ( mem = set_ptr->st_members, memtot = mem + set_ptr->st_memtot;              mem < memtot; ++mem)        {            if (task->member_table[mem].mt_record == cmtype)            {                dbopen_sv = task->dbopen;                task->dbopen = 2;                /* setup to allow unlocked read */                r_smem(&task->curr_mem[sets], sett, task);                task->dbopen = dbopen_sv;                break;            }        }        if (mem == memtot)            dberr(S_INVMEM);    }    return (task->db_status);}/* ======================================================================    Set current member to current owner*/int INTERNAL_FCN dsetmo(    int setm,                   /* set table entry number of member */    int seto,                   /* set table entry number of owner */    DB_TASK *task,    int dbn)                    /* database number */{    int mem, memtot;    SET_ENTRY *setm_ptr, *seto_ptr;    int dbopen_sv;    if (nset_check(seto, &seto, &seto_ptr, task) == S_OKAY &&        nset_check(setm, &setm, &setm_ptr, task) == S_OKAY)    {        if (null_dba(task->curr_own[seto]))            dberr(S_NOCO);        else        {            for (mem = setm_ptr->st_members, memtot = mem + setm_ptr->st_memtot;                 mem < memtot; ++mem)            {                if (task->member_table[mem].mt_record == seto_ptr->st_own_rt)                {                    dbopen_sv = task->dbopen;                    task->dbopen = 2;            /* setup to allow unlocked read */                    r_smem(&task->curr_own[seto], setm, task);                    task->dbopen = dbopen_sv;                    break;                }            }            if (mem == memtot)                dberr(S_INVMEM);        }    }    return (task->db_status);}/* ======================================================================    Set current member to current record*/int INTERNAL_FCN dsetmr(    int set,                    /* set table entry number */    DB_TASK *task,    int dbn)                    /* database number */{    int crtype;                 /* current record type */    int mem, memtot;    SET_ENTRY *set_ptr;    int dbopen_sv;    if (!task->curr_rec)        dberr(S_NOCR);    else    {        if (dcrtype(&crtype, task, dbn) == S_OKAY &&            nset_check(set, &set, &set_ptr, task) == S_OKAY)        {            crtype += DB_REF(rt_offset) - RECMARK;            for (mem = set_ptr->st_members, memtot = mem + set_ptr->st_memtot;                 mem < memtot; ++mem)            {                if (task->member_table[mem].mt_record != crtype)                    continue;                dbopen_sv = task->dbopen;                task->dbopen = 2;                 /* setup to allow unlocked read */                r_smem(&task->curr_rec, set, task);                task->dbopen = dbopen_sv;                break;            }            if (mem == memtot)                dberr(S_INVMEM);        }    }    return (task->db_status);}/* ======================================================================    Set current owner to current member*/int INTERNAL_FCN dsetom(    int nseto,                  /* set table entry number of owner */    int nsetm,                  /* set table entry number of member */    DB_TASK *task,    int dbn)                    /* database number */{    int seto, setm;    int cmtype;                 /* current record type */    SET_ENTRY *set_ptr;    if (dcmtype(nsetm, &cmtype, task, dbn) != S_OKAY ||        nset_check(nseto, &seto, &set_ptr, task) != S_OKAY)        return (task->db_status);    cmtype += NUM2INT(-RECMARK, rt_offset);    setm = NUM2INT(nsetm - SETMARK, st_offset);    if (set_ptr->st_own_rt != cmtype)        return (dberr(S_INVOWN));    task->curr_own[seto] = task->curr_mem[setm];    task->curr_mem[seto] = NULL_DBA;    /* set timestamps */    if (task->db_tsrecs)    {        task->co_time[seto] = task->cm_time[setm];        task->cm_time[seto] = 0L;    }    if (task->db_tssets)        dutscs(nseto, &task->cs_time[seto], task, dbn);    return (task->db_status);}/* ======================================================================    Set current owner to current owner*/int INTERNAL_FCN dsetoo(    int nsett,                  /* set table entry number of target owner */    int nsets,                  /* set table entry number of source owner */    DB_TASK *task,    int dbn)                    /* database number */{    int sett, sets;    SET_ENTRY *sett_ptr, *sets_ptr;    if (nset_check(nsett, &sett, &sett_ptr, task) != S_OKAY ||        nset_check(nsets, &sets, &sets_ptr, task) != S_OKAY)        return (task->db_status);    if (sett_ptr->st_own_rt != sets_ptr->st_own_rt)        return (dberr(S_INVOWN));    if (null_dba(task->curr_own[sets]))        return (dberr(S_NOCO));    task->curr_own[sett] = task->curr_own[sets];    task->curr_mem[sett] = NULL_DBA;    /* set timestamps */    if (task->db_tsrecs)    {        task->co_time[sett] = task->co_time[sets];        task->cm_time[sett] = 0L;    }    if (task->db_tssets)        dutscs(nsett, &task->cs_time[sett], task, dbn);    return (task->db_status);}/* ======================================================================    Set current owner to current record*/int INTERNAL_FCN dsetor(    int nset,                   /* set number */    DB_TASK *task,    int dbn)                    /* database number */{    int set;    int crtype;                 /* current record type */    SET_ENTRY *set_ptr;    if (nset_check(nset, &set, &set_ptr, task) != S_OKAY ||        dcrtype(&crtype, task, dbn) != S_OKAY)        return (task->db_status);    crtype += NUM2INT(-RECMARK, rt_offset);    if (set_ptr->st_own_rt != crtype)        return (dberr(S_INVOWN));    task->curr_own[set] = task->curr_rec;    task->curr_mem[set] = NULL_DBA;    /* set timestamps */    if (task->db_tsrecs)    {        task->co_time[set] = task->cr_time;        task->cm_time[set] = 0L;    }    if (task->db_tssets)        dutscs(nset, &task->cs_time[set], task, dbn);    return (task->db_status);}/* ======================================================================    Set current record to current member*/int INTERNAL_FCN dsetrm(    int set,                    /* set table entry number */    DB_TASK *task,    int dbn)                    /* database number */{    SET_ENTRY *set_ptr;    if (nset_check(set, &set, &set_ptr, task) == S_OKAY)    {        if (!task->curr_mem[set])            dberr(S_NOCM);        else        {            task->curr_rec = task->curr_mem[set];            /* set timestamp */            if (task->db_tsrecs)                task->cr_time = task->cm_time[set];        }    }    return (task->db_status);}/* ======================================================================    Set current record to current owner*/int INTERNAL_FCN dsetro(    int set,                    /* set table entry number */    DB_TASK *task,    int dbn)                    /* database number */{    SET_ENTRY *set_ptr;    if (nset_check(set, &set, &set_ptr, task) == S_OKAY)    {        if (!task->curr_own[set])            dberr(S_NOCO);        else        {            task->curr_rec = task->curr_own[set];            /* set timestamp */            if (task->db_tsrecs)                task->cr_time = task->co_time[set];        }    }    return (task->db_status);}/* ======================================================================    Find owner of current record*/int INTERNAL_FCN dfindco(int nset, DB_TASK *task, int dbn){    int set;    int stat;    MEM_PTR mem;    SET_ENTRY *set_ptr;    if (nset_check(nset, &set, (SET_ENTRY **) &set_ptr, task) != S_OKAY)        return (task->db_status);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?