Changeset: 662d4c1cd92c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=662d4c1cd92c
Modified Files:
        monetdb5/extras/rdf/rdfschema.c
Branch: rdf
Log Message:

Get type-specific object values and fix bug caused by appending to wrong BAT


diffs (189 lines):

diff --git a/monetdb5/extras/rdf/rdfschema.c b/monetdb5/extras/rdf/rdfschema.c
--- a/monetdb5/extras/rdf/rdfschema.c
+++ b/monetdb5/extras/rdf/rdfschema.c
@@ -5433,6 +5433,9 @@ void initCStables(CStableStat* cstablest
        cstablestat->pbat = BATnew(TYPE_void, TYPE_oid, smallbatsz);
        cstablestat->sbat = BATnew(TYPE_void, TYPE_oid, smallbatsz);
        cstablestat->obat = BATnew(TYPE_void, TYPE_oid, smallbatsz);
+       BATseqbase(cstablestat->pbat, 0);
+       BATseqbase(cstablestat->sbat, 0);
+       BATseqbase(cstablestat->obat, 0);
 
        cstablestat->lastInsertedS = (oid**) malloc(sizeof(oid*) * numTables);
        cstablestat->lstcstable = (CStable*) malloc(sizeof(CStable) * 
numTables); 
@@ -5470,8 +5473,10 @@ void initCStables(CStableStat* cstablest
                        }
                        else{
                                cstablestat->lstcstable[i].colBats[j] = 
BATnew(TYPE_void, TYPE_oid, smallbatsz);
+                               
BATseqbase(cstablestat->lstcstable[i].colBats[j], 0);   
                                cstablestat->lstcstable[i].mvBats[j] = 
BATnew(TYPE_void, 
mapObjBATtypes[(int)csPropTypes[i].lstPropTypes[j].defaultType], smallbatsz) ;
-                               cstablestat->lstcstable[i].mvExBats[j] = 
BATnew(TYPE_void, TYPE_oid,  smallbatsz) ;
+                               cstablestat->lstcstable[i].mvExBats[j] = 
BATnew(TYPE_void, TYPE_oid,  smallbatsz) ;     //TODO: Check whether the MVCol 
need ExCol
+                               
BATseqbase(cstablestat->lstcstable[i].mvExBats[j], 0);
                        }
                }
 
@@ -5665,11 +5670,16 @@ void fillMissingvaluesAll(CStableStat* c
 }
 
 static
-void getRealValue(oid objOid, ObjectType objType, BATiter mapi, BAT *mapbat){
+void getRealValue(void **returnValue, oid objOid, ObjectType objType, BATiter 
mapi, BAT *mapbat){
        str     objStr; 
+       str     datetimeStr; 
        BUN     bun;    
        BUN     maxObjectURIOid =  ((oid)1 << (sizeof(BUN)*8 - NBITS_FOR_CSID - 
1)); //Base on getTblIdxFromS
-
+       float   realFloat; 
+       int     realInt; 
+       oid     realUri;
+
+       printf("objOid = " BUNFMT " \n",objOid);
        if (objType == URI || objType == BLANKNODE){
                objOid = objOid - ((oid)objType << (sizeof(BUN)*8 - 4));
 
@@ -5682,6 +5692,7 @@ void getRealValue(oid objOid, ObjectType
                objOid = objOid - (objType*2 + 1) *  RDF_MIN_LITERAL;   /* Get 
the real objOid from Map or Tokenizer */ 
                bun = BUNfirst(mapbat);
                objStr = (str) BUNtail(mapi, bun + objOid); 
+               printf("From mapbat BATcount= "BUNFMT" at position " BUNFMT ": 
%s \n", BATcount(mapbat),  bun + objOid,objStr);
        }
                
 
@@ -5689,22 +5700,34 @@ void getRealValue(oid objOid, ObjectType
        {
                case STRING:
                        printf("A String object value: %s \n",objStr);
-                       //return objStr; 
+                       if (*returnValue != NULL) free(*returnValue);
+                       *returnValue = (char *)malloc(sizeof(char) * 
strlen(objStr) + 1); 
+                       memcpy(*returnValue,objStr, sizeof(char) * 
strlen(objStr) + 1);
+                       printf("A String value of returnValue: %s \n", (char 
*)(*returnValue));
                        break; 
                case DATETIME:
-                       printf("A datetime object value: %s 
\n",getDateTimeFromRDFString(objStr));
-                       //return objStr; 
+                       datetimeStr = getDateTimeFromRDFString(objStr);
+                       if (*returnValue != NULL) free(*returnValue);
+                       *returnValue = (char *)malloc(sizeof(char) * 
strlen(datetimeStr) + 1); 
+                       memcpy(*returnValue,datetimeStr,sizeof(char) * 
strlen(objStr) + 1);
+                       printf("A datetime object value: %s \n",(char 
*)(*returnValue));
                        break; 
                case INTEGER:
                        printf("Full object value: %s \n",objStr);
-                       printf("A INTEGER object value: %i 
\n",getIntFromRDFString(objStr));
+                       realInt = getIntFromRDFString(objStr);
+                       printf("A INTEGER object value: %i \n",realInt);
+                       *(int*)(*returnValue) = realInt;
                        break; 
                case FLOAT:
                        printf("Full object value: %s \n",objStr);
-                       printf("A FLOAT object value: %f 
\n",getFloatFromRDFString(objStr));
+                       realFloat = getFloatFromRDFString(objStr);
+                       printf("A FLOAT object value: %f \n",realFloat);
+                       *(float*)(*returnValue) = realFloat;
                        break; 
                default: //URI or BLANK NODE            
                        printf("A URI object value: " BUNFMT " \n", objOid);
+                       realUri = objOid;
+                       *(oid*)(*returnValue) = realUri;
        }
 
 }
@@ -5739,8 +5762,8 @@ str RDFdistTriplesToCSs(int *ret, bat *s
        int     numMultiValues = 0;
        oid     tmpmvValue; 
        char    istmpMVProp = 0; 
-       oid     tmpNil = oid_nil; 
        char*   schema = "rdf";
+       void*   realObjValue = NULL;
        
        if (TKNZRopen (NULL, &schema) != MAL_SUCCEED) {
                throw(RDF, "RDFdistTriplesToCSs",
@@ -5826,6 +5849,8 @@ str RDFdistTriplesToCSs(int *ret, bat *s
 
                tmpColIdx = tmpTblIdxPropIdxMap[tblIdx]; 
 
+               printf(" Tbl: %d   |   Col: %d \n", tblIdx, tmpColIdx);
+
                istmpMVProp = 
csPropTypes[tblIdx].lstPropTypes[tmpColIdx].isMVProp; 
 
                if (istmpMVProp == 1){  // This is a multi-valued prop
@@ -5837,15 +5862,18 @@ str RDFdistTriplesToCSs(int *ret, bat *s
                        tmpmvBat = 
cstablestat->lstcstable[tblIdx].mvBats[tmpColIdx];
                        tmpmvExBat = 
cstablestat->lstcstable[tblIdx].mvExBats[tmpColIdx];
                        tmpBat = 
cstablestat->lstcstable[tblIdx].colBats[tmpColIdx];
-                       
-                       getRealValue(*obt, objType, mi, mbat);
+                       BATprint(tmpBat);
+                       BATprint(tmpmvBat);
+                       getRealValue(&realObjValue, *obt, objType, mi, mbat);
+
                        if (objType == 
csPropTypes[tblIdx].lstPropTypes[tmpColIdx].defaultType){
-                               BUNappend(tmpmvBat, obt, TRUE);         
-                               BUNappend(tmpmvExBat, &tmpNil, TRUE); 
+                               //BUNappend(tmpmvBat, obt, TRUE);               
+                               BUNappend(tmpmvBat, (ptr) realObjValue, TRUE); 
+                               BUNappend(tmpmvExBat, 
ATOMnilptr(tmpmvExBat->ttype), TRUE); 
                        }       
                        else{   //TODO: Try to cast the value
                                BUNappend(tmpmvExBat, obt, TRUE);
-                               BUNappend(tmpmvBat, &tmpNil, TRUE);
+                               BUNappend(tmpmvBat, 
ATOMnilptr(tmpmvBat->ttype), TRUE);
                        }
 
                        if (numMultiValues == 0){       
@@ -5855,8 +5883,12 @@ str RDFdistTriplesToCSs(int *ret, bat *s
                                if (tmpSoid > (tmplastInsertedS[MULTIVALUES] + 
1)){
                                        fillMissingvalues(tmpBat, 
tmplastInsertedS[MULTIVALUES] + 1, tmpSoid-1);
                                }
-                               tmpmvValue = BUNlast(tmpmvBat) - 1;
+                               
+                               BATprint(tmpmvBat);
+                               tmpmvValue = (oid)(BUNlast(tmpmvBat) - 1);
+                               printf("Insert the refered oid " BUNFMT "for MV 
prop \n", tmpmvValue);
                                BUNappend(tmpBat, &tmpmvValue, TRUE);
+                               BATprint(tmpBat);
                                tmplastInsertedS[MULTIVALUES] = tmpSoid; 
                                numMultiValues++;
                        }
@@ -5867,7 +5899,7 @@ str RDFdistTriplesToCSs(int *ret, bat *s
 
                tmpTableType = 
csPropTypes[tblIdx].lstPropTypes[tmpColIdx].TableTypes[(int)objType]; 
 
-               printf("  objType: %d  TblType: %d", 
(int)objType,(int)tmpTableType);
+               printf("  objType: %d  TblType: %d \n", 
(int)objType,(int)tmpTableType);
                if (tmpTableType == PSOTBL){                    //For 
infrequent type ---> go to PSO
                        BUNappend(cstablestat->pbat,pbt , TRUE);
                        BUNappend(cstablestat->sbat,sbt , TRUE);
@@ -5913,8 +5945,10 @@ str RDFdistTriplesToCSs(int *ret, bat *s
                        fillMissingvalues(curBat, 
tmplastInsertedS[(int)objType] + 1, tmpSoid-1);
                }
 
-               getRealValue(*obt, objType, mi, mbat);
-               BUNappend(curBat, obt, TRUE); 
+               getRealValue(&realObjValue, *obt, objType, mi, mbat);
+               if (objType == STRING) printf("Value returned by getRealValue 
is %s \n", (char*)realObjValue);
+               //BUNappend(curBat, obt, TRUE); 
+               BUNappend(curBat, (ptr) realObjValue, TRUE); 
 
                //printf(BUNFMT": Table %d | column %d  for prop " BUNFMT " | 
sub " BUNFMT " | obj " BUNFMT "\n",p, tblIdx, 
                //                                      tmpColIdx, *pbt, 
tmpSoid, *obt); 
@@ -5933,8 +5967,17 @@ str RDFdistTriplesToCSs(int *ret, bat *s
 
        // Keep the batCacheId
        for (i = 0; i < cstablestat->numTables; i++){
+               printf("----- Table %d ------ \n",i );
                for (j = 0; j < cstablestat->numPropPerTable[i];j++){
+                       printf("Column %d \n", j);
                        cstablestat->lstbatid[i][j] = 
cstablestat->lstcstable[i].colBats[j]->batCacheid; 
+                       BATprint(cstablestat->lstcstable[i].colBats[j]);
+                       if (csPropTypes[i].lstPropTypes[j].isMVProp){
+                               printf("MV Columns: \n");
+                               BATprint(cstablestat->lstcstable[i].mvBats[j]);
+                               
BATprint(cstablestat->lstcstable[i].mvExBats[j]);
+                       }
+
                }
        }
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to