comparison rdf/SimpleSPARQLQuery.h @ 489:82ab61fa9223

* Reorganise our sparql queries on the basis that Redland must be available, not only optional. So for anything querying the pool of data about plugins, we use a single datastore and model which is initialised at the outset by PluginRDFIndexer and then queried directly; for anything that "reads from a file" (e.g. loading annotations) we query directly using Rasqal, going to the datastore when we need additional plugin-related information. This may improve performance, but mostly it simplifies the code and fixes a serious issue with RDF import in the previous versions (namely that multiple sequential RDF imports would end up sharing the same RDF data pool!)
author Chris Cannam
date Fri, 21 Nov 2008 16:12:29 +0000
parents a82645e788fc
children 23945cdd7161
comparison
equal deleted inserted replaced
488:1c66e199e7d9 489:82ab61fa9223
35 }; 35 };
36 36
37 typedef std::map<QString, Value> KeyValueMap; 37 typedef std::map<QString, Value> KeyValueMap;
38 typedef std::vector<KeyValueMap> ResultList; 38 typedef std::vector<KeyValueMap> ResultList;
39 39
40 SimpleSPARQLQuery(QString fromUri, QString query); 40 enum QueryType {
41 QueryFromModel,
42 QueryFromSingleSource
43 };
44
45 SimpleSPARQLQuery(QueryType type, QString query);
41 ~SimpleSPARQLQuery(); 46 ~SimpleSPARQLQuery();
47
48 static bool addSourceToModel(QString sourceUri);
42 49
43 void setProgressReporter(ProgressReporter *reporter); 50 void setProgressReporter(ProgressReporter *reporter);
44 bool wasCancelled() const; 51 bool wasCancelled() const;
45 52
46 ResultList execute(); 53 ResultList execute();
48 bool isOK() const; 55 bool isOK() const;
49 QString getErrorString() const; 56 QString getErrorString() const;
50 57
51 // Do a query and return the value for the given binding, from the 58 // Do a query and return the value for the given binding, from the
52 // first result that has a value for it 59 // first result that has a value for it
53 static Value singleResultQuery(QString fromUri, 60 static Value singleResultQuery(QueryType type,
54 QString query, 61 QString query,
55 QString binding); 62 QString binding);
56
57 enum BackEndPreference {
58 AutoSelectBackEnd, // pick based on likely speed of available storage
59 DirectParserBackEnd, // use rasqal (simpler if seldom used)
60 DatastoreBackEnd, // use redland (faster if version not too old)
61 };
62 /**
63 * Select the preferred query back end. This should be called
64 * before any queries are made. The default is AutoSelectBackEnd.
65 */
66 static void setBackEnd(BackEndPreference);
67 63
68 protected: 64 protected:
69 class Impl; 65 class Impl;
70 Impl *m_impl; 66 Impl *m_impl;
71 }; 67 };