⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opscrl.c

📁 免费的Sql数据库系统
💻 C
字号:
/* *  opscrl.c  -  Open scanning of a DB table by itself *               Kernel of GNU SQL-server  * *  This file is a part of GNU SQL Server * *  Copyright (c) 1996, 1997, Free Software Foundation, Inc *  Developed at the Institute of System Programming *  This file is written by  Vera Ponomarenko * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * *  Contacts:   gss@ispras.ru * *//* $Id: opscrl.c,v 1.246 1997/04/17 11:03:20 vera Exp $ */#include "destrn.h"#include "sctp.h"#include "strml.h"#include "fdcltrn.h"extern struct des_nseg desnseg;struct ans_opscopscrel (struct id_rel *pidrel, i4_t mode, u2_t fnum, u2_t * fl,         u2_t slsz, char *sc, u2_t fmnum, u2_t * fml){  struct des_field *df;  u2_t fn, fdf;  i2_t num;  struct ans_opsc ans;  u2_t sn, pn;  sn = pidrel->urn.segnum;  if (sn == NRSNUM)    {      struct d_sc_r *screl;      struct des_trel *destrel;      u2_t ntob;      ntob = pidrel->urn.obnum;      if (ntob > desnseg.mtobnum)	{	  ans.cpnops = NIOB;	  return (ans);	}      destrel = (struct des_trel *) * (desnseg.tobtab + ntob);      if (destrel == NULL)	{	  ans.cpnops = NIOB;	  return (ans);	}	      if (((struct prtob *) destrel)->prob != TREL)	{	  ans.cpnops = NIOB;	  return (ans);	}      fn = destrel->fieldn;      fdf = destrel->fdftr;      df = (struct des_field *) (destrel + 1);      if ((ans.cpnops = testcond (df, fn, fdf, fnum, fl, &slsz, sc, fmnum, fml)) != OK)	return (ans);      screl = (struct d_sc_r *) lusc (&num, scrsize, (char *) destrel, SCTR, mode,				      fnum, fl, sc, slsz, fmnum, fml, 0);      pn = destrel->tobtr.firstpn;      if (pn == (u2_t) ~ 0)	{	  ans.cpnops = EOSCAN;	}      else	{	  destrel->tobtr.osctob++;	  ans.cpnops = OK;	}      screl->curtid.tpn = pn;      screl->curtid.tindex = 0;      screl->mescr.prcrt = 0;      screl->memtid.tpn = (u2_t) ~ 0;    }  else    {      struct d_sc_i *scind;      struct ldesscan *disc;      i4_t rep;      struct d_r_t *desrel;      u2_t size;      if ((ans.cpnops = cont_fir (pidrel, &desrel)) != OK)	return (ans);      fn = desrel->desrbd.fieldnum;      fdf = desrel->desrbd.fdfnum;      df = (struct des_field *) (desrel + 1);      if ((ans.cpnops = testcond (df, fn, fdf, fnum, fl, &slsz, sc, fmnum, fml)) != OK)	return (ans);      if ((ans.cpnops = synlsc (RSC, pidrel, sc, slsz, fn, NULL)) != OK)	return (ans);      scind = rel_scan (sn, pidrel->urn.obnum, (char *) desrel, &num,			fnum, fl, sc, slsz, fmnum, fml);      disc = &scind->dessc;      rep = fgetnext (disc, &pn, &size, SLOWSCAN);      if (rep == EOI)	{	  pn = (u2_t) ~ 0;	  ans.cpnops = EOSCAN;	}      else	{	  desrel->oscnum++;	  ans.cpnops = OK;	}      disc->ctidi.tpn = pn;      disc->ctidi.tindex = 0;      scind->mesci.prcrt = 0;      disc->mtidi.tpn = (u2_t) ~ 0;    }  ans.scnum = num;  return (ans);}staticintsel_cmpr (char *diasc, u2_t * diasz, u2_t dscsz, struct des_field *df){  u2_t fnk;  char *lastb, *diaval;  i4_t sst;  unsigned char t;  char *scpnt;  sst = 1;  lastb = diasc + *diasz;  diaval = diasc + dscsz;  scpnt = diasc;  for (fnk = 0; (t = selsc1 (&scpnt, sst++)) != ENDSC; fnk++)    {      diaval = pred_compress (diaval, lastb, df + fnk, t);      if (diaval == NULL)        return (NCF);    }  *diasz = diaval - diasc;  return (OK);}inttestcond (struct des_field *df, u2_t fn, u2_t fdf, u2_t fnum, u2_t * fl,          u2_t * slsz, char *selcon, u2_t fmnum, u2_t * fml){  for (; fnum != 0; fnum--, fl++)    if (*fl > fn)      return (NCF);  for (; fmnum != 0; fmnum--, fml++)    if (*fml > fn)      return (NCF);  if (*slsz != 0)    {      u2_t i, scsz;      i4_t sst, ans = OK;      unsigned char t;      char *a;      a = selcon;      sst = 1;      for (i = 0; (t = selsc1 (&a, sst++)) != ENDSC && i < fn ; i++)	{	  if (i< fdf && t == EQUN)	    return (NCF);	  if (t < EQ || (t > ANY && t < ENDSC))	    return (NCF);	}      if (t != ENDSC)	return (NCF);      if (sst % 2 == 0)	a++;      scsz = a - selcon;      if (*slsz != 0)	ans = sel_cmpr (selcon, slsz, scsz, df);      if (ans < 0)	return (NCF);    }  return (OK);}

⌨️ 快捷键说明

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