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