diff sparql/mod_audiodb/mod_audiodb.c @ 584:e3790284fd4a

Merged through librdf storage hooks and apache2 module. Squashed commit of the following: commit a6cfca8f04036e12e7d7fcd55c47224e802582f0 Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:23:32 2009 +0100 Removed leftover bits and bobs. commit f1f0dd074d0767de3e24ba636779fd8701d73d9e Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:07:20 2009 +0100 Simple test of database creation via librdf. commit 90e6350538e004d8785137e5ff2ac878c22a5d42 Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:05:10 2009 +0100 Added the apache2 module which will hook into the librdf storage module commit c75bf53763b7078c83ae97fcf247da2576baa79a Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:04:53 2009 +0100 Added sparql librdf source - requires the librdf sources to compile. commit 0646f0190112a73ddb2533537e2cc9832c066b52 Author: Michael Jewell <mjewell@harrison.(none)> Date: Mon Jul 27 12:12:26 2009 +0100 Adding execution to mod_audiodb commit 8f83f27ba4d917278bca0c7cb665d930e28c86df Author: Michael Jewell <mjewell@harrison.(none)> Date: Wed Jul 22 12:15:57 2009 +0100 Some initial returns for the sparql handler. commit dc639aed11943a5b0c379eb47cf293f76908b1b7 Author: Michael Jewell <mjewell@harrison.(none)> Date: Wed Jul 22 12:06:20 2009 +0100 Added a little setup.sh script to do libtoolize/autoconf etc. commit 3a679da499db647fc82cf2797daeb5cc44ed7655 Author: Michael Jewell <mjewell@harrison.(none)> Date: Wed Jul 22 12:03:42 2009 +0100 Adding initial bits for apache mod
author mas01mj
date Fri, 31 Jul 2009 14:36:12 +0000
parents
children c6debbac3216
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sparql/mod_audiodb/mod_audiodb.c	Fri Jul 31 14:36:12 2009 +0000
@@ -0,0 +1,110 @@
+
+#include <httpd.h>
+#include <ap_config.h>
+#include <http_config.h>
+#include <http_protocol.h>
+#include <apr_strings.h>
+#include <librdf.h>
+#include <apreq_module.h>
+#include <apreq_parser.h>
+#include <apreq_param.h>
+#include "apreq2/apreq_module_apache2.h"
+
+static int ap_dump_table(void *baton, const char *key, const char *value)
+{
+    if (key && value)
+        fprintf(stderr, "%s:%s\n", key, value);
+    fflush(stderr);
+    return 1;
+}
+
+static int log_out(void *user_data, librdf_log_message *message)
+{
+	fprintf(stderr, "%s\n", librdf_log_message_message(message));
+	fflush(stderr);
+	return 1;
+}
+
+static int adb_handle_sparql_req(request_rec *r) {
+	if(strcmp(r->handler, "audiodb-sparql-handler") != 0) {
+		return DECLINED;
+	}
+
+	r->content_type = "text/plain";
+	r->status = OK;
+	r->status_line = "200 OK";
+
+	if(!r->args) {
+		r->args = "";
+	}
+
+	const apr_table_t *form_table;
+	apreq_handle_t *h = apreq_handle_apache2(r);
+	if(apreq_args(h, &form_table) != APR_SUCCESS)
+		return DECLINED;
+
+	const unsigned char *query_string = apr_table_get(form_table, "query");
+
+	int rc = 0;
+
+	librdf_world* world = librdf_new_world();
+	if(!world)
+	{
+		rc = 1;
+		goto error;
+	}
+
+
+	librdf_world_open(world);
+	librdf_world_set_logger(world, NULL, log_out);
+	librdf_storage* storage = librdf_new_storage(world, "audiodb", "/tmp/test.adb", "new='yes'");
+	if(!storage)
+	{
+		rc = 2;
+		goto error;
+	}
+
+	librdf_model *model;
+	if (!(model = librdf_new_model(world, storage, NULL)))
+	{
+		rc = 5;	
+		goto error;
+	}
+
+	librdf_query *query;
+	if (!(query = librdf_new_query(world, "sparql", NULL, query_string, NULL)))
+	{
+		rc = 3;
+		goto error;
+	}
+
+	librdf_query_results *results;
+	if (!(results = librdf_query_execute(query, model)))
+	{
+		rc = 4;
+		goto error;
+	}
+
+	ap_rprintf(r, "Everything went awesomely!");
+
+	rc = 0;
+	return r->status;
+
+	error:
+		ap_rprintf(r, "Fail %d", rc);
+		return OK;
+}
+
+static void mod_audiodb_register_hooks (apr_pool_t *p) {
+	ap_hook_handler(adb_handle_sparql_req, NULL, NULL, APR_HOOK_FIRST);
+}
+
+module AP_MODULE_DECLARE_DATA audiodb_module = {
+	STANDARD20_MODULE_STUFF,
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	mod_audiodb_register_hooks,
+};