Returns the row specified by a given index from the current bucket in the event cache.
getCache (cacheName, index )
cacheName | The name of the event cache. |
index | Row index in the event cache as an integer. |
Returns the row specified by a given index from the current bucket in the event cache. This index is 0 based. The function takes the name of the event cache and an integer as its arguments, and returns a row from the event cache. Specifying an invalid index parameter generates a bad record.
This example obtains the top 3 distinct prices per trading symbol. In order to accomplish this task, the example makes use of the getCache(), cacheSize() and deleteCache() functions.
CREATE SCHEMA TradesSchema ( Id integer, TradeTime date, Venue string, Symbol string, Price float, Shares integer ) ; CREATE INPUT WINDOW QTrades SCHEMA TradesSchema PRIMARY KEY (Id) ; CREATE FLEX flexOp IN QTrades OUT OUTPUT WINDOW QTradesStats SCHEMA TradesSchema PRIMARY KEY(Symbol,Price) BEGIN DECLARE typedef [integer Id;| date TradeTime; string Venue; string Symbol; float Price; integer Shares] QTradesRecType; eventCache(QTrades[Symbol], manual, Price asc) tradesCache; typeof(QTrades) insertIntoCache( typeof(QTrades) qTrades ) { integer counter := 0; typeof (QTrades) rec; long cacheSz := cacheSize(tradesCache); while (counter < cacheSz) { rec := getCache( tradesCache, counter ); if( round(rec.Price,2) = round(qTrades.Price,2) ) { deleteCache(tradesCache, counter); insertCache( tradesCache, qTrades ); return rec; break; } else if( qTrades.Price < rec.Price) { break; } counter++; } if(cacheSz < 3) { insertCache(tradesCache, qTrades); return qTrades; } else { rec := getCache(tradesCache, 0); deleteCache(tradesCache, 0); insertCache(tradesCache, qTrades); return rec; } return null; } END; ON QTrades { keyCache( tradesCache, [Symbol=QTrades.Symbol;|] ); typeof(QTrades) rec := insertIntoCache( QTrades ); if(rec.Id) { if(rec.Id <> QTrades.Id) { output setOpcode(rec, delete); } output setOpcode(QTrades, upsert); } }; END;