Changeset: 25c48cdfd852 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=25c48cdfd852
Modified Files:
sql/backends/monet5/sql_rdf.c
Branch: rdf
Log Message:
Re-order columns by supports
diffs (124 lines):
diff --git a/sql/backends/monet5/sql_rdf.c b/sql/backends/monet5/sql_rdf.c
--- a/sql/backends/monet5/sql_rdf.c
+++ b/sql/backends/monet5/sql_rdf.c
@@ -681,6 +681,61 @@ int isRightPropBAT(BAT *b){
return 1;
}
+/*
+ * Order the property by their support
+ * for each table
+ * */
+static
+int** createColumnOrder(CStableStat* cstablestat, CSPropTypes *csPropTypes){
+ int i, j, k;
+ int num = cstablestat->numTables;
+ int **colOrder;
+ int tblColIdx;
+
+ colOrder = (int **)GDKmalloc(sizeof(int*) * num);
+ for (i = 0; i < num; i++){
+ int* tmpPropFreqs;
+ tmpPropFreqs = (int *) GDKmalloc(sizeof(int) *
cstablestat->numPropPerTable[i]);
+ colOrder[i] = (int *) GDKmalloc(sizeof(int) *
cstablestat->numPropPerTable[i]);
+
+ for (j = 0; j < cstablestat->numPropPerTable[i]; j ++){
+ colOrder[i][j] = j;
+ }
+
+ //Store the frequencies of table columns to tmp arrays
+ for (j = 0; j < csPropTypes[i].numProp; j++){
+ tblColIdx = csPropTypes[i].lstPropTypes[j].defColIdx;
+ if (tblColIdx == -1) continue;
+ assert(tblColIdx < cstablestat->numPropPerTable[i]);
+ tmpPropFreqs[tblColIdx] =
csPropTypes[i].lstPropTypes[j].propFreq;
+ }
+
+
+ //Do insertion sort the the property ascending according to
their support
+ for (j = 1; j < cstablestat->numPropPerTable[i]; j ++){
+ int tmpPos = colOrder[i][j];
+ int tmpFreq = tmpPropFreqs[tmpPos];
+ k = j;
+ while (k > 0 && tmpFreq >
tmpPropFreqs[colOrder[i][k-1]]){
+ colOrder[i][k] = colOrder[i][k-1];
+ k--;
+ }
+ colOrder[i][k] = tmpPos;
+ }
+ }
+
+ return colOrder;
+}
+
+static
+void freeColOrder(int **colOrder, CStableStat* cstablestat){
+ int i;
+ for (i = 0; i < cstablestat->numTables; i++){
+ GDKfree(colOrder[i]);
+ }
+ GDKfree(colOrder);
+}
+
/* Re-organize triple table by using clustering storage
* CALL rdf_reorganize('schema','tablename', 1);
* e.g., rdf_reorganize('rdf','spo0');
@@ -716,7 +771,7 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
sql_table **viewcstables;
#endif
sql_table *psotbl;
- int i, j, k;
+ int i, j, k, colId;
int tmpNumMVCols = 0;
int nonullmvtables = 0;
int totalNoTablesCreated = 0;
@@ -732,6 +787,7 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
clock_t tmpbeginT, tmpendT, beginT, endT;
BAT *ontbat = NULL;
+ int **colOrder = NULL;
beginT = clock();
@@ -846,6 +902,10 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
throw(RDF, "SQLrdfreorganize","could not open the tokenizer\n");
}
}
+
+ //Re-order the columns
+ colOrder = createColumnOrder(cstablestat, csPropTypes);
+
for (i = 0; i < cstablestat->numTables; i++){
//printf("creating table %d \n", i);
@@ -861,7 +921,9 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
#if APPENDSUBJECTCOLUMN
mvc_create_column(m, cstables[i], "subject", &tpes[TYPE_oid]);
#endif
- for (j = 0; j < cstablestat->numPropPerTable[i]; j++){
+ for (colId = 0; colId < cstablestat->numPropPerTable[i];
colId++){
+ j = colOrder[i][colId];
+ //for (j = 0; j < cstablestat->numPropPerTable[i]; j++){
//TODO: Use propertyId from Propstat
getColSQLname(tmpcolname, i, j, -1, cstablestat, mapi,
mbat);
@@ -934,7 +996,9 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
BBPreclaim(subjBat);
}
#endif
- for (j = 0; j < cstablestat->numPropPerTable[i]; j++){
+ for (colId = 0; colId < cstablestat->numPropPerTable[i];
colId++){
+ j = colOrder[i][colId];
+ //for (j = 0; j < cstablestat->numPropPerTable[i]; j++){
//TODO: Use propertyId from Propstat
getColSQLname(tmpcolname, i, j, -1, cstablestat, mapi,
mbat);
@@ -1032,7 +1096,7 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
free(csmvtables[i]);
}
free(csmvtables);
-
+ freeColOrder(colOrder, cstablestat);
freeCSPropTypes(csPropTypes,cstablestat->numTables);
freeCStableStat(cstablestat);
free(cstables);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list