コード例 #1
0
ファイル: select.C プロジェクト: shashwatsher/cs564-project
const Status ScanSelect(const string & result, 
			const int projCnt, 
			const AttrDesc projNames[],
			const AttrDesc *attrDesc, 
			const Operator op, 
			const char *filter,
			const int reclen)
{
	Status status;
	RID rid;
	Record outputRec;
	Record rec;

    cout << "Doing HeapFileScan Selection using ScanSelect()" << endl;

    InsertFileScan resultRel(result, status);
    if(status != OK) return status;

    char outputData[reclen];
    outputRec.data = (void *)outputData;
    outputRec.length = reclen;

   // HeapFileScan hfs(attrDesc->relName,status);
   HeapFileScan hfs(projNames->relName,status);
    if(status != OK) return status; 


    if(filter == NULL){
	    if((status = hfs.startScan(0, 0, (Datatype)0, filter, op)) != OK){
		    return status;
	    }
    }else{
	    if((status = hfs.startScan(attrDesc->attrOffset, attrDesc->attrLen, (Datatype)attrDesc->attrType, filter, op)) != OK){
		    return status;
	    }
    }

    while((status = hfs.scanNext(rid)) == OK){
	    if((status = hfs.getRecord(rec)) != OK) return status;

	    int outputOffset = 0;
	    for( int i = 0; i < projCnt; i++){
			    memcpy(outputData + outputOffset, (char *)rec.data + projNames[i].attrOffset, projNames[i].attrLen);
			    outputOffset += projNames[i].attrLen;
	    }
	    
	    RID outRID;
	    if((status = resultRel.insertRecord(outputRec,outRID)) != OK){
		    return status;
	    }
    }

    if(status == FILEEOF) return OK;
    return status;

}
コード例 #2
0
ファイル: Preprocessor.cpp プロジェクト: AnotherTest/HELP
void Preprocessor::applyHelpFile()
{
    std::string help_file = file_directory(file_name) + file_extension(file_name) + ".help";
    std::ifstream hfs(help_file);
    if(!hfs.is_open())
        return;
    hfs.close();
    std::cout << "Using HELP file: " << help_file << '.' << std::endl;
    readFile(help_file);
    analyseSource();
    lines.clear();
    source.clear();
}
コード例 #3
0
ファイル: delete.C プロジェクト: tysonwil/DB_part6
const Status QU_Delete(const string & relation, 
		       const string & attrName, 
		       const Operator op,
		       const Datatype type, 
		       const char *attrValue)
{
	RID rid;
	Status status;
	AttrDesc attrInfo;
	Record record;

	// Set up a HeapFileScan
	HeapFileScan hfs(relation, status);
	if (status != OK) return status;

	// Get attribute information
	status = attrCat->getInfo(relation, attrName, attrInfo);
	if (status != OK) return status;

	// Start the scan with the attribute info gained above.
	status = hfs.startScan(attrInfo, attrInfo.attLen, type, attrValue, op);
	if (status != OK) return status;

	// Find all tuples in relation
	while ((status = hfs.scanNext(rid)) == OK) {
		// get record
		status = hfs.getRecord(record);
		if (status != OK) return status;

		// delete record
		status = hfs.deleteRecord();
		if (status != OK) return status;
	}
	
	return OK;
}
コード例 #4
0
ファイル: select.C プロジェクト: Phildo/Minirel
const Status ScanSelect(const string & result, 
			const int projCnt, 
			const AttrDesc projNames[],
			const AttrDesc *attrDesc, 
			const Operator op, 
			const char *filter,
			const int reclen)
{
    cout << "Doing HeapFileScan Selection using ScanSelect()" << endl;

    Status s;
    Record outRec;
    
    InsertFileScan ifs(result, s);
    if(s != OK) return s;
    char * outData = (char *)malloc(reclen);
    if(!outData){
        return INSUFMEM;
    }

    outRec.data = outData;
    outRec.length = reclen;
    
    HeapFileScan hfs(projNames->relName,s);
    if(s != OK) return s; 

    if(filter == NULL)
    {
      if((s = hfs.startScan(0, 0, STRING, NULL, op)) != OK)
        return s;

    }
    else
    {
      if((s = hfs.startScan(attrDesc->attrOffset, attrDesc->attrLen, (Datatype)attrDesc->attrType, filter, op)) != OK)
        return s;

    }
    
    Record rec;
    RID rid;
    while((s = hfs.scanNext(rid)) == OK)
    {

        s = hfs.getRecord(rec);
        if(s != OK) return s;
        
        int offset = 0;
        for( int i = 0; i < projCnt; i++)
        {

            memcpy(outData+offset, (char *)rec.data+projNames[i].attrOffset, projNames[i].attrLen);
            offset+=projNames[i].attrLen;
        }
        
        s = ifs.insertRecord(outRec,rid);
        if(s != OK) return s;

    }

    if(s == FILEEOF) s = OK;
    return s;
}