C++ 示例:分隔解析器和块分割器
ExampleDelimitedUDChunker
类在分隔符处划分输入。您可以将此块分割器与任何理解分隔输入的解析器一起使用。 ExampleDelimitedParser
是一个使用这个块分割器的 ContinuousUDParser
子类。
加载和使用示例
按如下所示加载并使用示例。
=> CREATE LIBRARY ExampleDelimitedParserLib AS '/home/dbadmin/EDP.so';
=> CREATE PARSER ExampleDelimitedParser AS
LANGUAGE 'C++' NAME 'DelimitedParserFrameworkExampleFactory'
LIBRARY ExampleDelimitedParserLib;
=> COPY t FROM stdin WITH PARSER ExampleDelimitedParser();
0
1
2
3
4
5
6
7
8
9
\.
块分割器实施
该块分割器支持分摊加载。alignPortion()
方法在当前部分找到第一个完整记录的开头,并将输入缓冲区与其对齐。记录终止符作为实参传递并在构造函数中设置。
process()
方法必须考虑跨越部分边界的块。如果之前的调用在某个部分的末尾,则该方法设置一个标志。代码首先检查并处理该条件。逻辑与 alignPortion()
类似,所以示例调用它来做部分除法。
现在,该方法查找分隔符。如果输入从一个部分的末尾开始,它会设置标志。
最后,process()
移动输入偏移量并返回。
工厂实施
文件 ExampleDelimitedParser.cpp
定义了一个使用此 UDChunker
的工厂。块分割器支持分摊加载,因此工厂实施 isChunkerApportionable()
:
prepareChunker()
方法创建块分割器: