Soprano::Node Soprano::Index::QueryHitWrapperResultIteratorBackend::binding( int offset ) const { switch( offset ) { case 0: return m_it.current().resource(); case 1: return LiteralValue( m_it.current().score() ); default: return Node(); } }
Soprano::Node Soprano::Index::QueryHitWrapperResultIteratorBackend::binding( const QString &name ) const { if ( name == m_bingingNameCache[0] ) { return m_it.current().resource(); } else if ( name == m_bingingNameCache[1] ) { return LiteralValue( m_it.current().score() ); } else { return Node(); } }
Soprano::LiteralValue Soprano::LiteralValue::fromString( const QString& value, const QUrl& type ) { if ( type.isEmpty() && value.isEmpty() ) { return LiteralValue(); } else { LiteralValue v = LiteralValue::fromString( value, typeFromDataTypeUri( type ) ); Q_ASSERT(!v.isPlain()); static_cast<const TypedData*>(v.d.constData())->dtUri = type; return v; } }
Node nodeFromString(QString const &value, CppType type = CppType()) { unsigned id = type.metaTypeId(); if(!value.size()) { if(id == QVariant::String) return Node(LiteralValue(value)); return Node(); } // XXX: maybe fuller support of user types, now assume all user types are // resources if(id >= QVariant::UserType) return Node(QUrl::fromEncoded(value.toAscii())); switch(id) { case CppType::None: break; case QVariant::Bool: return Node(LiteralValue(value == "true")); case QVariant::Int: return Node(LiteralValue(value.toInt())); case QVariant::UInt: return Node(LiteralValue(value.toUInt())); case QVariant::LongLong: return Node(LiteralValue(value.toLongLong())); case QVariant::ULongLong: return Node(LiteralValue(value.toULongLong())); case QVariant::Double: return Node(LiteralValue(value.toDouble())); case QVariant::Char: break; // return Node(LiteralValue(QChar)); case QVariant::Map: break; // return Node(LiteralValue(QVariantMap)); case QVariant::List: break; // return Node(LiteralValue(QVariantList)); case QVariant::String: break; // return Node(LiteralValue(QString)); case QVariant::StringList: break; // return Node(LiteralValue(QStringList)); case QVariant::ByteArray: return Node(LiteralValue(value.toAscii())); // TODO: really? case QVariant::BitArray: break; // return Node(LiteralValue(QBitArray)); case QVariant::Date: return Node(LiteralValue(QDate::fromString(value, Qt::ISODate))); case QVariant::Time: return Node(LiteralValue(QTime::fromString(value, Qt::ISODate))); case QVariant::DateTime: return Node(LiteralValue(QDateTime::fromString(value, Qt::ISODate))); // As of 3.9.2009, tracker is permissive regarding IRI's, so are we. case QVariant::Url: return Node(QUrl::fromEncoded(value.toAscii())); // case QVariant::Url: // return Node(QUrl::fromEncoded(value.toAscii(), QUrl::StrictMode)); default: break; } return Node(LiteralValue(value)); }
Soprano::LiteralValue Soprano::LiteralValue::fromString( const QString& value, QVariant::Type type ) { switch( type ) { case QVariant::Int: return LiteralValue( value.toInt() ); case QVariant::LongLong: return LiteralValue( value.toLongLong() ); case QVariant::UInt: return LiteralValue( value.toUInt() ); case QVariant::ULongLong: return LiteralValue( value.toULongLong() ); case QVariant::Bool: return LiteralValue( ( value.toLower() == "true" || value.toLower() == "yes" || value.toInt() != 0 ) ); case QVariant::Double: return LiteralValue( value.toDouble() ); case QVariant::String: return LiteralValue( value ); case QVariant::Date: return LiteralValue( DateTime::fromDateString( value ) ); case QVariant::Time: return LiteralValue( DateTime::fromTimeString( value ) ); case QVariant::DateTime: return LiteralValue( DateTime::fromDateTimeString( value ) ); case QVariant::ByteArray: return LiteralValue( QByteArray::fromBase64( value.toAscii() ) ); default: // qDebug() << "(Soprano::LiteralValue) unknown type: " << type << "storing as string value." << endl; return LiteralValue( value ); } }