Changeset: 608c23981c16 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=608c23981c16
Modified Files:
monetdb5/extras/rdf/rdflabels.c
monetdb5/extras/rdf/rdfschema.c
Branch: rdf
Log Message:
fix compile errors when USE_MULTIWAY_MERGING is set to 1, fix mergeCandidates
after the order of data types has been changed to (type - onto - fk)
diffs (281 lines):
diff --git a/monetdb5/extras/rdf/rdflabels.c b/monetdb5/extras/rdf/rdflabels.c
--- a/monetdb5/extras/rdf/rdflabels.c
+++ b/monetdb5/extras/rdf/rdflabels.c
@@ -2016,7 +2016,7 @@ oid* getOntoHierarchy(oid ontology, int*
static
void removeDuplicatedCandidates(CSlabel *label) {
int i, j;
- int cNew = label->candidatesNew, cOnto = label->candidatesOntology,
cType = label->candidatesType, cFK = label->candidatesFK;
+ int cNew = label->candidatesNew, cType = label->candidatesType, cOnto =
label->candidatesOntology, cFK = label->candidatesFK;
if (label->candidatesCount < 2) return; // no duplicates
@@ -2028,8 +2028,8 @@ void removeDuplicatedCandidates(CSlabel
// find out which category (new, onto, type, fk) we are
in
int *cPtr = NULL;
if (j < label->candidatesNew) cPtr = &cNew;
- else if (j < label->candidatesNew +
label->candidatesOntology) cPtr = &cOnto;
- else if (j < label->candidatesNew +
label->candidatesOntology + label->candidatesType) cPtr = &cType;
+ else if (j < label->candidatesNew +
label->candidatesType) cPtr = &cType;
+ else if (j < label->candidatesNew +
label->candidatesType + label->candidatesOntology) cPtr = &cOnto;
else cPtr = &cFK;
if (label->candidates[i] == label->candidates[j] ||
label->candidates[j] == BUN_NONE) {
@@ -2047,8 +2047,8 @@ void removeDuplicatedCandidates(CSlabel
// update counts
label->candidatesCount -= moveLeft;
label->candidatesNew = cNew;
+ label->candidatesType = cType;
label->candidatesOntology = cOnto;
- label->candidatesType = cType;
label->candidatesFK = cFK;
}
@@ -2062,10 +2062,10 @@ void removeDuplicatedCandidates(CSlabel
// update value in category;
if (label->candidatesNew > 0) {
label->candidatesNew--;
+ } else if (label->candidatesType > 0) {
+ label->candidatesType--;
} else if (label->candidatesOntology > 0) {
label->candidatesOntology--;
- } else if (label->candidatesType > 0) {
- label->candidatesType--;
} else {
label->candidatesFK--;
}
@@ -2334,8 +2334,8 @@ CSlabel* initLabels(CSset *freqCSset) {
labels[i].candidates = NULL;
labels[i].candidatesCount = 0;
labels[i].candidatesNew = 0;
+ labels[i].candidatesType = 0;
labels[i].candidatesOntology = 0;
- labels[i].candidatesType = 0;
labels[i].candidatesFK = 0;
labels[i].hierarchy = NULL;
labels[i].hierarchyCount = 0;
@@ -2790,7 +2790,7 @@ CSlabel* createLabels(CSset* freqCSset,
* Result: <common name> <ontology candidates CS1> <ontology candidates CS2>
<type candidates CS1> <type candidates CS2> <FK candidates CS1> <FK candidates
CS2>
*/
static
-oid* mergeCandidates(int *candidatesCount, int *candidatesNew, int
*candidatesOntology, int *candidatesType, int *candidatesFK, CSlabel cs1,
CSlabel cs2, oid commonName) {
+oid* mergeCandidates(int *candidatesCount, int *candidatesNew, int
*candidatesType, int *candidatesOntology, int *candidatesFK, CSlabel cs1,
CSlabel cs2, oid commonName) {
oid *candidates;
int counter = 0;
int i;
@@ -2812,38 +2812,38 @@ oid* mergeCandidates(int *candidatesCoun
}
(*candidatesNew) = counter;
- // copy "ontology"
- for (i = 0; i < cs1.candidatesOntology; ++i) {
+ // copy "type"
+ for (i = 0; i < cs1.candidatesType; ++i) {
candidates[counter] = cs1.candidates[cs1.candidatesNew + i];
counter++;
}
- for (i = 0; i < cs2.candidatesOntology; ++i) {
+ for (i = 0; i < cs2.candidatesType; ++i) {
candidates[counter] = cs2.candidates[cs2.candidatesNew + i];
counter++;
}
- (*candidatesOntology) = counter - (*candidatesNew);
-
- // copy "type"
- for (i = 0; i < cs1.candidatesType; ++i) {
- candidates[counter] = cs1.candidates[cs1.candidatesNew +
cs1.candidatesOntology + i];
+ (*candidatesType) = counter - (*candidatesNew);
+
+ // copy "ontology"
+ for (i = 0; i < cs1.candidatesOntology; ++i) {
+ candidates[counter] = cs1.candidates[cs1.candidatesNew +
cs1.candidatesType + i];
counter++;
}
- for (i = 0; i < cs2.candidatesType; ++i) {
- candidates[counter] = cs2.candidates[cs2.candidatesNew +
cs2.candidatesOntology + i];
+ for (i = 0; i < cs2.candidatesOntology; ++i) {
+ candidates[counter] = cs2.candidates[cs2.candidatesNew +
cs2.candidatesType + i];
counter++;
}
- (*candidatesType) = counter - (*candidatesNew) - (*candidatesOntology);
+ (*candidatesOntology) = counter - (*candidatesNew) - (*candidatesType);
// copy "fk"
for (i = 0; i < cs1.candidatesFK; ++i) {
- candidates[counter] = cs1.candidates[cs1.candidatesNew +
cs1.candidatesOntology + cs1.candidatesType + i];
+ candidates[counter] = cs1.candidates[cs1.candidatesNew +
cs1.candidatesType + cs1.candidatesOntology + i];
counter++;
}
for (i = 0; i < cs2.candidatesFK; ++i) {
- candidates[counter] = cs2.candidates[cs2.candidatesNew +
cs2.candidatesOntology + cs2.candidatesType + i];
+ candidates[counter] = cs2.candidates[cs2.candidatesNew +
cs2.candidatesType + cs2.candidatesOntology + i];
counter++;
}
- (*candidatesFK) = counter - (*candidatesNew) - (*candidatesOntology) -
(*candidatesType);
+ (*candidatesFK) = counter - (*candidatesNew) - (*candidatesType) -
(*candidatesOntology);
return candidates;
}
@@ -2858,12 +2858,13 @@ str updateLabel(int ruleNumber, CSset *f
CSlabel big, small;
CSlabel *label;
CS cs;
- #if USE_MULTIWAY_MERGING
+/* #if USE_MULTIWAY_MERGING
+ // multiway merging cannot be used here, see below
int tmpMaxCoverage;
int tmpFreqId;
- #endif
+ #endif */
oid *mergedCandidates = NULL;
- int candidatesCount, candidatesNew, candidatesOntology,
candidatesType, candidatesFK;
+ int candidatesCount, candidatesNew, candidatesType,
candidatesOntology, candidatesFK;
(void) lstFreqId;
(void) numIds;
@@ -2876,8 +2877,8 @@ str updateLabel(int ruleNumber, CSset *f
(*labels)[mergeCSFreqId].candidates = NULL;
(*labels)[mergeCSFreqId].candidatesCount = 0;
(*labels)[mergeCSFreqId].candidatesNew = 0;
+ (*labels)[mergeCSFreqId].candidatesType = 0;
(*labels)[mergeCSFreqId].candidatesOntology = 0;
- (*labels)[mergeCSFreqId].candidatesType = 0;
(*labels)[mergeCSFreqId].candidatesFK = 0;
(*labels)[mergeCSFreqId].hierarchy = NULL;
(*labels)[mergeCSFreqId].hierarchyCount = 0;
@@ -2910,13 +2911,13 @@ str updateLabel(int ruleNumber, CSset *f
#else
// candidates
- mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesOntology, &candidatesType, &candidatesFK,
(*labels)[freqCS1], (*labels)[freqCS2], label->name);
+ mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesType, &candidatesOntology, &candidatesFK,
(*labels)[freqCS1], (*labels)[freqCS2], label->name);
GDKfree(label->candidates);
label->candidates = mergedCandidates; // TODO check access
outside function
label->candidatesCount = candidatesCount;
label->candidatesNew = candidatesNew;
+ label->candidatesType = candidatesType;
label->candidatesOntology = candidatesOntology;
- label->candidatesType = candidatesType;
label->candidatesFK = candidatesFK;
removeDuplicatedCandidates(label);
if (label->name == BUN_NONE && label->candidates[0] !=
BUN_NONE) {
@@ -2958,13 +2959,13 @@ str updateLabel(int ruleNumber, CSset *f
label->name = name;
// candidates
- mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesOntology, &candidatesType, &candidatesFK,
(*labels)[freqCS1], (*labels)[freqCS2], label->name);
+ mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesType, &candidatesOntology, &candidatesFK,
(*labels)[freqCS1], (*labels)[freqCS2], label->name);
GDKfree(label->candidates);
label->candidates = mergedCandidates; // TODO check access
outside function
label->candidatesCount = candidatesCount;
label->candidatesNew = candidatesNew;
+ label->candidatesType = candidatesType;
label->candidatesOntology = candidatesOntology;
- label->candidatesType = candidatesType;
label->candidatesFK = candidatesFK;
removeDuplicatedCandidates(label);
if (label->name == BUN_NONE && label->candidates[0] !=
BUN_NONE) {
@@ -2993,13 +2994,13 @@ str updateLabel(int ruleNumber, CSset *f
// subset-superset relation
// candidates
- mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesOntology, &candidatesType, &candidatesFK,
(*labels)[freqCS1], (*labels)[freqCS2], label->name); // freqCS1 is superCS,
freqCS2 is subCS
+ mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesType, &candidatesOntology, &candidatesFK,
(*labels)[freqCS1], (*labels)[freqCS2], label->name); // freqCS1 is superCS,
freqCS2 is subCS
GDKfree(label->candidates);
label->candidates = mergedCandidates; // TODO check access
outside function
label->candidatesCount = candidatesCount;
label->candidatesNew = candidatesNew;
+ label->candidatesType = candidatesType;
label->candidatesOntology = candidatesOntology;
- label->candidatesType = candidatesType;
label->candidatesFK = candidatesFK;
removeDuplicatedCandidates(label);
if (label->name == BUN_NONE && label->candidates[0] !=
BUN_NONE) {
@@ -3013,7 +3014,8 @@ str updateLabel(int ruleNumber, CSset *f
case S4: // FALLTHROUGH
case S5:
- #if USE_MULTIWAY_MERGING
+/* #if USE_MULTIWAY_MERGING
+ // multiwaymerging cannot be used because 'small' is not set,
but needed for mergeCandidates()
tmpMaxCoverage = 0;
tmpFreqId = 0;
for (i = 0; i < numIds; i++){
@@ -3022,9 +3024,9 @@ str updateLabel(int ruleNumber, CSset *f
tmpMaxCoverage =
freqCSset->items[lstFreqId[i]].coverage;
}
}
- big = &(*labels)[tmpFreqId];
-
- #else
+ big = (*labels)[tmpFreqId];
+
+ #else */
// use label of biggest CS (higher coverage value)
if (freqCSset->items[freqCS1].coverage >
freqCSset->items[freqCS2].coverage) {
big = (*labels)[freqCS1];
@@ -3033,17 +3035,17 @@ str updateLabel(int ruleNumber, CSset *f
big = (*labels)[freqCS2];
small = (*labels)[freqCS1];
}
- #endif
+// #endif
label->name = big.name;
// candidates
- mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesOntology, &candidatesType, &candidatesFK, big,
small, label->name);
+ mergedCandidates = mergeCandidates(&candidatesCount,
&candidatesNew, &candidatesType, &candidatesOntology, &candidatesFK, big,
small, label->name);
GDKfree(label->candidates);
label->candidates = mergedCandidates; // TODO check access
outside function
label->candidatesCount = candidatesCount;
label->candidatesNew = candidatesNew;
+ label->candidatesType = candidatesType;
label->candidatesOntology = candidatesOntology;
- label->candidatesType = candidatesType;
label->candidatesFK = candidatesFK;
removeDuplicatedCandidates(label);
if (label->name == BUN_NONE && label->candidates[0] !=
BUN_NONE) {
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
@@ -3480,12 +3480,13 @@ void doMerge(CSset *freqCSset, int ruleN
static
str mergeMaxFreqCSByS1(CSset *freqCSset, CSlabel** labels, oid *mergecsId,
oid** ontmetadata, int ontmetadataCount,bat *mapbatid){
- int i;
+ int i, j;
+ CS *cs1, *cs2;
#if !USE_MULTIWAY_MERGING
- int j, k;
+ int k;
int freqId1, freqId2;
- CS *cs1, *cs2;
+ int tmpCount;
#else
int *lstDistinctFreqId = NULL;
int numDistinct = 0;
@@ -3494,7 +3495,6 @@ str mergeMaxFreqCSByS1(CSset *freqCSset,
#endif
LabelStat *labelStat = NULL;
oid *name;
- int tmpCount;
#if OUTPUT_FREQID_PER_LABEL
FILE *fout;
@@ -3715,6 +3715,7 @@ void mergeMaxFreqCSByS5(CSrel *csrelMerg
#if !USE_MULTIWAY_MERGING
int freqId1, freqId2;
CS *cs1, *cs2;
+ int startIdx = 0;
#else
int *lstDistinctFreqId = NULL;
int numDistinct = 0;
@@ -3729,7 +3730,6 @@ void mergeMaxFreqCSByS5(CSrel *csrelMerg
#endif
int maxNumPropInMergeCS =0;
//int numCombinedP = 0;
- int startIdx = 0;
printf("Start merging CS by using S5[From FK] \n");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list