Exemplo n.º 1
0
int main(){
    RC rc;
    PF_Manager pfm;
    IX_Manager ixm(pfm);
    IX_IndexHandle ixih;
    IX_IndexScan ixis;

    if(rc=ixm.CreateIndex("indextest",0,FLOAT,4))
        return rc;
    if(rc=ixm.OpenIndex("indextest",0,ixih))
        return rc;
    for(int i=0;i<10;i++){
        Value value((float)i);
        if(rc=ixih.InsertEntry(value,RID(i/10,i%10)))
            return rc;
    }
    if ((rc = ixm.CloseIndex(ixih))) {
        return rc;
    }

    if ((rc=ixm.OpenIndex("indextest",0,ixih))) {
        return rc;
    }
//    for(int i=0;i<1;i++){
//        Value value;
//        value.type=INT;
//        value.iData=i;
//
//        if(rc=ixih.DeleteEntry(value,RID(i/10,i%10)))
//            return rc;
//    }
    ixis.OpenScan(ixih,GE,Value((float)5.0));
    RID id;
    while(ixis.GetNextEntry(id)!=IX_EOF){
        PageNum pageNum;
        SlotNum slotNum;
        id.GetPageNum(pageNum);
        id.GetSlotNum(slotNum);
        cout<<pageNum<<"\t"<<slotNum<<endl;
    }
    if ((rc = ixis.CloseScan())) {
        return rc;
    }
    if ((rc = ixm.CloseIndex(ixih))) {
        return rc;
    }

     return 0;

}
Exemplo n.º 2
0
static RC PrintTable(SM_DbHandle &db, const char *tableName)
{
    RC rc;

    RM_FileHandle *pTable;
    if ((rc = db.FindTableHandle(tableName, pTable)))
        return rc;
    int recordSize = pTable->header.recordSize;

    vector<SM_ActiveAttr> *attributes;
    if ((rc = db.AllAttributes(tableName, attributes)))
        return rc;

    RM_FileScan allScan;
    if ((rc = allScan.OpenScan(*pTable, INT, 0, 0, 0, NO_OP, NULL)))
        return rc;
    RM_Record record;
    int recordCount = 0;

    printf("Table: %s\n", tableName);
    while ((rc = allScan.GetNextRec(record)) == 0) {
        RID rid;
        if ((rc = record.GetRid(rid)))
            return rc;
        PageNum pageNum;
        int slotNum;
        if ((rc = rid.GetPageNum(pageNum)))
            return rc;
        if ((rc = rid.GetSlotNum(slotNum)))
            return rc;

        char *data;
        if ((rc = record.GetData(data)))
            return rc;

        printf("RID: (%d,%d)\n", pageNum, slotNum);
        vector<SM_ActiveAttr>::iterator pAttr;

        int *pNullBitmap = (int *)(data + recordSize - sizeof(int));
        for (pAttr = attributes->begin(); pAttr != attributes->end(); ++pAttr) {
            SM_Attribute *attr = &pAttr->record;
            if (*pNullBitmap & (1 << attr->number))
                printf("  %s: Null\n", attr->attrName);
            else if (attr->attrType == INT)
                printf("  %s: %d\n", attr->attrName, *(int *)(data + attr->attrOffset));
            else if (attr->attrType == FLOAT)
                printf("  %s: %f\n", attr->attrName, *(float *)(data + attr->attrOffset));
            else if (attr->attrType == STRING)
                printf("  %s: %s\n", attr->attrName, data + attr->attrOffset);
        }
        printf("\n");
        recordCount++;
    }
    if (rc != RM_ERR_EOF)
        return rc;
    if ((rc = allScan.CloseScan()))
        return rc;
        printf("\nTotal %d records.\n", recordCount);

    return 0;
}