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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list