| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 1 | package Krawfish::Query::Reference; |
| 2 | use parent 'Krawfish::Query'; | ||||
| 3 | use Krawfish::Log; | ||||
| 4 | use strict; | ||||
| 5 | use warnings; | ||||
| 6 | |||||
| 7 | # TODO: | ||||
| 8 | # This is not an actual query, | ||||
| 9 | # but a pointer to a query buffer. | ||||
| 10 | # | ||||
| 11 | # Maybe use a Util::MultiBuffer | ||||
| Akron | ae3f337 | 2017-02-03 20:40:48 +0100 | [diff] [blame] | 12 | |
| 13 | # Support a BufferedRef query mechanism, | ||||
| 14 | # that will be used for identical subqueries. | ||||
| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 15 | # This is especially important for filtering. |
| Akron | ae3f337 | 2017-02-03 20:40:48 +0100 | [diff] [blame] | 16 | # This Buffered Reference supports multiple |
| 17 | # fingers at different positions in the query. | ||||
| 18 | |||||
| 19 | # The ring buffer query is well suited for this. | ||||
| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 20 | |
| Akron | a588d07 | 2017-10-13 14:45:34 +0200 | [diff] [blame] | 21 | # Constructor |
| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 22 | sub new { |
| 23 | my $class = shift; | ||||
| 24 | |||||
| 25 | # This is a buffered query | ||||
| 26 | my $query = shift; | ||||
| 27 | |||||
| 28 | # Get signature | ||||
| 29 | my $sig = $query->signature; | ||||
| 30 | bless { | ||||
| 31 | query => shift, | ||||
| 32 | }, $class; | ||||
| Akron | ae3f337 | 2017-02-03 20:40:48 +0100 | [diff] [blame] | 33 | }; |
| 34 | |||||
| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 35 | |
| Akron | a588d07 | 2017-10-13 14:45:34 +0200 | [diff] [blame] | 36 | # Clone query |
| Akron | 290f59f | 2017-08-17 21:55:07 +0200 | [diff] [blame] | 37 | sub clone { |
| 38 | ... | ||||
| 39 | }; | ||||
| Akron | b765367 | 2017-08-07 14:34:14 +0200 | [diff] [blame] | 40 | |
| Akron | a588d07 | 2017-10-13 14:45:34 +0200 | [diff] [blame] | 41 | |
| 42 | # Move to next posting | ||||
| Akron | 290f59f | 2017-08-17 21:55:07 +0200 | [diff] [blame] | 43 | sub next { |
| 44 | ... | ||||
| 45 | }; | ||||
| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 46 | |
| Akron | ae3f337 | 2017-02-03 20:40:48 +0100 | [diff] [blame] | 47 | |
| Akron | a588d07 | 2017-10-13 14:45:34 +0200 | [diff] [blame] | 48 | # Stringification |
| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 49 | sub to_string { |
| 50 | my $self = shift; | ||||
| 51 | }; | ||||
| 52 | |||||
| Akron | a588d07 | 2017-10-13 14:45:34 +0200 | [diff] [blame] | 53 | |
| 54 | # Get maximum frequency | ||||
| Akron | 290f59f | 2017-08-17 21:55:07 +0200 | [diff] [blame] | 55 | sub max_freq { |
| 56 | ... | ||||
| 57 | }; | ||||
| Akron | faf7685 | 2017-07-19 17:37:07 +0200 | [diff] [blame] | 58 | |
| Akron | 15fc197 | 2017-07-20 22:53:00 +0200 | [diff] [blame] | 59 | |
| Akron | a588d07 | 2017-10-13 14:45:34 +0200 | [diff] [blame] | 60 | # Filter query by VC |
| Akron | 290f59f | 2017-08-17 21:55:07 +0200 | [diff] [blame] | 61 | sub filter_by { |
| 62 | ... | ||||
| 63 | }; | ||||
| 64 | |||||
| 65 | |||||
| Akron | 965f5d9 | 2017-01-20 18:38:08 +0100 | [diff] [blame] | 66 | 1; |