On Fri, Nov 13, 2015 at 1:46 PM, Big Mike <newocu...@gmail.com> wrote:
> Writing a Foreign Data Wrapper and interested in isolating the WHERE > clause to speed up the access of an indexed file on my filesystem. I'm > attempting to understand the inner workings of how the data is retrieved so > I'm writing code to just handle one case at the moment: WHERE clause on a > single column in the foreign 'table'. > > SELECT * FROM t WHERE testval = 1 > > I have this code so far, an implementation of the IterateForeignScan > interface. > > static TupleTableSlot * > bIterateForeignScan(ForeignScanState *node) { > ... > RestrictInfo *rinfo = (RestrictInfo *)node->ss.ps.qual; > ... > } > > yet am not familiar with what I need to do to pick apart RestrictInfo in > order to gather 'testvar', '=', and '1' separately so I can interpret and > pass those through to my file parser. > > Am I going about this the correct way or is there another path I should > follow? > I would look at http://multicorn.org/ which gives you a working python framework. You subclass their ForeignDataWrapper class, override the __init__() and execute() functions, and that's about it. The execute() function has a list called quals that would set you up for the filtering you want to do. I would get the foreign data wrapper fully debugged this way before attempting to refactor in C. And when you do finally re-code, you can see what multicorn itself did to implement your filters.