Introduced stored fields
diff --git a/lib/Krawfish/Koral/Document/FieldInt.pm b/lib/Krawfish/Koral/Document/FieldInt.pm
index c7ebe6f..71f4967 100644
--- a/lib/Krawfish/Koral/Document/FieldInt.pm
+++ b/lib/Krawfish/Koral/Document/FieldInt.pm
@@ -1,14 +1,15 @@
package Krawfish::Koral::Document::FieldInt;
use Krawfish::Util::String qw/squote/;
+# TODO:
+# Probably use Krawfish::Koral::Meta::Type::KeyID and
+# Krawfish::Koral::Meta::Type::Key.
use warnings;
use strict;
sub new {
my $class = shift;
- bless {
- key => shift,
- value => shift
- }, $class;
+ # key, value, key_id, key_value_id
+ bless { @_ }, $class;
};
sub type {
@@ -35,6 +36,8 @@
sub identify {
my ($self, $dict) = @_;
+ return if $self->{key_id};
+
my $key = '!' . $self->{key};
my $term = '+' . $self->{key} . ':' . $self->{value};
@@ -67,12 +70,16 @@
};
+sub inflate {
+ ...
+};
+
sub to_string {
my $self = shift;
unless ($self->{key_id}) {
return squote($self->{key}) . '=' . $self->{value};
};
- return $self->{key_id} . '=' . $self->{key_value_id} . '(' . $self->{value} . ')';
+ return '#' . $self->{key_id} . '=' . '#' . $self->{key_value_id} . '(' . $self->{value} . ')';
};
diff --git a/lib/Krawfish/Koral/Document/FieldStore.pm b/lib/Krawfish/Koral/Document/FieldStore.pm
new file mode 100644
index 0000000..76c8c97
--- /dev/null
+++ b/lib/Krawfish/Koral/Document/FieldStore.pm
@@ -0,0 +1,67 @@
+package Krawfish::Koral::Document::FieldStore;
+use Krawfish::Util::String qw/squote/;
+use warnings;
+use strict;
+
+# Class for store-only fields
+# (not indexed in the dictionary)
+
+sub new {
+ my $class = shift;
+ # key, value
+ bless { @_ }, $class;
+};
+
+sub type {
+ 'store'
+};
+
+
+sub key {
+ $_[0]->{key};
+};
+
+sub key_id {
+ $_[0]->{key_id};
+};
+
+sub term_id {
+ # There is no term_id, but it's required for sorting
+ undef;
+};
+
+sub value {
+ $_[0]->{value};
+};
+
+sub identify {
+ my ($self, $dict) = @_;
+
+ my $key = '!' . $self->{key};
+
+ # Get key term_id
+ # TODO:
+ # Add new method that introduces the term
+ # in case it doesn't exist
+ my $key_id = $dict->term_id_by_term($key);
+
+ # Not given yet
+ if (defined $key_id) {
+ $self->{key_id} = $key_id;
+ }
+
+ else {
+ $self->{key_id} = $dict->add_term($key);
+ };
+ return $self;
+};
+
+
+sub to_string {
+ my $self = shift;
+ my $str = $self->{key_id} ? '#' . $self->{key_id} : squote($self->{key});
+ return $str . '=' . squote($self->{value});
+};
+
+
+1;
diff --git a/lib/Krawfish/Koral/Document/FieldString.pm b/lib/Krawfish/Koral/Document/FieldString.pm
index a93035a..1a1c296 100644
--- a/lib/Krawfish/Koral/Document/FieldString.pm
+++ b/lib/Krawfish/Koral/Document/FieldString.pm
@@ -3,12 +3,12 @@
use warnings;
use strict;
+# Class for string fields
+
sub new {
my $class = shift;
- bless {
- key => shift,
- value => shift
- }, $class;
+ # key, value
+ bless { @_ }, $class;
};
@@ -68,7 +68,7 @@
unless ($self->{key_id}) {
return squote($self->{key}) . '=' . squote($self->{value});
};
- return $self->{key_id} . '=' . $self->{key_value_id};
+ return '#' . $self->{key_id} . '=' . '#' . $self->{key_value_id};
};
1;
diff --git a/lib/Krawfish/Koral/Document/Fields.pm b/lib/Krawfish/Koral/Document/Fields.pm
index 0cdb964..4c13c57 100644
--- a/lib/Krawfish/Koral/Document/Fields.pm
+++ b/lib/Krawfish/Koral/Document/Fields.pm
@@ -1,6 +1,7 @@
package Krawfish::Koral::Document::Fields;
use Krawfish::Koral::Document::FieldString;
use Krawfish::Koral::Document::FieldInt;
+use Krawfish::Koral::Document::FieldStore;
use warnings;
use strict;
@@ -14,7 +15,10 @@
my ($key, $value) = @_;
# This may be an integer value
- push @$self, Krawfish::Koral::Document::FieldString->new($key, $value);
+ push @$self, Krawfish::Koral::Document::FieldString->new(
+ key => $key,
+ value => $value
+ );
};
@@ -23,7 +27,22 @@
my ($key, $value) = @_;
# This may be an integer value
- push @$self, Krawfish::Koral::Document::FieldInt->new($key, $value);
+ push @$self, Krawfish::Koral::Document::FieldInt->new(
+ key => $key,
+ value => $value
+ );
+};
+
+
+sub add_store {
+ my $self = shift;
+ my ($key, $value) = @_;
+
+ # This may be an integer value
+ push @$self, Krawfish::Koral::Document::FieldStore->new(
+ key => $key,
+ value => $value
+ );
};