00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef QSPARQL_VIRTUOSO_H
00041 #define QSPARQL_VIRTUOSO_H
00042
00043 #include <QtSparql/private/qsparqldriver_p.h>
00044 #include <QtSparql/qsparqlresult.h>
00045
00046 #if defined (Q_OS_WIN32)
00047 #include <QtCore/qt_windows.h>
00048 #endif
00049
00050 #ifdef QT_PLUGIN
00051 #define Q_EXPORT_SPARQLDRIVER_VIRTUOSO
00052 #else
00053 #define Q_EXPORT_SPARQLDRIVER_VIRTUOSO Q_SPARQL_EXPORT
00054 #endif
00055
00056 #ifdef Q_OS_UNIX
00057 #define HAVE_LONG_LONG 1 // force UnixODBC NOT to fall back to a struct for BIGINTs
00058 #endif
00059
00060 #if defined(Q_CC_BOR)
00061
00062 # define _MSC_VER 900
00063 #endif
00064 #include <sql.h>
00065 #if defined(Q_CC_BOR)
00066 # undef _MSC_VER
00067 #endif
00068
00069
00070
00071
00072
00073 #include <sqlext.h>
00074
00075 QT_BEGIN_HEADER
00076
00077 QT_BEGIN_NAMESPACE
00078
00079 class QVirtuosoResultPrivate;
00080 class QVirtuosoAsyncResultPrivate;
00081 class QVirtuosoDriverPrivate;
00082 class QVirtuosoDriver;
00083
00084 class QVirtuosoResult : public QSparqlResult
00085 {
00086 Q_OBJECT
00087 public:
00088 QVirtuosoResult(const QVirtuosoDriver * db, QVirtuosoDriverPrivate* p,
00089 const QString& query, QSparqlQuery::StatementType type,
00090 const QString& prefixes);
00091 virtual ~QVirtuosoResult();
00092
00093 QVariant handle() const;
00094 virtual bool runQuery();
00095
00096 bool next();
00097 QSparqlBinding binding(int field) const;
00098 QVariant value(int field) const;
00099 QSparqlResultRow current() const;
00100
00101 bool isFinished() const;
00102
00103 bool hasFeature(QSparqlResult::Feature feature) const;
00104 virtual void terminate() {}
00105 protected:
00106 QVirtuosoResultPrivate *d;
00107 };
00108
00109 class QVirtuosoAsyncResult : public QVirtuosoResult
00110 {
00111 Q_OBJECT
00112 friend class QVirtuosoFetcherPrivate;
00113 public:
00114 QVirtuosoAsyncResult(const QVirtuosoDriver * db, QVirtuosoDriverPrivate* p,
00115 const QString& query, QSparqlQuery::StatementType type,
00116 const QString& prefixes);
00117 virtual ~QVirtuosoAsyncResult();
00118
00119 Q_INVOKABLE void startFetcher();
00120 bool runQuery();
00121
00122 bool next();
00123 QSparqlBinding binding(int field) const;
00124 QVariant value(int field) const;
00125 QSparqlResultRow current() const;
00126 int size() const;
00127
00128 void waitForFinished();
00129 bool isFinished() const;
00130
00131 bool hasFeature(QSparqlResult::Feature feature) const;
00132 void terminate();
00133 private:
00134 bool fetchNextResult();
00135 bool fetchBoolResult();
00136 bool fetchGraphResult();
00137 QVirtuosoAsyncResultPrivate *da;
00138 };
00139
00140 class Q_EXPORT_SPARQLDRIVER_VIRTUOSO QVirtuosoDriver : public QSparqlDriver
00141 {
00142 Q_OBJECT
00143 public:
00144 explicit QVirtuosoDriver(QObject *parent=0);
00145 QVirtuosoDriver(SQLHANDLE env, SQLHANDLE con, QObject * parent=0);
00146 virtual ~QVirtuosoDriver();
00147 bool hasFeature(QSparqlConnection::Feature f) const;
00148 void close();
00149 QVariant handle() const;
00150 bool open(const QSparqlConnectionOptions& options);
00151 QVirtuosoResult* exec(const QString& query, QSparqlQuery::StatementType type, const QSparqlQueryOptions& options);
00152
00153 protected:
00154 bool beginTransaction();
00155 bool commitTransaction();
00156 bool rollbackTransaction();
00157
00158 private:
00159 void init();
00160 bool endTrans();
00161 void cleanup();
00162 QVirtuosoAsyncResult* asyncExec(const QString& query, QSparqlQuery::StatementType type);
00163 QVirtuosoResult* syncExec(const QString& query, QSparqlQuery::StatementType type);
00164 QVirtuosoDriverPrivate* d;
00165 friend class QVirtuosoResultPrivate;
00166 friend class QVirtuosoAsyncResultPrivate;
00167 };
00168
00169 QT_END_NAMESPACE
00170
00171 QT_END_HEADER
00172
00173 #endif // QSPARQL_VIRTUOSO_H