| #pragma once |
| |
| #ifndef APACHE_GEODE_GUARD_f57a1f9a1b1286d041f077ee231e8637 |
| #define APACHE_GEODE_GUARD_f57a1f9a1b1286d041f077ee231e8637 |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include <gfcpp/GeodeCppCache.hpp> |
| #include <stdlib.h> |
| #include <gfcpp/SystemProperties.hpp> |
| #include <ace/OS.h> |
| |
| #include "DistributedSystemImpl.hpp" |
| |
| #include "../testobject/Portfolio.hpp" |
| #include "../testobject/Position.hpp" |
| #include "../testobject/PdxType.hpp" |
| #include "../testobject/PortfolioPdx.hpp" |
| #include "../testobject/PositionPdx.hpp" |
| #include "../pdxautoserializerclass/PortfolioPdx.hpp" |
| #include "../pdxautoserializerclass/PositionPdx.hpp" |
| #include "fwklib/FwkLog.hpp" |
| |
| #include <gfcpp/ResultSet.hpp> |
| #include <gfcpp/StructSet.hpp> |
| |
| #ifndef ROOT_SCOPE |
| #define ROOT_SCOPE LOCAL |
| #endif |
| |
| using namespace apache::geode::client; |
| using namespace PdxTests; |
| using namespace AutoPdxTests; |
| |
| namespace testData { |
| |
| const int RS_ARRAY_SIZE = 41; |
| const int SS_ARRAY_SIZE = 35; |
| const int CQRS_ARRAY_SIZE = 24; |
| const int RSP_ARRAY_SIZE = 13; |
| const int SSP_ARRAY_SIZE = 17; |
| |
| const int MAX_QRY_LENGTH = 512; |
| enum queryCategory { |
| singleRegion = 1, |
| multiRegion, |
| operators, |
| constants, |
| functions, |
| collectionOps, |
| keywords, |
| regionInterface, |
| nestedQueries, |
| importAndSelect, |
| canonicalization, |
| unsupported, |
| queryAndIndexing, |
| misc, |
| qcEnd /*to mark the end of enum*/ |
| } qcType; |
| |
| class QueryStrings { |
| public: |
| QueryStrings(queryCategory pcategory, const char* pquery, |
| bool pisLargeResultset = false) { |
| int32_t querylen = static_cast<int32_t>(strlen(pquery)); |
| if (querylen < MAX_QRY_LENGTH) memcpy(_query, pquery, querylen); |
| memset(&_query[querylen], '\0', 1); |
| category = pcategory; |
| haveLargeResultset = pisLargeResultset; |
| } |
| |
| static int RSsize() { return RS_ARRAY_SIZE; }; |
| static int SSsize() { return SS_ARRAY_SIZE; }; |
| static int CQRSsize() { return CQRS_ARRAY_SIZE; }; |
| static int RSPsize() { return RSP_ARRAY_SIZE; }; |
| static int SSPsize() { return SSP_ARRAY_SIZE; }; |
| |
| const char* query() const { return _query; }; |
| |
| public: |
| char _query[MAX_QRY_LENGTH]; |
| queryCategory category; |
| bool haveLargeResultset; |
| |
| private: |
| QueryStrings(); |
| QueryStrings* operator=(QueryStrings&); |
| }; |
| |
| #define QRY(category, query) QueryStrings(category, query) |
| |
| // for large resultset |
| #define LQRY(category, query) QueryStrings(category, query, true) |
| |
| const QueryStrings resultsetQueries[RS_ARRAY_SIZE] = { |
| // 0 idx |
| QRY(singleRegion, "select distinct * from /Portfolios port"), |
| QRY(singleRegion, "select distinct pkid from /Portfolios"), |
| LQRY(singleRegion, |
| "select distinct port from /Portfolios port, " |
| "port.Positions.values"), |
| QRY(singleRegion, |
| "select distinct pf from /Portfolios pf , pf.positions.values " |
| "pos where pos.getSecId = 'IBM' and NOT pf.isActive") |
| |
| // 4 idx |
| , |
| LQRY(multiRegion, |
| "Select distinct pf from /Portfolios pf, /Portfolios2, " |
| "/Portfolios3 where pf.isActive = TRUE"), |
| LQRY(multiRegion, |
| "select distinct pos from /Portfolios, /Portfolios/Positions " |
| "pos"), |
| LQRY(multiRegion, |
| "select distinct port from /Portfolios port , /Positions pos " |
| "where pos.getSecId in (select distinct pos.getSecId from " |
| "port.positions.values pos)") |
| |
| // 6 idx |
| , |
| QRY(operators, "select distinct * from /Portfolios where ID = 2"), |
| QRY(operators, "select distinct * from /Portfolios where ID != 2") |
| |
| // 9 idx |
| , |
| QRY(constants, "select distinct * from /Portfolios where ID = NULL"), |
| QRY(constants, "select distinct * from /Portfolios where ID = UNDEFINED"), |
| QRY(constants, "select distinct * from /Portfolios where NULL"), |
| QRY(constants, "select distinct * from /Portfolios where UNDEFINED"), |
| QRY(constants, "select distinct * from /Portfolios where TRUE"), |
| QRY(constants, "select distinct * from /Portfolios where 1=1"), |
| QRY(constants, "select distinct * from /Portfolios where 'a'<>'a'"), |
| QRY(constants, |
| "select distinct port from /Portfolios port, " |
| "port.Positions.values where FALSE"), |
| QRY(constants, |
| "select distinct port from /Portfolios port, " |
| "port.Positions.values where UNDEFINED = 1"), |
| QRY(constants, |
| "select distinct port from /Portfolios port where " |
| "IS_UNDEFINED(UNDEFINED)") |
| |
| // 19 idx |
| , |
| QRY(functions, |
| "select distinct * from /Portfolios port where " |
| "IS_DEFINED(TRUE)"), |
| QRY(functions, |
| "select distinct * from /Portfolios port where " |
| "IS_UNDEFINED(ID)"), |
| LQRY(nestedQueries, |
| "select distinct this.value from /Portfolios.entrySet this " |
| "where element(select distinct * from /Portfolios.keySet p_k " |
| "where p_k = this.key ) = 'port1-3' and this.value.status = " |
| "'inactive'"), |
| QRY(functions, "select distinct nvl(NULL, 'foundNull') from /Portfolios") |
| //, QRY(functions , "select distinct nvl('notNull', 'foundNull') |
| //= 'notNull' from /Portfolios" ) |
| , |
| QRY(functions, |
| "select distinct nvl('notNull', 'foundNull') from /Portfolios"), |
| QRY(functions, |
| "select distinct * from /Portfolios pf where " |
| "nvl(pf.position2,'foundNull') = 'foundNull'"), |
| QRY(functions, |
| "select distinct nvl(pf.position2, 'inProjection') from " |
| "/Portfolios pf where nvl(pf.position2,'foundNull') = " |
| "'foundNull'") // constant |
| |
| // 26 idx |
| , |
| QRY(regionInterface, |
| "select distinct * from /Portfolios.keys where toString = " |
| "'port1-1'") // constant |
| , |
| QRY(regionInterface, |
| "select distinct * from /Portfolios.values where ID = 1"), |
| QRY(regionInterface, |
| "select distinct value from /Portfolios.entries where value.ID " |
| "= 1 and key = 'port1-1'") // constant |
| , |
| LQRY(regionInterface, |
| "select distinct * from /Portfolios.keySet where toString = " |
| "'port1-1'") // constant |
| , |
| LQRY(regionInterface, |
| "select distinct key from /Portfolios.entrySet , " |
| "value.positions.values where value.ID = 1 and key = " |
| "'port1-1'") // constant |
| |
| // 31 idx |
| , |
| QRY(functions, |
| "select distinct * from /Portfolios WHERE NOT(SELECT DISTINCT " |
| "* FROM positions.values p WHERE p.secId = 'IBM').isEmpty"), |
| LQRY(nestedQueries, |
| "select distinct x.value from /Portfolios.entrySet x where " |
| "x.value.status = ELEMENT(select distinct p.value from " |
| "/Portfolios.entrySet p where x.key = p.key).status"), |
| LQRY(nestedQueries, |
| "select distinct * from /Portfolios x where status = " |
| "ELEMENT(select distinct p_k.value from /Portfolios.entrySet " |
| "p_k where p_k.key = 'port1-1').status"), |
| LQRY(nestedQueries, |
| "select distinct p from /Portfolios p, (select distinct * " |
| "from /Portfolios x, x.positions as myPos) where " |
| "myPos.value.secId = 'YHOO'") |
| |
| // 35 idx |
| , |
| LQRY(importAndSelect, |
| "import javaobject.Position;" |
| " select distinct secId FROM /Portfolios, positions.values " |
| "pos TYPE Position WHERE ID > 0 ") |
| |
| // 36 idx |
| , |
| QRY(unsupported, |
| "element(select distinct * from /Portfolios where ID " |
| "<=3).status"), |
| QRY(unsupported, |
| "select distinct * from /Portfolios.subregions(false) where " |
| "remove('5')!= null") |
| //, QRY(unsupported, "element(select distinct * from /Portfolios |
| // where ID =1).status") |
| , |
| QRY(unsupported, "select distinct * from NULL"), |
| QRY(unsupported, "select distinct * from UNDEFINED"), |
| LQRY(misc, |
| "select distinct * from /Portfolios WHERE NOT (select " |
| "distinct * from positions.values p WHERE p.secId = " |
| "'IBM').isEmpty")}; // end of resultsetQueries |
| |
| const int resultsetRowCounts[RS_ARRAY_SIZE] = { |
| 20, 20, 20, 1, 10, 20, 20, 1, 19, 0, 0, 0, 0, 20, 20, 0, 0, 0, 20, 20, 0, |
| 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 2, 20, 10, 20, 10, 0, 0, 0, 0, 2}; |
| |
| const int constantExpectedRowsRS[10] = {1, 21, 22, 23, 25, 26, 28, 29, 30, 35}; |
| |
| const QueryStrings resultsetparamQueries[RSP_ARRAY_SIZE] = { |
| // 0 idx |
| QRY(operators, "select distinct * from /Portfolios where ID = $1"), |
| QRY(operators, "select distinct * from /Portfolios where ID != $1") |
| |
| // 2 idx |
| , |
| QRY(constants, "select distinct * from /Portfolios where $1=$2"), |
| QRY(constants, "select distinct * from /Portfolios where $1<>$2"), |
| QRY(constants, |
| "select distinct port from /Portfolios port, port.Positions.values " |
| "where UNDEFINED = $1") |
| |
| // 5 idx |
| , |
| LQRY(functions, |
| "select distinct this.value from /Portfolios.entrySet this where " |
| "element(select distinct * from /Portfolios.keySet p_k where p_k = " |
| "this.key ) = $1 and this.value.status = $2"), |
| QRY(functions, |
| "select distinct * from /Portfolios pf where nvl(pf.position2,$1) = " |
| "$2"), |
| QRY(functions, |
| "select distinct nvl(pf.position2, $1) from /Portfolios pf where " |
| "nvl(pf.position2,$2) = $3") |
| |
| // 8 idx |
| , |
| QRY(regionInterface, |
| "select distinct * from /Portfolios.keys where toString = $1"), |
| QRY(regionInterface, |
| "select distinct * from /Portfolios.values where ID = $1"), |
| QRY(regionInterface, |
| "select distinct value from /Portfolios.entries where value.ID = $1 " |
| "and key = $2"), |
| LQRY(regionInterface, |
| "select distinct * from /Portfolios.keySet where toString = $1"), |
| LQRY(regionInterface, |
| "select distinct key from /Portfolios.entrySet , " |
| "value.positions.values where value.ID = $1 and key = $2")}; |
| |
| const int noofQueryParam[] = {1, 1, 2, 2, 1, 2, 2, 3, 1, 1, 2, 1, 2}; |
| |
| const char queryparamSet[13][3][15] = { |
| {"2"}, |
| {"2"}, |
| {"1", "1"}, |
| {"a", "a"}, |
| {"1"}, |
| {"port1-3", "inactive"}, |
| {"foundNull", "foundNull"}, |
| {"inProjection", "foundNull", "foundNull"}, |
| {"port1-1"}, |
| {"1"}, |
| {"1", "port1-1"}, |
| {"port1-1"}, |
| {"1", "port1-1"}}; |
| |
| const int resultsetRowCountsPQ[RSP_ARRAY_SIZE] = {1, 19, 20, 0, 0, 1, 10, |
| 1, 1, 1, 1, 1, 1}; |
| |
| const int constantExpectedRowsPQRS[6] = {5, 7, 8, 10, 11, 12}; |
| |
| const QueryStrings structsetQueries[SS_ARRAY_SIZE] = { |
| // 0 idx |
| QRY(singleRegion, |
| "select distinct ID, pkid, position1, position2, getType, status " |
| "from /Portfolios") |
| |
| // 1 idx |
| , |
| QRY(multiRegion, |
| "select distinct ptf,pos from (select distinct * from /Portfolios " |
| "ptf, positions.values pos) outp where outp.pos.secId = 'IBM'"), |
| QRY(multiRegion, |
| "select distinct ptf,pos from (select distinct * from ptf IN " |
| "/Portfolios, pos IN positions.values) where pos.secId = 'IBM'") |
| // to be enabled, QRY(multiRegion , "select distinct * from (select |
| // distinct ptf.ID, pos AS myPos from /Portfolios ptf, positions.values |
| // pos) ") |
| /*to be removed */, |
| QRY(multiRegion, |
| "select distinct myPos, ID from (select distinct pos AS myPos, " |
| "ptf.ID as ID from /Portfolios ptf, positions.values pos) ") |
| // need to see later , QRY(multiRegion , "select distinct * from (select |
| // distinct * from /Portfolios ptf, positions pos) p where |
| // p.get('pos').value.secId = 'IBM'") |
| , |
| QRY(multiRegion, |
| "select distinct secId, getSharesOutstanding from /Positions") |
| |
| // 5 idx |
| , |
| QRY(constants, |
| "select distinct id, positions from /Portfolios where ID = NULL"), |
| QRY(constants, |
| "select distinct pkid, getPk() from /Portfolios where ID = " |
| "UNDEFINED"), |
| QRY(constants, |
| "select distinct getPositions, getPositions from /Portfolios where " |
| "TRUE"), |
| QRY(constants, |
| "select distinct id, status from /Portfolios where UNDEFINED"), |
| QRY(constants, |
| "select distinct getPositions, ID, status, pkid from /Portfolios " |
| "where TRUE"), |
| QRY(constants, |
| "select distinct ID, pkid, getType from /Portfolios where 1=1"), |
| QRY(constants, |
| "select distinct ID, pkid, names from /Portfolios where 'a'<>'a'"), |
| QRY(constants, |
| "select distinct port.ID, port.status, port.names from /Portfolios " |
| "port, port.Positions.values where TRUE"), |
| QRY(constants, |
| "select distinct port.ID, port.pkid, port.names from /Portfolios " |
| "port, port.Positions.values where UNDEFINED = 1"), |
| QRY(constants, |
| "select distinct port.ID, port.pkid, port.getType from /Portfolios " |
| "port where IS_UNDEFINED(UNDEFINED)") |
| |
| // 15 idx |
| , |
| QRY(functions, |
| "select distinct port.ID, port.status from /Portfolios port where " |
| "IS_DEFINED(TRUE)"), |
| QRY(functions, |
| "select distinct port.ID, port.status from /Portfolios port where " |
| "IS_UNDEFINED(ID)"), |
| LQRY(nestedQueries, |
| "select distinct oP.ID, oP.status, oP.getType from /Portfolios oP " |
| "where element(select distinct p.ID, p.status, p.getType from " |
| "/Portfolios p where p.ID = oP.ID).status = 'inactive'"), |
| QRY(functions, |
| "select distinct nvl(NULL, 'foundNull')='foundNull', 'dummy Col' " |
| "from /Portfolios"), |
| QRY(functions, |
| "select distinct nvl('notNull', 'foundNull') as NtNul , 'dummy " |
| "Col' as Dumbo from /Portfolios"), |
| QRY(functions, |
| "select distinct pf.ID, pf.status, pf.getType from /Portfolios pf " |
| "where nvl(pf.position2,'foundNull') = 'foundNull'"), |
| QRY(functions, |
| "select distinct nvl(pf.position2, 'inProjection'), 'dummy Col' " |
| "from /Portfolios pf where nvl(pf.position2,'foundNull') = " |
| "'foundNull'") |
| |
| // 22 idx |
| , |
| LQRY(nestedQueries, |
| "select distinct keys, v.key, v.value.ID, v.value.toString from " |
| "/Portfolios.keys keys, /Portfolios.entrySet v where " |
| "v.value.toString in (select distinct p.toString from /Portfolios " |
| "p where p.ID = v.value.ID) and keys = v.key"), |
| LQRY(regionInterface, |
| "select distinct ID, pkid, names, position2.secId from " |
| "/Portfolios.values where nvl(position2,'nopes') != 'nopes' and " |
| "ID > 1"), |
| QRY(regionInterface, |
| "select distinct key, value.ID, value.pkid from " |
| "/Portfolios.entries where value.ID = 1 and key in Set('port1-1')"), |
| LQRY(regionInterface, |
| "select distinct key, secType, secId, underlyer, cnt from " |
| "/Portfolios.entrySet , value.positions.values where value.ID = " |
| "10 and key = 'port1-10'"), |
| LQRY(nestedQueries, |
| "select distinct k, value.ID, value from /Portfolios.keySet k, " |
| "(select distinct value from /Portfolios.entrySet) value where " |
| "k.toString = 'port1-1'") |
| |
| // 27 idx |
| , |
| QRY(nestedQueries, |
| "select distinct x.ID, x.status, x.getType, myPos.value.secType, " |
| "myPos.value.secId as security from (select distinct * from " |
| "/Portfolios x, x.positions as myPos)"), |
| LQRY(nestedQueries, |
| "select distinct derivedProjAttrbts, key: p.key, id: p.value.ID " |
| "from /Portfolios.entries p, (select distinct x.ID, x.status, " |
| "x.getType, myPos.secId from /Portfolios x, x.positions.values as " |
| "myPos) derivedProjAttrbts where p.value.ID = " |
| "derivedProjAttrbts.ID and derivedProjAttrbts.secId = 'IBM'"), |
| LQRY(nestedQueries, |
| "select distinct eP.key, eP.value from /Portfolios.entrySet eP, " |
| "/Portfolios/Positions pos where pos.secId in (select distinct " |
| "portPos.value.secId from (select distinct * from " |
| "eP.value.positions) portPos)"), |
| LQRY(nestedQueries, |
| "select distinct pos.secId, pos.getSharesOutstanding from " |
| "/Portfolios/Positions pos where pos.getSharesOutstanding in " |
| "(select distinct inPos.getSharesOutstanding from /Positions " |
| "inPos where inPos.secId = pos.secId)") |
| |
| // 31 idx |
| //, QRY(canonicalization, "Select distinct pos.ID, security from |
| /// Portfolios.getPositions pos, pos.secId security where length > 1 and |
| // pos.ID > 0") |
| , |
| QRY(canonicalization, "Select distinct ID, position1 from /Portfolios") |
| |
| // 32 idx |
| , |
| QRY(unsupported, |
| "select element(select distinct * from /Portfolios where ID " |
| "<=1).status = 'active'"), |
| QRY(unsupported, |
| "select distinct * from /Portfolios.subregions(false) where " |
| "remove('5')!= null"), |
| LQRY(misc, |
| "select distinct key: key, iD: entry.value.ID, secId: " |
| "posnVal.secId from /Portfolios.entries entry, " |
| "entry.value.positions.values posnVal WHERE entry.value.getType = " |
| "'type0' AND posnVal.secId = 'YHOO'")}; // end of structsetQueries |
| |
| const int structsetRowCounts[SS_ARRAY_SIZE] = { |
| 20, 2, 2, 20, 20, 0, 0, 20, 0, 20, 20, 0, 20, 0, 20, 20, 0, 10, |
| 1, 1, 10, 1, 20, 9, 1, 1, 20, 20, 2, 20, 20, 20, 0, 1, 1}; |
| |
| const int structsetFieldCounts[SS_ARRAY_SIZE] = { |
| 6, 2, 2, 2, 2, 0, 0, 2, 0, 4, 3, 0, 3, 0, 3, 2, 0, 3, |
| 2, 2, 3, 2, 4, 4, 3, 5, 3, 5, 3, 2, 2, 2, 0, 3, 3}; |
| const int constantExpectedRowsSS[16] = {4, 10, 12, 13, 14, 15, 17, 18, |
| 19, 20, 21, 23, 24, 25, 27, 30}; |
| |
| const QueryStrings structsetParamQueries[SSP_ARRAY_SIZE] = { |
| // 0 idx |
| QRY(multiRegion, |
| "select distinct ptf,pos from (select distinct * from /Portfolios ptf, " |
| "positions.values pos) outp where outp.pos.secId = $1") |
| |
| // 1 idx |
| , |
| QRY(multiRegion, |
| "select distinct ptf,pos from (select distinct * from ptf IN " |
| "/Portfolios, pos IN positions.values) where pos.secId = $1"), |
| QRY(constants, |
| "select distinct ID, pkid, getType from /Portfolios where $1 = $2"), |
| QRY(constants, |
| "select distinct ID, pkid, names from /Portfolios where $1 <> $2") |
| |
| // 4 idx |
| , |
| QRY(constants, |
| "select distinct port.ID, port.pkid, port.names from /Portfolios port, " |
| "port.Positions.values where UNDEFINED = $1"), |
| LQRY(functions, |
| "select distinct oP.ID, oP.status, oP.getType from /Portfolios oP " |
| "where element(select distinct p.ID, p.status, p.getType from " |
| "/Portfolios p where p.ID = oP.ID).status = $1"), |
| QRY(functions, |
| "select distinct nvl(NULL, $1)=$2, 'dummy Col' from /Portfolios"), |
| QRY(functions, |
| "select distinct nvl($1, $2) as NtNul , $3 as Dumbo from /Portfolios"), |
| QRY(functions, |
| "select distinct pf.ID, pf.status, pf.getType from /Portfolios pf " |
| "where nvl(pf.position2,$1) = $2"), |
| QRY(functions, |
| "select distinct nvl(pf.position2, $1), $2 from /Portfolios pf where " |
| "nvl(pf.position2, $3) = $4") |
| |
| // 10 idx |
| , |
| LQRY(regionInterface, |
| "select distinct ID, pkid, names, position2.secId from " |
| "/Portfolios.values where nvl(position2, $1) != $1 and ID > $2"), |
| QRY(regionInterface, |
| "select distinct key, value.ID, value.pkid from /Portfolios.entries " |
| "where value.ID = $1 and key in Set($2)"), |
| LQRY(regionInterface, |
| "select distinct key, secType, secId, underlyer, cnt from " |
| "/Portfolios.entrySet , value.positions.values where value.ID = $1 " |
| "and key = $2"), |
| LQRY(regionInterface, |
| "select distinct k, value.ID, value from /Portfolios.keySet k, " |
| "(select distinct value from /Portfolios.entrySet) value where " |
| "k.toString = $1") |
| |
| // 14 idx |
| , |
| LQRY(nestedQueries, |
| "select distinct derivedProjAttrbts, key: p.key, id: p.value.ID from " |
| "/Portfolios.entries p, (select distinct x.ID, x.status, x.getType, " |
| "myPos.secId from /Portfolios x, x.positions.values as myPos) " |
| "derivedProjAttrbts where p.value.ID = derivedProjAttrbts.ID and " |
| "derivedProjAttrbts.secId = $1"), |
| QRY(unsupported, |
| "select element(select distinct * from /Portfolios where ID <= " |
| "$1).status = $2"), |
| LQRY(misc, |
| "select distinct key: key, iD: entry.value.ID, secId: posnVal.secId " |
| "from /Portfolios.entries entry, entry.value.positions.values posnVal " |
| "WHERE entry.value.getType = $1 AND posnVal.secId = $2")}; |
| |
| const int numSSQueryParam[] = {1, 1, 2, 2, 1, 1, 2, 3, 2, |
| 4, 2, 2, 2, 1, 1, 2, 2}; |
| |
| const char queryparamSetSS[17][4][15] = { |
| {"IBM"}, |
| {"IBM"}, |
| {"1", "1"}, |
| {"a", "a"}, |
| {"1"}, |
| {"inactive"}, |
| {"foundNull", "foundNull"}, |
| {"notNull", "foundNull", "dummy Col"}, |
| {"foundNull", "foundNull"}, |
| {"inProjection", "dummy Col", "foundNull", "foundNull"}, |
| {"nopes", "1"}, |
| {"1", "port1-1"}, |
| {"10", "port1-10"}, |
| {"port1-1"}, |
| {"IBM"}, |
| {"1", "active"}, |
| {"type0", "YHOO"}}; |
| |
| const int structsetRowCountsPQ[SSP_ARRAY_SIZE] = {2, 2, 20, 0, 0, 10, 1, 1, 10, |
| 1, 9, 1, 1, 20, 2, 0, 1}; |
| |
| const int structsetFieldCountsPQ[SSP_ARRAY_SIZE] = {2, 2, 3, 0, 0, 3, 2, 2, 3, |
| 2, 4, 3, 5, 3, 3, 0, 3}; |
| |
| const int constantExpectedRowsSSPQ[10] = {2, 4, 5, 6, 7, 8, 9, 10, 11, 12}; |
| |
| const QueryStrings cqResultsetQueries[CQRS_ARRAY_SIZE] = { |
| // 0 idx |
| QRY(singleRegion, "select * from /Portfolios port") |
| // 1 idx |
| , |
| QRY(operators, "select * from /Portfolios where ID = 2"), |
| QRY(operators, "select * from /Portfolios where ID != 2") |
| |
| // 3 idx |
| , |
| QRY(constants, "select * from /Portfolios where ID = NULL"), |
| QRY(constants, "select * from /Portfolios where ID = UNDEFINED"), |
| QRY(constants, "select * from /Portfolios where NULL"), |
| QRY(constants, "select * from /Portfolios where UNDEFINED"), |
| QRY(constants, "select * from /Portfolios where TRUE"), |
| QRY(constants, "select * from /Portfolios where 1=1"), |
| QRY(constants, "select * from /Portfolios where 'a'<>'a'") |
| |
| // 10 idx |
| , |
| QRY(functions, "select * from /Portfolios port where IS_DEFINED(TRUE)"), |
| QRY(functions, "select * from /Portfolios port where IS_UNDEFINED(ID)"), |
| LQRY(nestedQueries, |
| "select this.value from /Portfolios.entrySet this where " |
| "element(select * from /Portfolios.keySet p_k where p_k = this.key ) " |
| "= 'port1-3' and this.value.status = 'inactive'"), |
| QRY(functions, |
| "select * from /Portfolios pf where nvl(pf.position2,'foundNull') = " |
| "'foundNull'") |
| |
| // 14 idx |
| , |
| QRY(functions, |
| "select * from /Portfolios WHERE NOT(SELECT DISTINCT * FROM " |
| "positions.values p WHERE p.secId = 'IBM').isEmpty"), |
| LQRY(nestedQueries, |
| "select x.value from /Portfolios.entrySet x where x.value.status = " |
| "ELEMENT(select p.value from /Portfolios.entrySet p where x.key = " |
| "p.key).status"), |
| LQRY(nestedQueries, |
| "select * from /Portfolios x where status = ELEMENT(select " |
| "p_k.value from /Portfolios.entrySet p_k where p_k.key = " |
| "'port1-1').status"), |
| LQRY(nestedQueries, |
| "select p from /Portfolios p, (select * from /Portfolios x, " |
| "x.positions as myPos) where myPos.value.secId = 'YHOO'") |
| |
| // 35 idx |
| , |
| LQRY(importAndSelect, |
| "import javaobject.Position;" |
| " select secId FROM /Portfolios, positions.values pos TYPE Position " |
| "WHERE ID > 0 ") |
| |
| // 36 idx |
| , |
| QRY(unsupported, "element(select * from /Portfolios where ID <=3).status"), |
| QRY(unsupported, |
| "select * from /Portfolios.subregions(false) where remove('5')!= null") |
| //, QRY(unsupported, "element(select * from /Portfolios where ID |
| //=1).status") |
| , |
| QRY(unsupported, "select * from NULL"), |
| QRY(unsupported, "select * from UNDEFINED"), |
| LQRY(misc, |
| "select * from /Portfolios WHERE NOT (select * from " |
| "positions.values p WHERE p.secId = 'IBM').isEmpty")}; |
| |
| const int cqResultsetRowCounts[CQRS_ARRAY_SIZE] = {20, 1, 19, 0, 0, 0, 0, 20, |
| 20, 0, 20, 0, 1, 10, 2, 20, |
| 10, 20, 10, 0, 0, 0, 0, 2}; |
| |
| const int constantExpectedRowsCQRS[1] = {35}; |
| } // namespace testData |
| using namespace testData; |
| using namespace testobject; |
| |
| class QueryHelper { |
| public: |
| static QueryHelper* singleton; |
| |
| static QueryHelper& getHelper() { |
| if (singleton == NULL) { |
| singleton = new QueryHelper(); |
| } |
| return *singleton; |
| } |
| |
| QueryHelper() { |
| portfolioSetSize = 20; |
| portfolioNumSets = 1; |
| positionSetSize = 20; |
| positionNumSets = 1; |
| } |
| |
| virtual ~QueryHelper() { ; } |
| |
| virtual void populatePortfolioData(RegionPtr& pregion, int setSize, |
| int numSets, int32_t objSize = 1); |
| virtual void populatePortfolio(RegionPtr& rptr, int maxKey, |
| int32_t objSize = 1); |
| virtual void populatePositionData(RegionPtr& pregion, int setSize, |
| int numSets); |
| virtual void populatePortfolioPdxData(RegionPtr& pregion, int setSize, |
| int numSets, int32_t objSize = 1, |
| char** nm = NULL); |
| virtual void populatePositionPdxData(RegionPtr& pregion, int setSize, |
| int numSets); |
| virtual void populateAutoPortfolioPdxData(RegionPtr& pregion, int setSize, |
| int numSets, int32_t objSize = 1, |
| char** nm = NULL); |
| virtual void populateAutoPositionPdxData(RegionPtr& pregion, int setSize, |
| int numSets); |
| virtual void destroyPortfolioOrPositionData(RegionPtr& pregion, int setSize, |
| int numSets, |
| const char* dataType); |
| virtual void invalidatePortfolioOrPositionData(RegionPtr& pregion, |
| int setSize, int numSets, |
| const char* dataType); |
| |
| // might need it in later. |
| // virtual void getRSQueryString(char category, int& queryIndex, std::string& |
| // query); |
| // virtual void getSSQueryString(char category, int& queryIndex, std::string& |
| // query); |
| |
| virtual bool verifyRS(SelectResultsPtr& resultset, int rowCount); |
| virtual bool verifySS(SelectResultsPtr& structset, int rowCount, |
| int fieldCount); |
| |
| void populateRangePositionData(RegionPtr& rptr, int start, int end); |
| bool compareTwoPositionObjects(SerializablePtr por1, SerializablePtr por2); |
| SerializablePtr getExactPositionObject(int iForExactPosObject); |
| void putExactPositionObject(RegionPtr& rptr, int iForExactPosObject); |
| SerializablePtr getCachedPositionObject(RegionPtr& rptr, |
| int iForExactPosObject); |
| |
| // utility methods |
| virtual int getPortfolioSetSize() { return portfolioSetSize; }; |
| virtual int getPortfolioNumSets() { return portfolioNumSets; }; |
| virtual int getPositionSetSize() { return positionSetSize; }; |
| virtual int getPositionNumSets() { return positionNumSets; }; |
| |
| bool isExpectedRowsConstantRS(int queryindex) { |
| for (int i = (sizeof(constantExpectedRowsRS) / sizeof(int)) - 1; i > -1; |
| i--) { |
| if (constantExpectedRowsRS[i] == queryindex) { |
| FWKINFO("index " << constantExpectedRowsRS[i] |
| << " is having constant rows "); |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| bool isExpectedRowsConstantSS(int queryindex) { |
| for (int i = (sizeof(constantExpectedRowsSS) / sizeof(int)) - 1; i > -1; |
| i--) { |
| if (constantExpectedRowsSS[i] == queryindex) { |
| FWKINFO("index " << constantExpectedRowsSS[i] |
| << " is having constant rows "); |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| bool isExpectedRowsConstantCQRS(int queryindex) { |
| for (int i = (sizeof(constantExpectedRowsCQRS) / sizeof(int)) - 1; i > -1; |
| i--) { |
| if (constantExpectedRowsCQRS[i] == queryindex) { |
| FWKINFO("index " << constantExpectedRowsCQRS[i] |
| << " is having constant rows "); |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| bool isExpectedRowsConstantPQRS(int queryindex) { |
| for (int i = (sizeof(constantExpectedRowsPQRS) / sizeof(int)) - 1; i > -1; |
| i--) { |
| if (constantExpectedRowsPQRS[i] == queryindex) { |
| printf("index %d is having constant rows \n", |
| constantExpectedRowsPQRS[i]); |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| bool isExpectedRowsConstantSSPQ(int queryindex) { |
| for (int i = (sizeof(constantExpectedRowsSSPQ) / sizeof(int)) - 1; i > -1; |
| i--) { |
| if (constantExpectedRowsSSPQ[i] == queryindex) { |
| printf("index %d is having constant rows \n", |
| constantExpectedRowsSSPQ[i]); |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| private: |
| int portfolioSetSize; |
| int portfolioNumSets; |
| int positionSetSize; |
| int positionNumSets; |
| int32_t objectSize ATTR_UNUSED; |
| }; |
| |
| QueryHelper* QueryHelper::singleton = NULL; |
| |
| //=========================================================================================== |
| |
| void QueryHelper::populateRangePositionData(RegionPtr& rptr, int start, |
| int end) { |
| for (int i = start; i <= end; i++) { |
| CacheablePtr pos(new Position(i)); |
| char key[100]; |
| ACE_OS::sprintf(key, "pos%d", i); |
| CacheableKeyPtr keyptr = CacheableKey::create(key); |
| rptr->put(keyptr, pos); |
| } |
| } |
| |
| bool QueryHelper::compareTwoPositionObjects(SerializablePtr pos1, |
| SerializablePtr pos2) { |
| Position* p1 = dynamic_cast<Position*>(pos1.ptr()); |
| Position* p2 = dynamic_cast<Position*>(pos2.ptr()); |
| |
| if (p1 == NULL || p2 == NULL) { |
| printf("ERROR: The object(s) passed are not of Portflio type\n"); |
| return false; |
| } |
| |
| DataOutput o1, o2; |
| p1->toData(o1); |
| p2->toData(o2); |
| |
| uint32_t len1 = o1.getBufferLength(); |
| uint32_t len2 = o2.getBufferLength(); |
| |
| if (len1 != len2) { |
| return false; |
| } |
| |
| const uint8_t* ptr1 = o1.getBuffer(); |
| const uint8_t* ptr2 = o2.getBuffer(); |
| |
| for (uint8_t i = 0; i < len1; i++) { |
| if (*ptr1++ != *ptr2++) { |
| return false; |
| } |
| } |
| return true; |
| } |
| |
| SerializablePtr QueryHelper::getExactPositionObject(int iForExactPosObject) { |
| CacheablePtr pos(new Position(iForExactPosObject)); |
| return pos; |
| } |
| |
| void QueryHelper::putExactPositionObject(RegionPtr& rptr, |
| int iForExactPosObject) { |
| char key[100]; |
| ACE_OS::sprintf(key, "pos%d", iForExactPosObject); |
| CacheableKeyPtr keyptr = CacheableKey::create(key); |
| CacheablePtr pos(new Position(iForExactPosObject)); |
| rptr->put(keyptr, pos); |
| } |
| |
| SerializablePtr QueryHelper::getCachedPositionObject(RegionPtr& rptr, |
| int iForExactPosObject) { |
| char key[100]; |
| ACE_OS::sprintf(key, "pos%d", iForExactPosObject); |
| CacheableKeyPtr keyptr = CacheableKey::create(key); |
| return rptr->get(keyptr); |
| } |
| |
| //=========================================================================================== |
| |
| void QueryHelper::populatePortfolioData(RegionPtr& rptr, int setSize, |
| int numSets, int32_t objSize) { |
| // lets reset the counter for uniform population of position objects |
| Position::resetCounter(); |
| CacheablePtr port; |
| CacheableKeyPtr keyport; |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| port = new Portfolio(current, objSize); |
| |
| char portname[100] = {0}; |
| ACE_OS::sprintf(portname, "port%d-%d", set, current); |
| |
| keyport = CacheableKey::create(portname); |
| rptr->put(keyport, port); |
| } |
| } |
| |
| FWKINFO("all puts done \n"); |
| } |
| void QueryHelper::populatePortfolio(RegionPtr& rptr, int maxKey, |
| int32_t objSize) { |
| // lets reset the counter for uniform population of position objects |
| Position::resetCounter(); |
| CacheablePtr port; |
| CacheableKeyPtr keyport; |
| for (int current = 0; current <= maxKey; current++) { |
| port = new Portfolio(current, objSize); |
| |
| char portname[1024] = {0}; |
| ACE_OS::sprintf(portname, "port%d-%d", current, current); |
| |
| keyport = CacheableKey::create(portname); |
| rptr->put(keyport, port); |
| } |
| |
| FWKINFO("All Portfolio puts done \n"); |
| } |
| |
| void QueryHelper::destroyPortfolioOrPositionData(RegionPtr& rptr, int setSize, |
| int numSets, |
| const char* dataType) { |
| CacheableKeyPtr keyport; |
| try { |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| char portname[100] = {0}; |
| if (strcmp(dataType, "Portfolio") == 0 || |
| strcmp(dataType, "PortfolioPdx") == 0 || |
| strcmp(dataType, "AutoPortfolioPdx") == 0) { |
| ACE_OS::sprintf(portname, "port%d-%d", set, current); |
| } else if (strcmp(dataType, "Position") == 0 || |
| strcmp(dataType, "PositionPdx") == 0 || |
| strcmp(dataType, "AutoPositionPdx") == 0) { |
| ACE_OS::sprintf(portname, "pos%d-%d", set, current); |
| } else { |
| throw apache::geode::client::IllegalArgumentException( |
| "Unknown object type"); |
| } |
| |
| keyport = CacheableKey::create(portname); |
| rptr->destroy(keyport); |
| } |
| } |
| } catch (Exception& e) { |
| FWKSEVERE("QueryHelper::destroyPortfolioOrPositionData Caught Exception: " |
| << e.getMessage()); |
| } |
| FWKINFO("destroy done \n"); |
| } |
| |
| void QueryHelper::invalidatePortfolioOrPositionData(RegionPtr& rptr, |
| int setSize, int numSets, |
| const char* dataType) { |
| try { |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| char portname[100] = {0}; |
| if (strcmp(dataType, "Portfolio") == 0) { |
| ACE_OS::sprintf(portname, "port%d-%d", set, current); |
| } else if (strcmp(dataType, "Position") == 0) { |
| ACE_OS::sprintf(portname, "pos%d-%d", set, current); |
| } |
| |
| CacheableKeyPtr keyport = CacheableKey::create(portname); |
| rptr->invalidate(keyport); |
| } |
| } |
| } catch (Exception& e) { |
| FWKSEVERE( |
| "QueryHelper::invalidatePortfolioOrPositionData Caught Exception: " |
| << e.getMessage()); |
| } |
| FWKINFO("Invalidation done \n"); |
| } |
| |
| const char* secIds[] = {"SUN", "IBM", "YHOO", "GOOG", "MSFT", |
| "AOL", "APPL", "ORCL", "SAP", "DELL"}; |
| |
| void QueryHelper::populatePositionData(RegionPtr& rptr, int setSize, |
| int numSets) { |
| int numSecIds = sizeof(secIds) / sizeof(char*); |
| CacheableKeyPtr keypos; |
| CacheablePtr pos; |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| pos = new Position(secIds[current % numSecIds], current * 100); |
| |
| char posname[100] = {0}; |
| ACE_OS::sprintf(posname, "pos%d-%d", set, current); |
| |
| keypos = CacheableKey::create(posname); |
| rptr->put(keypos, pos); |
| } |
| } |
| } |
| |
| void QueryHelper::populatePortfolioPdxData(RegionPtr& rptr, int setSize, |
| int numSets, int32_t objSize, |
| char** nm) { |
| // lets reset the counter for uniform population of position objects |
| testobject::PositionPdx::resetCounter(); |
| |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| CacheablePtr port(new testobject::PortfolioPdx(current, objSize)); |
| |
| char portname[100] = {0}; |
| ACE_OS::sprintf(portname, "port%d-%d", set, current); |
| |
| CacheableKeyPtr keyport = CacheableKey::create(portname); |
| |
| rptr->put(keyport, port); |
| LOGINFO("populatePortfolioPdxData:: Put for iteration current = %d done", |
| current); |
| } |
| } |
| // portfolioSetSize = setSize; portfolioNumSets = numSets; objectSize = |
| // objSize; |
| |
| printf("all puts done \n"); |
| } |
| |
| void QueryHelper::populatePositionPdxData(RegionPtr& rptr, int setSize, |
| int numSets) { |
| int numSecIds = sizeof(secIds) / sizeof(char*); |
| |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| CacheablePtr pos(new testobject::PositionPdx(secIds[current % numSecIds], |
| current * 100)); |
| |
| char posname[100] = {0}; |
| ACE_OS::sprintf(posname, "pos%d-%d", set, current); |
| |
| CacheableKeyPtr keypos = CacheableKey::create(posname); |
| rptr->put(keypos, pos); |
| LOGINFO("populatePositionPdxData:: Put for iteration current = %d done", |
| current); |
| } |
| } |
| // positionSetSize = setSize; positionNumSets = numSets; |
| } |
| void QueryHelper::populateAutoPortfolioPdxData(RegionPtr& rptr, int setSize, |
| int numSets, int32_t objSize, |
| char** nm) { |
| // lets reset the counter for uniform population of position objects |
| AutoPdxTests::PositionPdx::resetCounter(); |
| |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| CacheablePtr port(new AutoPdxTests::PortfolioPdx(current, objSize)); |
| |
| char portname[100] = {0}; |
| ACE_OS::sprintf(portname, "port%d-%d", set, current); |
| |
| CacheableKeyPtr keyport = CacheableKey::create(portname); |
| |
| rptr->put(keyport, port); |
| LOGINFO( |
| "populateAutoPortfolioPdxData:: Put for iteration current = %d done", |
| current); |
| } |
| } |
| // portfolioSetSize = setSize; portfolioNumSets = numSets; objectSize = |
| // objSize; |
| |
| printf("all puts done \n"); |
| } |
| |
| void QueryHelper::populateAutoPositionPdxData(RegionPtr& rptr, int setSize, |
| int numSets) { |
| int numSecIds = sizeof(secIds) / sizeof(char*); |
| |
| for (int set = 1; set <= numSets; set++) { |
| for (int current = 1; current <= setSize; current++) { |
| CacheablePtr pos(new AutoPdxTests::PositionPdx( |
| secIds[current % numSecIds], current * 100)); |
| |
| char posname[100] = {0}; |
| ACE_OS::sprintf(posname, "pos%d-%d", set, current); |
| |
| CacheableKeyPtr keypos = CacheableKey::create(posname); |
| rptr->put(keypos, pos); |
| LOGINFO( |
| "populateAutoPositionPdxData:: Put for iteration current = %d done", |
| current); |
| } |
| } |
| // positionSetSize = setSize; positionNumSets = numSets; |
| } |
| bool QueryHelper::verifyRS(SelectResultsPtr& resultSet, int expectedRows) { |
| if (!instanceOf<ResultSetPtr>(resultSet)) { |
| return false; |
| } |
| |
| ResultSetPtr rsptr = staticCast<ResultSetPtr>(resultSet); |
| |
| int foundRows = 0; |
| |
| SelectResultsIterator iter = rsptr->getIterator(); |
| |
| for (int32_t rows = 0; rows < rsptr->size(); rows++) { |
| SerializablePtr ser = (*rsptr)[rows]; // iter.next(); |
| foundRows++; |
| } |
| |
| FWKINFO("found rows " << foundRows << " expected " << expectedRows); |
| if (foundRows == expectedRows) return true; |
| |
| return false; |
| } |
| |
| bool QueryHelper::verifySS(SelectResultsPtr& structSet, int expectedRows, |
| int expectedFields) { |
| FWKINFO("QueryHelper::verifySS : expectedRows = " |
| << expectedRows << " ,expectedFields = " << expectedFields); |
| |
| if (!instanceOf<StructSetPtr>(structSet)) { |
| if (expectedRows == 0 && expectedFields == 0) { |
| return true; // quite possible we got a null set back. |
| } |
| FWKINFO("we have structSet itself NULL"); |
| return false; |
| } |
| |
| StructSetPtr ssptr = staticCast<StructSetPtr>(structSet); |
| |
| int foundRows = 0; |
| |
| SelectResultsIterator iter = ssptr->getIterator(); |
| |
| for (int32_t rows = 0; rows < ssptr->size(); rows++) { |
| SerializablePtr ser = (*ssptr)[rows]; // iter.next(); |
| foundRows++; |
| |
| Struct* siptr = dynamic_cast<Struct*>(ser.ptr()); |
| |
| if (siptr == NULL) { |
| LOGINFO("siptr is NULL \n\n"); |
| return false; |
| } |
| |
| int foundFields = 0; |
| |
| for (int32_t cols = 0; cols < siptr->length(); cols++) { |
| SerializablePtr field = (*siptr)[cols]; // siptr->next(); |
| foundFields++; |
| } |
| |
| if (foundFields != expectedFields) { |
| char buffer[1024] = {'\0'}; |
| sprintf(buffer, "found fields %d, expected fields %d \n", foundFields, |
| expectedFields); |
| FWKSEVERE(buffer); |
| return false; |
| } |
| } |
| |
| if (foundRows == expectedRows) { |
| FWKINFO("found rows " << foundRows << " expected " << expectedRows); |
| return true; |
| } |
| |
| // lets log and return in case of error only situation |
| char buffer[1024] = {'\0'}; |
| sprintf(buffer, "found rows %d, expected rows %d\n", foundRows, expectedRows); |
| FWKSEVERE(buffer); |
| return false; |
| } |
| |
| |
| #endif // APACHE_GEODE_GUARD_f57a1f9a1b1286d041f077ee231e8637 |