Hatena::Grouptechmemo

msyktの日記

2012-05-15

[cassandra]RandomAccessReader

02:19

org.apache.cassandra.db.ColumnFamilyStore

    public List<Row> getRangeSlice(ByteBuffer superColumn, final AbstractBounds<RowPosition> range, int maxResults, IFilter columnFilter, List<IndexExpression> rowFilter, boolean maxIsColumns, boolean isPaging)
    {
        return filter(getSequentialIterator(superColumn, range, columnFilter), ExtendedFilter.create(this, columnFilter, rowFilter, maxResults, maxIsColumns, isPaging));
    }

org.apache.cassandra.db.ColumnFamilyStore

    /**
      * Iterate over a range of rows and columns from memtables/sstables.
      *
      * @param superColumn optional SuperColumn to slice subcolumns of; null to slice top-level columns
      * @param range Either a Bounds, which includes start key, or a Range, which does not.
      * @param columnFilter description of the columns we're interested in for each row
     */
    public AbstractScanIterator getSequentialIterator(ByteBuffer superColumn, final AbstractBounds<RowPosition> range, IFilter columnFilter)
    {
        assert !(range instanceof Range) || !((Range)range).isWrapAround() || range.right.isMinimum() : range;

        final RowPosition startWith = range.left;
        final RowPosition stopAt = range.right;

        QueryFilter filter = new QueryFilter(null, new QueryPath(columnFamily, superColumn, null), columnFilter);

        List<Row> rows;
        final ViewFragment view = markReferenced(startWith, stopAt);
        try
        {
            final CloseableIterator<Row> iterator = RowIteratorFactory.getIterator(view.memtables, view.sstables, startWith, stopAt, filter, this);
            final int gcBefore = (int)(System.currentTimeMillis() / 1000) - metadata.getGcGraceSeconds();

...

org.apache.cassandra.db.getIterator


  /**
     * Get a row iterator over the provided memtables and sstables, between the provided keys
     * and filtered by the queryfilter.
     * @param memtables Memtables pending flush.
     * @param sstables SStables to scan through.
     * @param startWith Start at this key
     * @param stopAt Stop and this key
     * @param filter Used to decide which columns to pull out
     * @param cfs
     * @return A row iterator following all the given restrictions
     */
    public static CloseableIterator<Row> getIterator(final Iterable<Memtable> memtables,
                                          final Collection<SSTableReader> sstables,
                                          final RowPosition startWith,
                                          final RowPosition stopAt,
                                          final QueryFilter filter,
                                          final ColumnFamilyStore cfs)
    {
        // fetch data from current memtable, historical memtables, and SSTables in the correct order.
        final List<CloseableIterator<IColumnIterator>> iterators = new ArrayList<CloseableIterator<IColumnIterator>>();

        // memtables
        for (Memtable memtable : memtables)
        {
            iterators.add(new ConvertToColumnIterator(filter, memtable.getEntryIterator(startWith, stopAt)));
        }

        for (SSTableReader sstable : sstables)
        {
            final SSTableScanner scanner = sstable.getScanner(filter);
            scanner.seekTo(startWith);
            iterators.add(scanner);
        }

        // reduce rows from all sources into a single row
        return MergeIterator.get(iterators, COMPARE_BY_KEY, new MergeIterator.Reducer<IColumnIterator, Row>()
        {
            private final int gcBefore = (int) (System.currentTimeMillis() / 1000) - cfs.metadata.getGcGraceSeconds();
            private final List<IColumnIterator> colIters = new ArrayList<IColumnIterator>();
            private DecoratedKey key;
            private ColumnFamily returnCF;

            @Override
            protected void onKeyChange()
            {
                this.returnCF = ColumnFamily.create(cfs.metadata);
            }

            public void reduce(IColumnIterator current)
            {
                this.colIters.add(current);
                this.key = current.getKey();
                this.returnCF.delete(current.getColumnFamily());
            }

            protected Row getReduced()
            {

                // First check if this row is in the rowCache. If it is we can skip the rest
                ColumnFamily cached = cfs.getRawCachedRow(key);
                if (cached == null)
                {
                    // not cached: collate
                    filter.collateColumns(returnCF, colIters, gcBefore);
                }
                else
                {
                    QueryFilter keyFilter = new QueryFilter(key, filter.path, filter.filter);
                    returnCF = cfs.filterColumnFamily(cached, keyFilter, gcBefore);
                }

                Row rv = new Row(key, returnCF);
                colIters.clear();
                key = null;
                return rv;
            }
        });
    }

org.apache.cassandra.io.sstable.SSTableReader

    /**
     *
     * @param filter filter to use when reading the columns
     * @return A Scanner for seeking over the rows of the SSTable.
     */
    public SSTableScanner getScanner(QueryFilter filter)
    {
        return new SSTableScanner(this, filter);
    }

MichaBealleyMichaBealley2017/05/09 07:49For Sale Finasteride Viagra Without Prescription 400 Mg Candian No Script Pharmacy Order Generic Propecia 1mg Generic Viagra 20 Mg <a href=http://byuvaigranonile.com>viagra</a> Pacific Care Pharmacy Port Vila Buy Viagra Online In The Us Viagra Ou Levitra Cialis En Oferta

KennchulkyKennchulky2017/06/15 18:40Cialis Besser Levitra <a href=http://buy-levitra-now.buylevi.com>Buy Levitra Now</a> Prescription Diflucan Acheter Kamagra Gel <a href=http://viacheap.com>buy viagra online</a> Cialis Levitra Comprar Buy Tadacip 20 Mg Cod Pharmacy Online <a href=http://prednisone.ccrpdc.com/buy-prednisone-20mg.php>Buy Prednisone 20mg</a> Propecia Overstock Le Viagra 50 <a href=http://viagra-pills.via100mg.com>Viagra Pills</a> Precios De Cialis

RetDindRetDind2018/02/02 22:26Cialis 20mg Moins Cher Daily Cialis Professional Rx Pharmacy <a href=http://cialviag.com>cialis</a> Cialis De Venta Cialis Mg Dosage

BrceDeattBrceDeatt2018/04/17 07:09the best choice cialis woman the best site cialis tablets
<a href="http://kaivanrosendaal.com/#Buy-Cheap-Cialis-Online">Buy Cheap Cialis in usa</a> how much does a cialis cost get cheap cialis

KatDyedKatDyed2018/04/17 07:28Viagra O Cialis Mejor <a href=http://cialiorder.com>cialis canada</a> Viagra E Dieta

BrceDeattBrceDeatt2018/04/17 23:55cialis kaufen wo cipla cialis online
<a href="http://kaivanrosendaal.com/#Cheap-Cialis">Buy Cheap Cialis in usa</a> 5 mg cialis pharmacie en ligne cialis flussig

BrceDeattBrceDeatt2018/04/18 18:22we use it 50 mg cialis dose brand cialis generic
<a href="http://kaivanrosendaal.com/#Buy-Cheap-Cialis-Online">buy cialis</a> cuanto cuesta cialis yaho if a woman takes a mans cialis

HrafdceDeattHrafdceDeatt2018/04/19 09:13buy 1 cialis pill at a time cialis pakistan price cialis blood in urine <a href=http://jvrimages.com/#cialis+going+generic+in+2017+in+us>cialis cost</a> cialis children cialis generic cheap fast cheapest brand cialis online
<a href=http://jvrimages.com/#cialis+20mg>cialis 30 day sample</a> cialis online uk cialis leggero look there official cialis
http://jvrimages.com/#cialis+daily cialis 88 keys lyrics 110 mg dissolvable cialis cialis e insufficienza renal

AddAcoulaAddAcoula2018/04/19 14:59Pillole Cialis <a href=http://cialviag.com>cialis online</a> Tindamax

HrafdceDeattHrafdceDeatt2018/04/19 22:16shop for cialis cheap buy genuine cialis cialis use by women effective <a href=http://jvrimages.com/#cialis+side+effects+dangers>cialis 20 mg</a> cialis in usa cheap cialis barato profesional cialis plus stay hard
<a href=http://jvrimages.com/#cialis+tadalafil>http://jvrimages.com</a> ipad cialis online sicher buy cialis online howto cialis in mexican pharmacies
http://jvrimages.com/#cialis+5+mg levitra cialis side effects can you take 1 2 cialis the best place cialis buy now

HrafdceDeattHrafdceDeatt2018/04/20 13:10cialis sale internet cialis creaza dependenta cialis deutschland ohne rezept <a href=http://jvrimages.com/#200+cialis+coupon>cialis online</a> acheter cialis site serieux we choice purchase cialis can i buy cialis in malaysia
<a href=http://jvrimages.com/#calluses+on+feet>jvrimages.com/</a> average cialis proce what is the best brand cialis la pillola del cialis
http://jvrimages.com/#30+day+cialis+trial+offer cialis generico venta cialis de cialis baratos cialis posologie

HrafdceDeattHrafdceDeatt2018/04/21 07:13cialis vendo chile cialis pricing in canada orden de cialis barata
п»ї<a href="http://jvrimages.com/">cialis 20 mg</a> buy cheap cialis in usa pharmacy colombo cialis cialis et ses mefaits
cialis online stellen generic cialis to canada cialis erb
http://jvrimages.com/#viagra+or+cialis discount generic cialis uk cialis fedex overnight cialis invention

KufdrgeJearkKufdrgeJeark2018/05/02 17:02we like it cialis price cialis pills in singapore <a href="http://foreigncircles.com/#Trazodone-cheap-tablet">Trazodone cheap tablet</a>
cialis lilly tadalafi cialis pills boards
<a href="http://foreigncircles.com/#Trazodone-cheap-tablet">Trazodone cheap</a>
http://foreigncircles.com

KufdrgeJearkKufdrgeJeark2018/05/02 18:03cialis ahumada i recommend cialis generico <a href="http://foreigncircles.com/#foreigncircles.com">Trazodone cheap</a>
acheter du cialis a geneve weblink price cialis
<a href="http://foreigncircles.com/#Trazodone-cheap-tablet">Trazodone cheap tablet</a>
http://foreigncircles.com

KufdrgeJearkKufdrgeJeark2018/05/02 19:06wow cialis tadalafil 100mg how to purchase cialis on line <a href=http://foreigncircles.com/>foreigncircles.com</a>
cialis per paypa weblink price cialis
<a href=http://foreigncircles.com/#Trazodone-cheap>foreigncircles.com</a>
http://foreigncircles.com

KenneththypeKenneththype2018/05/11 10:38kamagra 100mg chewable tablets
kamagra winkel utrecht
kamagra dosage
kamagra oral jelly uses

RehgeJearkRehgeJeark2018/05/18 07:04<a href="http://humblegaiwan.com/">buy cheap sildenafil online u</a> canadian drugs generic viagra viagra prezzo in linea basso
viagra farmacias guadalajara the best site viagra tablets <a href="http://jardinstea.com/">Buy sildenafil 100 mg for sale</a>
viagra canada on line viagra 5 mg buy
viagra online holland viagra in sconto <a href=http://jardinstea.com/#sildenafil-citrate>sildenafil citrate 100 mg</a>
american pharmacy viagra viagra kamagra levitra
http://humblegaiwan.com/

RehgeJearkRehgeJeark2018/05/18 08:27<a href="http://humblegaiwan.com/">cheapest place to buy sildenafil online</a> when can i take another viagra viagra generico postepay
link for you viagra price achat viagra en europe <a href="http://jardinstea.com/#sildenafil-citrate">sildenafil citrate 100 mg pills</a>
click here take viagra viagra kaufen bankberweisung
viagra kamagra levitra viagra et insomni <a href=http://jardinstea.com/#buy-100-mg>sildenafil 100 mg for sale</a>
acquistare viagra internet viagra 50 mg soft tab
http://humblegaiwan.com/

RehgeJearkRehgeJeark2018/05/18 09:37<a href="http://humblegaiwan.com/">buy sildenafil for cheaper prices</a> viagra 100mg suppliers viagra baratos compran uk
generic viagra 20mg tablets viagra professional from usa <a href="http://humblegaiwan.com/">buy cheap sildenafil online usa</a>
viagra 20mg preis cf buy original viagra
click now viagra from canada buy viagra cheap 10 mg <a href=http://jardinstea.com/#sildenafil>sildenafil 100 mg</a>
achat viagra en europe viagra daily dose generic
http://humblegaiwan.com/

RehgeJearkRehgeJeark2018/05/18 10:50<a href="http://jardinstea.com/#buy-sildenafil">Buy sildenafil 100 mg</a> buying viagra in colombia female viagra no prescription
viagra professional yohimbe where to buy viagra in ontario <a href="http://jardinstea.com/#buy-sildenafil">sildenafil 100 mg</a>
viagra authentique suisse prezzo viagra a buon mercato
generic viagra at the pharmacy viagra professional from usa <a href=http://humblegaiwan.com/>buy sildenafil cheap through online sales</a>
viagra online deutschland viagra 5 mg buy
http://jardinstea.com/#100mg

RehgeJearkRehgeJeark2018/05/18 12:06<a href="http://jardinstea.com/#buy-sildenafil">sildenafil 100 mg coupons</a> venta de viagra canada acheter du viagra a geneve
look here viagra cheap canada generic viagra with dapoxetine <a href="http://jardinstea.com/">sildenafil citrate 100 mg prices</a>
viagra generic tadalafil buy viagra name brand cheap
dose size of viagra viagra for sale south africa <a href=http://humblegaiwan.com/>buy cheap sildenafil thailand</a>
generic viagra pill online viagra en mexico precio
http://jardinstea.com/

RehgeJearkRehgeJeark2018/05/18 13:17<a href="http://humblegaiwan.com/">buy sildenafilcheap</a> acheter viagra meilleur pri click now viagra from canada
does viagra cause gout price viagra best <a href="http://humblegaiwan.com/">sildenafil buy cheap</a>
viagra dose 30mg viagra 20 mg effectiveness
we like it safe cheap viagra preis viagra 20mg schweiz <a href=http://jardinstea.com/>sildenafil 100 mg tablets</a>
the best choice viagra woman viagra pas cher paris
http://jardinstea.com/#buy-sildenafil

RehgeJearkRehgeJeark2018/05/18 14:23<a href="http://humblegaiwan.com/">buy sildenafil for cheaper prices</a> viagra name brand cheap preis viagra 20mg schweiz
viagra 100mg suppliers tarif viagra france <a href="http://jardinstea.com/#buy-sildenafil">sildenafil 100 mg for sale</a>
viagra prezzo in linea basso buy viagra online legal
prices on viagra 10 mg cuanto cuesta viagra yaho <a href=http://jardinstea.com/>sildenafil citrate 100mg coupons</a>
tarif viagra france how much does a viagra cost
http://jardinstea.com/#buy-sildenafil

RehgeJearkRehgeJeark2018/05/18 15:39<a href="http://jardinstea.com/">Buy sildenafil 100 mg</a> we recommend viagra info prices on viagra 10 mg
viagra et insomni viagra canada on line <a href="http://humblegaiwan.com/">buy sildenafil cheapest</a>
buying viagra on internet acheter du viagra a geneve
viagra 100 mg 30 tablet viagra italia gratis <a href=http://humblegaiwan.com/>buy cheap sildenafil 200mg</a>
click here to buy viagra viagra italia gratis
http://humblegaiwan.com/

RehgeJearkRehgeJeark2018/05/18 17:01<a href="http://jardinstea.com/#sildenafil-citrate">sildenafil 100 mg price</a> viagra y deporte prices on viagra 10 mg
are there generic viagra price viagra per pill <a href="http://jardinstea.com/#sildenafil-citrate">Sildenafil Citrate 100 mg best price</a>
buying brand viagra online viagra wir preise
viagra 5 mg buy buy brand viagra cheap <a href=http://jardinstea.com/#buy-100-mg>sildenafil 100 mg tablet cost</a>
safe site to buy viagra online viagra 5 effetti collaterali
http://humblegaiwan.com/

RehgeJearkRehgeJeark2018/05/18 20:21<a href="http://humblegaiwan.com/">buy cheap deal online sildenafil sildenafil</a> viagra e hiv viagra en mexico precio
viagra billig non 5 mg viagra generici <a href="http://jardinstea.com/">Buy sildenafil 100 mg</a>
no prescription viagra cheap acheter viagra kamagra
import viagra viagra generico postepay <a href=http://jardinstea.com/#100mg>sildenafil 100 mg tablets</a>
viagra y deporte viagra 5 mg effetti collateral
http://humblegaiwan.com/

MichaelLophyMichaelLophy2018/06/18 02:40cialis comanda
<a href="http://airvietnamairline.com/">buy cialis</a>
viagra vs cialis vs levitra comparison
<a href="http://airvietnamairline.com/">buy generic cialis online</a>
walmart cialis 20mg price

DanielhizDanielhiz2018/06/21 15:54kamagra 50 mg oral jelly usa
<a href="http://kamagradyn.com/">buy kamagra 100mg</a>
kamagra 100mg oral jelly in india
<a href="http://kamagradyn.com/">buy kamagra 100 mg</a>
kamagra 100mg oral jelly wirkung bei frauen

JaredBumJaredBum2018/06/23 00:48cialis 30 lu tablet 20 mg
<a href="http://cialisprod.com/">buy cialis</a>
when generic cialis coming out
<a href="http://cialisprod.com/">buy cialis</a>
cialis 5mg price comparison

LeroyMutLeroyMut2018/06/24 14:50generic cialis sales
<a href="http://airvietnamairline.com/">buy generic cialis</a>
cialis brand 20 mg
<a href="http://airvietnamairline.com/">buy generic cialis</a>
walmart pharmacy prices cialis

FloydTomFloydTom2018/06/26 19:37kamagra kopen amsterdam
<a href="http://kamagradyn.com/">kamagra 100mg</a>
kamagra 100 gold
<a href="http://kamagraonl.com/">kamagra oral jelly</a>
kamagra uk company

AntonglymnAntonglymn2018/07/04 00:09side effects of prolonged use of cialis
<a href="http://cialisgenericsa.com/">buy cialis</a>
cialis tablets side effects
<a href="http://cialisgenericsa.com/">buy cialis online</a>
cialis 20 mg how quickly does it work

HaroldCaumpHaroldCaump2018/07/13 16:41kamagra 100mg oral jelly suppliers indiana
<a href="https://www.kamagradax.com/">kamagra 100mg</a>
kamagra jelly use
<a href="https://www.kamagradax.com/">kamagra 100mg</a>
kamagra forum pl

CharlesVapCharlesVap2018/07/18 11:39cialis price versus viagra forum
<a href="http://viagrapipls.com/">generic viagra</a>
levitra vs viagra price
<a href="http://viagrapipls.com/">viagra generic</a>
price of generic viagra at cvs
http://viagrapipls.com/
walmart generic viagra 100mg best price

LloyddwexyLloyddwexy2018/07/30 17:49kamagra 50 mg oral jelly usa
<a href="https://www.kamagradax.com/">kamagra</a>
kamagra oral jelly uses
<a href="https://www.kamagradax.com/">buy kamagra</a>
kamagra 100mg chewables for sale

wtaletvfzdwtaletvfzd2018/07/31 17:05<a href="http://onevoicemethod.com">cheap indian viagra</a> mail order viagra canada http://onevoicemethod.com

ztaletybdgztaletybdg2018/08/01 15:12<a href="http://lizlarssen.com">buy viagra cheaply</a> cheap viagra sales http://lizlarssen.com

ntaletkemnntaletkemn2018/08/02 12:25<a href="http://livecopys.com">mail order viagra canada</a> generic viagra prices http://livecopys.com

ataletdkixataletdkix2018/08/03 11:13<a href="http://onevoicemethod.com">buy generic viagra online canada</a> order viagra online cheap http://onevoicemethod.com

ltaletfcfjltaletfcfj2018/08/04 11:38<a href="http://bakerssign.com">levitra testimonials</a> compare cialis viagra levitra http://bakerssign.com

ztaletudojztaletudoj2018/08/05 19:29<a href="http://missreplicawatches.com">cialis generic best price</a> cheap cialis in usa http://missreplicawatches.com

ptaletsfgkptaletsfgk2018/08/07 12:38<a href="http://gigawatt6.com">order cialis overnight</a> buy cialis online safely http://gigawatt6.com

canadian pharmacycanadian pharmacy2018/08/08 18:05<a href="http://canadianonlinexyz.com/">canadian online pharmacy</a>
http://canadianonlinexyz.com/
<a href=http://canadianonlinexyz.com/>canadian pharmacy online</a>

rtaletxewdrtaletxewd2018/08/09 02:12<a href="http://psychologytweets.com">buy cialis non prescription</a> cheap cialis overnight http://psychologytweets.com

ltaletqmbwltaletqmbw2018/08/18 07:51<a href="http://rabbitinahat.com">best generic cialis website</a> cialis for bph and ed http://rabbitinahat.com

ttaletcawsttaletcaws2018/08/18 08:44<a href="http://missreplicawatches.com">coupon cialis</a> buy cialis pills online http://missreplicawatches.com

staletukvrstaletukvr2018/08/18 13:53<a href="http://baymontelreno.com">order cialis online cheap</a> cialis daily side effects http://baymontelreno.com

ztaleteznfztaleteznf2018/08/18 17:26<a href="http://istanbulexpressonline.com">viagra tablet men</a> commercial viagra http://istanbulexpressonline.com

ytaletuzfaytaletuzfa2018/08/18 18:02<a href="http://psychologytweets.com">how long does cialis 5mg last</a> 36 hour cialis http://psychologytweets.com

etaletrqbmetaletrqbm2018/08/18 21:43<a href="http://baymontelreno.com">cialis commercial song</a> cialis and grapefruit juice side effects http://baymontelreno.com

jtaletfpsfjtaletfpsf2018/08/19 00:55<a href="http://gigawatt6.com">cialis 5mg best price</a> what is better viagra or cialis http://gigawatt6.com

ataletfvbbataletfvbb2018/08/19 06:35<a href="http://missreplicawatches.com">cialis price vs viagra</a> cialis 20mg reviews http://missreplicawatches.com

ytaletxtxnytaletxtxn2018/08/19 09:26<a href="http://psychologytweets.com">cialis copay</a> cialis com coupon http://psychologytweets.com

otaletckgootaletckgo2018/08/19 12:45<a href="http://bakerssign.com">levitra mexico</a> is cialis better than levitra http://bakerssign.com

ttaletjqosttaletjqos2018/08/19 15:00<a href="http://psychologytweets.com">cialis experience</a> buy cialis canada http://psychologytweets.com

qtaletjgoiqtaletjgoi2018/08/19 15:31<a href="http://psychologytweets.com">cialis tadalafil 100mg</a> order cialis no prescription http://psychologytweets.com

ttaletnjonttaletnjon2018/08/19 21:15<a href="http://psychologytweets.com">cialis 40 mg reviews</a> how does cialis work for 36 hours http://psychologytweets.com

otaletvndsotaletvnds2018/08/20 02:35<a href="http://bakerssign.com">levitra 20 mg dosage</a> levitra vs cialis vs viagra reviews http://bakerssign.com

ztaleteqlyztaleteqly2018/08/20 05:37<a href="http://psychologytweets.com">cialis 10mg how long does it last</a> cialis street price http://psychologytweets.com

jtaletpgpxjtaletpgpx2018/08/20 09:48<a href="http://psychologytweets.com">cialis heart rate</a> new cialis commercial http://psychologytweets.com

vtaletvuwkvtaletvuwk2018/09/11 13:09<a href="http://gigawatt6.com">buy cialis for daily use</a> cialis with food http://gigawatt6.com

qtaletxwlbqtaletxwlb2018/09/11 13:14<a href="http://bullsac.com">price levitra</a> levitra time http://bullsac.com

mtalettvytmtalettvyt2018/09/11 15:17<a href="http://istanbulexpressonline.com">viagra canada free sample</a> average age men need viagra http://istanbulexpressonline.com

ctaletsjfwctaletsjfw2018/09/11 18:38<a href="http://missreplicawatches.com">cialis pi</a> buy cialis brand online http://missreplicawatches.com

staletdaoastaletdaoa2018/09/11 22:22<a href="http://baymontelreno.com">negative side effects of cialis</a> can you drink alcohol with cialis http://baymontelreno.com

wtaletzpmowtaletzpmo2018/09/12 06:27<a href="http://h-m-j.com">cheap canadian viagra</a> buy viagra online canada http://h-m-j.com

staletvvvwstaletvvvw2018/09/12 08:37<a href="http://baymontelreno.com">generic cialis</a> order cialis online with prescription http://baymontelreno.com

ctaletevsvctaletevsv2018/09/12 10:19<a href="http://top-monterey-salinas-dentists.com">how to make levitra work better</a> levitra coupon free trial http://top-monterey-salinas-dentists.com

dtalethbnudtalethbnu2018/09/12 14:02<a href="http://usedrestaurantequipmentaz.com">cheapest generic cialis online</a> buy cialis no prescription http://usedrestaurantequipmentaz.com

xtaletaoxjxtaletaoxj2018/09/12 15:48<a href="http://canadian-pharmabuy.com">generic viagra prices</a> buy viagra in mexico http://canadian-pharmabuy.com

rtaletcsiertaletcsie2018/09/12 18:01<a href="http://usedrestaurantequipmentaz.com">order cialis paypal</a> buy generic cialis online safely http://usedrestaurantequipmentaz.com

dtaletcakudtaletcaku2018/09/12 18:30<a href="http://bullsac.com">does levitra lower blood pressure</a> levitra generic date http://bullsac.com

ztaletkploztaletkplo2018/09/12 19:59<a href="http://buyviagraonl1ne.us">cheap viagra with prescription</a> order cheap female viagra http://buyviagraonl1ne.us

stalettfkrstalettfkr2018/09/12 23:09<a href="http://canadian-pharmabuy.com">order viagra uk</a> buy viagra los angeles http://canadian-pharmabuy.com

ttaletbkctttaletbkct2018/09/13 00:46<a href="http://timsbmw.com">levitra price</a> levitra 2.5 mg http://timsbmw.com

ftaletokbhftaletokbh2018/09/13 01:31<a href="http://canadian-pharmaonline.com">best place to buy viagra</a> generic viagra without prescription http://canadian-pharmaonline.com

utalettmuautalettmua2018/09/13 02:29<a href="http://waltzweekend.com">generic viagra paypal</a> order viagra 100mg http://waltzweekend.com

ataletvwajataletvwaj2018/09/13 07:04<a href="http://buyviagraonl1ne.us">viagra pills online</a> order viagra overnight http://buyviagraonl1ne.us

ntaleteonwntaleteonw2018/09/13 08:59<a href="http://timsbmw.com">levitra 10mg reviews</a> levitra generic date http://timsbmw.com

jtaletvmzfjtaletvmzf2018/09/13 11:14<a href="http://canadian-pharmaonline.com">cheap viagra with prescription</a> viagra coupon http://canadian-pharmaonline.com

wtaletikzzwtaletikzz2018/09/13 11:48<a href="http://waltzweekend.com">viagra online canadian pharmacy</a> cheap indian viagra http://waltzweekend.com

utaletnuanutaletnuan2018/09/13 19:54<a href="http://waltzweekend.com">viagra 100mg price</a> cheap viagra sydney http://waltzweekend.com

utaletllrsutaletllrs2018/09/13 20:17<a href="http://waltzweekend.com">order viagra online cheap</a> cheap canadian viagra pills http://waltzweekend.com

ttaletdshuttaletdshu2018/09/14 00:07<a href="http://missreplicawatches.com">cialis generic canada pharmacy</a> generic cialis online usa http://missreplicawatches.com

jtaletlthwjtaletlthw2018/09/14 00:49<a href="http://h-m-j.com">cheap viagra online 100mg</a> order viagra air travel http://h-m-j.com

jtaletsuoujtaletsuou2018/09/14 02:28<a href="http://rabbitinahat.com">order generic cialis online no prescription</a> order 5mg cialis http://rabbitinahat.com

ltaletsknfltaletsknf2018/09/14 02:38<a href="http://usedrestaurantequipmentaz.com">best place to buy cialis</a> generic cialis 5mg online http://usedrestaurantequipmentaz.com

btaletivltbtaletivlt2018/09/14 09:17<a href="http://valladium.com">best site to order cialis</a> cheap brand cialis online http://valladium.com

otaletxnspotaletxnsp2018/09/14 10:21<a href="http://usedrestaurantequipmentaz.com">buy cialis online pharmacy</a> cheap cialis online http://usedrestaurantequipmentaz.com

ltaletfcalltaletfcal2018/09/14 12:31<a href="http://vico4me.com">buy generic viagra cheap</a> generic viagra canada pharmacy http://vico4me.com

xtaletshexxtaletshex2018/09/14 14:36<a href="http://viciolatino.com">pfizer viagra online pharmacy</a> order viagra pills http://viciolatino.com

ntaletjirintaletjiri2018/09/14 17:38<a href="http://canadian-pharmasale.com">order cialis online safe</a> cheap cialis in australia http://canadian-pharmasale.com

ztaletirxlztaletirxl2018/09/14 19:26<a href="http://timsbmw.com">levitra trial coupon</a> how long does 10mg levitra last http://timsbmw.com

utaletuhrputaletuhrp2018/09/14 19:29<a href="http://top-monterey-salinas-dentists.com">bayer levitra online</a> compare cialis viagra levitra http://top-monterey-salinas-dentists.com

ktaletglvpktaletglvp2018/09/14 20:43<a href="http://canadian-pharmasale.com">cheap cialis from india</a> buy cialis http://canadian-pharmasale.com

italetnucditaletnucd2018/09/14 23:46<a href="http://missreplicawatches.com">buy cialis now</a> generic cialis online http://missreplicawatches.com

mtaletaiajmtaletaiaj2018/09/15 03:04<a href="http://bullsac.com">price of levitra</a> levitra time http://bullsac.com

qtaletaxveqtaletaxve2018/09/15 06:49<a href="http://timsbmw.com">viagra levitra cialis comparison</a> which is better viagra levitra or cialis http://timsbmw.com

italetyvfsitaletyvfs2018/09/15 10:51<a href="http://valladium.com">buy cialis cheap canada</a> mail order viagra cialis http://valladium.com

ltaletievwltaletievw2018/09/15 14:30<a href="http://timsbmw.com">levitra used for</a> levitra brand online http://timsbmw.com

jtaletxhkljtaletxhkl2018/09/15 17:15<a href="http://buyviagraonl1ne.us">best place to order viagra online</a> generic viagra in usa http://buyviagraonl1ne.us

xtaletblhsxtaletblhs2018/09/15 17:51<a href="http://canadian-pharmabuy.com">buy viagra internet</a> order viagra cheap http://canadian-pharmabuy.com

ktaletalsiktaletalsi2018/09/15 19:13<a href="http://vico4me.com">generic viagra professional</a> buy viagra without presc http://vico4me.com

italetnicbitaletnicb2018/09/15 23:32<a href="http://zbloggers.com">propecia hairline</a> propecia vs rogaine http://zbloggers.com

jtaletrshajtaletrsha2018/09/16 02:09<a href="http://buyviagraonl1ne.us">buy viagra online discount</a> cheap viagra canada pharmacy http://buyviagraonl1ne.us

xtaletmskdxtaletmskd2018/09/16 03:57<a href="http://usedrestaurantequipmentaz.com">canadian pharmacy cialis generic</a> buy cialis 5mg http://usedrestaurantequipmentaz.com

ttaletcfilttaletcfil2018/09/16 05:48<a href="http://usedrestaurantequipmentaz.com">cialis pills online</a> cialis canada order http://usedrestaurantequipmentaz.com

rtaletmbyvrtaletmbyv2018/09/16 08:05<a href="http://buycialisonl1ne.us">order cialis online with prescription</a> cialis online http://buycialisonl1ne.us

ytaletqvufytaletqvuf2018/09/16 08:13<a href="http://timsbmw.com">canadian pharmacy levitra</a> levitra south africa http://timsbmw.com

wtaletzkshwtaletzksh2018/09/16 10:30<a href="http://canadian-pharmasale.com">order cialis without prescription</a> cialis coupons http://canadian-pharmasale.com

staletrjnkstaletrjnk2018/09/16 19:56<a href="http://buycialisonl1ne.us">order cialis now</a> order cialis without prescription http://buycialisonl1ne.us

ptalettvehptalettveh2018/09/16 20:11<a href="http://valladium.com">buy brand cialis online</a> cialis pills online http://valladium.com

btaletpdcobtaletpdco2018/09/16 21:28<a href="http://bullsac.com">levitra vs cialis</a> cheapest price for levitra http://bullsac.com

ptaleteanyptaleteany2018/09/17 02:17<a href="http://waltzweekend.com">order viagra uk</a> buy sale viagra http://waltzweekend.com

etaletmtxtetaletmtxt2018/09/17 04:43<a href="http://valladium.com">cheap cialis nz</a> buy genuine cialis online http://valladium.com

ltaletzgqjltaletzgqj2018/09/17 06:16<a href="http://baymontelreno.com">order cialis usa</a> cialis online india http://baymontelreno.com

ytaletoozbytaletoozb2018/09/17 07:29<a href="http://bullsac.com">how long for levitra to take effect</a> levitra brand online http://bullsac.com

staletqtejstaletqtej2018/09/17 10:49<a href="http://canadian-pharmabuy.com">order viagra with paypal</a> natural viagra pills http://canadian-pharmabuy.com

wtaletatapwtaletatap2018/09/17 15:53<a href="http://zbloggers.com">propecia finasteride</a> propecia women http://zbloggers.com

otaletudrcotaletudrc2018/09/17 20:04<a href="http://canadian-pharmabuy.com">best place to buy generic viagra online</a> cheap uk viagra http://canadian-pharmabuy.com

rtaletcvvartaletcvva2018/09/18 00:35<a href="http://waltzweekend.com">buy viagra pill</a> generic viagra in usa http://waltzweekend.com

wtaletzugjwtaletzugj2018/09/18 11:59<a href="http://usedrestaurantequipmentaz.com">discount generic cialis</a> cialis 40 mg online http://usedrestaurantequipmentaz.com

staletlpuvstaletlpuv2018/09/18 13:32<a href="http://waltzweekend.com">cheap viagra without prescription</a> buy viagra online without http://waltzweekend.com

ktalethrtyktalethrty2018/09/18 17:35<a href="http://timsbmw.com">cialis vs levitra vs viagra which one is better</a> levitra online canada http://timsbmw.com

rtaletdjsprtaletdjsp2018/09/18 20:05<a href="http://vico4me.com">buy viagra online cheap</a> viagra online uk http://vico4me.com

wtaletkjtawtaletkjta2018/09/18 23:47<a href="http://viciolatino.com">generic viagra online usa</a> generic viagra online usa http://viciolatino.com

ctaletapuyctaletapuy2018/09/19 01:27<a href="http://buycialisonl1ne.us">generic cialis 100mg</a> order cialis uk http://buycialisonl1ne.us

ftaletlmxjftaletlmxj2018/09/19 02:35<a href="http://zbloggers.com">propecia success</a> propecia online http://zbloggers.com

ataletzuixataletzuix2018/09/19 02:54<a href="http://top-monterey-salinas-dentists.com">levitra vs viagra</a> levitra prices walmart http://top-monterey-salinas-dentists.com

ctaletcuxxctaletcuxx2018/09/19 03:20<a href="http://motechautomotive.com">order cialis with no prescription</a> cheap cialis prices http://motechautomotive.com

ataletendeataletende2018/09/19 06:46<a href="http://buyviagraonl1ne.us">generic viagra no prescription</a> brand viagra online http://buyviagraonl1ne.us

wtaletqzwmwtaletqzwm2018/09/19 09:39<a href="http://waltzweekend.com">viagra pills online</a> cheap viagra usa http://waltzweekend.com

etalethgmretalethgmr2018/09/19 13:47<a href="http://valladium.com">cialis order online india</a> best place to buy cialis http://valladium.com

gtaletipevgtaletipev2018/09/19 15:10<a href="http://timsbmw.com">levitra 10mg</a> best levitra prices http://timsbmw.com

italettqabitalettqab2018/09/19 15:49<a href="http://bullsac.com">levitra 20 mg cost</a> coupons for levitra http://bullsac.com

ftaletlgplftaletlgpl2018/09/19 18:54<a href="http://istanbulexpressonline.com">ordering viagra online</a> buy viagra online no prescription http://istanbulexpressonline.com

otaletuxdcotaletuxdc2018/09/19 19:41<a href="http://h-m-j.com">female viagra</a> order viagra overnight http://h-m-j.com

htaletbudqhtaletbudq2018/09/19 22:48<a href="http://vico4me.com">buy generic viagra online canada</a> generic viagra soft http://vico4me.com

htaletctaahtaletctaa2018/09/20 05:53<a href="http://canadian-pharmabuy.com">mail order viagra uk</a> buy viagra canada http://canadian-pharmabuy.com

qtaletovryqtaletovry2018/09/20 10:05<a href="http://valladium.com">order cialis canada</a> order cialis online us pharmacy http://valladium.com

xtaletfvyoxtaletfvyo2018/09/20 10:58<a href="http://istanbulexpressonline.com">buy generic viagra cheap</a> buy generic viagra online http://istanbulexpressonline.com

ntaletvpldntaletvpld2018/09/20 13:22<a href="http://rabbitinahat.com">order cialis in canada</a> buy cialis online without prescription http://rabbitinahat.com

qtaletbfnkqtaletbfnk2018/09/20 15:03<a href="http://top-monterey-salinas-dentists.com">how long for levitra to take effect</a> cost of levitra per pill http://top-monterey-salinas-dentists.com

ytaletlcthytaletlcth2018/09/20 20:59<a href="http://gigawatt6.com">order cialis in usa</a> buy cialis uk http://gigawatt6.com

staletczbnstaletczbn2018/09/20 22:18<a href="http://bullsac.com">cost of levitra</a> levitra 20 mg http://bullsac.com

ktaletzmbqktaletzmbq2018/09/21 03:43<a href="http://valladium.com">order cialis with no prescription</a> cheap cialis 10mg http://valladium.com

ataletgjxbataletgjxb2018/09/21 11:39<a href="http://zbloggers.com">propecia prescription</a> lamina propecia http://zbloggers.com

wtaletssgcwtaletssgc2018/09/24 07:05<a href="http://timsbmw.com">free levitra</a> how long does it take for levitra to work http://timsbmw.com

otaletinuootaletinuo2018/09/24 07:56<a href="http://canadian-pharmacheap.com">generic cialis pills</a> cheap cialis in usa http://canadian-pharmacheap.com

ntaletpwbantaletpwba2018/09/24 10:01<a href="http://canadian-pharmaorder.com">order brand cialis online</a> cialis generic best price http://canadian-pharmaorder.com

ataletpambataletpamb2018/09/24 10:46<a href="http://buycialisonl1ne.us">generic cialis usa</a> best online pharmacy for cialis http://buycialisonl1ne.us

ztaletkupyztaletkupy2018/09/24 11:16<a href="http://baymontelreno.com">buy discount viagra</a> order viagra onlines http://baymontelreno.com

wtaletujoywtaletujoy2018/09/24 13:29<a href="http://vico4me.com">cheap generic viagra 100mg</a> generic viagra professional http://vico4me.com

ltaletylplltaletylpl2018/09/24 18:33<a href="http://canadian-pharmacheap.com">order generic cialis india</a> order generic cialis http://canadian-pharmacheap.com

rtaletgvpnrtaletgvpn2018/09/24 21:35<a href="http://buyviagraonl1ne.us">generic viagra online usa</a> buy viagra online without prescription http://buyviagraonl1ne.us

btaletngtcbtaletngtc2018/09/24 21:48<a href="http://canadian-pharmacyionline.com">best place to order viagra online</a> viagra online bestellen http://canadian-pharmacyionline.com

mtaletvzokmtaletvzok2018/09/24 22:46<a href="http://canadian-pharmacyisale.com">viagra pills</a> cheap viagra paypal http://canadian-pharmacyisale.com

ztaletrdarztaletrdar2018/09/24 23:39<a href="http://canadian-pharmaonline.com">order viagra online</a> best place to buy generic viagra online http://canadian-pharmaonline.com

ftaletrqjmftaletrqjm2018/09/25 04:58<a href="http://canadian-pharmapills.com">mail order viagra uk</a> cheap herbal viagra http://canadian-pharmapills.com

gtaletrdlugtaletrdlu2018/09/25 06:50<a href="http://valladium.com">buy cialis 10mg</a> generic cialis for order http://valladium.com

ytaletyrqkytaletyrqk2018/09/25 09:39<a href="http://valladium.com">cialis online prescription order</a> how to order cialis from canada http://valladium.com

etaletxyhmetaletxyhm2018/09/25 10:03<a href="http://bullsac.com">how does levitra work</a> levitra brand online http://bullsac.com

gtaletqjvvgtaletqjvv2018/09/25 10:19<a href="http://usedrestaurantequipmentaz.com">buy cialis canada pharmacy</a> cheap cialis http://usedrestaurantequipmentaz.com

mtaletqpcpmtaletqpcp2018/09/25 11:46<a href="http://valladium.com">brand cialis online</a> order cialis online australia http://valladium.com

italetmipuitaletmipu2018/09/25 17:46<a href="http://unishade.com">cheap cialis pill</a> buy cialis 5mg online http://unishade.com

rtaletqtqkrtaletqtqk2018/09/25 18:33<a href="http://canadian-pharmacyisale.com">natural viagra pills</a> buy viagra no prescription http://canadian-pharmacyisale.com

ctaletzcivctaletzciv2018/09/25 21:41<a href="http://buycialisonl1ne.us">buy cialis online in usa</a> best place to buy cialis online http://buycialisonl1ne.us

dtalettfqkdtalettfqk2018/09/25 22:15<a href="http://canadian-pharmasale.com">generic cialis usa</a> order cialis online without prescription http://canadian-pharmasale.com

btaletstrjbtaletstrj2018/09/26 02:35<a href="http://canadian-pharmacyisale.com">viagra online canadian pharmacy</a> viagra pills sale http://canadian-pharmacyisale.com

ftaletengxftaletengx2018/09/26 09:32<a href="http://canadian-pharmacyiorder.com">order cialis online canadian pharmacy</a> cialis online canada http://canadian-pharmacyiorder.com

wtaletafetwtaletafet2018/09/26 10:31<a href="http://canadian-pharmacyisale.com">generic viagra soft</a> pfizer viagra online pharmacy http://canadian-pharmacyisale.com

vtaletmcxhvtaletmcxh2018/09/26 12:57<a href="http://canadian-pharmaonline.com">where can you buy viagra</a> buy viagra las vegas http://canadian-pharmaonline.com

xtaletxvjhxtaletxvjh2018/09/26 13:14<a href="http://usedrestaurantequipmentaz.com">cialis cheap price</a> cialis 5 mg http://usedrestaurantequipmentaz.com

vtaletwygrvtaletwygr2018/09/26 13:49<a href="http://top-monterey-salinas-dentists.com">levitra brand name</a> viagra v levitra http://top-monterey-salinas-dentists.com

ftaletzdnaftaletzdna2018/09/26 16:02<a href="http://buycialisonlineglka.com">cialis india cheap order</a> cialis online http://buycialisonlineglka.com

jtaleteaqbjtaleteaqb2018/09/26 22:18<a href="http://canadian-pharmacyisale.com">best viagra online</a> cheap viagra online http://canadian-pharmacyisale.com

vtaletkhwrvtaletkhwr2018/09/27 00:35<a href="http://canadian-pharmabuy.com">buy viagra canada</a> generic viagra soft http://canadian-pharmabuy.com

ytaletwcdpytaletwcdp2018/09/27 01:56<a href="http://valladium.com">buy cialis in usa</a> cheap cialis online india http://valladium.com

jtaletycbpjtaletycbp2018/09/27 03:20<a href="http://rabbitinahat.com">buy viagra on line</a> best place to buy generic viagra http://rabbitinahat.com

otaletqnmyotaletqnmy2018/09/27 03:49<a href="http://vico4me.com">cheap 25mg viagra</a> best place to buy generic viagra online http://vico4me.com

vtalethtcdvtalethtcd2018/09/27 06:57<a href="http://timsbmw.com">cialis and levitra taken together</a> how long does it take for levitra to work http://timsbmw.com

ktaletikmcktaletikmc2018/09/27 13:45<a href="http://canadian-pharmacyisale.com">viagra online sales</a> buy sale viagra http://canadian-pharmacyisale.com

btaletiwthbtaletiwth2018/09/27 14:45<a href="http://canadian-pharmabuy.com">cheap viagra pills for sale</a> cheap viagra canada pharmacy http://canadian-pharmabuy.com

gtaletlkffgtaletlkff2018/09/27 18:49<a href="http://buycialisonlineglka.com">buy cialis no prescription</a> order cialis no prescription http://buycialisonlineglka.com

ltaletfjidltaletfjid2018/09/27 21:24<a href="http://canadian-pharmacyisale.com">cheap viagra sales</a> discount generic viagra http://canadian-pharmacyisale.com

ltaletvmarltaletvmar2018/09/27 23:38<a href="http://vico4me.com">order viagra online overnight</a> cheap canadian viagra http://vico4me.com

wtaletqrolwtaletqrol2018/09/28 01:05<a href="http://viciolatino.com">viagra online with prescription</a> canadian viagra online http://viciolatino.com

ztaletbhnlztaletbhnl2018/09/28 03:22<a href="http://canadian-pharmacheap.com">buy cialis uk</a> order cialis overnight delivery http://canadian-pharmacheap.com

staletfbugstaletfbug2018/09/28 05:20<a href="http://canadian-pharmamrdi.com">cheap cialis tablet</a> buy cialis online canada pharmacy http://canadian-pharmamrdi.com

rtalethmjwrtalethmjw2018/09/28 10:07<a href="http://timsbmw.com">levitra vs viagra vs cialis</a> levitra online pharmacy http://timsbmw.com

ataletfqzbataletfqzb2018/09/28 17:48<a href="http://canadian-pharmausa.com">cheapest generic viagra online</a> cheap viagra paypal http://canadian-pharmausa.com

ltaletqaqrltaletqaqr2018/09/28 20:29<a href="http://canadian-pharmacyiorder.com">brand cialis name online order</a> buy brand cialis http://canadian-pharmacyiorder.com

utaletslttutaletsltt2018/09/29 00:08<a href="http://canadian-pharmasale.com">buy cheap cialis 20mg</a> cialis 100mg online http://canadian-pharmasale.com

ptaletuqlxptaletuqlx2018/09/29 00:28<a href="http://canadian-pharmaorder.com">discount generic cialis</a> cheap cialis generic canada http://canadian-pharmaorder.com

btaletmblrbtaletmblr2018/09/29 05:06<a href="http://timsbmw.com">cheap levitra no prescription</a> how long does levitra work http://timsbmw.com

utaletxymwutaletxymw2018/09/29 07:27<a href="http://valladium.com">order cialis pills</a> cheap cialis 60 mg http://valladium.com

htaletzbdkhtaletzbdk2018/09/29 20:22<a href="http://canadian-pharmacyiorder.com">cialis 5mg best price</a> order internet cialis http://canadian-pharmacyiorder.com

ttaletlxptttaletlxpt2018/09/29 22:07<a href="http://canadian-pharmacyibuy.com">cheap cialis 20 mg</a> cheap cialis canadian http://canadian-pharmacyibuy.com

jtaletzgkdjtaletzgkd2018/09/30 10:07<a href="http://canadian-pharmasale.com">order cialis online no prescription canada</a> generic cialis 60 mg http://canadian-pharmasale.com

italetacrbitaletacrb2018/09/30 12:57<a href="http://canadian-pharmacyisale.com">best place to order viagra online</a> cheap generic viagra online http://canadian-pharmacyisale.com

ataletadhjataletadhj2018/09/30 15:47<a href="http://unishade.com">cheap cialis sale online</a> generic cialis cheapest price http://unishade.com

utaletguvbutaletguvb2018/09/30 16:13<a href="http://bullsac.com">how long does levitra take to start working</a> levitra online australia http://bullsac.com

xtalettutwxtalettutw2018/09/30 17:08<a href="http://canadian-pharmacyionline.com">buy sale viagra</a> best place to order viagra online http://canadian-pharmacyionline.com

etaletvynnetaletvynn2018/09/30 19:41<a href="http://buycialisonlineglka.com">order cialis pills online</a> order cialis online no prescription http://buycialisonlineglka.com

jtaletkaghjtaletkagh2018/10/01 07:56<a href="http://buycialisonlineglka.com">order 5mg cialis</a> cialis generic price http://buycialisonlineglka.com

atalethnrfatalethnrf2018/10/01 13:19<a href="http://usedrestaurantequipmentaz.com">cheap cialis online</a> cheap cialis 5mg http://usedrestaurantequipmentaz.com

dtalettlwedtalettlwe2018/10/01 13:45<a href="http://bullsac.com">levitra 2.5 mg effectiveness</a> how to take levitra http://bullsac.com

btaletufwnbtaletufwn2018/10/01 17:06<a href="http://rabbitinahat.com">buy viagra online legally</a> female viagra http://rabbitinahat.com

jtaletuvyhjtaletuvyh2018/10/01 17:28<a href="http://timsbmw.com">bayer levitra coupons</a> how to make levitra work better http://timsbmw.com

btaletefndbtaletefnd2018/10/01 21:27<a href="http://usedrestaurantequipmentaz.com">generic cialis from canada</a> cialis online prescription http://usedrestaurantequipmentaz.com

dtaletdljadtaletdlja2018/10/01 22:30<a href="http://buyviagraonl1ne.us">buy viagra without a prescription</a> cheap canadian viagra pills http://buyviagraonl1ne.us

ltaletkqpoltaletkqpo2018/10/02 01:56<a href="http://canadian-pharmaonline.com">viagra online with prescription</a> buy viagra from canada http://canadian-pharmaonline.com

qtaletzzogqtaletzzog2018/10/02 02:38<a href="http://buycialisonl1ne.us">cheap cialis online</a> order cialis daily http://buycialisonl1ne.us

ytaletteieytaletteie2018/10/02 12:04<a href="http://canadian-pharmacyibuy.com">best generic cialis pharmacy</a> generic cialis 5mg online http://canadian-pharmacyibuy.com

ltaletwwjlltaletwwjl2018/10/02 15:24<a href="http://canadian-pharmakgae.com">viagra coupons</a> order viagra online cheap http://canadian-pharmakgae.com

ktaletbxfgktaletbxfg2018/10/02 17:59<a href="http://canadian-pharmakfxy.com">cheap cialis in the usa</a> cheap cialis canada http://canadian-pharmakfxy.com

ftaletmcfwftaletmcfw2018/10/02 22:06<a href="http://canadian-pharmacyionline.com">generic viagra pills online</a> cheap viagra sale http://canadian-pharmacyionline.com

ntalethpqpntalethpqp2018/10/03 04:20<a href="http://rabbitinahat.com">buy cialis online from india</a> generic cialis without a doctor prescription http://rabbitinahat.com

ktaletusvdktaletusvd2018/10/03 05:19<a href="http://canadian-pharmacyisale.com">buy pfizer viagra canada</a> viagra usa price http://canadian-pharmacyisale.com

vtaletstravtaletstra2018/10/03 07:26<a href="http://canadian-pharmamrdi.com">buy cialis with paypal</a> real cialis online pharmacy http://canadian-pharmamrdi.com

ptaletmutsptaletmuts2018/10/03 08:43<a href="http://valladium.com">where to buy cialis online</a> best place to buy cialis http://valladium.com

ytaletdhftytaletdhft2018/10/03 08:46<a href="http://baymontelreno.com">buy cheap cialis uk</a> cheap 5 mg cialis canada http://baymontelreno.com

italetitmvitaletitmv2018/10/03 11:46<a href="http://canadian-pharmakgae.com">best place to buy viagra</a> order brand name viagra online http://canadian-pharmakgae.com

gtaletuvrvgtaletuvrv2018/10/03 15:33<a href="http://buycialisonlineglka.com">order cialis uk pharmacy</a> buy generic cialis canada online http://buycialisonlineglka.com

atalethgifatalethgif2018/10/03 18:12<a href="http://baymontelreno.com">where to buy real cialis online</a> cialis canada cheap http://baymontelreno.com

ftaletskgvftaletskgv2018/10/03 18:48<a href="http://canadian-pharmacyibuy.com">ordering cialis online</a> mail order cialis http://canadian-pharmacyibuy.com

ptaletxbfcptaletxbfc2018/10/03 19:44<a href="http://canadian-pharmakgae.com">viagra prices walmart canada</a> order generic viagra usa http://canadian-pharmakgae.com

rtaletjgezrtaletjgez2018/10/03 20:24<a href="http://buyviagraonl1ne.us">viagra canada for sale</a> buy viagra on line cheap http://buyviagraonl1ne.us

ytaletfxmsytaletfxms2018/10/04 08:23<a href="http://canadian-pharmacheap.com">real cialis online canada</a> purchase cialis online in canada http://canadian-pharmacheap.com

htaletcobbhtaletcobb2018/10/04 13:15<a href="http://rabbitinahat.com">cheap cialis soft</a> ordering cialis online http://rabbitinahat.com

xtaletoeicxtaletoeic2018/10/04 16:07<a href="http://canadian-pharmaonline.com">pfizer viagra online sales</a> viagra mail order usa http://canadian-pharmaonline.com

jtaletbhdqjtaletbhdq2018/10/04 18:38<a href="http://canadian-pharmapills.com">pfizer viagra online pharmacy</a> discount viagra http://canadian-pharmapills.com

ataletcpjhataletcpjh2018/10/04 19:47<a href="http://viciolatino.com">best herbal viagra for women</a> where to buy viagra online http://viciolatino.com

ktaleteajnktaleteajn2018/10/04 23:04<a href="http://top-monterey-salinas-dentists.com">what are levitra tablets used for</a> levitra dosage generic http://top-monterey-salinas-dentists.com

ytaletqhqqytaletqhqq2018/10/04 23:07<a href="http://rabbitinahat.com">order 5mg cialis price</a> buy cialis now http://rabbitinahat.com

ztaletgzbxztaletgzbx2018/10/05 01:41<a href="http://canadian-pharmamrdi.com">where to buy real cialis</a> cheap cialis usa http://canadian-pharmamrdi.com

rtaletxkncrtaletxknc2018/10/05 02:40<a href="http://canadian-pharmaonline.com">viagra 100mg price</a> generic viagra http://canadian-pharmaonline.com

mtaletywwmmtaletywwm2018/10/05 03:42<a href="http://canadian-pharmasale.com">cheap cialis 60 mg</a> generic cialis canada coupon http://canadian-pharmasale.com

ntaletvfcuntaletvfcu2018/10/05 04:16<a href="http://unishade.com">generic cialis usa</a> cialis 20mg price http://unishade.com

ktaletwmyhktaletwmyh2018/10/05 07:02<a href="http://canadian-pharmacyionline.com">real viagra online without script</a> mail order viagra canada http://canadian-pharmacyionline.com

vtaletkjspvtaletkjsp2018/10/06 03:17<a href="http://viciolatino.com">order viagra online without a prescription</a> brand viagra 50mg online http://viciolatino.com

gtaletiqmfgtaletiqmf2018/10/06 09:39<a href="http://missreplicawatches.com">cheapest cialis online</a> generic cialis canada online pharmacy http://missreplicawatches.com

dtaletzkjrdtaletzkjr2018/10/06 15:58<a href="http://valladium.com">cheap cialis online without script</a> cialis for sale online http://valladium.com

etaletwacgetaletwacg2018/10/06 16:40<a href="http://usedrestaurantequipmentaz.com">buy cialis online ireland</a> how to order cialis from india http://usedrestaurantequipmentaz.com

rtaletwkiprtaletwkip2018/10/06 19:45<a href="http://canadian-pharmacyionline.com">cheap viagra pills for men</a> buy viagra online without prescription http://canadian-pharmacyionline.com

utaletxfvtutaletxfvt2018/10/07 02:08<a href="http://canadian-pharmacyionline.com">generic viagra</a> viagra online paypal uk http://canadian-pharmacyionline.com

ftaletcrxmftaletcrxm2018/10/07 04:32<a href="http://top-monterey-salinas-dentists.com">generic for levitra</a> levitra cheapest price http://top-monterey-salinas-dentists.com

otaletwsoqotaletwsoq2018/10/07 06:23<a href="http://canadian-pharmaorder.com">cialis price per pill</a> order cialis online uk http://canadian-pharmaorder.com

jtaletkiayjtaletkiay2018/10/07 07:29<a href="http://valladium.com">buy cheap cialis from canada</a> cialis 20 mg price in usa http://valladium.com

mtaletbqlhmtaletbqlh2018/10/07 12:31<a href="http://canadian-pharmacyiorder.com">where to buy real cialis online</a> generic cialis lowest price http://canadian-pharmacyiorder.com

mtalethbwimtalethbwi2018/10/07 14:07<a href="http://canadian-pharmabuy.com">female viagra</a> generic viagra buy online http://canadian-pharmabuy.com

wtaletcbwowtaletcbwo2018/10/09 11:39<a href="http://timsbmw.com">cheap levitra professional</a> levitra 20 mg how long does it last http://timsbmw.com

jtaletxssyjtaletxssy2018/10/09 16:02<a href="http://canadian-pharmausa.com">canadian pharmacy generic viagra</a> order viagra generic 50mg http://canadian-pharmausa.com

qtaletyflhqtaletyflh2018/10/09 17:56<a href="http://buycialisonlineglka.com">order cialis online no prescription</a> female cialis http://buycialisonlineglka.com

ptaletdyopptaletdyop2018/10/09 22:35<a href="http://unishade.com">order cialis online from canada</a> buy cialis 10 mg online http://unishade.com

etaletpekhetaletpekh2018/10/10 00:25<a href="http://usedrestaurantequipmentaz.com">buy cialis professional canada</a> cialis online pharmacy reviews http://usedrestaurantequipmentaz.com

wtaletypzcwtaletypzc2018/10/10 01:48<a href="http://missreplicawatches.com">order cialis super active</a> where to buy cialis online forum http://missreplicawatches.com

etaletxdauetaletxdau2018/10/10 02:38<a href="http://canadian-pharmausa.com">generic viagra sildenafil</a> canadian generic viagra http://canadian-pharmausa.com

ltaletpzphltaletpzph2018/10/10 06:42<a href="http://unishade.com">buy generic cialis online in usa</a> order cheap cialis http://unishade.com

ptaletbulxptaletbulx2018/10/10 07:38<a href="http://rabbitinahat.com">best place to buy generic cialis online</a> buy 20 mg cialis online http://rabbitinahat.com

btaletmdribtaletmdri2018/10/10 09:17<a href="http://vico4me.com">viagra super active caps</a> cheap viagra with prescription http://vico4me.com

ataletfzjnataletfzjn2018/10/10 09:26<a href="http://gigawatt6.com">buy cialis cheap</a> cialis 10 mg http://gigawatt6.com

ntaletlzqgntaletlzqg2018/10/10 13:54<a href="http://missreplicawatches.com">where to buy real cialis online</a> buy 20 mg cialis online http://missreplicawatches.com

utaletgqnxutaletgqnx2018/10/10 19:02<a href="http://h-m-j.com">best generic viagra</a> buy viagra soft 100mg http://h-m-j.com

JasonExinyJasonExiny2019/01/24 00:43Это очень нужно.

2011-08-13

[TCTDB]tctdbput

22:54

/* Store a record into a table database object. */
bool tctdbput(TCTDB *tdb, const void *pkbuf, int pksiz, TCMAP *cols){
  assert(tdb && pkbuf && pksiz >= 0 && cols);
  int vsiz;
  if(tcmapget(cols, "", 0, &vsiz)){
    tctdbsetecode(tdb, TCEINVALID, __FILE__, __LINE__, __func__);
    return false;  }
  if(!TDBLOCKMETHOD(tdb, true)) return false;
  if(!tdb->open || !tdb->wmode){
    tctdbsetecode(tdb, TCEINVALID, __FILE__, __LINE__, __func__);
    TDBUNLOCKMETHOD(tdb);
    return false;
  }
  bool rv = tctdbputimpl(tdb, pkbuf, pksiz, cols, TDBPDOVER);
  TDBUNLOCKMETHOD(tdb);
  return rv;
}
  1. table databaseのロックを取得
  2. tctdbputimpl
  3. table databaseのロックを解放

[TCTDB]tctdbputimpl

22:54

/* Store a record into a table database object.                                                                                                                              
   `tdb' specifies the table database object.                                                                                                                                
   `pkbuf' specifies the pointer to the region of the primary key.                                                                                                           
   `pksiz' specifies the size of the region of the primary key.                                                                                                              
   `cols' specifies a map object containing columns.                                                                                                                         
   `dmode' specifies behavior when the key overlaps.                                                                                                                         
   If successful, the return value is true, else, it is false. */
=>atic bool tctdbputimpl(TCTDB *tdb, const void *pkbuf, int pksiz, TCMAP *cols, int dmode){
  assert(tdb && pkbuf && pksiz >= 0 && cols);
  bool err = false;
  int osiz;
  char *obuf = tchdbget(tdb->hdb, pkbuf, pksiz, &osiz);
  if(obuf){
    if(dmode == TDBPDKEEP){
      tctdbsetecode(tdb, TCEKEEP, __FILE__, __LINE__, __func__);
      TCFREE(obuf);
      return false;
    }
    TCMAP *ocols = tcmapload(obuf, osiz);
    if(dmode == TDBPDCAT){
      TCMAP *ncols = tcmapnew2(TCMAPRNUM(cols) + 1);
      tcmapiterinit(cols);
      const char *kbuf;
      int ksiz;
      while((kbuf = tcmapiternext(cols, &ksiz)) != NULL){
        int vsiz;
        const char *vbuf = tcmapiterval(kbuf, &vsiz);
        if(tcmapputkeep(ocols, kbuf, ksiz, vbuf, vsiz)) tcmapput(ncols, kbuf, ksiz, vbuf, vsiz);
      }
      if(!tctdbidxput(tdb, pkbuf, pksiz, ncols)) err = true;
      tcmapdel(ncols);
      int csiz;
      char *cbuf = tcmapdump(ocols, &csiz);
      if(!tchdbput(tdb->hdb, pkbuf, pksiz, cbuf, csiz)) err = true;
      TCFREE(cbuf);
    } else {      
      TCMAP *ncols = tcmapnew2(TCMAPRNUM(cols) + 1);
      tcmapiterinit(cols);
      const char *kbuf;
      int ksiz;
      while((kbuf = tcmapiternext(cols, &ksiz)) != NULL){
        int vsiz;
        const char *vbuf = tcmapiterval(kbuf, &vsiz);
        int osiz;
        const char *obuf = tcmapget(ocols, kbuf, ksiz, &osiz);
        if(obuf && osiz == vsiz && !memcmp(obuf, vbuf, osiz)){
          tcmapout(ocols, kbuf, ksiz);
        } else {
          tcmapput(ncols, kbuf, ksiz, vbuf, vsiz);
        }
      }
      if(!tctdbidxout(tdb, pkbuf, pksiz, ocols)) err = true;
      if(!tctdbidxput(tdb, pkbuf, pksiz, ncols)) err = true;
      tcmapdel(ncols);
      int csiz;      
      char *cbuf = tcmapdump(cols, &csiz);
      if(!tchdbput(tdb->hdb, pkbuf, pksiz, cbuf, csiz)) err = true;
      TCFREE(cbuf);
    }
    tcmapdel(ocols);
    TCFREE(obuf);
  } else {
    if(!tctdbidxput(tdb, pkbuf, pksiz, cols)) err = true;
    int csiz;
    char *cbuf = tcmapdump(cols, &csiz);
    if(!tchdbput(tdb->hdb, pkbuf, pksiz, cbuf, csiz)) err = true;
    TCFREE(cbuf);
  }
  return !err;
}
  1. 指定されたkeyで、hash databaseからエントリを取得
  2. エントリが存在していた場合、以下を実行
    1. dmodeがTDBPDKEEPならエラーで戻る
    2. dmodeがTDBPDCATの場合、以下を実行
      1. 元のmapにcolsの内容を加える
      2. 加えた分のindexを作成
    3. dmodeが(TDBPDKEEP/TDBPDCAT)以外の場合
      1. エントリ内に同一のkeyがあれば当該レコードを削除?(ncolsには登録しない?)
      2. エントリ内に同一のkeyがなければ新しいmapに詰めてhash databaseにput
      3. 旧エントリのindexを削除
      4. 新エントリのindexを作成
  3. エントリが存在していない場合、以下を実行
    1. 指定されたcolsをhash databaseにput

DenverDenver2011/11/29 14:05You really found a way to make this whole prosecs easier.

ruwxiysvruwxiysv2011/11/30 00:36TQ0a7a <a href="http://srfcwslcgnra.com/">srfcwslcgnra</a>

bkyurjuesmsbkyurjuesms2011/12/02 23:56GB3oru <a href="http://mlsskdztafdv.com/">mlsskdztafdv</a>

2011-08-12

[TCTDB]tctdbclose

23:24

/* Close a table database object. */
bool tctdbclose(TCTDB *tdb){
  assert(tdb);
  if(!TDBLOCKMETHOD(tdb, true)) return false;
  if(!tdb->open){
    tctdbsetecode(tdb, TCEINVALID, __FILE__, __LINE__, __func__);
    TDBUNLOCKMETHOD(tdb);
    return false;
  }
  bool rv = tctdbcloseimpl(tdb);
  TDBUNLOCKMETHOD(tdb);
  return rv;
}
  1. メソッドロック取得
  2. table databaseをclose(tctdbcloseimpl)
  3. メソッドロックを解放

[TCTDB]tctdbcloseimpl

00:00

/* Abort the transaction of a table database object.                                                                                                                         
   `tdb' specifies the table database object.                                                                                                                                
   If successful, the return value is true, else, it is false. */
static bool tctdbtranabortimpl(TCTDB *tdb){
  assert(tdb);
  bool err = false;
  if(!tchdbtranabort(tdb->hdb)) err = true;
  TDBIDX *idxs = tdb->idxs;
  int inum = tdb->inum;
  for(int i = 0; i < inum; i++){
    TDBIDX *idx = idxs + i;
    switch(idx->type){
      case TDBITTOKEN:
      case TDBITQGRAM:
        tcmapclear(idx->cc);
        break;
    }
  }  
  for(int i = 0; i < inum; i++){
    TDBIDX *idx = idxs + i;
    switch(idx->type){
      case TDBITLEXICAL:
      case TDBITDECIMAL:
      case TDBITTOKEN:
      case TDBITQGRAM:
        if(!tcbdbtranabort(idx->db)){
          tctdbsetecode(tdb, tcbdbecode(idx->db), __FILE__, __LINE__, __func__);
          err = true;
        }
        break;
    }
  }
  return !err;
}
  1. hash databaseのtransactionをabort
  2. 各indexに対応するB+tree databaseのtransactionをabort
/* Abort the transaction of a hash database object. */
=>ol tchdbtranabort(TCHDB *hdb){  assert(hdb);
  if(!HDBLOCKMETHOD(hdb, true)) return false;
  if(hdb->fd < 0 || !(hdb->omode & HDBOWRITER) || !hdb->tran){
    tchdbsetecode(hdb, TCEINVALID, __FILE__, __LINE__, __func__);
    HDBUNLOCKMETHOD(hdb);
    return false;
  }
  bool err = false;
  if(hdb->async && !tchdbflushdrp(hdb)) err = true;
  if(!tchdbmemsync(hdb, false)) err = true;
  if(!tchdbwalrestore(hdb, hdb->path)) err = true;
  char hbuf[HDBHEADSIZ];
  if(lseek(hdb->fd, 0, SEEK_SET) == -1){
    tchdbsetecode(hdb, TCESEEK, __FILE__, __LINE__, __func__);
    err = false;
  } else if(!tcread(hdb->fd, hbuf, HDBHEADSIZ)){
    tchdbsetecode(hdb, TCEREAD, __FILE__, __LINE__, __func__);
    err = false;
  } else {
    tchdbloadmeta(hdb, hbuf);
  }
  hdb->dfcur = hdb->frec;
  hdb->iter = 0;
  hdb->xfsiz = 0;
  hdb->fbpnum = 0;
  if(hdb->recc) tcmdbvanish(hdb->recc);
  hdb->tran = false;
  HDBUNLOCKMETHOD(hdb);
  return !err;
}
  1. 非同期であれば、deleyed record poolの内容をmapped memory書き込み
  2. hash database等のメタ情報をmapped memoryに書き込み
  3. Write-Ahead Logging (WAL)によるリストア
  4. メタ情報をmapped memoryから読み直してhash databaseに設定する
/* Abort the transaction of a B+ tree database object. */
=>ol tcbdbtranabort(TCBDB *bdb){  assert(bdb);
  if(!BDBLOCKMETHOD(bdb, true)) return false;
  if(!bdb->open || !bdb->wmode || !bdb->tran){
    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);
    BDBUNLOCKMETHOD(bdb);
    return false;
  }
  tcbdbcachepurge(bdb);
  memcpy(bdb->opaque, bdb->rbopaque, BDBOPAQUESIZ);
  tcbdbloadmeta(bdb);
  TCFREE(bdb->rbopaque);
  bdb->tran = false;
  bdb->rbopaque = NULL;
  bdb->hleaf = 0;
  bdb->lleaf = 0;
  bdb->clock++;
  bool err = false;
  if(!tcbdbcacheadjust(bdb)) err = true;
  if(!tchdbtranvoid(bdb->hdb)) err = true;
  BDBUNLOCKMETHOD(bdb);
  return !err;
}
  1. dirtyなcache pageをクリア
  2. opaqueバッファロールバックopaqueバッファの内容を書き込む
  3. opaqueバッファからメタデータを取り出し、B+ tree databaseに設定する
  4. B+ tree databaseのcache(leaf/node)のアジャスト
  5. 内部のhash databaseのロックを取って、hdb->tran = false

[TCTDB]tchdbmemsync

00:00

/* Synchronize updating contents on memory of a hash database object. */
=>ol tchdbmemsync(TCHDB *hdb, bool phys){  assert(hdb);
  if(hdb->fd < 0 || !(hdb->omode & HDBOWRITER)){
    tchdbsetecode(hdb, TCEINVALID, __FILE__, __LINE__, __func__);
    return false;
  }
  bool err = false;
  char hbuf[HDBHEADSIZ];
  tchdbdumpmeta(hdb, hbuf);
  memcpy(hdb->map, hbuf, HDBOPAQUEOFF);
  if(phys){
    size_t xmsiz = (hdb->xmsiz > hdb->msiz) ? hdb->xmsiz : hdb->msiz;
    if(msync(hdb->map, xmsiz, MS_SYNC) == -1){
      tchdbsetecode(hdb, TCEMMAP, __FILE__, __LINE__, __func__);
      err = true;
    }    if(fsync(hdb->fd) == -1){
      tchdbsetecode(hdb, TCESYNC, __FILE__, __LINE__, __func__);
      err = true;
    }
  }
  return !err;
}
  1. hbufにhash databaseのメタ情報(下記コード参照)を書き込む
  2. hash databaseのmapped memoryにメタ情報をコピー
  3. pyhsがtrueの場合、mapped memoryをファイルに同期する
/* Serialize meta data into a buffer.                                                                                                                                        
   `hdb' specifies the hash database object.                                                                                                                                 
   `hbuf' specifies the buffer. */
=>atic void tchdbdumpmeta(TCHDB *hdb, char *hbuf){  memset(hbuf, 0, HDBHEADSIZ);
  sprintf(hbuf, "%s\n%s:%d\n", HDBMAGICDATA, _TC_FORMATVER, _TC_LIBVER);
  memcpy(hbuf + HDBTYPEOFF, &(hdb->type), sizeof(hdb->type));
  memcpy(hbuf + HDBFLAGSOFF, &(hdb->flags), sizeof(hdb->flags));
  memcpy(hbuf + HDBAPOWOFF, &(hdb->apow), sizeof(hdb->apow));
  memcpy(hbuf + HDBFPOWOFF, &(hdb->fpow), sizeof(hdb->fpow));
  memcpy(hbuf + HDBOPTSOFF, &(hdb->opts), sizeof(hdb->opts));
  uint64_t llnum;
  llnum = hdb->bnum;
  llnum = TCHTOILL(llnum);
  memcpy(hbuf + HDBBNUMOFF, &llnum, sizeof(llnum));
  llnum = hdb->rnum;
  llnum = TCHTOILL(llnum);
  memcpy(hbuf + HDBRNUMOFF, &llnum, sizeof(llnum));
  llnum = hdb->fsiz;  llnum = TCHTOILL(llnum);
  memcpy(hbuf + HDBFSIZOFF, &llnum, sizeof(llnum));
  llnum = hdb->frec;
  llnum = TCHTOILL(llnum);
  memcpy(hbuf + HDBFRECOFF, &llnum, sizeof(llnum));
}

2011-08-11TokyoCabinetのTDBのコードを読む

[TCTDB]tctdbnew

21:33

/* Create a table database object. */
TCTDB *tctdbnew(void){
  TCTDB *tdb;
  TCMALLOC(tdb, sizeof(*tdb));
  tctdbclear(tdb);
  tdb->hdb = tchdbnew();
  tchdbtune(tdb->hdb, TDBDEFBNUM, TDBDEFAPOW, TDBDEFFPOW, 0);
  tchdbsetxmsiz(tdb->hdb, TDBDEFXMSIZ);
  return tdb;
}
  1. TDB用のヒープに領域を確保する(TCMALLOCはmalloc)
  2. TDBの各値を初期化
  3. TDBで保持するhash databaseを作成
  4. hash databaseのパラメータを設定
  5. hash databaseのextra mapped memoryのsizeを設定(アラインメントされる)

[TCTDB]tctdbdel

21:46

/* Delete a table database object. */
void tctdbdel(TCTDB *tdb){
  assert(tdb);
  if(tdb->open) tctdbclose(tdb);
  tchdbdel(tdb->hdb);
  if(tdb->mmtx){
    pthread_rwlock_destroy(tdb->mmtx);
    TCFREE(tdb->mmtx);
  }
  TCFREE(tdb);
}
  1. openしてたらクローズ(tctdbclose)
  2. hash dabaseの削除
  3. tdbのmutexを破棄し(pthread.h)、mutexの領域を解放
  4. tdbの領域を解放

[TCTDB]tctdbsetmutex

21:46

/* Set mutual exclusion control of a table database object for threading. */
bool tctdbsetmutex(TCTDB *tdb){
  assert(tdb);
  if(!TCUSEPTHREAD) return true;
  if(tdb->mmtx || tdb->open){
    tctdbsetecode(tdb, TCEINVALID, __FILE__, __LINE__, __func__);
    return false;
  }
  TCMALLOC(tdb->mmtx, sizeof(pthread_rwlock_t));
  bool err = false;
  if(pthread_rwlock_init(tdb->mmtx, NULL) != 0) err = true;  if(err){
    TCFREE(tdb->mmtx);
    tdb->mmtx = NULL;
    return false;
  }
  return tchdbsetmutex(tdb->hdb);
}
  1. pthreadを使ってなければなければ何もしない
  2. mutexが既に用意されているか、open済みであればエラー
  3. mutexのヒープ領域を確保し、初期化
  4. hash databaseのmutexを準備
#if defined(_MYNOPTHREAD)
=>efine TCUSEPTHREAD   0
#else
#define TCUSEPTHREAD   1
#endif

[TCTDB]tctdbtune

22:23

/* Set the tuning parameters of a table database object. */
bool tctdbtune(TCTDB *tdb, int64_t bnum, int8_t apow, int8_t fpow, uint8_t opts){
  assert(tdb);
  if(tdb->open){    tctdbsetecode(tdb, TCEINVALID, __FILE__, __LINE__, __func__);
    return false;
  }
  tdb->opts = opts;
  uint8_t hopts = 0;
  if(opts & TDBTLARGE) hopts |= HDBTLARGE;
  if(opts & TDBTDEFLATE) hopts |= HDBTDEFLATE;
  if(opts & TDBTBZIP) hopts |= HDBTBZIP;
  if(opts & TDBTTCBS) hopts |= HDBTTCBS;
  if(opts & TDBTEXCODEC) hopts |= HDBTEXCODEC;
  bnum = (bnum > 0) ? bnum : TDBDEFBNUM;
  apow = (apow >= 0) ? apow : TDBDEFAPOW;
  fpow = (fpow >= 0) ? fpow : TDBDEFFPOW;
  return tchdbtune(tdb->hdb, bnum, apow, fpow, hopts);
}
  1. TDBに設定されているチューニングオプションをhash databaseに設定する
  2. bucket number/alignment power/free block pool powerをhash databaseに設定する
enum {                                   /* enumeration for tuning options */
=>HDBTLARGE = 1 << 0,                    /* use 64-bit bucket array */
  HDBTDEFLATE = 1 << 1,                  /* compress each record with Deflate */
  HDBTBZIP = 1 << 2,                     /* compress each record with BZIP2 */
  HDBTTCBS = 1 << 3,                     /* compress each record with TCBS */
  HDBTEXCODEC = 1 << 4                   /* compress each record with custom functions */
};
=>efine TDBDEFBNUM     131071            // default bucket number                                                                                                            
#define TDBDEFAPOW     4                 // default alignment power                                                                                                          
#define TDBDEFFPOW     10                // default free block pool power 

[TCTDB]tctdbopen

22:57

/* Open a database file and connect a table database object. */
bool tctdbopen(TCTDB *tdb, const char *path, int omode){
  assert(tdb && path);
  if(!TDBLOCKMETHOD(tdb, true)) return false;
  if(tdb->open){
    tctdbsetecode(tdb, TCEINVALID, __FILE__, __LINE__, __func__);
    TDBUNLOCKMETHOD(tdb);
    return false;
  }
  bool rv = tctdbopenimpl(tdb, path, omode);
  TDBUNLOCKMETHOD(tdb);
  return rv;
}
  1. メソッドロック取得
  2. TDBをopen(tctdbopenimpl)
  3. メソッドロックを解放
/* private macros */
=>efine TDBLOCKMETHOD(TC_tdb, TC_wr)                            \
  ((TC_tdb)->mmtx ? tctdblockmethod((TC_tdb), (TC_wr)) : true)
#define TDBUNLOCKMETHOD(TC_tdb)                         \
  ((TC_tdb)->mmtx ? tctdbunlockmethod(TC_tdb) : true)
#define TDBTHREADYIELD(TC_tdb)                          \
  do { if((TC_tdb)->mmtx) sched_yield(); } while(false)
/* Lock a method of the table database object.                                                                                                                               
   `tdb' specifies the table database object.                                                                                                                                
   `wr' specifies whether the lock is writer or not.                                                                                                                         
   If successful, the return value is true, else, it is false. */
static bool tctdblockmethod(TCTDB *tdb, bool wr){
  assert(tdb);
  if(wr ? pthread_rwlock_wrlock(tdb->mmtx) != 0 : pthread_rwlock_rdlock(tdb->mmtx) != 0){
    tctdbsetecode(tdb, TCETHREAD, __FILE__, __LINE__, __func__);
    return false;
  }
  TCTESTYIELD();
  return true;
}
  1. 引数wrがtrueの場合はwrite/read lockを、falseの場合はread lockを取得
/* Unlock a method of the table database object.                                                                                                                             
   `tdb' specifies the table database object.                                                                                                                                
   If successful, the return value is true, else, it is false. */
static bool tctdbunlockmethod(TCTDB *tdb){
  assert(tdb);
  if(pthread_rwlock_unlock(tdb->mmtx) != 0){
    tctdbsetecode(tdb, TCETHREAD, __FILE__, __LINE__, __func__);
    return false;
  }
  TCTESTYIELD();
  return true;
}
  1. unlockはwrite/read lockを指定してロック解放

[TCTDB]tctdbopenimpl

22:57

/* Open a database file and connect a table database object.                         
   `tdb' specifies the table database object.                                        
   `path' specifies the path of the internal database file.                          
   `omode' specifies the connection mode.                                            
   If successful, the return value is true, else, it is false. */
=>atic bool tctdbopenimpl(TCTDB *tdb, const char *path, int omode){
  assert(tdb && path);
  int dbgfd = tchdbdbgfd(tdb->hdb);
  TCCODEC enc, dec;
  void *encop, *decop;
  tchdbcodecfunc(tdb->hdb, &enc, &encop, &dec, &decop);
  int homode = HDBOREADER;
  int bomode = BDBOREADER;
  if(omode & TDBOWRITER){
    homode = HDBOWRITER;
    bomode = BDBOWRITER;
    if(omode & TDBOCREAT){
      homode |= HDBOCREAT;
      bomode |= BDBOCREAT;
    }
    if(omode & TDBOTRUNC){
      homode |= HDBOTRUNC;
      bomode |= BDBOTRUNC;
    }
    tdb->wmode = true;
  } else {
    tdb->wmode = false;
  }
  if(omode & TDBONOLCK){
    homode |= HDBONOLCK;
    bomode |= BDBONOLCK;
  }
  if(omode & TDBOLCKNB){
    homode |= HDBOLCKNB;
    bomode |= BDBOLCKNB;
  }
  if(omode & TDBOTSYNC){
    homode |= HDBOTSYNC;
    bomode |= BDBOTSYNC;
  }
  tchdbsettype(tdb->hdb, TCDBTTABLE);
  if(!tchdbopen(tdb->hdb, path, homode)) return false;
  char *tpath = tcsprintf("%s%c%s%c*", path, MYEXTCHR, TDBIDXSUFFIX, MYEXTCHR);
  if((omode & TDBOWRITER) && (omode & TDBOTRUNC)){
    TCLIST *paths = tcglobpat(tpath);
    int pnum = TCLISTNUM(paths);
    for(int i = 0; i < pnum; i++){
      unlink(TCLISTVALPTR(paths, i));
    }
    tclistdel(paths);
  }
  TCLIST *paths = tcglobpat(tpath);
  int pnum = TCLISTNUM(paths);
  TCMALLOC(tdb->idxs, sizeof(tdb->idxs[0]) * pnum + 1);
  TDBIDX *idxs = tdb->idxs;
  int inum = 0;
  for(int i = 0; i < pnum; i++){
    const char *ipath = TCLISTVALPTR(paths, i);
    if(!tcstrfwm(ipath, path)) continue;
    const char *rp = ipath + strlen(path);
    if(*rp != MYEXTCHR) continue;
    rp++;
    if(!tcstrfwm(rp, TDBIDXSUFFIX)) continue;
    rp += strlen(TDBIDXSUFFIX);
    if(*rp != MYEXTCHR) continue;
    rp++;
    char *stem = tcstrdup(rp);
    char *ep = strrchr(stem, MYEXTCHR);
    if(!ep) continue;
    *(ep++) = '\0';
    int nsiz;
    char *name = tcurldecode(stem, &nsiz);
    if(!strcmp(ep, "lex") || !strcmp(ep, "dec") || !strcmp(ep, "tok") || !strcmp(ep,\
 "qgr")){
      TCBDB *bdb = tcbdbnew();
      if(dbgfd >= 0) tcbdbsetdbgfd(bdb, dbgfd);
      if(tdb->mmtx) tcbdbsetmutex(bdb);
      if(enc && dec) tcbdbsetcodecfunc(bdb, enc, encop, dec, decop);
      tcbdbsetcache(bdb, tdb->lcnum, tdb->ncnum);
      tcbdbsetxmsiz(bdb, tchdbxmsiz(tdb->hdb));
      tcbdbsetdfunit(bdb, tchdbdfunit(tdb->hdb));
      tcbdbsetlsmax(bdb, TDBIDXLSMAX);
      if(tcbdbopen(bdb, ipath, bomode)){
        idxs[inum].name = tcstrdup(name);
        idxs[inum].type = TDBITLEXICAL;
        if(!strcmp(ep, "dec")){
          idxs[inum].type = TDBITDECIMAL;
        } else if(!strcmp(ep, "tok")){
          idxs[inum].type = TDBITTOKEN;
        } else if(!strcmp(ep, "qgr")){
          idxs[inum].type = TDBITQGRAM;
        }
        idxs[inum].db = bdb;
        idxs[inum].cc = NULL;
        if(idxs[inum].type == TDBITTOKEN){
          idxs[inum].cc = tcmapnew2(TDBIDXICCBNUM);
        } else if(idxs[inum].type == TDBITQGRAM){
          idxs[inum].cc = tcmapnew2(TDBIDXICCBNUM);
        }
        inum++;
      } else {
        tcbdbdel(bdb);
      }
    }
    TCFREE(name);
    TCFREE(stem);
  }
  tclistdel(paths);
  TCFREE(tpath);
  tdb->inum = inum;
  tdb->open = true;
  uint8_t hopts = tchdbopts(tdb->hdb);
  uint8_t opts = 0;
  if(hopts & HDBTLARGE) opts |= TDBTLARGE;
  if(hopts & HDBTDEFLATE) opts |= TDBTDEFLATE;
  if(hopts & HDBTBZIP) opts |= TDBTBZIP;
  if(hopts & HDBTTCBS) opts |= TDBTTCBS;
  if(hopts & HDBTEXCODEC) opts |= TDBTEXCODEC;
  tdb->opts = opts;
  tdb->tran = false;
  return true;
}
  1. tchdbdbgfd(hash databaseのファイルディスクリプタ(デバッグ用))を取得
  2. カスタムコーデック関数を取得
  3. 引数で指定されたomodeによって、hash database、B+tree databaseのモードを決める
  4. hash databaseのtypeにtable databaseセットする
  5. hash databaseをopen
  6. TDBOWRITER 且つ TDBOTRUNCであればインデックスファイルを消す?
  7. インデックス用のB+tree databaseをopen
  8. hash databaseのoptionを取り出して、その一部をtable databaseのoptionとして再設定
/* Get the custom codec functions of a hash database object. */
void tchdbcodecfunc(TCHDB *hdb, TCCODEC *ep, void **eop, TCCODEC *dp, void **dop){
  assert(hdb && ep && eop && dp && dop);
  *ep = hdb->enc;
  *eop = hdb->encop;
  *dp = hdb->dec;
  *dop = hdb->decop;
}
/* type of the pointer to a encoding or decoding function.                           
   `ptr' specifies the pointer to the region.                                        
   `size' specifies the size of the region.                                          
   `sp' specifies the pointer to the variable into which the size of the region of the return                                                                            
   value is assigned.                                                                
   `op' specifies the pointer to the optional opaque object.                         
   If successful, the return value is the pointer to the result object allocated with `malloc'                                                                           
   call, else, it is `NULL'. */
=>pedef void *(*TCCODEC)(const void *ptr, int size, int *sp, void *op);
enum {                                   /* enumeration for database type */
  TCDBTHASH,                             /* hash table */
  TCDBTBTREE,                            /* B+ tree */
  TCDBTFIXED,                            /* fixed-length */=>TCDBTTABLE                             /* table */
};