[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdesupport/soprano/backends/virtuoso
From:       Sebastian Trueg <sebastian () trueg ! de>
Date:       2010-04-30 9:59:47
Message-ID: 20100430100330.7C840AC8A7 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1121086 by trueg:

Slightly better way to detect graph query results. It is still a bit hacky but much \
better than before.

 M  +12 -6     odbcqueryresult.cpp  
 M  +3 -0      odbcqueryresult.h  
 M  +1 -0      odbcqueryresult_p.h  
 M  +2 -3      virtuosoqueryresultiteratorbackend.cpp  


--- trunk/kdesupport/soprano/backends/virtuoso/odbcqueryresult.cpp #1121085:1121086
@@ -64,19 +64,17 @@
                 SQLTCHAR colName[51];
                 colName[50] = 0;
                 SQLSMALLINT colType;
-                SQLULEN colPrecision;
-                SQLSMALLINT colScale;
-                SQLSMALLINT colNullable;
                 if ( SQLDescribeCol( d->m_hstmt,
                                      col,
                                      (SQLTCHAR *) colName,
                                      50,
                                      0,
                                      &colType,
-                                     &colPrecision,
-                                     &colScale,
-                                     &colNullable) == SQL_SUCCESS ) {
+                                     0,
+                                     0,
+                                     0) == SQL_SUCCESS ) {
                     d->m_columns.append( QString::fromLatin1( ( const char* )colName \
) ); +                    d->m_columTypes.append( colType );
                 }
                 else {
                     setError( Virtuoso::convertSqlError( SQL_HANDLE_STMT, \
d->m_hstmt, QLatin1String( "SQLDescribeCol failed" ) ) ); @@ -306,6 +304,14 @@
 }
 
 
+bool Soprano::ODBC::QueryResult::isBlob( int colNum )
+{
+    return ( d->m_columTypes[colNum-1] == SQL_LONGVARCHAR ||
+             d->m_columTypes[colNum-1] == SQL_LONGVARBINARY ||
+             d->m_columTypes[colNum-1] == SQL_WLONGVARCHAR );
+}
+
+
 bool Soprano::ODBC::QueryResult::getCharData( int colNum, SQLCHAR** buffer, SQLLEN* \
length )  {
     SQLCHAR dummyBuffer[1]; // dummy buffer only used to determine length
--- trunk/kdesupport/soprano/backends/virtuoso/odbcqueryresult.h #1121085:1121086
@@ -47,6 +47,9 @@
             bool fetchRow();
             Node getData( int colNum );
 
+            /// Check if the data in column colNum is a BLOB. used in \
Virtuoso::QueryResultIteratorBackend +            bool isBlob( int colNum );
+
         private:
             QueryResult();
 
--- trunk/kdesupport/soprano/backends/virtuoso/odbcqueryresult_p.h #1121085:1121086
@@ -45,6 +45,7 @@
             ConnectionPrivate* m_conn;
 
             QStringList m_columns;
+            QList<SQLSMALLINT> m_columTypes;
         };
     }
 }
--- trunk/kdesupport/soprano/backends/virtuoso/virtuosoqueryresultiteratorbackend.cpp \
#1121085:1121086 @@ -82,11 +82,10 @@
         if ( d->m_queryResult->fetchRow() ) {
             Node node = d->m_queryResult->getData( 1 );
             if ( !d->m_queryResult->lastError() ) {
-                // FIXME: This is hacky. Better check if the value is a BLOB
-                if ( node.literal().isString() ) {
+                if ( d->m_queryResult->isBlob( 1 ) ) {
+                    QString data = node.toString();
                     d->m_resultType = \
                QueryResultIteratorBackendPrivate::GraphResult;
                     if ( const Parser* parser = \
                PluginManager::instance()->discoverParserForSerialization( \
                SerializationTurtle ) ) {
-                        QString data = node.toString();
                         d->graphIterator = parser->parseString( data, QUrl(), \
SerializationTurtle );  setError( parser->lastError() );
                     }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic