bool operator==(const CVariant& v1, const CVariant& v2) { bool less = false; if( v1.IsNull() || v2.IsNull() ) { less = v1.IsNull() && !v2.IsNull(); } else { if( v1.GetType() != v2.GetType() ) { NCBI_THROW(CVariantException, eVariant, "Cannot compare different types"); } switch( v1.GetType() ) { case eDB_Char: case eDB_VarChar: case eDB_LongChar: case eDB_Binary: case eDB_VarBinary: less = v1.GetString() == v2.GetString(); break; case eDB_Bit: less = v1.GetBit() == v2.GetBit(); break; case eDB_TinyInt: less = v1.GetByte() == v2.GetByte(); break; case eDB_SmallInt: less = v1.GetInt2() == v2.GetInt2(); break; case eDB_Int: less = v1.GetInt4() == v2.GetInt4(); break; case eDB_BigInt: less = v1.GetInt8() == v2.GetInt8(); break; case eDB_Float: less = v1.GetFloat() == v2.GetFloat(); break; case eDB_Double: less = v1.GetDouble() == v2.GetDouble(); break; case eDB_DateTime: case eDB_SmallDateTime: less = v1.GetCTime() == v2.GetCTime(); break; default: NCBI_THROW(CVariantException, eVariant, "Type not supported"); } } return less; }
void CTestSuiteVariant::TestAssign() { CVariant Result; CVariant Var; Result=Var; CPPUNIT_ASSERT_EQUAL( Result.GetType(),eVVT_Table ); Var.SetMember("abc")->SetNumber<int8>(123); Var.SetMember("cde"); Var.SetMember("f")->SetString("shit"); Result=Var; CPPUNIT_ASSERT_EQUAL( Result.GetMember("abc")->GetNumber<int8>(),(int8)123 ); CPPUNIT_ASSERT_EQUAL( Result.GetMember("cde")->GetType(),eVVT_Table ); CPPUNIT_ASSERT_EQUAL( string(Result.GetMember("f")->GetString()),string("shit") ); }