Mailing List Archive

r3706 - in trunk: c_src/KinoSearch c_src/KinoSearch/Index c_src/KinoSearch/Search perl/lib perl/lib/KinoSearch perl/lib/KinoSearch/Index
Author: creamyg
Date: 2008-08-03 12:04:36 -0700 (Sun, 03 Aug 2008)
New Revision: 3706

Modified:
trunk/c_src/KinoSearch/Index/DelDocs.c
trunk/c_src/KinoSearch/Index/DocReader.c
trunk/c_src/KinoSearch/Index/DocWriter.c
trunk/c_src/KinoSearch/Index/FilePurger.c
trunk/c_src/KinoSearch/Index/IndexReader.bp
trunk/c_src/KinoSearch/Index/IndexReader.c
trunk/c_src/KinoSearch/Index/LexReader.c
trunk/c_src/KinoSearch/Index/LexWriter.c
trunk/c_src/KinoSearch/Index/MultiReader.c
trunk/c_src/KinoSearch/Index/PostingsWriter.c
trunk/c_src/KinoSearch/Index/SegDataReader.bp
trunk/c_src/KinoSearch/Index/SegDataReader.c
trunk/c_src/KinoSearch/Index/SegLexCache.c
trunk/c_src/KinoSearch/Index/SegLexicon.c
trunk/c_src/KinoSearch/Index/SegPostingList.c
trunk/c_src/KinoSearch/Index/SegReader.c
trunk/c_src/KinoSearch/Index/SegWriter.c
trunk/c_src/KinoSearch/Index/TermVectorsReader.c
trunk/c_src/KinoSearch/Index/TermVectorsWriter.c
trunk/c_src/KinoSearch/InvIndex.bp
trunk/c_src/KinoSearch/InvIndex.c
trunk/c_src/KinoSearch/InvIndexer.c
trunk/c_src/KinoSearch/Schema.bp
trunk/c_src/KinoSearch/Schema.c
trunk/c_src/KinoSearch/Search/PhraseQuery.c
trunk/c_src/KinoSearch/Search/RequiredOptionalQuery.c
trunk/c_src/KinoSearch/Searcher.c
trunk/perl/lib/KinoSearch.pm
trunk/perl/lib/KinoSearch/Index/SegDataReader.pm
trunk/perl/lib/KinoSearch/InvIndex.pm
Log:
Use accessors rather than direct access for getting at InvIndex's members.
Kill off some hand-rolled XS in SegDataReader.


Modified: trunk/c_src/KinoSearch/Index/DelDocs.c
===================================================================
--- trunk/c_src/KinoSearch/Index/DelDocs.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/DelDocs.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -59,16 +59,16 @@
return;
}
else {
+ Folder *folder = InvIndex_Get_Folder(self->invindex);
CharBuf *filename = CB_newf("%o-%i32.del",
SegInfo_Get_Seg_Name(self->seg_info), self->del_gen);
- if (!Folder_File_Exists(self->invindex->folder, filename)) {
+ if (!Folder_File_Exists(folder, filename)) {
CharBuf *mess = MAKE_MESS("file '%o' is not available", filename);
REFCOUNT_DEC(filename);
Carp_do_confess(mess);
}
else {
- InStream *instream
- = Folder_Open_InStream(self->invindex->folder, filename);
+ InStream *instream = Folder_Open_InStream(folder, filename);
size_t byte_size = (size_t)InStream_Length(instream);
u32_t new_max = byte_size * 8 - 1;

@@ -99,7 +99,8 @@
self->del_gen++;
filename = CB_newf("%o-%i32.del", SegInfo_Get_Seg_Name(self->seg_info),
self->del_gen);
- outstream = Folder_Open_OutStream(self->invindex->folder, filename);
+ outstream = Folder_Open_OutStream(InvIndex_Get_Folder(self->invindex),
+ filename);
REFCOUNT_DEC(filename);

/* Make sure that we have 1 bit for each doc in segment, plus 1. */

Modified: trunk/c_src/KinoSearch/Index/DocReader.c
===================================================================
--- trunk/c_src/KinoSearch/Index/DocReader.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/DocReader.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -20,6 +20,7 @@
DocReader*
DocReader_init(DocReader *self, InvIndex *invindex, SegInfo *seg_info)
{
+ Folder *folder = InvIndex_Get_Folder(invindex);
CharBuf *filename = CB_Clone(seg_info->seg_name);
Hash *metadata = (Hash*)SegInfo_Extract_Metadata(seg_info, "doc_storage", 11);
i32_t format = (i32_t)Hash_Fetch_I64(metadata, "format", 6);
@@ -33,9 +34,9 @@

/* Get streams. */
CB_Cat_Trusted_Str(filename, ".ds", 3);
- self->ds_in = Folder_Open_InStream(invindex->folder, filename);
+ self->ds_in = Folder_Open_InStream(folder, filename);
CB_Cat_Trusted_Str(filename, "x", 1);
- self->dsx_in = Folder_Open_InStream(invindex->folder, filename);
+ self->dsx_in = Folder_Open_InStream(folder, filename);
REFCOUNT_DEC(filename);

return self;

Modified: trunk/c_src/KinoSearch/Index/DocWriter.c
===================================================================
--- trunk/c_src/KinoSearch/Index/DocWriter.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/DocWriter.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -26,6 +26,7 @@
DocWriter*
DocWriter_init(DocWriter *self, InvIndex *invindex, SegInfo *seg_info)
{
+ Folder *folder = InvIndex_Get_Folder(invindex);
CharBuf *filename = CB_Clone(seg_info->seg_name);

/* Init. */
@@ -33,9 +34,9 @@

/* Get streams. */
CB_Cat_Trusted_Str(filename, ".ds", 3);
- self->ds_out = Folder_Open_OutStream(invindex->folder, filename);
+ self->ds_out = Folder_Open_OutStream(folder, filename);
CB_Cat_Trusted_Str(filename, "x", 1);
- self->dsx_out = Folder_Open_OutStream(invindex->folder, filename);
+ self->dsx_out = Folder_Open_OutStream(folder, filename);
REFCOUNT_DEC(filename);

/* Go past non-doc #0. */

Modified: trunk/c_src/KinoSearch/Index/FilePurger.c
===================================================================
--- trunk/c_src/KinoSearch/Index/FilePurger.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/FilePurger.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -74,8 +74,8 @@
discover_unused_files(FilePurger *self)
{
LockFactory *lock_factory = self->lock_factory;
- Schema *schema = self->invindex->schema;
- Folder *folder = self->invindex->folder;
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
+ Folder *folder = InvIndex_Get_Folder(self->invindex);
VArray *files = Folder_List_Real_Files(folder);
VArray *snapshots = VA_new(1);
VArray *unused;

Modified: trunk/c_src/KinoSearch/Index/IndexReader.bp
===================================================================
--- trunk/c_src/KinoSearch/Index/IndexReader.bp 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/IndexReader.bp 2008-08-03 19:04:36 UTC (rev 3706)
@@ -159,6 +159,15 @@
void Release_Read_Lock(IndexReader *self);
void Release_Commit_Lock(IndexReader *self);

+ InvIndex*
+ Get_InvIndex(IndexReader *self);
+
+ Schema*
+ Get_Schema(IndexReader *self);
+
+ Folder*
+ Get_Folder(IndexReader *self);
+
void
Destroy(IndexReader *self);
}

Modified: trunk/c_src/KinoSearch/Index/IndexReader.c
===================================================================
--- trunk/c_src/KinoSearch/Index/IndexReader.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/IndexReader.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -13,6 +13,7 @@
#include "KinoSearch/FieldSpec.h"
#include "KinoSearch/InvIndex.h"
#include "KinoSearch/Schema.h"
+#include "KinoSearch/Store/Folder.h"
#include "KinoSearch/Store/LockFactory.h"
#include "KinoSearch/Store/Lock.h"
#include "KinoSearch/Store/SharedLock.h"
@@ -56,7 +57,8 @@
Lexicon *lexicon;

/* Enforce 1 value per field constraint. */
- fspec = Schema_Fetch_FSpec(self->invindex->schema, field_name);
+ fspec = Schema_Fetch_FSpec(
+ InvIndex_Get_Schema(self->invindex), field_name);
if (!fspec->indexed || fspec->analyzed) {
CONFESS("%o' is not an indexed, un-analyzed field", field_name);
}
@@ -153,6 +155,16 @@
}
}

+InvIndex*
+IxReader_get_invindex(IndexReader *self)
+ { return self->invindex; }
+Schema*
+IxReader_get_schema(IndexReader *self)
+ { return InvIndex_Get_Schema(self->invindex); }
+Folder*
+IxReader_get_folder(IndexReader *self)
+ { return InvIndex_Get_Folder(self->invindex); }
+
void
IxReader_close(IndexReader *self)
{

Modified: trunk/c_src/KinoSearch/Index/LexReader.c
===================================================================
--- trunk/c_src/KinoSearch/Index/LexReader.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/LexReader.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -22,14 +22,15 @@
{
u32_t i;
SegLexicon **lexicons;
+ Schema *schema = InvIndex_Get_Schema(invindex);

/* Init. */
SegDataReader_init((SegDataReader*)self, invindex, seg_info);

/* Derive. */
- self->num_fields = Schema_Num_Fields(invindex->schema);
- self->index_interval = invindex->schema->index_interval;
- self->skip_interval = invindex->schema->skip_interval;
+ self->num_fields = Schema_Num_Fields(schema);
+ self->index_interval = Schema_Get_Index_Interval(schema);
+ self->skip_interval = Schema_Get_Skip_Interval(schema);

/* Build an array of SegLexicon objects. */
lexicons = CALLOCATE(self->num_fields, SegLexicon*);

Modified: trunk/c_src/KinoSearch/Index/LexWriter.c
===================================================================
--- trunk/c_src/KinoSearch/Index/LexWriter.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/LexWriter.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -22,12 +22,14 @@
LexWriter_init(LexWriter *self, InvIndex *invindex, SegInfo *seg_info,
i32_t is_index)
{
+ Schema *schema = InvIndex_Get_Schema(invindex);
+
SegDataWriter_init((SegDataWriter*)self, invindex, seg_info);

/* Assign. */
self->is_index = is_index;
- self->index_interval = invindex->schema->index_interval;
- self->skip_interval = invindex->schema->skip_interval;
+ self->index_interval = Schema_Get_Index_Interval(schema);
+ self->skip_interval = Schema_Get_Skip_Interval(schema);

/* Init. */
self->outstream = NULL;
@@ -108,8 +110,8 @@
CB_setf(self->filename, "%o-%i32.lex",
SegInfo_Get_Seg_Name(self->seg_info), field_num);
if (self->is_index) CB_Cat_Trusted_Str(self->filename, "x", 1);
- self->outstream
- = Folder_Open_OutStream(self->invindex->folder, self->filename);
+ self->outstream = Folder_Open_OutStream(
+ InvIndex_Get_Folder(self->invindex), self->filename);

/* Initialize count, TermInfo and last term text. */
self->count = 0;

Modified: trunk/c_src/KinoSearch/Index/MultiReader.c
===================================================================
--- trunk/c_src/KinoSearch/Index/MultiReader.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/MultiReader.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -123,7 +123,8 @@
MultiLexicon *lexicon = NULL;

if (field != NULL) {
- FieldSpec *fspec = Schema_Fetch_FSpec(self->invindex->schema, field);
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
+ FieldSpec *fspec = Schema_Fetch_FSpec(schema, field);
if (fspec != NULL) {
LexCache *lex_cache = (LexCache*)Hash_Fetch(self->lex_caches,
field);
@@ -143,7 +144,8 @@
MultiReader_posting_list(MultiReader *self, const CharBuf *field,
kino_Obj *target)
{
- FieldSpec *fspec = Schema_Fetch_FSpec(self->invindex->schema, field);
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
+ FieldSpec *fspec = Schema_Fetch_FSpec(schema, field);

/* Only return an object if we've got an indexed field. */
if (fspec != NULL && fspec->indexed) {

Modified: trunk/c_src/KinoSearch/Index/PostingsWriter.c
===================================================================
--- trunk/c_src/KinoSearch/Index/PostingsWriter.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/PostingsWriter.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -55,6 +55,8 @@
PostWriter_init(PostingsWriter *self, InvIndex *invindex, SegInfo *seg_info,
LexWriter *lex_writer, chy_u32_t mem_thresh)
{
+ Schema *schema = InvIndex_Get_Schema(invindex);
+ Folder *folder = InvIndex_Get_Folder(invindex);
u32_t arena_size = mem_thresh < 0x1000000 ? mem_thresh : 0x1000000;

SegDataWriter_init((SegDataWriter*)self, invindex, seg_info);
@@ -66,7 +68,7 @@
: LexWriter_new(invindex, seg_info, false);

/* Init. */
- self->post_pools = VA_new(Schema_Num_Fields(invindex->schema));
+ self->post_pools = VA_new(Schema_Num_Fields(schema));
self->skip_stream = NULL;
self->skip_stepper = SkipStepper_new();
self->mem_pool = MemPool_new(arena_size);
@@ -78,10 +80,8 @@
= CB_newf("%o.lextemp", SegInfo_Get_Seg_Name(seg_info));
self->post_tempname
= CB_newf("%o.ptemp", SegInfo_Get_Seg_Name(seg_info));
- self->lex_outstream = Folder_Open_OutStream(self->invindex->folder,
- self->lex_tempname);
- self->post_outstream = Folder_Open_OutStream(self->invindex->folder,
- self->post_tempname);
+ self->lex_outstream = Folder_Open_OutStream(folder, self->lex_tempname);
+ self->post_outstream = Folder_Open_OutStream(folder, self->post_tempname);

return self;
}
@@ -106,7 +106,7 @@
static void
init_posting_pool(PostingsWriter *self, const CharBuf *field_name)
{
- Schema *schema = self->invindex->schema;
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
i32_t field_num = SegInfo_Field_Num(self->seg_info, field_name);
VArray *field_post_pools = (VArray*)VA_Fetch(self->post_pools, field_num);
PostingPool *post_pool = PostPool_new(schema, field_name, self->mem_pool);
@@ -187,7 +187,7 @@
CharBuf *filename = CB_newf("%o.skip",
SegInfo_Get_Seg_Name(self->seg_info));
self->skip_stream = Folder_Open_OutStream(
- self->invindex->folder, filename);
+ InvIndex_Get_Folder(self->invindex), filename);
REFCOUNT_DEC(filename);
}

@@ -354,7 +354,7 @@
/* Don't bother unless there's actually content. */
if (PostPoolQ_Peek(pool_q) != NULL) {
LexWriter *lex_writer = self->lex_writer;
- Folder *folder = self->invindex->folder;
+ Folder *folder = InvIndex_Get_Folder(self->invindex);
OutStream *post_stream = NULL;
OutStream *skip_stream = self->skip_stream;
CharBuf *filename = CB_newf("%o-%i32.p",
@@ -394,11 +394,11 @@
PostWriter_add_segment(PostingsWriter *self, SegReader *reader,
IntMap *doc_map)
{
- Folder *other_folder = reader->invindex->folder;
+ Folder *other_folder = SegReader_Get_Folder(reader);
SegInfo *other_seg_info = reader->seg_info;
u32_t i;
VArray *post_pools = self->post_pools;
- Schema *schema = self->invindex->schema;
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
SegInfo *seg_info = self->seg_info;
VArray *all_fields = Schema_All_Fields(schema);

@@ -438,7 +438,7 @@
void
PostWriter_finish(PostingsWriter *self)
{
- Folder *folder = self->invindex->folder;
+ Folder *folder = InvIndex_Get_Folder(self->invindex);
u32_t i;
Hash *metadata = Hash_new(0);


Modified: trunk/c_src/KinoSearch/Index/SegDataReader.bp
===================================================================
--- trunk/c_src/KinoSearch/Index/SegDataReader.bp 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/SegDataReader.bp 2008-08-03 19:04:36 UTC (rev 3706)
@@ -13,6 +13,9 @@
static SegDataReader*
init(SegDataReader *self, InvIndex *invindex, SegInfo *seg_info);

+ InvIndex*
+ Get_InvIndex(SegDataReader *self);
+
/** Release external resources, e.g. streams.
* Implementations must be safe for multiple calls.
*/

Modified: trunk/c_src/KinoSearch/Index/SegDataReader.c
===================================================================
--- trunk/c_src/KinoSearch/Index/SegDataReader.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/SegDataReader.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -3,6 +3,8 @@
#include "KinoSearch/Index/SegDataReader.h"
#include "KinoSearch/InvIndex.h"
#include "KinoSearch/Index/SegInfo.h"
+#include "KinoSearch/Schema.h"
+#include "KinoSearch/Store/Folder.h"
#include "KinoSearch/Util/Native.h"

SegDataReader*
@@ -14,6 +16,10 @@
return self;
}

+InvIndex*
+SegDataReader_get_invindex(SegDataReader *self)
+ { return self->invindex; }
+
void
SegDataReader_destroy(SegDataReader *self)
{

Modified: trunk/c_src/KinoSearch/Index/SegLexCache.c
===================================================================
--- trunk/c_src/KinoSearch/Index/SegLexCache.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/SegLexCache.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -19,7 +19,9 @@
bool_t
SegLexCache_valid(InvIndex *invindex, SegInfo *seg_info, const CharBuf *field)
{
- FieldSpec *fspec = Schema_Fetch_FSpec(invindex->schema, field);
+ Schema *schema = InvIndex_Get_Schema(invindex);
+ Folder *folder = InvIndex_Get_Folder(invindex);
+ FieldSpec *fspec = Schema_Fetch_FSpec(schema, field);

if ( !fspec || !fspec->indexed ) {
/* If the field isn't indexed, bail out. */
@@ -30,7 +32,7 @@
i32_t field_num = SegInfo_Field_Num(seg_info, field);
CharBuf *filename = CB_newf("%o-%i32.lexx",
SegInfo_Get_Seg_Name(seg_info), field_num);
- bool_t retval = Folder_File_Exists(invindex->folder, filename);
+ bool_t retval = Folder_File_Exists(folder, filename);
REFCOUNT_DEC(filename);
return retval;
}
@@ -55,7 +57,8 @@

/* Derive. */
self->field_num = SegInfo_Field_Num(seg_info, field);
- self->index_interval = invindex->schema->index_interval;
+ self->index_interval = Schema_Get_Index_Interval(
+ InvIndex_Get_Schema(invindex));

/* Assign. */
self->invindex = REFCOUNT_INC(invindex);

Modified: trunk/c_src/KinoSearch/Index/SegLexicon.c
===================================================================
--- trunk/c_src/KinoSearch/Index/SegLexicon.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/SegLexicon.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -33,13 +33,15 @@
char *metadata_key = is_index ? "lexicon_index" : "lexicon";
Hash *metadata = (Hash*)SegInfo_Extract_Metadata(seg_info, metadata_key,
strlen(metadata_key));
- Hash *counts = (Hash*)Hash_Fetch_Str(metadata, "counts", 6);
+ Hash *counts = (Hash*)Hash_Fetch_Str(metadata, "counts", 6);
+ Schema *schema = InvIndex_Get_Schema(invindex);
+ Folder *folder = InvIndex_Get_Folder(invindex);
CharBuf *filename;

/* Derive. */
self->field_num = SegInfo_Field_Num(seg_info, field);
- self->index_interval = invindex->schema->index_interval;
- self->skip_interval = invindex->schema->skip_interval;
+ self->index_interval = Schema_Get_Index_Interval(schema);
+ self->skip_interval = Schema_Get_Skip_Interval(schema);

/* Assign. */
self->is_index = is_index;
@@ -54,7 +56,7 @@
filename = CB_newf("%o-%i32.lex", SegInfo_Get_Seg_Name(self->seg_info),
self->field_num);
if (is_index) CB_Cat_Trusted_Str(filename, "x", 1);
- self->instream = Folder_Open_InStream(invindex->folder, filename);
+ self->instream = Folder_Open_InStream(folder, filename);
REFCOUNT_DEC(filename);

/* Check format. */

Modified: trunk/c_src/KinoSearch/Index/SegPostingList.c
===================================================================
--- trunk/c_src/KinoSearch/Index/SegPostingList.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/SegPostingList.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -33,9 +33,10 @@
const CharBuf *field)
{
CharBuf *post_filename;
- Schema *const schema = seg_reader->invindex->schema;
- Folder *const folder = seg_reader->invindex->folder;
- SegInfo *const seg_info = seg_reader->seg_info;
+ InvIndex *const invindex = SegReader_Get_InvIndex(seg_reader);
+ Schema *const schema = InvIndex_Get_Schema(invindex);
+ Folder *const folder = InvIndex_Get_Folder(invindex);
+ SegInfo *const seg_info = seg_reader->seg_info;

/* Init. */
self->doc_freq = 0;

Modified: trunk/c_src/KinoSearch/Index/SegReader.c
===================================================================
--- trunk/c_src/KinoSearch/Index/SegReader.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/SegReader.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -112,7 +112,8 @@
PostingList*
SegReader_posting_list(SegReader *self, const CharBuf *field, Obj *target)
{
- FieldSpec *fspec = Schema_Fetch_FSpec(self->invindex->schema, field);
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
+ FieldSpec *fspec = Schema_Fetch_FSpec(schema, field);

/* Only return an object if we've got an indexed field. */
if (fspec != NULL && fspec->indexed) {

Modified: trunk/c_src/KinoSearch/Index/SegWriter.c
===================================================================
--- trunk/c_src/KinoSearch/Index/SegWriter.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/SegWriter.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -31,7 +31,7 @@
{
/* Init. */
SegDataWriter_init((SegDataWriter*)self, invindex, seg_info);
- self->inverter = Inverter_new(invindex->schema);
+ self->inverter = Inverter_new(InvIndex_Get_Schema(invindex));
self->stock_doc = Doc_new(NULL, 0, 1.0f);

/* Assign or init. */
@@ -96,8 +96,8 @@
TVWriter_Finish(self->tv_writer);

/* Write compound file. */
- Folder_Consolidate_Segment(self->invindex->folder,
- self->seg_info->seg_name);
+ Folder_Consolidate_Segment(InvIndex_Get_Folder(self->invindex),
+ SegInfo_Get_Seg_Name(self->seg_info));
}

void

Modified: trunk/c_src/KinoSearch/Index/TermVectorsReader.c
===================================================================
--- trunk/c_src/KinoSearch/Index/TermVectorsReader.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/TermVectorsReader.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -24,6 +24,7 @@
TermVectorsReader*
TVReader_init(TermVectorsReader *self, InvIndex *invindex, SegInfo *seg_info)
{
+ Folder *folder = InvIndex_Get_Folder(invindex);
CharBuf *filename = CB_Clone(seg_info->seg_name);

/* Init. */
@@ -31,9 +32,9 @@

/* Open instreams. */
CB_Cat_Trusted_Str(filename, ".tv", 3);
- self->tv_in = Folder_Open_InStream(invindex->folder, filename);
+ self->tv_in = Folder_Open_InStream(folder, filename);
CB_Cat_Trusted_Str(filename, "x", 1);
- self->tvx_in = Folder_Open_InStream(invindex->folder, filename);
+ self->tvx_in = Folder_Open_InStream(folder, filename);
REFCOUNT_DEC(filename);

return self;

Modified: trunk/c_src/KinoSearch/Index/TermVectorsWriter.c
===================================================================
--- trunk/c_src/KinoSearch/Index/TermVectorsWriter.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Index/TermVectorsWriter.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -29,14 +29,15 @@
TermVectorsWriter*
TVWriter_init(TermVectorsWriter *self, InvIndex *invindex, SegInfo *seg_info)
{
+ Folder *folder = InvIndex_Get_Folder(invindex);
CharBuf *filename = CB_Clone(seg_info->seg_name);
SegDataWriter_init((SegDataWriter*)self, invindex, seg_info);

/* Open outstreams. */
CB_Cat_Trusted_Str(filename, ".tv", 3);
- self->tv_out = Folder_Open_OutStream(invindex->folder, filename);
+ self->tv_out = Folder_Open_OutStream(folder, filename);
CB_Cat_Trusted_Str(filename, "x", 1);
- self->tvx_out = Folder_Open_OutStream(invindex->folder, filename);
+ self->tvx_out = Folder_Open_OutStream(folder, filename);
REFCOUNT_DEC(filename);

/* Go past invalid doc 0. */

Modified: trunk/c_src/KinoSearch/InvIndex.bp
===================================================================
--- trunk/c_src/KinoSearch/InvIndex.bp 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/InvIndex.bp 2008-08-03 19:04:36 UTC (rev 3706)
@@ -17,6 +17,12 @@
static InvIndex*
clobber(InvIndex *self, Schema *schema, Folder *folder);

+ Schema*
+ Get_Schema(InvIndex *self);
+
+ Folder*
+ Get_Folder(InvIndex *self);
+
void Destroy(InvIndex *self);
}


Modified: trunk/c_src/KinoSearch/InvIndex.c
===================================================================
--- trunk/c_src/KinoSearch/InvIndex.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/InvIndex.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -97,6 +97,11 @@
return self;
}

+Schema*
+InvIndex_get_schema(InvIndex *self) { return self->schema; }
+Folder*
+InvIndex_get_folder(InvIndex *self) { return self->folder; }
+
void
InvIndex_destroy(InvIndex *self)
{

Modified: trunk/c_src/KinoSearch/InvIndexer.c
===================================================================
--- trunk/c_src/KinoSearch/InvIndexer.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/InvIndexer.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -26,8 +26,8 @@
InvIndexer_init(InvIndexer *self, InvIndex *invindex,
LockFactory *lock_factory)
{
- Folder *folder = invindex->folder;
- Schema *schema = invindex->schema;
+ Folder *folder = InvIndex_Get_Folder(invindex);
+ Schema *schema = InvIndex_Get_Schema(invindex);
Lock *write_lock;
CharBuf *seg_name;

@@ -95,7 +95,8 @@
InvIndexer_delete_by_term(InvIndexer *self, CharBuf *field, Obj *term)
{
if (self->reader) {
- FieldSpec *fspec = Schema_Fetch_FSpec(self->invindex->schema, field);
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
+ FieldSpec *fspec = Schema_Fetch_FSpec(schema, field);

/* Raise exception if the field isn't indexed. */
if (!fspec || !fspec->indexed)
@@ -108,8 +109,7 @@
Obj_Get_Class_Name(term));
}
else {
- Analyzer *analyzer
- = Schema_Fetch_Analyzer(self->invindex->schema, field);
+ Analyzer *analyzer = Schema_Fetch_Analyzer(schema, field);
VArray *terms = Analyzer_Split(analyzer, (CharBuf*)term);
Obj *analyzed_term = VA_Fetch(terms, 0);
if (analyzed_term) {
@@ -131,8 +131,8 @@
void
InvIndexer_add_invindex(InvIndexer *self, InvIndex *invindex)
{
- Schema *schema = self->invindex->schema;
- Schema *other_schema = invindex->schema;
+ Schema *schema = InvIndex_Get_Schema(self->invindex);
+ Schema *other_schema = InvIndex_Get_Schema(invindex);
VArray *other_fields;
u32_t i;

@@ -218,7 +218,8 @@
|| !self->reader /* Initializing this invindex. */
|| self->has_deletions /* Some docs were deleted. */
) {
- Snapshot_Write_Snapshot(self->snapshot, self->invindex->folder);
+ Snapshot_Write_Snapshot(self->snapshot,
+ InvIndex_Get_Folder(self->invindex));
}

/* Close reader, so that we can delete its files if appropriate. */

Modified: trunk/c_src/KinoSearch/Schema.bp
===================================================================
--- trunk/c_src/KinoSearch/Schema.bp 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Schema.bp 2008-08-03 19:04:36 UTC (rev 3706)
@@ -67,6 +67,12 @@
incremented VArray*
All_Fields(Schema *self);

+ i32_t
+ Get_Index_Interval(Schema *self);
+
+ i32_t
+ Get_Skip_Interval(Schema *self);
+
void
Destroy(Schema *self);
}

Modified: trunk/c_src/KinoSearch/Schema.c
===================================================================
--- trunk/c_src/KinoSearch/Schema.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Schema.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -237,6 +237,11 @@
}

i32_t
+Schema_get_index_interval(Schema *self) { return self->index_interval; }
+i32_t
+Schema_get_skip_interval(Schema *self) { return self->skip_interval; }
+
+i32_t
Schema_field_num(Schema *self, const CharBuf *field_name)
{
if (field_name == NULL) {

Modified: trunk/c_src/KinoSearch/Search/PhraseQuery.c
===================================================================
--- trunk/c_src/KinoSearch/Search/PhraseQuery.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Search/PhraseQuery.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -252,11 +252,11 @@
PhraseCompiler_make_scorer(PhraseCompiler *self, IndexReader *reader)
{
PhraseQuery *const parent = (PhraseQuery*)self->parent;
- VArray *const terms = parent->terms;
- Schema *schema = reader->invindex->schema;
- Posting *posting = Schema_Fetch_Posting(schema, parent->field);
- VArray *plists;
- Scorer *retval;
+ VArray *const terms = parent->terms;
+ Schema *schema = IxReader_Get_Schema(reader);
+ Posting *posting = Schema_Fetch_Posting(schema, parent->field);
+ VArray *plists;
+ Scorer *retval;
u32_t i;

/* Bail if there are no terms. */

Modified: trunk/c_src/KinoSearch/Search/RequiredOptionalQuery.c
===================================================================
--- trunk/c_src/KinoSearch/Search/RequiredOptionalQuery.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Search/RequiredOptionalQuery.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -108,7 +108,7 @@
Compiler *opt_compiler = (Compiler*)VA_Fetch(self->children, 1);
Scorer *req_scorer = Compiler_Make_Scorer(req_compiler, reader);
Scorer *opt_scorer = Compiler_Make_Scorer(opt_compiler, reader);
- Similarity *sim = Schema_Fetch_Sim(reader->invindex->schema, NULL);
+ Similarity *sim = Schema_Fetch_Sim(IxReader_Get_Schema(reader), NULL);

if (req_scorer == NULL) {
/* No required Scorer, ergo no matches possible. */

Modified: trunk/c_src/KinoSearch/Searcher.c
===================================================================
--- trunk/c_src/KinoSearch/Searcher.c 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/c_src/KinoSearch/Searcher.c 2008-08-03 19:04:36 UTC (rev 3706)
@@ -26,7 +26,7 @@
if (reader) invindex = reader->invindex;
/* else reader = IndexReader_open(invindex, NULL); */ /* TODO */
else CONFESS("reader is required");
- Searchable_init((Searchable*)self, invindex->schema);
+ Searchable_init((Searchable*)self, InvIndex_Get_Schema(invindex));
self->reader = REFCOUNT_INC(reader);
self->invindex = REFCOUNT_INC(invindex);
return self;

Modified: trunk/perl/lib/KinoSearch/Index/SegDataReader.pm
===================================================================
--- trunk/perl/lib/KinoSearch/Index/SegDataReader.pm 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/perl/lib/KinoSearch/Index/SegDataReader.pm 2008-08-03 19:04:36 UTC (rev 3706)
@@ -4,34 +4,10 @@

__END__

-__XS__
-
-MODULE = KinoSearch PACKAGE = KinoSearch::Index::SegDataReader
-
-void
-_set_or_get2(self, ...)
- kino_SegDataReader *self;
-ALIAS:
- get_schema = 4
- get_folder = 6
-PPCODE:
-{
- START_SET_OR_GET_SWITCH
-
- case 4: retval = Kino_Obj_To_Native(self->invindex->schema);
- break;
-
- case 6: retval = Kino_Obj_To_Native(self->invindex->folder);
- break;
-
- END_SET_OR_GET_SWITCH
-}
-
__AUTO_XS__

{ "KinoSearch::Index::SegDataReader" => {
- make_getters => [qw( invindex seg_info )],
- bind_methods => [qw( close )],
+ bind_methods => [qw( get_invindex close )],
make_constructors => ["new"],
}
}

Modified: trunk/perl/lib/KinoSearch/InvIndex.pm
===================================================================
--- trunk/perl/lib/KinoSearch/InvIndex.pm 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/perl/lib/KinoSearch/InvIndex.pm 2008-08-03 19:04:36 UTC (rev 3706)
@@ -7,9 +7,9 @@
__AUTO_XS__

{ "KinoSearch::InvIndex" => {
- make_getters => [qw( schema folder )],
+ bind_methods => [ qw( get_schema get_folder ) ],
make_constructors =>
- [ qw( _new|init _read|read _open|open _clobber|clobber ) ],
+ [qw( _new|init _read|read _open|open _clobber|clobber )],
}
}


Modified: trunk/perl/lib/KinoSearch.pm
===================================================================
--- trunk/perl/lib/KinoSearch.pm 2008-08-03 18:19:48 UTC (rev 3705)
+++ trunk/perl/lib/KinoSearch.pm 2008-08-03 19:04:36 UTC (rev 3706)
@@ -305,7 +305,7 @@
Compress::Zlib->import('uncompress');
$zlib_loaded = 1;
}
- my $schema = $self->get_schema;
+ my $schema = $self->get_invindex->get_schema;
for my $field_name ( keys %$doc ) {
my $fspec = $schema->fetch_fspec($field_name);
next unless $fspec->compressed;


_______________________________________________
kinosearch-commits mailing list
kinosearch-commits@rectangular.com
http://www.rectangular.com/mailman/listinfo/kinosearch-commits