Changeset: 80753ed15194 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=80753ed15194
Modified Files:
        monetdb5/extras/rdf/rdfschema.c
        sql/backends/monet5/sql.mx
Branch: rdf
Log Message:

Fixing some memory leaks causing by not completely freeing memory allocation 
for CSrelSet and CSmergeRelSet


diffs (200 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
@@ -312,7 +312,9 @@ void freeCSrelSet(CSrel *csrelSet, int n
 
        for (i = 0; i < numCSrel; i++){
                free(csrelSet[i].lstRefCSoid);
+               free(csrelSet[i].lstPropId);
                free(csrelSet[i].lstCnt); 
+               free(csrelSet[i].lstBlankCnt);
        }
        free(csrelSet);
 }
@@ -2837,6 +2839,19 @@ void initCsRelBetweenMergeFreqSet(CSmerg
        }
 }
 
+static 
+void freeMergeCSrelset(CSmergeRel *csrelSet, int numCSrel){
+       int i; 
+
+       for (i = 0; i < numCSrel; i++){
+               free(csrelSet[i].lstRefFreqIdx);
+               free(csrelSet[i].lstPropId);
+               free(csrelSet[i].lstCnt); 
+               free(csrelSet[i].lstBlankCnt);
+       }
+       free(csrelSet);
+}
+
 static
 void addReltoCSmergeRel(int origFreqIdx, int refFreqIdx, oid propId, int freq, 
int numBlank, CSmergeRel *csmergerel)
 {
@@ -2933,8 +2948,9 @@ void printCSmergeRel(CSset *freqCSset, C
        char    filename2[100];
        char    tmpStr[20];
        str     propStr;
-       int             i,j;
+       int             i,j, k;
        int             freq;
+       int     *mfreqIdxTblIdxMapping;
 
        strcpy(filename2, "csRelationshipBetweenMergeFreqCS");
        sprintf(tmpStr, "%d", freqThreshold);
@@ -2945,14 +2961,26 @@ void printCSmergeRel(CSset *freqCSset, C
        strcat(filename2, ".filter");
        fout2filter = fopen(filename2,"wt");
 
+       k = 0; 
+        mfreqIdxTblIdxMapping = (int *) malloc (sizeof (int) * 
freqCSset->numCSadded);
+       initIntArray(mfreqIdxTblIdxMapping , freqCSset->numCSadded, -1);
+
+       for (i = 0; i < freqCSset->numCSadded; i++){
+               if (freqCSset->items[i].parentFreqIdx == -1){   // Only use the 
maximum or merge CS 
+                       mfreqIdxTblIdxMapping[i] = k; 
+                       k++; 
+               }
+       }
+       
+       fprintf(fout2filter, "TblIdx: (Frequency) --> TblIdx (Property) (#of 
References) (#of blanknodes),...");        
        for (i = 0; i < freqCSset->numCSadded; i++){
                if (csRelBetweenMergeFreqSet[i].numRef != 0){   //Only print CS 
with FK
                        fprintf(fout2, "Relationship "BUNFMT": ", 
freqCSset->items[csRelBetweenMergeFreqSet[i].origFreqIdx].csId);
                        fprintf(fout2filter, "Relationship "BUNFMT": ", 
freqCSset->items[csRelBetweenMergeFreqSet[i].origFreqIdx].csId);
                        freq = 
freqCSset->items[csRelBetweenMergeFreqSet[i].origFreqIdx].support;
                        fprintf(fout2, "CS " BUNFMT " (Freq: %d, isFreq: %d) 
--> ", freqCSset->items[csRelBetweenMergeFreqSet[i].origFreqIdx].csId, freq, 1);
-                       fprintf(fout2filter, "CS " BUNFMT " (Freq: %d, isFreq: 
%d) --> ", freqCSset->items[csRelBetweenMergeFreqSet[i].origFreqIdx].csId, 
freq, 1);
-
+                       /*fprintf(fout2filter, "CS " BUNFMT " (Freq: %d, 
isFreq: %d) --> ", 
freqCSset->items[csRelBetweenMergeFreqSet[i].origFreqIdx].csId, freq, 1);*/
+                       fprintf(fout2filter, "Tbl %d (Freq: %d) --> ", 
mfreqIdxTblIdxMapping[csRelBetweenMergeFreqSet[i].origFreqIdx], freq);
                        for (j = 0; j < csRelBetweenMergeFreqSet[i].numRef; 
j++){
                                #if SHOWPROPERTYNAME
                                
takeOid(csRelBetweenMergeFreqSet[i].lstPropId[j], &propStr);
@@ -2962,7 +2990,11 @@ void printCSmergeRel(CSset *freqCSset, C
                                #endif
 
                                if (freq < 
csRelBetweenMergeFreqSet[i].lstCnt[j]*100){
-                                       fprintf(fout2filter, BUNFMT "(P:" 
BUNFMT ") (%d)(Blank:%d) ", 
freqCSset->items[csRelBetweenMergeFreqSet[i].lstRefFreqIdx[j]].csId,csRelBetweenMergeFreqSet[i].lstPropId[j],
 csRelBetweenMergeFreqSet[i].lstCnt[j], 
csRelBetweenMergeFreqSet[i].lstBlankCnt[j]);
+                                       /*fprintf(fout2filter, BUNFMT "(P:" 
BUNFMT ") (%d)(Blank:%d) ", 
freqCSset->items[csRelBetweenMergeFreqSet[i].lstRefFreqIdx[j]].csId,csRelBetweenMergeFreqSet[i].lstPropId[j],
 csRelBetweenMergeFreqSet[i].lstCnt[j], 
csRelBetweenMergeFreqSet[i].lstBlankCnt[j]);*/
+                                       fprintf(fout2filter, "Tbl %d (P:" 
BUNFMT ") (%d)(Blank:%d) ", 
mfreqIdxTblIdxMapping[csRelBetweenMergeFreqSet[i].lstRefFreqIdx[j]],csRelBetweenMergeFreqSet[i].lstPropId[j],
 csRelBetweenMergeFreqSet[i].lstCnt[j], 
csRelBetweenMergeFreqSet[i].lstBlankCnt[j]);
+                                       if (freq == 
csRelBetweenMergeFreqSet[i].lstCnt[j]){
+                                               fprintf(fout2filter, " (FKRel) 
");
+                                       }
                                }
                        }
                        fprintf(fout2, "\n");
@@ -2972,6 +3004,8 @@ void printCSmergeRel(CSset *freqCSset, C
 
        fclose(fout2);
        fclose(fout2filter);
+       free(mfreqIdxTblIdxMapping);
+
 }
 
 // for storing ontology data
@@ -3163,6 +3197,7 @@ RDFextractCSwithTypes(int *ret, bat *sba
 
 
        // Phase 3: Labels
+       
        labels = createLabels(freqCSset, csRelBetweenMergeFreqSet, sbat, si, 
pi, oi, *subjCSMap, mbat, csIdFreqIdxMap, *freqThreshold, ontattributes, 
ontattributesCount, ontmetadata, ontmetadataCount);
 
        freeLabels(labels, freqCSset);
@@ -3182,7 +3217,7 @@ RDFextractCSwithTypes(int *ret, bat *sba
        freeCS_SubCSMapSet(csSubCSSet, *maxCSoid + 1); 
 
        free(csIdFreqIdxMap); 
-       free(csRelBetweenMergeFreqSet);
+       freeMergeCSrelset(csRelBetweenMergeFreqSet,freqCSset->numCSadded);
        freeCSrelSet(csrelSet, *maxCSoid + 1); 
        freeCSrelSet(csrelToMaxFreqSet, *maxCSoid + 1); 
        freeCSrelSet(csrelBetweenMaxFreqSet, *maxCSoid + 1);  
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -7610,6 +7610,9 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
        #endif
        sql_table       *psotbl;
        int     i, j; 
+       int     nonullmvtables = 0;
+       int     totalNoTablesCreated = 0;
+       int     totalNoViewCreated = 0;
 
        str msg;
        BAT     *sbat, *pbat, *obat, *mbat; 
@@ -7653,6 +7656,7 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
        // Add irregular triples to pso tbale
        psotbl = mvc_create_table(m, sch, "pso", tt_table, 0,
                                                           SQL_PERSIST, 0, 3);
+       totalNoTablesCreated++;
        mvc_create_column(m, psotbl, "p",  &tpe);
        mvc_create_column(m, psotbl, "s",  &tpe);
        mvc_create_column(m, psotbl, "o",  &tpe);
@@ -7668,11 +7672,14 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
                        mvc_bind_column(m, psotbl,"o" ), 
                        cstablestat->obat, TYPE_bat);
        // Add regular triple to cstables and cstablesEx
+
+       printf("Starting creating SQL Table -- \n");
+       
        for (i = 0; i < cstablestat->numTables; i++){
                sprintf(tmptbname, "cstable%d",i);
                cstables[i] = mvc_create_table(m, sch, tmptbname, tt_table, 0,
                                   SQL_PERSIST, 0, 3);
-
+               totalNoTablesCreated++;
                //Multivalues tables for each column
                csmvtables[i] = (sql_table **)malloc(sizeof(sql_table*) * 
cstablestat->numPropPerTable[i]);
                
@@ -7682,13 +7689,18 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
                        mvc_create_column(m, cstables[i], tmpcolname,  &tpe);
 
                        //For multi-values table
-                       sprintf(tmptbname, "mvtable%dp%d",i,j);
-                       csmvtables[i][j] = mvc_create_table(m, sch, tmptbname, 
tt_table, 0, SQL_PERSIST, 0, 3); 
-                       sprintf(tmpcolname, "objvalue");
-                       mvc_create_column(m, csmvtables[i][j], tmpcolname,  
&tpe);
-                       store_funcs.append_col(m->session->tr,
+                       if (BATcount(cstablestat->lstcstable[i].mvBats[j]) != 
0){
+                               sprintf(tmptbname, "mvtable%dp%d",i,j);
+                               csmvtables[i][j] = mvc_create_table(m, sch, 
tmptbname, tt_table, 0, SQL_PERSIST, 0, 3); 
+                               totalNoTablesCreated++;
+                               sprintf(tmpcolname, "objvalue");
+                               mvc_create_column(m, csmvtables[i][j], 
tmpcolname,  &tpe);
+                               store_funcs.append_col(m->session->tr,
                                        mvc_bind_column(m, 
csmvtables[i][j],tmpcolname ), 
                                        cstablestat->lstcstable[i].mvBats[j], 
TYPE_bat);
+                       }
+                       else
+                               nonullmvtables++;
                }
 
                //Add data
@@ -7707,6 +7719,7 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
                sprintf(tmptbnameex, "cstableex%d",i);
                cstablesEx[i] = mvc_create_table(m, sch, tmptbnameex, tt_table, 
0,
                                   SQL_PERSIST, 0, 3);
+               totalNoTablesCreated++;
                for (j = 0; j < cstablestat->numPropPerTable[i]; j++){
                        //TODO: Use propertyId from Propstat
                        sprintf(tmpcolname, "colex%d",j);
@@ -7727,7 +7740,7 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
                sprintf(viewcommand, "SELECT * from rdf.%s UNION SELECT * from 
rdf.%s;", tmptbname, tmptbnameex); 
                //printf("Create view %s \n", viewcommand);
                viewcstables[i] = mvc_create_view(m, sch, tmpviewname, 
SQL_PERSIST,viewcommand, 1); 
-
+               totalNoViewCreated++;
                for (j = 0; j < cstablestat->numPropPerTable[i]; j++){
                        //TODO: Use propertyId from Propstat
                        sprintf(tmpcolname, "col%d",j);
@@ -7737,6 +7750,9 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
 
        }
 
+       printf("... Done ( %d tables + %d views created. Already exclude %d 
Null mvtables ) \n", 
+                       totalNoTablesCreated, totalNoViewCreated, 
nonullmvtables);
+               
 
        BBPunfix(sbat->batCacheid); 
        BBPunfix(pbat->batCacheid);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to