void init (char const * filename, bool overwrite, size32_t _keyedsize, size32_t _rowsize, bool variableWidth, bool quickCompressed, unsigned nodeSize) { keyedsize = _keyedsize; rowsize = _rowsize; reccount = 0; keyFile.setown(createIFile(filename)); if(!overwrite && (keyFile->isFile() != notFound)) throw MakeStringException(0, "Found preexisting index file %s (overwrite not selected)", filename); keyFileIO.setown(keyFile->openShared(IFOcreate, IFSHfull)); // not sure if needs shared here if(!keyFileIO) throw MakeStringException(0, "Could not write index file %s", filename); keyStream.setown(createIOStream(keyFileIO)); unsigned flags = COL_PREFIX | HTREE_FULLSORT_KEY | HTREE_COMPRESSED_KEY; if(variableWidth) flags |= HTREE_VARSIZE; if(quickCompressed) flags |= HTREE_QUICK_COMPRESSED_KEY; keyBuilder.setown(createKeyBuilder(keyStream, flags, rowsize, nodeSize, keyedsize, 0)); // MORE - support for sequence other than 0... }
void open(IPartDescriptor &partDesc, bool isTopLevel, bool isVariable) { StringBuffer partFname; getPartFilename(partDesc, 0, partFname); bool compress=false; OwnedIFileIO iFileIO = createMultipleWrite(this, partDesc, 0, TW_RenameToPrimary, compress, NULL, this, &abortSoon); Owned<IFileIOStream> out = createBufferedIOStream(iFileIO); ActPrintLog("INDEXWRITE: created fixed output stream %s", partFname.str()); unsigned flags = COL_PREFIX; if (TIWrowcompress & helper->getFlags()) flags |= HTREE_COMPRESSED_KEY|HTREE_QUICK_COMPRESSED_KEY; else if (!(TIWnolzwcompress & helper->getFlags())) flags |= HTREE_COMPRESSED_KEY; if (!isLocal) flags |= HTREE_FULLSORT_KEY; if (isVariable) flags |= HTREE_VARSIZE; buildUserMetadata(metadata); buildLayoutMetadata(metadata); unsigned nodeSize = metadata ? metadata->getPropInt("_nodeSize", NODESIZE) : NODESIZE; builder.setown(createKeyBuilder(out, flags, maxDiskRecordSize, nodeSize, helper->getKeyedSize(), isTopLevel ? 0 : totalCount)); }