/** * Test accessing a JSONArray's members */ bool example_1(Zorba* aZorba) { Iterator_t lIterator; XQuery_t lQuery = aZorba->compileQuery("[ 1, 2, 3 ]"); lIterator = lQuery->iterator(); lIterator->open(); Item lItem; lIterator->next(lItem); // Ensure we got a JSON array if (!lItem.isJSONItem() || lItem.getJSONItemKind() != store::StoreConsts::jsonArray) { std::cerr << "Item is not JSON Array!" << std::endl; return false; } // Ensure array has 3 integer members uint64_t lSize = lItem.getArraySize(); if (lSize != 3) { std::cerr << lSize << " array members returned, expecting 3" << std::endl; return false; } for(uint64_t i = 1; i <= lSize; ++i) { Item lMember = lItem.getArrayValue(i); // This will throw an exception if the item isn't an integer std::cout << lMember.getLongValue() << std::endl; } lIterator->close(); return true; }
// test for bug #3085093 "ZorbaError not caught in SerializerImpl::serialize" bool test_serialization_error(Zorba* aZorba) { XQuery_t lQuery = aZorba->compileQuery("<a a='1'/>/@a"); Zorba_SerializerOptions_t lOptions; Serializer_t lSerializer = Serializer::createSerializer(lOptions); Iterator_t lIterator = lQuery->iterator(); try { lIterator->open(); Item lItem; while ( lIterator->next(lItem) ) { // we have to wrap the item in a Serializable object SingletonItemSequence lSequence(lItem); lSerializer->serialize(&lSequence, std::cout); } lIterator->close(); } catch (ZorbaException& e) { std::cerr << e << std::endl; lIterator->close(); return true; } return false; }
/** * Test accessing a non-existent JSONObject pair value */ bool example_5(Zorba* aZorba) { Iterator_t lIterator; XQuery_t lQuery = aZorba->compileQuery("{ \"one\" : 1, \"two\" : 2 }"); lIterator = lQuery->iterator(); lIterator->open(); Item lItem; lIterator->next(lItem); Item lNonValue = lItem.getObjectValue("three"); lIterator->close(); if (!lNonValue.isNull()) { return false; } return true; }
/** * Test accessing a non-existent JSONArray member */ bool example_4(Zorba* aZorba) { Iterator_t lIterator, lMembers; XQuery_t lQuery = aZorba->compileQuery("[ 1, 2, 3 ]"); lIterator = lQuery->iterator(); lIterator->open(); Item lItem; lIterator->next(lItem); Item lNonMember = lItem.getArrayValue(4); lIterator->close(); if (!lNonMember.isNull()) { return false; } return true; }
/** * Test accessing a JSONObject's values directly by name */ bool example_3(Zorba* aZorba) { Iterator_t lIterator; XQuery_t lQuery = aZorba->compileQuery("{ \"one\" : 1, \"two\" : 2 }"); lIterator = lQuery->iterator(); lIterator->open(); Item lItem; lIterator->next(lItem); Item lValue; lValue = lItem.getObjectValue("one"); std::cout << lValue.getLongValue() << std::endl; lValue = lItem.getObjectValue("two"); std::cout << lValue.getLongValue() << std::endl; lIterator->close(); return true; }
/** * Test accessing a JSONArray's members directly by index */ bool example_2(Zorba* aZorba) { Iterator_t lIterator; XQuery_t lQuery = aZorba->compileQuery("[ 1, 2, 3 ]"); lIterator = lQuery->iterator(); lIterator->open(); Item lItem; lIterator->next(lItem); Item lMember; for (int i = 1; i <= 3; i++) { lMember = lItem.getArrayValue(i); std::cout << lMember.getLongValue() << std::endl; } lIterator->close(); return true; }