Changeset: 3b670c1567fe for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3b670c1567fe
Modified Files:
        monetdb5/extras/rdf/rdflabels.c
        monetdb5/extras/rdf/rdfretrieval.c
        monetdb5/extras/rdf/rdfretrieval.h
        sql/backends/monet5/sql.mx
Branch: rdf
Log Message:

Clean-up SQLrdfRetrieveSubschema
Do not use long int, use GDKmalloc and GDKfree, avoid realloc


diffs (truncated from 323 to 300 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
@@ -500,7 +500,7 @@ void createSQLMetadata(CSset* freqCSset,
        for (i = 0; i < freqCSset->numCSadded; ++i) {
                for (j = 0; j < freqCSset->numCSadded; ++j) {
                        if (matrix[i][j]) {
-                               fprintf(fout, "\"%d\",\"%d\",\"%d\"\n", i, j, 
matrix[i][j]);
+                               fprintf(fout, "%d,%d,%d\n", i, j, matrix[i][j]);
                        }
                }
        }
@@ -515,14 +515,14 @@ void createSQLMetadata(CSset* freqCSset,
                if (!temp) fprintf(stderr, "ERROR: Couldn't malloc memory!\n");
                strcpy(temp, labels[i].name);
                escapeURIforSQL(temp);
-               fprintf(fout, "\"%d\",\"%s_"BUNFMT"\",\"%d\"\n", i, temp, 
freqCSset->items[i].csId, freqCSset->items[i].support); // TODO underscores?
+               fprintf(fout, "%d,\"%s_"BUNFMT"\",%d\n", i, temp, 
freqCSset->items[i].csId, freqCSset->items[i].support); // TODO underscores?
                free(temp);
        }
        fclose(fout);
 
        fout = fopen("CSmetadata.sql", "wt");
-       fprintf(fout, "CREATE TABLE table_id_freq (id VARCHAR(10), name 
VARCHAR(100), frequency VARCHAR(10));\n");
-       fprintf(fout, "CREATE TABLE adjacency_list (from_id VARCHAR(10), to_id 
VARCHAR(10), frequency VARCHAR(10));\n");
+       fprintf(fout, "CREATE TABLE table_id_freq (id INTEGER, name 
VARCHAR(100), frequency INTEGER);\n");
+       fprintf(fout, "CREATE TABLE adjacency_list (from_id INTEGER, to_id 
INTEGER, frequency INTEGER);\n");
        fprintf(fout, "COPY INTO table_id_freq from 
'/export/scratch2/linnea/dbfarm/test/tableIdFreq.csv' USING DELIMITERS 
',','\\n','\"';\n");
        fprintf(fout, "COPY INTO adjacency_list from 
'/export/scratch2/linnea/dbfarm/test/adjacencyList.csv' USING DELIMITERS 
',','\\n','\"';");
        fclose(fout);
diff --git a/monetdb5/extras/rdf/rdfretrieval.c 
b/monetdb5/extras/rdf/rdfretrieval.c
--- a/monetdb5/extras/rdf/rdfretrieval.c
+++ b/monetdb5/extras/rdf/rdfretrieval.c
@@ -24,7 +24,7 @@
 #include "rdflabels.h"
 
 static
-int edgeExists(long int from, long int to, long int* adjacency_from, long int* 
adjacency_to, int adjacencyCount) {
+int edgeExists(int from, int to, int* adjacency_from, int* adjacency_to, int 
adjacencyCount) {
        int     i;
        for (i = 0; i < adjacencyCount; ++i) {
                if (adjacency_from[i] == from && adjacency_to[i] == to) return 
1;
@@ -33,7 +33,7 @@ int edgeExists(long int from, long int t
 }
 
 static
-int getTableIndex(long int id, long int* table_id, int tableCount) {
+int getTableIndex(int id, int* table_id, int tableCount) {
        int i;
        for (i = 0; i < tableCount; ++i) {
                if (table_id[i] == id) return i;
@@ -42,7 +42,7 @@ int getTableIndex(long int id, long int*
 }
 
 static
-NodeStat* initNodeStats1(long int* table_freq, int tableCount) {
+NodeStat* initNodeStats1(int* table_freq, int tableCount) {
        NodeStat*       nodeStats = NULL;
        int             i;
 
@@ -60,7 +60,7 @@ NodeStat* initNodeStats1(long int* table
 }
 
 static
-void bfs1(int root, long int* table_id, int tableCount, long int* 
adjacency_from, long int* adjacency_to, int adjacencyCount, int* queue, int* 
visited, int* isInQueue, int* queuePosition, int* queueLength, NodeStat* 
nodeStats) {
+void bfs1(int root, int* table_id, int tableCount, int* adjacency_from, int* 
adjacency_to, int adjacencyCount, int* queue, int* visited, int* isInQueue, 
int* queuePosition, int* queueLength, NodeStat* nodeStats) {
        int     i;
 
        for (i = 0; i < tableCount; ++i) {
@@ -128,7 +128,7 @@ void bfs1(int root, long int* table_id, 
 }
 
 static
-void addNode1(long int* adjacency_from, long int* adjacency_to, int 
adjacencyCount, NodeStat* nodeStats, long int* table_id, int tableCount, int 
root, char initial) {
+void addNode1(int* adjacency_from, int* adjacency_to, int adjacencyCount, 
NodeStat* nodeStats, int* table_id, int tableCount, int root, char initial) {
        int     queue[tableCount]; // cyclic array
        int     visited[tableCount];
        int     isInQueue[tableCount];
@@ -183,7 +183,7 @@ void addNode1(long int* adjacency_from, 
 }
 
 static
-int* retrieval1(int root, int numNodesMax, int* numNodesActual, long int* 
table_id, str* table_name, long int* table_freq, int tableCount, long int* 
adjacency_from, long int* adjacency_to, int adjacencyCount) {
+int* retrieval1(int root, int numNodesMax, int* numNodesActual, int* table_id, 
str* table_name, int* table_freq, int tableCount, int* adjacency_from, int* 
adjacency_to, int adjacencyCount) {
        NodeStat        *nodeStats = NULL;
        int             numNodes;
        int             *chosenNodes = NULL;
@@ -255,7 +255,7 @@ int* retrieval1(int root, int numNodesMa
 }
 
 static
-NodeStat* initNodeStats23(long int* table_freq, int tableCount) {
+NodeStat* initNodeStats23(int* table_freq, int tableCount) {
        NodeStat*       nodeStats = NULL;
        int             i;
 
@@ -273,7 +273,7 @@ NodeStat* initNodeStats23(long int* tabl
 }
 
 static
-void assignWeightToChildren2(long int* adjacency_from, long int* adjacency_to, 
int adjacencyCount, NodeStat* nodeStats, long int* table_id, int tableCount, 
int root) {
+void assignWeightToChildren2(int* adjacency_from, int* adjacency_to, int 
adjacencyCount, NodeStat* nodeStats, int* table_id, int tableCount, int root) {
        int             i, j;
 
        // mark root as a "chosen node"
@@ -297,7 +297,7 @@ void assignWeightToChildren2(long int* a
 }
 
 static
-int* retrieval2(int root, int numNodesMax, int* numNodesActual, long int* 
table_id, str* table_name, long int* table_freq, int tableCount, long int* 
adjacency_from, long int* adjacency_to, int adjacencyCount) {
+int* retrieval2(int root, int numNodesMax, int* numNodesActual, int* table_id, 
str* table_name, int* table_freq, int tableCount, int* adjacency_from, int* 
adjacency_to, int adjacencyCount) {
        NodeStat        *nodeStats = NULL;
        int             numNodes;
        int             *chosenNodes = NULL;
@@ -366,7 +366,7 @@ int* retrieval2(int root, int numNodesMa
 }
 
 static
-void assignWeightToChildren3(long int* adjacency_from, long int* adjacency_to, 
int adjacencyCount, NodeStat* nodeStats, long int* table_id, int tableCount, 
int root) {
+void assignWeightToChildren3(int* adjacency_from, int* adjacency_to, int 
adjacencyCount, NodeStat* nodeStats, int* table_id, int tableCount, int root) {
        int             i, j, k;
        char            visited[tableCount];
 
@@ -409,7 +409,7 @@ void assignWeightToChildren3(long int* a
 }
 
 static
-int* retrieval3(int root, int numNodesMax, int* numNodesActual, long int* 
table_id, str* table_name, long int* table_freq, int tableCount, long int* 
adjacency_from, long int* adjacency_to, int adjacencyCount) {
+int* retrieval3(int root, int numNodesMax, int* numNodesActual, int* table_id, 
str* table_name, int* table_freq, int tableCount, int* adjacency_from, int* 
adjacency_to, int adjacencyCount) {
        NodeStat        *nodeStats = NULL;
        int             numNodes;
        int             *chosenNodes = NULL;
@@ -478,7 +478,7 @@ int* retrieval3(int root, int numNodesMa
 }
 
 static
-int* retrieval4(int root, int numNodesMax, int* numNodesActual, long int* 
table_id, str* table_name, long int* table_freq, int tableCount, long int* 
adjacency_from, long int* adjacency_to, long int* adjacency_freq, int 
adjacencyCount) {
+int* retrieval4(int root, int numNodesMax, int* numNodesActual, int* table_id, 
str* table_name, int* table_freq, int tableCount, int* adjacency_from, int* 
adjacency_to, int* adjacency_freq, int adjacencyCount) {
        int             numNodes;
        int             *chosenNodes = NULL;
        int             i, j;
@@ -556,7 +556,7 @@ int* retrieval4(int root, int numNodesMa
 }
 
 static
-char** initEdgesOverview(long int* table_id, int tableCount, long int* 
adjacency_from, long int* adjacency_to, int adjacencyCount) {
+char** initEdgesOverview(int* table_id, int tableCount, int* adjacency_from, 
int* adjacency_to, int adjacencyCount) {
        char            **edges;
        int             i, j;
 
@@ -573,8 +573,8 @@ char** initEdgesOverview(long int* table
        }
 
        for (i = 0; i < adjacencyCount; ++i) {
-               long int from = adjacency_from[i];
-               long int to = adjacency_to[i];
+               int from = adjacency_from[i];
+               int to = adjacency_to[i];
                int fromIdx = -1;
                int toIdx = -1;
 
@@ -600,7 +600,7 @@ int compareOverviewNodes (const void * a
 }
 
 static
-int* retrievalOverview(int* numNodesActual, long int* table_id, str* 
table_name, long int* table_freq, int tableCount, long int* adjacency_from, 
long int* adjacency_to, int adjacencyCount) {
+int* retrievalOverview(int* numNodesActual, int* table_id, str* table_name, 
int* table_freq, int tableCount, int* adjacency_from, int* adjacency_to, int 
adjacencyCount) {
        int             i, j, k;
        char            **edges;
        int             sumSubjects = 0;
@@ -800,7 +800,7 @@ int* retrievalOverview(int* numNodesActu
        return chosenNodes;
 }
 
-int* retrieval(int root, int numNodesMax, int* numNodesActual, long int* 
table_id, str* table_name, long int* table_freq, int tableCount, long int* 
adjacency_from, long int* adjacency_to, long int* adjacency_freq, int 
adjacencyCount) {
+int* retrieval(int root, int numNodesMax, int* numNodesActual, int* table_id, 
str* table_name, int* table_freq, int tableCount, int* adjacency_from, int* 
adjacency_to, int* adjacency_freq, int adjacencyCount) {
        if (SUBSCHEMA_HEURISTIC == 5) {
                (void) numNodesMax;
                (void) root;
diff --git a/monetdb5/extras/rdf/rdfretrieval.h 
b/monetdb5/extras/rdf/rdfretrieval.h
--- a/monetdb5/extras/rdf/rdfretrieval.h
+++ b/monetdb5/extras/rdf/rdfretrieval.h
@@ -47,6 +47,6 @@ typedef struct Groups {
 #define SUBSCHEMA_HEURISTIC 5
 
 rdf_export int*
-retrieval(int root, int numNodesMax, int* numNodesActual, long int* table_id, 
str* table_name, long int* table_freq, int tableCount, long int* 
adjacency_from, long int* adjacency_to, long int* adjacency_freq, int 
adjacencyCount);
+retrieval(int root, int numNodesMax, int* numNodesActual, int* table_id, str* 
table_name, int* table_freq, int tableCount, int* adjacency_from, int* 
adjacency_to, int* adjacency_freq, int adjacencyCount);
 
 #endif /* _RDFRETRIEVAL_H_ */
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
@@ -7779,21 +7779,17 @@ SQLrdfRetrieveSubschema(Client cntxt, Ma
 
        BAT             *table_id_freq_id, *table_id_freq_name, 
*table_id_freq_freq;
        BAT             *adjacency_list_from, *adjacency_list_to, 
*adjacency_list_freq;
-       BATiter         table_id_freq_id_i, table_id_freq_name_i, 
table_id_freq_freq_i;
-       BATiter         adjacency_list_from_i, adjacency_list_to_i, 
adjacency_list_freq_i;
+       BATiter         table_id_freq_name_i;
        BUN             p, q;
-       BUN             p2, q2;
-       BUN             bun, bun2, bun3;
-       BUN             bun4, bun5, bun6;
-
-       int             tableCount = 0;
-       long int        *table_id = NULL;
+
+       BUN             tableCount = 0;
+       int             *table_id = NULL;
        str             *table_name = NULL;
-       long int        *table_freq = NULL;
-       long int        *adjacency_from = NULL;
-       long int        *adjacency_to = NULL;
-       long int        *adjacency_freq = NULL;
-       int             adjacencyCount = 0;
+       int             *table_freq = NULL;
+       int             *adjacency_from = NULL;
+       int             *adjacency_to = NULL;
+       int             *adjacency_freq = NULL;
+       BUN             adjacencyCount = 0;
 
        int             root;
        int             countActual;
@@ -7813,53 +7809,33 @@ SQLrdfRetrieveSubschema(Client cntxt, Ma
        adjacency_list_to = mvc_bind(m, "sys", "adjacency_list", "to_id", 0);
        adjacency_list_freq = mvc_bind(m, "sys", "adjacency_list", "frequency", 
0);
 
-       table_id_freq_id_i = bat_iterator(table_id_freq_id);
+       tableCount = BATcount(table_id_freq_id);
+       table_name = GDKmalloc(sizeof(str) * tableCount);
+
+       if (!table_name) {
+               BBPreclaim(table_id_freq_id);
+               BBPreclaim(table_id_freq_name);
+               BBPreclaim(table_id_freq_freq);
+               BBPreclaim(adjacency_list_from);
+               BBPreclaim(adjacency_list_to);
+               BBPreclaim(adjacency_list_freq);
+               throw(SQL, "sql.rdfRetrieveSubschema", "ERROR: Couldn't 
GDKmalloc table_name array!\n");
+       }
+
+       table_id = (int*) Tloc(table_id_freq_id, BUNfirst(table_id_freq_id));
+       table_freq = (int*) Tloc(table_id_freq_freq, 
BUNfirst(table_id_freq_freq));
        table_id_freq_name_i = bat_iterator(table_id_freq_name);
-       table_id_freq_freq_i = bat_iterator(table_id_freq_freq);
-       adjacency_list_from_i = bat_iterator(adjacency_list_from);
-       adjacency_list_to_i = bat_iterator(adjacency_list_to);
-       adjacency_list_freq_i = bat_iterator(adjacency_list_freq);
-
-       bun = BUNfirst(table_id_freq_id);
-       bun2 = BUNfirst(table_id_freq_name);
-       bun3 = BUNfirst(table_id_freq_freq);
-       bun4 = BUNfirst(adjacency_list_from);
-       bun5 = BUNfirst(adjacency_list_to);
-       bun6 = BUNfirst(adjacency_list_freq);
-
-       // store data
-       BATloop(table_id_freq_id, p, q) {
-               str id = (str) BUNtail(table_id_freq_id_i, bun + tableCount);
-               str name = (str) BUNtail(table_id_freq_name_i, bun2 + 
tableCount);
-               str freq = (str) BUNtail(table_id_freq_freq_i, bun3 + 
tableCount);
-
-               table_id = realloc(table_id, sizeof(long int) * (tableCount + 
1));
-               table_name = realloc(table_name, sizeof(str) * (tableCount + 
1));
-               table_freq = realloc(table_freq, sizeof(long int) * (tableCount 
+ 1));
-               if (!table_id || !table_name || !table_freq) fprintf(stderr, 
"ERROR: Couldn't realloc memory!\n");
-
-               table_id[tableCount] = strtol(id, NULL, 10);
-               table_name[tableCount] = name;
-               table_freq[tableCount]= strtol(freq, NULL, 10);
-               tableCount += 1;
-       }
-
-       // store data
-       BATloop(adjacency_list_from, p2, q2) {
-               str from = (str) BUNtail(adjacency_list_from_i, bun4 + 
adjacencyCount);
-               str to = (str) BUNtail(adjacency_list_to_i, bun5 + 
adjacencyCount);
-               str freq = (str) BUNtail(adjacency_list_freq_i, bun6 + 
adjacencyCount);
-
-               adjacency_from = realloc(adjacency_from, sizeof(long int) * 
(adjacencyCount + 1));
-               adjacency_to = realloc(adjacency_to, sizeof(long int) * 
(adjacencyCount + 1));
-               adjacency_freq = realloc(adjacency_freq, sizeof(long int) * 
(adjacencyCount + 1));
-               if (!adjacency_from || !adjacency_to || !adjacency_freq) 
fprintf(stderr, "ERROR: Couldn't realloc memory!\n");
-
-               adjacency_from[adjacencyCount] = strtol(from, NULL, 10);
-               adjacency_to[adjacencyCount] = strtol(to, NULL, 10);
-               adjacency_freq[adjacencyCount] = strtol(freq, NULL, 10);
-               adjacencyCount += 1;
-       }
+
+       tableCount = 0;
+       BATloop(table_id_freq_name, p, q) {
+               table_name[tableCount++] = (str) BUNtail(table_id_freq_name_i, 
p);
+       }
+
+       adjacencyCount = BATcount(adjacency_list_from);
+
+       adjacency_from = (int*) Tloc(adjacency_list_from, 
BUNfirst(adjacency_list_from));
+       adjacency_to = (int*) Tloc(adjacency_list_to, 
BUNfirst(adjacency_list_to));
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to