insert.c

来自「linux 下用c++ 开发的一个小型数据库系统」· C语言 代码 · 共 98 行

C
98
字号
#include "catalog.h"#include "query.h"/* * Inserts a record into the specified relation. * * Returns: * 	OK on success * 	an error code otherwise */const Status QU_Insert(const string & relation, 	const int attrCnt, 	const attrInfo attrList[]){// part 5      InsertFileScan	*ifs ;  RID		 	rid ;  Record		rec ;  char			*mydata ;  int			len = 0 ;  Status		status ;  RelDesc		rds ;  AttrDesc		ads ;  int			i, n, myattrCnt ;  string		astr ;  int			intval ;  float			flval ;  AttrDesc		*attrs ;  int			chklast ;  status = relCat->getInfo( relation.c_str(), rds) ;  if (status != OK) return status ;    astr.append("begin") ;  for( i = 0; i < attrCnt; i++){    astr.erase(1) ;    n = strlen(attrList[i].attrName) ;    astr.replace( 0, n, attrList[i].attrName) ;    if((status = attrCat->getInfo( relation, astr, ads)) != OK) return status ;  }  attrCat->getRelInfo( relation, myattrCnt, attrs) ;    len = 0 ;  for ( i = 0; i < myattrCnt; i++)    len = len + attrs[i].attrLen ;   astr.append("insert") ;  mydata = new char[len] ;   for (i = 0; i < len; i++) mydata[i] = 0;   for ( i = 0; i < myattrCnt; i++){    for (int t = 0; t < attrCnt; t++){      if (strcmp(attrs[i].attrName,attrList[t].attrName) == 0){      //  astr.erase(1) ;      //  n = strlen(attrList[i].attrName) ;      //  astr.replace( 0, n, attrList[i].attrName) ;      //   attrCat->getInfo( relation, astr, ads) ;        if ((Datatype)attrs[i].attrType == INTEGER){          intval = atoi((char *)attrList[t].attrValue) ;          memcpy( mydata + attrs[i].attrOffset, &intval, attrs[i].attrLen) ;          break ;        }        if ((Datatype)attrs[i].attrType == FLOAT){          flval = (float)atof((char *)attrList[t].attrValue) ;          memcpy( mydata + attrs[i].attrOffset, &flval, attrs[i].attrLen) ;          break ;        }        memcpy( mydata + attrs[i].attrOffset,attrList[t].attrValue, attrs[i].attrLen) ;        break ;      }    }  }  rec.data = mydata ;  rec.length = len ;  ifs = new InsertFileScan( relation, status) ;  if (status != OK){    delete [] mydata ;    return status ;  }    if((status = ifs->insertRecord( rec, rid)) != OK){    delete [] mydata ;    delete ifs ;    return status ;  }    printf("\n  Table (%s)  1 Record Insert Success! \n", relation.c_str()) ;    delete [] mydata ;  delete ifs ;    return OK;}

⌨️ 快捷键说明

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