Esempio n. 1
0
void RepoQuery::bindTypedValue(const char* paramName, const TypedValue& tv) {
  if (tv.m_type == KindOfUninit) {
    bindBlob(paramName, "", 0, true);
  } else {
    String blob = f_serialize(tvAsCVarRef(&tv));
    bindBlob(paramName, blob->data(), blob->size());
  }
}
Esempio n. 2
0
void Database::Query::bindValue(int paramIndex, const DataValue& value)
{
	switch (value.getType())
	{
	case DataValue::TYPE_VOID:
	case DataValue::TYPE_NULL:			bindNull(paramIndex); break;

	case DataValue::TYPE_BOOL:			bind(paramIndex, DataValue(value).toInt()); break;
	case DataValue::TYPE_INT:			bind(paramIndex, value.getData<int>()); break;

	case DataValue::TYPE_INT64:			bind(paramIndex, value.getData<int64>()); break;

	case DataValue::TYPE_FLOAT:			bind(paramIndex, value.getData<float>()); break;
	case DataValue::TYPE_DOUBLE:		bind(paramIndex, value.getData<double>()); break;

	case DataValue::TYPE_STRING:		bind(paramIndex, value.getStringPtr(), value.getStringSize()); break;
	case DataValue::TYPE_BLOB:			bindBlob(paramIndex, value.getBlobPtr(), value.getBlobSize()); break;

	case DataValue::TYPE_TIMESTAMP:		bind(paramIndex, value.getData<Timestamp>().getUnixTime64()); break;

	// types which sqlite doesn't support natively are treated as blob
	case DataValue::TYPE_FLOAT2:		
	case DataValue::TYPE_FLOAT3:
	case DataValue::TYPE_FLOAT4:
	case DataValue::TYPE_FLOAT3X3:
	case DataValue::TYPE_FLOAT4X4:

	case DataValue::TYPE_VECTOR2:
	case DataValue::TYPE_VECTOR3:
	case DataValue::TYPE_VECTOR4:
	case DataValue::TYPE_QUAT:
	case DataValue::TYPE_MATRIX3:
	case DataValue::TYPE_MATRIX4:
		{ 
			DataValue copy(value); 
			size_t size; 
			const void* blob = copy.toBlob(&size); 
			bindBlob(paramIndex, blob, size); 
		} 
		break;

	case DataValue::TYPE_ARRAY:			bind(paramIndex, DataValue(value).toBuffer());
	case DataValue::TYPE_RECORD:		bind(paramIndex, DataValue(value).toBuffer());
	case DataValue::TYPE_OBJECT:		bind(paramIndex, DataValue(value).toBuffer());
	case DataValue::TYPE_BUFFER:		bind(paramIndex, value.getRef<MemoryBuffer>()); break;

	default:							NIT_THROW(EX_NOT_SUPPORTED);
	}
}
Esempio n. 3
0
int SQLiteStatement::bindBlob(int index, const String& text)
{
    // String::characters() returns 0 for the empty string, which SQLite
    // treats as a null, so we supply a non-null pointer for that case.
    UChar anyCharacter = 0;
    const UChar* characters;
    if (text.isEmpty() && !text.isNull())
        characters = &anyCharacter;
    else
        characters = text.characters();

    return bindBlob(index, characters, text.length() * sizeof(UChar));
}
Esempio n. 4
0
int SQLiteStatement::bindBlob(int index, const String& text)
{
    // SQLite treats uses zero pointers to represent null strings, which means we need to make sure to map null WTFStrings to zero pointers.
    ASSERT(!String().charactersWithNullTermination().data());
    return bindBlob(index, text.charactersWithNullTermination().data(), text.length() * sizeof(UChar));
}
Esempio n. 5
0
void RepoQuery::bindMd5(const char* paramName, const MD5& md5) {
  char md5nbo[16];
  md5.nbo((void*)md5nbo);
  bindBlob(paramName, md5nbo, sizeof(md5nbo));
}
Esempio n. 6
0
void RepoQuery::bindBlob(const char* paramName, const BlobEncoder& blob,
                         bool isStatic) {
  return bindBlob(paramName, blob.data(), blob.size(), isStatic);
}
Esempio n. 7
0
void Statement::bindBlob(int offset, const std::vector<uint8_t>& value, bool retain) {
    bindBlob(offset, value.data(), value.size(), retain);
}