double CExpression::calculate(const char* st, double x, double y) { return CExpression(st, true).calculate(x,y); }
double CExpression::calculate(const std::string& st, double x, double y) { return CExpression(st, true).calculate(x,y); }
//--------------------------------------------------------------------------- // @function: // CXformTest::EresUnittest_ApplyXforms_CTE // // @doc: // Test application of CTE-related xforms // //--------------------------------------------------------------------------- GPOS_RESULT CXformTest::EresUnittest_ApplyXforms_CTE() { CAutoMemoryPool amp; IMemoryPool *pmp = amp.Pmp(); // setup a file-based provider CMDProviderMemory *pmdp = CTestUtils::m_pmdpf; pmdp->AddRef(); CMDAccessor mda(pmp, CMDCache::Pcache(), CTestUtils::m_sysidDefault, pmdp); // install opt context in TLS CAutoOptCtxt aoc ( pmp, &mda, NULL, /* pceeval */ CTestUtils::Pcm(pmp) ); DrgPexpr *pdrgpexpr = GPOS_NEW(pmp) DrgPexpr(pmp); // create producer ULONG ulCTEId = 0; CExpression *pexprProducer = CTestUtils::PexprLogicalCTEProducerOverSelect(pmp, ulCTEId); COptCtxt::PoctxtFromTLS()->Pcteinfo()->AddCTEProducer(pexprProducer); pdrgpexpr->Append(pexprProducer); DrgPcr *pdrgpcrProducer = CLogicalCTEProducer::PopConvert(pexprProducer->Pop())->Pdrgpcr(); DrgPcr *pdrgpcrConsumer = CUtils::PdrgpcrCopy(pmp, pdrgpcrProducer); CExpression *pexprConsumer = GPOS_NEW(pmp) CExpression ( pmp, GPOS_NEW(pmp) CLogicalCTEConsumer(pmp, ulCTEId, pdrgpcrConsumer) ); pdrgpexpr->Append(pexprConsumer); COptCtxt::PoctxtFromTLS()->Pcteinfo()->IncrementConsumers(ulCTEId); pexprConsumer->AddRef(); CExpression *pexprSelect = CTestUtils::PexprLogicalSelect(pmp, pexprConsumer); pdrgpexpr->Append(pexprSelect); pexprSelect->AddRef(); CExpression *pexprAnchor = GPOS_NEW(pmp) CExpression ( pmp, GPOS_NEW(pmp) CLogicalCTEAnchor(pmp, ulCTEId), pexprSelect ); pdrgpexpr->Append(pexprAnchor); const ULONG ulLen = pdrgpexpr->UlLength(); for (ULONG ul = 0; ul < ulLen; ul++) { CWStringDynamic str(pmp); COstreamString oss(&str); ApplyExprXforms(pmp, oss, (*pdrgpexpr)[ul]); GPOS_TRACE(str.Wsz()); } pdrgpexpr->Release(); return GPOS_OK; }