summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/world.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/world.c b/src/world.c
index e19d359..2faf3c5 100644
--- a/src/world.c
+++ b/src/world.c
@@ -335,6 +335,30 @@ slv2_world_load_path(SLV2World world,
}
+/** Comparator for sorting SLV2Plugins */
+int
+slv2_plugin_compare_by_uri(const void* a, const void* b)
+{
+ SLV2Plugin plugin_a = *(SLV2Plugin*)a;
+ SLV2Plugin plugin_b = *(SLV2Plugin*)b;
+
+ return strcmp((const char*)librdf_uri_as_string(plugin_a->plugin_uri),
+ (const char*)librdf_uri_as_string(plugin_b->plugin_uri));
+}
+
+
+/** Comparator for sorting SLV2PluginClasses */
+int
+slv2_plugin_class_compare_by_uri(const void* a, const void* b)
+{
+ SLV2PluginClass class_a = *(SLV2PluginClass*)a;
+ SLV2PluginClass class_b = *(SLV2PluginClass*)b;
+
+ return strcmp((const char*)librdf_uri_as_string(class_a->uri),
+ (const char*)librdf_uri_as_string(class_b->uri));
+}
+
+
void
slv2_world_load_specifications(SLV2World world)
{
@@ -383,7 +407,7 @@ slv2_world_load_plugin_classes(SLV2World world)
"SELECT DISTINCT ?class ?parent ?label WHERE {\n"
//" ?plugin a ?class .\n"
" ?class a rdfs:Class; rdfs:subClassOf ?parent; rdfs:label ?label\n"
- "} ORDER BY ?class\n";
+ "}\n"; // ORDER BY ?class\n";
librdf_query* q = librdf_new_query(world->world, "sparql",
NULL, query_string, NULL);
@@ -405,6 +429,8 @@ slv2_world_load_plugin_classes(SLV2World world)
(const char*)librdf_uri_as_string(class_uri),
label);
raptor_sequence_push(world->plugin_classes, plugin_class);
+ // FIXME: Slow! ORDER BY broken in certain versions of redland?
+ raptor_sequence_sort(world->plugin_classes, slv2_plugin_class_compare_by_uri);
librdf_free_node(class_node);
librdf_free_node(parent_node);
@@ -473,8 +499,8 @@ slv2_world_load_all(SLV2World world)
"PREFIX slv2: <http://drobilla.net/ns/slv2#>\n"
"SELECT DISTINCT ?plugin ?data ?bundle ?binary\n"
"WHERE { ?plugin a :Plugin; slv2:bundleURI ?bundle; rdfs:seeAlso ?data\n"
- "OPTIONAL { ?plugin :binary ?binary } }\n"
- "ORDER BY ?plugin\n";
+ "OPTIONAL { ?plugin :binary ?binary } }\n";
+ //"ORDER BY ?plugin\n";
librdf_query* q = librdf_new_query(world->world, "sparql",
NULL, query_string, NULL);
@@ -502,6 +528,8 @@ slv2_world_load_all(SLV2World world)
if (!plugin) {
plugin = slv2_plugin_new(world, plugin_uri, bundle_uri, binary_uri);
raptor_sequence_push(world->plugins, plugin);
+ // FIXME: Slow! ORDER BY broken in certain versions of redland?
+ raptor_sequence_sort(world->plugins, slv2_plugin_compare_by_uri);
}
plugin->world = world;