From f1a0dd54a3eca0f904e0a6e18a05417adbd0ab2f Mon Sep 17 00:00:00 2001 From: Jerry Sievert Date: Tue, 16 May 2023 09:29:44 -0700 Subject: [PATCH] [columnar] Adds column level caching and controls --- columnar/src/backend/columnar/columnar.c | 26 + .../src/backend/columnar/columnar_cache.c | 376 ++ .../backend/columnar/columnar_customscan.c | 49 + .../src/backend/columnar/columnar_reader.c | 70 +- .../src/backend/columnar/columnar_tableam.c | 21 + columnar/src/include/columnar/columnar.h | 23 + columnar/src/test/regress/columnar_schedule | 1 + .../test/regress/expected/columnar_cache.out | 3124 +++++++++++++++++ .../src/test/regress/sql/columnar_cache.sql | 111 + 9 files changed, 3782 insertions(+), 19 deletions(-) create mode 100644 columnar/src/backend/columnar/columnar_cache.c create mode 100644 columnar/src/test/regress/expected/columnar_cache.out create mode 100644 columnar/src/test/regress/sql/columnar_cache.sql diff --git a/columnar/src/backend/columnar/columnar.c b/columnar/src/backend/columnar/columnar.c index ae9eff5d..e8898db7 100644 --- a/columnar/src/backend/columnar/columnar.c +++ b/columnar/src/backend/columnar/columnar.c @@ -45,6 +45,8 @@ bool columnar_enable_parallel_execution = true; int columnar_min_parallel_processes = 8; bool columnar_enable_vectorization = true; bool columnar_enable_dml = true; +bool columnar_enable_page_cache = true; +int columnar_page_cache_size = 200U; static const struct config_enum_entry columnar_compression_options[] = { @@ -166,6 +168,30 @@ columnar_init_gucs() NULL, NULL, NULL); + + DefineCustomBoolVariable("columnar.enable_column_cache", + gettext_noop("Enables column based caching"), + NULL, + &columnar_enable_page_cache, + false, + PGC_USERSET, + 0, + NULL, + NULL, + NULL); + + DefineCustomIntVariable("columnar.column_cache_size", + gettext_noop("Size of the column based cache in megabytes"), + NULL, + &columnar_page_cache_size, + 200U, + 20U, + 20000U, + PGC_USERSET, + GUC_UNIT_MB, + NULL, + NULL, + NULL); } diff --git a/columnar/src/backend/columnar/columnar_cache.c b/columnar/src/backend/columnar/columnar_cache.c new file mode 100644 index 00000000..76621810 --- /dev/null +++ b/columnar/src/backend/columnar/columnar_cache.c @@ -0,0 +1,376 @@ +/*------------------------------------------------------------------------- + * + * columnar_cache.c + * + * Storage and management of cached data. + * + * Copyright (c) Hydra, Inc. + * + *------------------------------------------------------------------------- + */ + + +#include "postgres.h" + +#include "c.h" +#include "columnar/columnar.h" +#include "fmgr.h" +#include "funcapi.h" +#include "lib/ilist.h" +#include "lib/stringinfo.h" +#include "utils/memutils.h" +#include "utils/palloc.h" + +#include +#include + + +/* + * Main caching MemoryContext. + * + * This MemoryContext is created at initialization, below + * TopMemoryContext, where all cache entries are stored. + */ +static MemoryContext columnarCacheContext = NULL; + +/* + * Cache entry. + * + * An entry for caching a column. + */ +typedef struct ColumnarCacheEntry ColumnarCacheEntry; + +struct ColumnarCacheEntry +{ + dlist_node list_node; + uint64 relId; + uint64 stripeId; + uint64 chunkId; + uint64 readCount; + uint64 length; + time_t creationTime; + time_t lastAccessTime; + void *store; + uint32 columnId; +}; + +/* + * Storage for the ColumnarCacheEntry linked list. + */ +static dlist_head *head = NULL; + +/* + * Storage for total length allocated. + */ +static uint64 totalAllocationLength = 0; + +/* + * Cache statistics. + * + * Hits and misses, and general cache statistics. + */ +static ColumnarCacheStatistics statistics = { 0 }; + +/* + * ColumnarCacheMemoryContext + * + * Returns the cache MemoryContext, initializing the cache MemoryContext + * as a child of TopMemoryContext if it does not exist, also clears any + * statistics gathered. + */ +MemoryContext ColumnarCacheMemoryContext(void) +{ + if (columnarCacheContext == NULL) + { + columnarCacheContext = AllocSetContextCreate(TopMemoryContext, "Columnar Decompression Cache", 0, (uint64) (columnar_page_cache_size * 1024 * 1024 * .1), columnar_page_cache_size * 1024 * 1024); + + memset(&statistics, 0, sizeof(ColumnarCacheStatistics)); + } + + return columnarCacheContext; +} + +/* + * ColumnarResetCache + * + * Deletes the caching memory context and sets it to NULL, thus removing the + * cache and all of its entries. + */ + void ColumnarResetCache(void) + { + if (columnarCacheContext != NULL) + { + MemoryContextDelete(columnarCacheContext); + columnarCacheContext = NULL; + } + + totalAllocationLength = 0U; + head = NULL; + } + +/* + * ColumnarFindInCache + * + * Searches the cache for an entry for a relation ID and a chunk ID. + * If found, it increments the readCount, and returns the entry. If + * none are found, NULL is returned instead. + */ +static ColumnarCacheEntry *ColumnarFindInCache(uint64 relId, uint64 stripeId, uint64 chunkId, uint32 columnId) +{ + if (head == NULL) + { + return NULL; + } + + dlist_iter iter; + dlist_foreach(iter, head) + { + ColumnarCacheEntry *entry = dlist_container(ColumnarCacheEntry, list_node, iter.cur); + + if (entry->relId == relId && entry->stripeId == stripeId && entry->chunkId == chunkId && entry->columnId == columnId) + { + entry->readCount++; + + return entry; + } + } + + return NULL; +} + +/* + * ColumnarInvalidateCacheEntry + * + * Searches for a cache entry for a relation ID and a chunk ID. + * If found, removes the cache entry, and frees memory associated with + * it. If not found, nothing is done. + * + * Returns boolean. + */ +static bool ColumnarInvalidateCacheEntry(uint64 relId, uint64 stripeId, uint64 chunkId, uint32 columnId) +{ + dlist_mutable_iter miter; + + dlist_foreach_modify(miter, head) + { + ColumnarCacheEntry *entry = dlist_container(ColumnarCacheEntry, list_node, miter.cur); + + if (entry->relId == relId && entry->stripeId == stripeId && entry->chunkId == chunkId && entry->columnId == columnId) + { + dlist_delete(miter.cur); + + totalAllocationLength -= entry->length; + statistics.evictions++; + + return true; + } + } + + return true; +} + +static void EvictCache(uint64 size) +{ + uint64 lastCount = 0; + uint64 nextLowestCount = PG_UINT64_MAX; + + while (size > 0) + { + dlist_mutable_iter miter; + + dlist_foreach_modify(miter, head) + { + ColumnarCacheEntry *entry = dlist_container(ColumnarCacheEntry, list_node, miter.cur); + + if (entry->readCount != lastCount && entry->readCount < nextLowestCount) + { + nextLowestCount = entry->readCount; + } + + if (entry->readCount == lastCount) + { + dlist_delete(miter.cur); + + totalAllocationLength -= entry->length; + statistics.evictions++; + + if (size < entry->length) + { + size = 0; + return; + } + else { + size -= entry->length; + } + } + } + + lastCount = nextLowestCount; + nextLowestCount = PG_UINT64_MAX; + } +} + +/* + * ColumnarAddCacheEntry + * + * Adds a cache entry, or updates an existing entry. + */ +void ColumnarAddCacheEntry(uint64 relId, uint64 stripeId, uint64 chunkId, uint32 columnId, void *data) +{ + if (columnar_enable_page_cache == false) + { + return; + } + + MemoryContext oldContext = MemoryContextSwitchTo(ColumnarCacheMemoryContext()); + + if (head == NULL) + { + head = palloc0(sizeof(dlist_head)); + } + + ColumnarCacheEntry *entry = ColumnarFindInCache(relId, stripeId, chunkId, columnId); + bool found = false; + + if (entry != NULL) + { + found = true; + + /* Free up any existing stored data, everything else will be overwritten. */ + StringInfo str = entry->store; + if (str->data) + { + pfree(str->data); + } + + pfree(str); + + totalAllocationLength -= entry->length; + } + else + { + entry = palloc0(sizeof(ColumnarCacheEntry)); + + entry->relId = relId; + entry->stripeId = stripeId; + entry->chunkId = chunkId; + entry->columnId = columnId; + entry->creationTime = entry->lastAccessTime = time(NULL); + entry->readCount = 0; + + /* Add the entry into the list if it is not already there. */ + if (!found) + { + dlist_push_tail(head, &(entry->list_node)); + } + } + + uint64 size = ((StringInfo) data)->len; + + entry->store = data; + entry->length = size; + + totalAllocationLength += size; + + if (totalAllocationLength >= statistics.maximumCacheSize) + { + statistics.maximumCacheSize = totalAllocationLength; + } + + /* If we are over our cache allocation, clear until we are at 90%. */ + if (totalAllocationLength >= (columnar_page_cache_size * 1024 * 1024)) + { + EvictCache((columnar_page_cache_size * 1024 * 1024 * .1) + (totalAllocationLength - (columnar_page_cache_size * 1024 * 1024))); + } + + statistics.writes++; + + MemoryContextSwitchTo(oldContext); +} + +/* + * ColumnarRetrieveCache + * + * Search for a cache entry, returning NULL if not found. If found, + * make a copy in the current memory context and return it. + */ +void *ColumnarRetrieveCache(uint64 relId, uint64 stripeId, uint64 chunkId, uint32 columnId) +{ + if (columnar_enable_page_cache == false) + { + return NULL; + } + + ColumnarCacheEntry *entry = ColumnarFindInCache(relId, stripeId, chunkId, columnId); + + if (entry == NULL) + { + statistics.misses++; + + return NULL; + } + + statistics.hits++; + + void *chunkCopy = entry->store; + + return chunkCopy; +} + +/* + * ColumnarCacheLength + * + * Returns how large our cache is, used for accounting. + */ +static uint64 ColumnarCacheLength() +{ + uint64 count = 0; + + dlist_iter iter; + dlist_foreach(iter, head) + { + count++; + } + + return count; +} + +ColumnarCacheStatistics *ColumnarGetCacheStatistics(void) +{ + statistics.endingCacheSize = totalAllocationLength; + statistics.entries = ColumnarCacheLength(); + + return &statistics; +} + + +#define CACHE_NATTS 6 +Datum cache_walk(PG_FUNCTION_ARGS); + +PG_FUNCTION_INFO_V1(cache_walk); + +/* + * Used for debugging, as this data is only available in a transaction + * or if clearing the cache is specifically disabled. + */ + + +Datum cache_evict(PG_FUNCTION_ARGS); + +PG_FUNCTION_INFO_V1(cache_evict); + +/* + * Also used for debugging, with the same constraints that it would only + * work in a transaction of if the clearing mechanism is explicitly disabled. + */ +Datum cache_evict(PG_FUNCTION_ARGS) +{ + uint64 relId =PG_GETARG_INT64(0); + uint64 stripeId = PG_GETARG_INT64(1); + uint64 chunkId = PG_GETARG_INT16(2); + uint32 columnId = PG_GETARG_UINT32(3); + + bool result = ColumnarInvalidateCacheEntry(relId, stripeId, chunkId, columnId); + + PG_RETURN_BOOL(result); +} diff --git a/columnar/src/backend/columnar/columnar_customscan.c b/columnar/src/backend/columnar/columnar_customscan.c index 18db88e3..d8d8ae42 100644 --- a/columnar/src/backend/columnar/columnar_customscan.c +++ b/columnar/src/backend/columnar/columnar_customscan.c @@ -25,6 +25,7 @@ #include "catalog/pg_am.h" #include "catalog/pg_statistic.h" #include "commands/defrem.h" +#include "commands/explain.h" #include "miscadmin.h" #include "nodes/extensible.h" #include "nodes/makefuncs.h" @@ -2399,6 +2400,54 @@ ColumnarScan_ExplainCustomScan(CustomScanState *node, List *ancestors, ExplainPropertyText("Columnar Vectorized Filter", vectorizedWhereClauses, es); } + + if (columnar_enable_page_cache) + { + ColumnarCacheStatistics *statistics = ColumnarGetCacheStatistics(); + + ExplainPropertyUInteger( + "Cache Hits", + NULL, + statistics->hits, + es); + + ExplainPropertyUInteger( + "Cache Misses", + NULL, + statistics->misses, + es); + + ExplainPropertyUInteger( + "Cache Evictions", + NULL, + statistics->evictions, + es); + + ExplainPropertyUInteger( + "Cache Writes", + NULL, + statistics->writes, + es); + + ExplainPropertyUInteger( + "Cache Maximum Size", + NULL, + statistics->maximumCacheSize, + es); + + ExplainPropertyUInteger( + "Cache Ending Size", + NULL, + statistics->endingCacheSize, + es); + + ExplainPropertyUInteger( + "Total Cache Entries", + NULL, + statistics->entries, + es + ); + } } diff --git a/columnar/src/backend/columnar/columnar_reader.c b/columnar/src/backend/columnar/columnar_reader.c index c941e270..3f58f256 100644 --- a/columnar/src/backend/columnar/columnar_reader.c +++ b/columnar/src/backend/columnar/columnar_reader.c @@ -34,6 +34,7 @@ #include "utils/guc.h" #include "utils/memutils.h" #include "utils/lsyscache.h" +#include "utils/palloc.h" #include "utils/rel.h" #include "columnar/columnar.h" @@ -133,18 +134,17 @@ static bool SnapshotMightSeeUnflushedStripes(Snapshot snapshot); static bool ReadStripeNextRow(StripeReadState *stripeReadState, Datum *columnValues, bool *columnNulls, uint64 stripeFirstRowNumber, - Snapshot snapshot); + Snapshot snapshot, uint64 stripeId); static ChunkGroupReadState * BeginChunkGroupRead(StripeBuffers *stripeBuffers, int chunkIndex, TupleDesc tupleDesc, List *projectedColumnList, - MemoryContext cxt); + MemoryContext cxt, StripeReadState *state, uint64 stripeId); static void EndChunkGroupRead(ChunkGroupReadState *chunkGroupReadState); static bool ReadChunkGroupNextRow(ChunkGroupReadState *chunkGroupReadState, Datum *columnValues, bool *columnNulls, int32 *deletedColumnsNumber); -static void FreeChunkBufferValueArray(ChunkData *chunkData); static StripeBuffers * LoadFilteredStripeBuffers(Relation relation, StripeMetadata *stripeMetadata, TupleDesc tupleDescriptor, @@ -178,7 +178,7 @@ static void DeserializeDatumArray(StringInfo datumBuffer, bool *existsArray, Datum *datumArray); static ChunkData * DeserializeChunkData(StripeBuffers *stripeBuffers, uint64 chunkIndex, uint32 rowCount, TupleDesc tupleDescriptor, - List *projectedColumnList); + List *projectedColumnList, StripeReadState *state, uint64 stripeId); static Datum ColumnDefaultValue(TupleConstr *tupleConstraints, Form_pg_attribute attributeForm); @@ -347,7 +347,8 @@ ColumnarReadNextRow(ColumnarReadState *readState, Datum *columnValues, bool *col if (!ReadStripeNextRow(readState->stripeReadState, columnValues, columnNulls, readState->currentStripeMetadata->firstRowNumber, - readState->snapshot)) + readState->snapshot, + readState->currentStripeMetadata->id)) { AdvanceStripeRead(readState); continue; @@ -567,7 +568,10 @@ ReadStripeRowByRowNumber(ColumnarReadState *readState, stripeReadState->chunkGroupIndex, stripeReadState->tupleDescriptor, stripeReadState->projectedColumnList, - stripeReadState->stripeReadContext); + stripeReadState->stripeReadContext, + stripeReadState, + readState->currentStripeMetadata->id + ); uint64 chunkFirstRowNumber = stripeMetadata->firstRowNumber + @@ -899,7 +903,7 @@ static bool ReadStripeNextRow(StripeReadState *stripeReadState, Datum *columnValues, bool *columnNulls, uint64 stripeFirstRowNumber, - Snapshot snapshot) + Snapshot snapshot, uint64 stripeId) { if (stripeReadState->currentRow >= stripeReadState->rowCount) { @@ -920,7 +924,10 @@ ReadStripeNextRow(StripeReadState *stripeReadState, Datum *columnValues, stripeReadState-> projectedColumnList, stripeReadState-> - stripeReadContext); + stripeReadContext, + stripeReadState, + stripeId + ); if (columnar_enable_dml && stripeReadState->chunkGroupReadState->chunkGroupDeletedRows != 0) @@ -978,7 +985,7 @@ ReadStripeNextRow(StripeReadState *stripeReadState, Datum *columnValues, */ static ChunkGroupReadState * BeginChunkGroupRead(StripeBuffers *stripeBuffers, int chunkIndex, TupleDesc tupleDesc, - List *projectedColumnList, MemoryContext cxt) + List *projectedColumnList, MemoryContext cxt, StripeReadState *state, uint64 stripeId) { uint32 chunkGroupRowCount = stripeBuffers->selectedChunkGroupRowCounts[chunkIndex]; @@ -988,7 +995,6 @@ BeginChunkGroupRead(StripeBuffers *stripeBuffers, int chunkIndex, TupleDesc tupl stripeBuffers->selectedChunkGroupDeletedRows[chunkIndex]; MemoryContext oldContext = MemoryContextSwitchTo(cxt); - ChunkGroupReadState *chunkGroupReadState = palloc0(sizeof(ChunkGroupReadState)); chunkGroupReadState->currentRow = 0; @@ -1001,7 +1007,7 @@ BeginChunkGroupRead(StripeBuffers *stripeBuffers, int chunkIndex, TupleDesc tupl chunkGroupReadState->chunkGroupData = DeserializeChunkData(stripeBuffers, chunkIndex, chunkGroupRowCount, tupleDesc, - projectedColumnList); + projectedColumnList, state, stripeId); MemoryContextSwitchTo(oldContext); return chunkGroupReadState; @@ -1161,8 +1167,7 @@ FreeChunkData(ChunkData *chunkData) /* FreeChunkValueArrayBuffer relase valueBufferArray memory. */ -static void -FreeChunkBufferValueArray(ChunkData *chunkData) +void FreeChunkBufferValueArray(ChunkData *chunkData) { uint32 columnIndex = 0; @@ -1173,7 +1178,7 @@ FreeChunkBufferValueArray(ChunkData *chunkData) for (columnIndex = 0; columnIndex < chunkData->columnCount; columnIndex++) { - if (chunkData->valueBufferArray[columnIndex] != NULL) + if (chunkData->valueBufferArray[columnIndex] != NULL && !MemoryContextContains(ColumnarCacheMemoryContext(), chunkData->valueBufferArray[columnIndex])) { pfree(chunkData->valueBufferArray[columnIndex]->data); pfree(chunkData->valueBufferArray[columnIndex]); @@ -1782,7 +1787,7 @@ DeserializeDatumArray(StringInfo datumBuffer, bool *existsArray, uint32 datumCou if (currentDatumDataOffset > datumBuffer->len) { - ereport(ERROR, (errmsg("insufficient data left in datum buffer"))); + ereport(ERROR, (errmsg("insufficient data left in datum buffer: %d, %d", currentDatumDataOffset, datumBuffer->len))); } } } @@ -1799,10 +1804,12 @@ DeserializeDatumArray(StringInfo datumBuffer, bool *existsArray, uint32 datumCou static ChunkData * DeserializeChunkData(StripeBuffers *stripeBuffers, uint64 chunkIndex, uint32 rowCount, TupleDesc tupleDescriptor, - List *projectedColumnList) + List *projectedColumnList, StripeReadState *state, uint64 stripeId) { int columnIndex = 0; bool *columnMask = ProjectedColumnMask(tupleDescriptor->natts, projectedColumnList); + + ChunkData *chunkData = CreateEmptyChunkData(tupleDescriptor->natts, columnMask, rowCount); @@ -1817,17 +1824,40 @@ DeserializeChunkData(StripeBuffers *stripeBuffers, uint64 chunkIndex, columnAdded = true; } + if (columnBuffers != NULL) { ColumnChunkBuffers *chunkBuffers = columnBuffers->chunkBuffersArray[chunkIndex]; + bool shouldCache = columnar_enable_page_cache == true && chunkBuffers->valueCompressionType != COMPRESSION_NONE; /* decompress and deserialize current chunk's data */ - StringInfo valueBuffer = - DecompressBuffer(chunkBuffers->valueBuffer, + StringInfo valueBuffer = NULL; + + if (shouldCache) + { + valueBuffer = ColumnarRetrieveCache(state->relation->rd_id, stripeId, chunkIndex, columnIndex); + } + + if (valueBuffer == NULL) + { + MemoryContext oldMemoryContext; + if (shouldCache) + { + oldMemoryContext = MemoryContextSwitchTo(ColumnarCacheMemoryContext()); + } + + valueBuffer = DecompressBuffer(chunkBuffers->valueBuffer, chunkBuffers->valueCompressionType, chunkBuffers->decompressedValueSize); + if (shouldCache) + { + ColumnarAddCacheEntry(state->relation->rd_id, stripeId, chunkIndex, columnIndex, valueBuffer); + MemoryContextSwitchTo(oldMemoryContext); + } + } + DeserializeBoolArray(chunkBuffers->existsBuffer, chunkData->existsArray[columnIndex], rowCount); @@ -1990,7 +2020,9 @@ ReadStripeNextVector(StripeReadState *stripeReadState, Datum *columnValues, stripeReadState-> projectedColumnList, stripeReadState-> - stripeReadContext); + stripeReadContext, + stripeReadState, + stripeId); chunkFirstRowNumber = stripeFirstRowNumber + stripeReadState->chunkGroupReadState->chunkStripeRowOffset; diff --git a/columnar/src/backend/columnar/columnar_tableam.c b/columnar/src/backend/columnar/columnar_tableam.c index 9fd6f24a..38efffd0 100644 --- a/columnar/src/backend/columnar/columnar_tableam.c +++ b/columnar/src/backend/columnar/columnar_tableam.c @@ -177,6 +177,9 @@ static ItemPointerData TupleSortSkipSmallerItemPointers(Tuplesortstate *tupleSor /* Custom tuple slot ops used for columnar. Initialized in columnar_tableam_init(). */ static TupleTableSlotOps TTSOpsColumnar; +/* Previous cache enabled state. */ +static bool previousCacheEnabledState = false; + static const TupleTableSlotOps * columnar_slot_callbacks(Relation relation) { @@ -190,6 +193,8 @@ columnar_beginscan(Relation relation, Snapshot snapshot, ParallelTableScanDesc parallel_scan, uint32 flags) { + previousCacheEnabledState = columnar_enable_page_cache; + int natts = relation->rd_att->natts; /* attr_needed represents 0-indexed attribute numbers */ @@ -215,6 +220,8 @@ columnar_beginscan_extended(Relation relation, Snapshot snapshot, ParallelColumnarScan parallelColumnarScan, bool returnVectorizedTuple) { + previousCacheEnabledState = columnar_enable_page_cache; + Oid relfilenode = relation->rd_node.relNode; /* @@ -313,6 +320,14 @@ columnar_endscan(TableScanDesc sscan) { UnregisterSnapshot(scan->cs_base.rs_snapshot); } + + /* clean up any caches. */ + if (columnar_enable_page_cache == true) + { + ColumnarResetCache(); + } + + columnar_enable_page_cache = previousCacheEnabledState; } @@ -742,6 +757,9 @@ static TransactionId columnar_index_delete_tuples(Relation rel, TM_IndexDeleteOp *delstate) { + previousCacheEnabledState = columnar_enable_page_cache; + columnar_enable_page_cache = false; + /* * XXX: We didn't bother implementing index_delete_tuple for neither of * simple deletion and bottom-up deletion cases. There is no particular @@ -801,6 +819,9 @@ static void columnar_tuple_insert(Relation relation, TupleTableSlot *slot, CommandId cid, int options, BulkInsertState bistate) { + previousCacheEnabledState = columnar_enable_page_cache; + columnar_enable_page_cache = false; + /* * columnar_init_write_state allocates the write state in a longer * lasting context, so no need to worry about it. diff --git a/columnar/src/include/columnar/columnar.h b/columnar/src/include/columnar/columnar.h index 0406d4c1..c591c8a0 100644 --- a/columnar/src/include/columnar/columnar.h +++ b/columnar/src/include/columnar/columnar.h @@ -231,6 +231,18 @@ typedef struct ColumnarWriteState ColumnarWriteState; struct RowMaskWriteStateEntry; typedef struct RowMaskWriteStateEntry RowMaskWriteStateEntry; +/* Cache statistics for when caching is enabled and used. */ +typedef struct ColumnarCacheStatistics +{ + uint64 hits; + uint64 misses; + uint64 evictions; + uint64 writes; + uint64 maximumCacheSize; + uint64 endingCacheSize; + uint64 entries; +} ColumnarCacheStatistics; + /* GUCs */ extern int columnar_compression; extern int columnar_stripe_row_limit; @@ -240,6 +252,8 @@ extern bool columnar_enable_parallel_execution; extern int columnar_min_parallel_processes; extern bool columnar_enable_vectorization; extern bool columnar_enable_dml; +extern bool columnar_enable_page_cache; +extern int columnar_page_cache_size; /* called when the user changes options on the given relation */ @@ -301,6 +315,7 @@ extern FmgrInfo * GetFunctionInfoOrNull(Oid typeId, Oid accessMethodId, extern ChunkData * CreateEmptyChunkData(uint32 columnCount, bool *columnMask, uint32 chunkGroupRowCount); extern void FreeChunkData(ChunkData *chunkData); +extern void FreeChunkBufferValueArray(ChunkData *chunkData); extern uint64 ColumnarTableRowCount(Relation relation); extern const char * CompressionTypeStr(CompressionType type); extern ItemPointerData row_number_to_tid(uint64 rowNumber); @@ -419,4 +434,12 @@ extern ColumnarReadState ** FindReadStateCache(Relation relation, extern void CleanupReadStateCache(SubTransactionId currentSubXid); extern MemoryContext GetColumnarReadStateCache(void); +/* columnar_cache.c */ +extern void ColumnarAddCacheEntry(uint64, uint64, uint64, uint32, void *); +extern void *ColumnarRetrieveCache(uint64, uint64, uint64, uint32); +extern void ColumnarResetCache(void); +extern ColumnarCacheStatistics *ColumnarGetCacheStatistics(void); +extern MemoryContext ColumnarCacheMemoryContext(void); + + #endif /* COLUMNAR_H */ diff --git a/columnar/src/test/regress/columnar_schedule b/columnar/src/test/regress/columnar_schedule index c860f21a..3b458457 100644 --- a/columnar/src/test/regress/columnar_schedule +++ b/columnar/src/test/regress/columnar_schedule @@ -33,3 +33,4 @@ test: columnar_transactions test: columnar_matview #test: columnar_memory test: columnar_alter_table_set_access_method +test: columnar_cache diff --git a/columnar/src/test/regress/expected/columnar_cache.out b/columnar/src/test/regress/expected/columnar_cache.out new file mode 100644 index 00000000..9a5e1bbc --- /dev/null +++ b/columnar/src/test/regress/expected/columnar_cache.out @@ -0,0 +1,3124 @@ +CREATE TABLE big_table ( + id INT, + firstname TEXT, + lastname TEXT +) USING columnar; +INSERT INTO big_table (id, firstname, lastname) + SELECT i, + CONCAT('firstname-', i), + CONCAT('lastname-', i) + FROM generate_series(1, 1000000) as i; +-- get some baselines from multiple chunks +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id < 1000 + GROUP BY firstname, + lastname +UNION +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id BETWEEN 15000 AND 16000 + GROUP BY firstname, + lastname + ORDER BY firstname; + firstname | lastname | sum +-----------------+----------------+------- + firstname-1 | lastname-1 | 1 + firstname-10 | lastname-10 | 10 + firstname-100 | lastname-100 | 100 + firstname-101 | lastname-101 | 101 + firstname-102 | lastname-102 | 102 + firstname-103 | lastname-103 | 103 + firstname-104 | lastname-104 | 104 + firstname-105 | lastname-105 | 105 + firstname-106 | lastname-106 | 106 + firstname-107 | lastname-107 | 107 + firstname-108 | lastname-108 | 108 + firstname-109 | lastname-109 | 109 + firstname-11 | lastname-11 | 11 + firstname-110 | lastname-110 | 110 + firstname-111 | lastname-111 | 111 + firstname-112 | lastname-112 | 112 + firstname-113 | lastname-113 | 113 + firstname-114 | lastname-114 | 114 + firstname-115 | lastname-115 | 115 + firstname-116 | lastname-116 | 116 + firstname-117 | lastname-117 | 117 + firstname-118 | lastname-118 | 118 + firstname-119 | lastname-119 | 119 + firstname-12 | lastname-12 | 12 + firstname-120 | lastname-120 | 120 + firstname-121 | lastname-121 | 121 + firstname-122 | lastname-122 | 122 + firstname-123 | lastname-123 | 123 + firstname-124 | lastname-124 | 124 + firstname-125 | lastname-125 | 125 + firstname-126 | lastname-126 | 126 + firstname-127 | lastname-127 | 127 + firstname-128 | lastname-128 | 128 + firstname-129 | lastname-129 | 129 + firstname-13 | lastname-13 | 13 + firstname-130 | lastname-130 | 130 + firstname-131 | lastname-131 | 131 + firstname-132 | lastname-132 | 132 + firstname-133 | lastname-133 | 133 + firstname-134 | lastname-134 | 134 + firstname-135 | lastname-135 | 135 + firstname-136 | lastname-136 | 136 + firstname-137 | lastname-137 | 137 + firstname-138 | lastname-138 | 138 + firstname-139 | lastname-139 | 139 + firstname-14 | lastname-14 | 14 + firstname-140 | lastname-140 | 140 + firstname-141 | lastname-141 | 141 + firstname-142 | lastname-142 | 142 + firstname-143 | lastname-143 | 143 + firstname-144 | lastname-144 | 144 + firstname-145 | lastname-145 | 145 + firstname-146 | lastname-146 | 146 + firstname-147 | lastname-147 | 147 + firstname-148 | lastname-148 | 148 + firstname-149 | lastname-149 | 149 + firstname-15 | lastname-15 | 15 + firstname-150 | lastname-150 | 150 + firstname-15000 | lastname-15000 | 15000 + firstname-15001 | lastname-15001 | 15001 + firstname-15002 | lastname-15002 | 15002 + firstname-15003 | lastname-15003 | 15003 + firstname-15004 | lastname-15004 | 15004 + firstname-15005 | lastname-15005 | 15005 + firstname-15006 | lastname-15006 | 15006 + firstname-15007 | lastname-15007 | 15007 + firstname-15008 | lastname-15008 | 15008 + firstname-15009 | lastname-15009 | 15009 + firstname-15010 | lastname-15010 | 15010 + firstname-15011 | lastname-15011 | 15011 + firstname-15012 | lastname-15012 | 15012 + firstname-15013 | lastname-15013 | 15013 + firstname-15014 | lastname-15014 | 15014 + firstname-15015 | lastname-15015 | 15015 + firstname-15016 | lastname-15016 | 15016 + firstname-15017 | lastname-15017 | 15017 + firstname-15018 | lastname-15018 | 15018 + firstname-15019 | lastname-15019 | 15019 + firstname-15020 | lastname-15020 | 15020 + firstname-15021 | lastname-15021 | 15021 + firstname-15022 | lastname-15022 | 15022 + firstname-15023 | lastname-15023 | 15023 + firstname-15024 | lastname-15024 | 15024 + firstname-15025 | lastname-15025 | 15025 + firstname-15026 | lastname-15026 | 15026 + firstname-15027 | lastname-15027 | 15027 + firstname-15028 | lastname-15028 | 15028 + firstname-15029 | lastname-15029 | 15029 + firstname-15030 | lastname-15030 | 15030 + firstname-15031 | lastname-15031 | 15031 + firstname-15032 | lastname-15032 | 15032 + firstname-15033 | lastname-15033 | 15033 + firstname-15034 | lastname-15034 | 15034 + firstname-15035 | lastname-15035 | 15035 + firstname-15036 | lastname-15036 | 15036 + firstname-15037 | lastname-15037 | 15037 + firstname-15038 | lastname-15038 | 15038 + firstname-15039 | lastname-15039 | 15039 + firstname-15040 | lastname-15040 | 15040 + firstname-15041 | lastname-15041 | 15041 + firstname-15042 | lastname-15042 | 15042 + firstname-15043 | lastname-15043 | 15043 + firstname-15044 | lastname-15044 | 15044 + firstname-15045 | lastname-15045 | 15045 + firstname-15046 | lastname-15046 | 15046 + firstname-15047 | lastname-15047 | 15047 + firstname-15048 | lastname-15048 | 15048 + firstname-15049 | lastname-15049 | 15049 + firstname-15050 | lastname-15050 | 15050 + firstname-15051 | lastname-15051 | 15051 + firstname-15052 | lastname-15052 | 15052 + firstname-15053 | lastname-15053 | 15053 + firstname-15054 | lastname-15054 | 15054 + firstname-15055 | lastname-15055 | 15055 + firstname-15056 | lastname-15056 | 15056 + firstname-15057 | lastname-15057 | 15057 + firstname-15058 | lastname-15058 | 15058 + firstname-15059 | lastname-15059 | 15059 + firstname-15060 | lastname-15060 | 15060 + firstname-15061 | lastname-15061 | 15061 + firstname-15062 | lastname-15062 | 15062 + firstname-15063 | lastname-15063 | 15063 + firstname-15064 | lastname-15064 | 15064 + firstname-15065 | lastname-15065 | 15065 + firstname-15066 | lastname-15066 | 15066 + firstname-15067 | lastname-15067 | 15067 + firstname-15068 | lastname-15068 | 15068 + firstname-15069 | lastname-15069 | 15069 + firstname-15070 | lastname-15070 | 15070 + firstname-15071 | lastname-15071 | 15071 + firstname-15072 | lastname-15072 | 15072 + firstname-15073 | lastname-15073 | 15073 + firstname-15074 | lastname-15074 | 15074 + firstname-15075 | lastname-15075 | 15075 + firstname-15076 | lastname-15076 | 15076 + firstname-15077 | lastname-15077 | 15077 + firstname-15078 | lastname-15078 | 15078 + firstname-15079 | lastname-15079 | 15079 + firstname-15080 | lastname-15080 | 15080 + firstname-15081 | lastname-15081 | 15081 + firstname-15082 | lastname-15082 | 15082 + firstname-15083 | lastname-15083 | 15083 + firstname-15084 | lastname-15084 | 15084 + firstname-15085 | lastname-15085 | 15085 + firstname-15086 | lastname-15086 | 15086 + firstname-15087 | lastname-15087 | 15087 + firstname-15088 | lastname-15088 | 15088 + firstname-15089 | lastname-15089 | 15089 + firstname-15090 | lastname-15090 | 15090 + firstname-15091 | lastname-15091 | 15091 + firstname-15092 | lastname-15092 | 15092 + firstname-15093 | lastname-15093 | 15093 + firstname-15094 | lastname-15094 | 15094 + firstname-15095 | lastname-15095 | 15095 + firstname-15096 | lastname-15096 | 15096 + firstname-15097 | lastname-15097 | 15097 + firstname-15098 | lastname-15098 | 15098 + firstname-15099 | lastname-15099 | 15099 + firstname-151 | lastname-151 | 151 + firstname-15100 | lastname-15100 | 15100 + firstname-15101 | lastname-15101 | 15101 + firstname-15102 | lastname-15102 | 15102 + firstname-15103 | lastname-15103 | 15103 + firstname-15104 | lastname-15104 | 15104 + firstname-15105 | lastname-15105 | 15105 + firstname-15106 | lastname-15106 | 15106 + firstname-15107 | lastname-15107 | 15107 + firstname-15108 | lastname-15108 | 15108 + firstname-15109 | lastname-15109 | 15109 + firstname-15110 | lastname-15110 | 15110 + firstname-15111 | lastname-15111 | 15111 + firstname-15112 | lastname-15112 | 15112 + firstname-15113 | lastname-15113 | 15113 + firstname-15114 | lastname-15114 | 15114 + firstname-15115 | lastname-15115 | 15115 + firstname-15116 | lastname-15116 | 15116 + firstname-15117 | lastname-15117 | 15117 + firstname-15118 | lastname-15118 | 15118 + firstname-15119 | lastname-15119 | 15119 + firstname-15120 | lastname-15120 | 15120 + firstname-15121 | lastname-15121 | 15121 + firstname-15122 | lastname-15122 | 15122 + firstname-15123 | lastname-15123 | 15123 + firstname-15124 | lastname-15124 | 15124 + firstname-15125 | lastname-15125 | 15125 + firstname-15126 | lastname-15126 | 15126 + firstname-15127 | lastname-15127 | 15127 + firstname-15128 | lastname-15128 | 15128 + firstname-15129 | lastname-15129 | 15129 + firstname-15130 | lastname-15130 | 15130 + firstname-15131 | lastname-15131 | 15131 + firstname-15132 | lastname-15132 | 15132 + firstname-15133 | lastname-15133 | 15133 + firstname-15134 | lastname-15134 | 15134 + firstname-15135 | lastname-15135 | 15135 + firstname-15136 | lastname-15136 | 15136 + firstname-15137 | lastname-15137 | 15137 + firstname-15138 | lastname-15138 | 15138 + firstname-15139 | lastname-15139 | 15139 + firstname-15140 | lastname-15140 | 15140 + firstname-15141 | lastname-15141 | 15141 + firstname-15142 | lastname-15142 | 15142 + firstname-15143 | lastname-15143 | 15143 + firstname-15144 | lastname-15144 | 15144 + firstname-15145 | lastname-15145 | 15145 + firstname-15146 | lastname-15146 | 15146 + firstname-15147 | lastname-15147 | 15147 + firstname-15148 | lastname-15148 | 15148 + firstname-15149 | lastname-15149 | 15149 + firstname-15150 | lastname-15150 | 15150 + firstname-15151 | lastname-15151 | 15151 + firstname-15152 | lastname-15152 | 15152 + firstname-15153 | lastname-15153 | 15153 + firstname-15154 | lastname-15154 | 15154 + firstname-15155 | lastname-15155 | 15155 + firstname-15156 | lastname-15156 | 15156 + firstname-15157 | lastname-15157 | 15157 + firstname-15158 | lastname-15158 | 15158 + firstname-15159 | lastname-15159 | 15159 + firstname-15160 | lastname-15160 | 15160 + firstname-15161 | lastname-15161 | 15161 + firstname-15162 | lastname-15162 | 15162 + firstname-15163 | lastname-15163 | 15163 + firstname-15164 | lastname-15164 | 15164 + firstname-15165 | lastname-15165 | 15165 + firstname-15166 | lastname-15166 | 15166 + firstname-15167 | lastname-15167 | 15167 + firstname-15168 | lastname-15168 | 15168 + firstname-15169 | lastname-15169 | 15169 + firstname-15170 | lastname-15170 | 15170 + firstname-15171 | lastname-15171 | 15171 + firstname-15172 | lastname-15172 | 15172 + firstname-15173 | lastname-15173 | 15173 + firstname-15174 | lastname-15174 | 15174 + firstname-15175 | lastname-15175 | 15175 + firstname-15176 | lastname-15176 | 15176 + firstname-15177 | lastname-15177 | 15177 + firstname-15178 | lastname-15178 | 15178 + firstname-15179 | lastname-15179 | 15179 + firstname-15180 | lastname-15180 | 15180 + firstname-15181 | lastname-15181 | 15181 + firstname-15182 | lastname-15182 | 15182 + firstname-15183 | lastname-15183 | 15183 + firstname-15184 | lastname-15184 | 15184 + firstname-15185 | lastname-15185 | 15185 + firstname-15186 | lastname-15186 | 15186 + firstname-15187 | lastname-15187 | 15187 + firstname-15188 | lastname-15188 | 15188 + firstname-15189 | lastname-15189 | 15189 + firstname-15190 | lastname-15190 | 15190 + firstname-15191 | lastname-15191 | 15191 + firstname-15192 | lastname-15192 | 15192 + firstname-15193 | lastname-15193 | 15193 + firstname-15194 | lastname-15194 | 15194 + firstname-15195 | lastname-15195 | 15195 + firstname-15196 | lastname-15196 | 15196 + firstname-15197 | lastname-15197 | 15197 + firstname-15198 | lastname-15198 | 15198 + firstname-15199 | lastname-15199 | 15199 + firstname-152 | lastname-152 | 152 + firstname-15200 | lastname-15200 | 15200 + firstname-15201 | lastname-15201 | 15201 + firstname-15202 | lastname-15202 | 15202 + firstname-15203 | lastname-15203 | 15203 + firstname-15204 | lastname-15204 | 15204 + firstname-15205 | lastname-15205 | 15205 + firstname-15206 | lastname-15206 | 15206 + firstname-15207 | lastname-15207 | 15207 + firstname-15208 | lastname-15208 | 15208 + firstname-15209 | lastname-15209 | 15209 + firstname-15210 | lastname-15210 | 15210 + firstname-15211 | lastname-15211 | 15211 + firstname-15212 | lastname-15212 | 15212 + firstname-15213 | lastname-15213 | 15213 + firstname-15214 | lastname-15214 | 15214 + firstname-15215 | lastname-15215 | 15215 + firstname-15216 | lastname-15216 | 15216 + firstname-15217 | lastname-15217 | 15217 + firstname-15218 | lastname-15218 | 15218 + firstname-15219 | lastname-15219 | 15219 + firstname-15220 | lastname-15220 | 15220 + firstname-15221 | lastname-15221 | 15221 + firstname-15222 | lastname-15222 | 15222 + firstname-15223 | lastname-15223 | 15223 + firstname-15224 | lastname-15224 | 15224 + firstname-15225 | lastname-15225 | 15225 + firstname-15226 | lastname-15226 | 15226 + firstname-15227 | lastname-15227 | 15227 + firstname-15228 | lastname-15228 | 15228 + firstname-15229 | lastname-15229 | 15229 + firstname-15230 | lastname-15230 | 15230 + firstname-15231 | lastname-15231 | 15231 + firstname-15232 | lastname-15232 | 15232 + firstname-15233 | lastname-15233 | 15233 + firstname-15234 | lastname-15234 | 15234 + firstname-15235 | lastname-15235 | 15235 + firstname-15236 | lastname-15236 | 15236 + firstname-15237 | lastname-15237 | 15237 + firstname-15238 | lastname-15238 | 15238 + firstname-15239 | lastname-15239 | 15239 + firstname-15240 | lastname-15240 | 15240 + firstname-15241 | lastname-15241 | 15241 + firstname-15242 | lastname-15242 | 15242 + firstname-15243 | lastname-15243 | 15243 + firstname-15244 | lastname-15244 | 15244 + firstname-15245 | lastname-15245 | 15245 + firstname-15246 | lastname-15246 | 15246 + firstname-15247 | lastname-15247 | 15247 + firstname-15248 | lastname-15248 | 15248 + firstname-15249 | lastname-15249 | 15249 + firstname-15250 | lastname-15250 | 15250 + firstname-15251 | lastname-15251 | 15251 + firstname-15252 | lastname-15252 | 15252 + firstname-15253 | lastname-15253 | 15253 + firstname-15254 | lastname-15254 | 15254 + firstname-15255 | lastname-15255 | 15255 + firstname-15256 | lastname-15256 | 15256 + firstname-15257 | lastname-15257 | 15257 + firstname-15258 | lastname-15258 | 15258 + firstname-15259 | lastname-15259 | 15259 + firstname-15260 | lastname-15260 | 15260 + firstname-15261 | lastname-15261 | 15261 + firstname-15262 | lastname-15262 | 15262 + firstname-15263 | lastname-15263 | 15263 + firstname-15264 | lastname-15264 | 15264 + firstname-15265 | lastname-15265 | 15265 + firstname-15266 | lastname-15266 | 15266 + firstname-15267 | lastname-15267 | 15267 + firstname-15268 | lastname-15268 | 15268 + firstname-15269 | lastname-15269 | 15269 + firstname-15270 | lastname-15270 | 15270 + firstname-15271 | lastname-15271 | 15271 + firstname-15272 | lastname-15272 | 15272 + firstname-15273 | lastname-15273 | 15273 + firstname-15274 | lastname-15274 | 15274 + firstname-15275 | lastname-15275 | 15275 + firstname-15276 | lastname-15276 | 15276 + firstname-15277 | lastname-15277 | 15277 + firstname-15278 | lastname-15278 | 15278 + firstname-15279 | lastname-15279 | 15279 + firstname-15280 | lastname-15280 | 15280 + firstname-15281 | lastname-15281 | 15281 + firstname-15282 | lastname-15282 | 15282 + firstname-15283 | lastname-15283 | 15283 + firstname-15284 | lastname-15284 | 15284 + firstname-15285 | lastname-15285 | 15285 + firstname-15286 | lastname-15286 | 15286 + firstname-15287 | lastname-15287 | 15287 + firstname-15288 | lastname-15288 | 15288 + firstname-15289 | lastname-15289 | 15289 + firstname-15290 | lastname-15290 | 15290 + firstname-15291 | lastname-15291 | 15291 + firstname-15292 | lastname-15292 | 15292 + firstname-15293 | lastname-15293 | 15293 + firstname-15294 | lastname-15294 | 15294 + firstname-15295 | lastname-15295 | 15295 + firstname-15296 | lastname-15296 | 15296 + firstname-15297 | lastname-15297 | 15297 + firstname-15298 | lastname-15298 | 15298 + firstname-15299 | lastname-15299 | 15299 + firstname-153 | lastname-153 | 153 + firstname-15300 | lastname-15300 | 15300 + firstname-15301 | lastname-15301 | 15301 + firstname-15302 | lastname-15302 | 15302 + firstname-15303 | lastname-15303 | 15303 + firstname-15304 | lastname-15304 | 15304 + firstname-15305 | lastname-15305 | 15305 + firstname-15306 | lastname-15306 | 15306 + firstname-15307 | lastname-15307 | 15307 + firstname-15308 | lastname-15308 | 15308 + firstname-15309 | lastname-15309 | 15309 + firstname-15310 | lastname-15310 | 15310 + firstname-15311 | lastname-15311 | 15311 + firstname-15312 | lastname-15312 | 15312 + firstname-15313 | lastname-15313 | 15313 + firstname-15314 | lastname-15314 | 15314 + firstname-15315 | lastname-15315 | 15315 + firstname-15316 | lastname-15316 | 15316 + firstname-15317 | lastname-15317 | 15317 + firstname-15318 | lastname-15318 | 15318 + firstname-15319 | lastname-15319 | 15319 + firstname-15320 | lastname-15320 | 15320 + firstname-15321 | lastname-15321 | 15321 + firstname-15322 | lastname-15322 | 15322 + firstname-15323 | lastname-15323 | 15323 + firstname-15324 | lastname-15324 | 15324 + firstname-15325 | lastname-15325 | 15325 + firstname-15326 | lastname-15326 | 15326 + firstname-15327 | lastname-15327 | 15327 + firstname-15328 | lastname-15328 | 15328 + firstname-15329 | lastname-15329 | 15329 + firstname-15330 | lastname-15330 | 15330 + firstname-15331 | lastname-15331 | 15331 + firstname-15332 | lastname-15332 | 15332 + firstname-15333 | lastname-15333 | 15333 + firstname-15334 | lastname-15334 | 15334 + firstname-15335 | lastname-15335 | 15335 + firstname-15336 | lastname-15336 | 15336 + firstname-15337 | lastname-15337 | 15337 + firstname-15338 | lastname-15338 | 15338 + firstname-15339 | lastname-15339 | 15339 + firstname-15340 | lastname-15340 | 15340 + firstname-15341 | lastname-15341 | 15341 + firstname-15342 | lastname-15342 | 15342 + firstname-15343 | lastname-15343 | 15343 + firstname-15344 | lastname-15344 | 15344 + firstname-15345 | lastname-15345 | 15345 + firstname-15346 | lastname-15346 | 15346 + firstname-15347 | lastname-15347 | 15347 + firstname-15348 | lastname-15348 | 15348 + firstname-15349 | lastname-15349 | 15349 + firstname-15350 | lastname-15350 | 15350 + firstname-15351 | lastname-15351 | 15351 + firstname-15352 | lastname-15352 | 15352 + firstname-15353 | lastname-15353 | 15353 + firstname-15354 | lastname-15354 | 15354 + firstname-15355 | lastname-15355 | 15355 + firstname-15356 | lastname-15356 | 15356 + firstname-15357 | lastname-15357 | 15357 + firstname-15358 | lastname-15358 | 15358 + firstname-15359 | lastname-15359 | 15359 + firstname-15360 | lastname-15360 | 15360 + firstname-15361 | lastname-15361 | 15361 + firstname-15362 | lastname-15362 | 15362 + firstname-15363 | lastname-15363 | 15363 + firstname-15364 | lastname-15364 | 15364 + firstname-15365 | lastname-15365 | 15365 + firstname-15366 | lastname-15366 | 15366 + firstname-15367 | lastname-15367 | 15367 + firstname-15368 | lastname-15368 | 15368 + firstname-15369 | lastname-15369 | 15369 + firstname-15370 | lastname-15370 | 15370 + firstname-15371 | lastname-15371 | 15371 + firstname-15372 | lastname-15372 | 15372 + firstname-15373 | lastname-15373 | 15373 + firstname-15374 | lastname-15374 | 15374 + firstname-15375 | lastname-15375 | 15375 + firstname-15376 | lastname-15376 | 15376 + firstname-15377 | lastname-15377 | 15377 + firstname-15378 | lastname-15378 | 15378 + firstname-15379 | lastname-15379 | 15379 + firstname-15380 | lastname-15380 | 15380 + firstname-15381 | lastname-15381 | 15381 + firstname-15382 | lastname-15382 | 15382 + firstname-15383 | lastname-15383 | 15383 + firstname-15384 | lastname-15384 | 15384 + firstname-15385 | lastname-15385 | 15385 + firstname-15386 | lastname-15386 | 15386 + firstname-15387 | lastname-15387 | 15387 + firstname-15388 | lastname-15388 | 15388 + firstname-15389 | lastname-15389 | 15389 + firstname-15390 | lastname-15390 | 15390 + firstname-15391 | lastname-15391 | 15391 + firstname-15392 | lastname-15392 | 15392 + firstname-15393 | lastname-15393 | 15393 + firstname-15394 | lastname-15394 | 15394 + firstname-15395 | lastname-15395 | 15395 + firstname-15396 | lastname-15396 | 15396 + firstname-15397 | lastname-15397 | 15397 + firstname-15398 | lastname-15398 | 15398 + firstname-15399 | lastname-15399 | 15399 + firstname-154 | lastname-154 | 154 + firstname-15400 | lastname-15400 | 15400 + firstname-15401 | lastname-15401 | 15401 + firstname-15402 | lastname-15402 | 15402 + firstname-15403 | lastname-15403 | 15403 + firstname-15404 | lastname-15404 | 15404 + firstname-15405 | lastname-15405 | 15405 + firstname-15406 | lastname-15406 | 15406 + firstname-15407 | lastname-15407 | 15407 + firstname-15408 | lastname-15408 | 15408 + firstname-15409 | lastname-15409 | 15409 + firstname-15410 | lastname-15410 | 15410 + firstname-15411 | lastname-15411 | 15411 + firstname-15412 | lastname-15412 | 15412 + firstname-15413 | lastname-15413 | 15413 + firstname-15414 | lastname-15414 | 15414 + firstname-15415 | lastname-15415 | 15415 + firstname-15416 | lastname-15416 | 15416 + firstname-15417 | lastname-15417 | 15417 + firstname-15418 | lastname-15418 | 15418 + firstname-15419 | lastname-15419 | 15419 + firstname-15420 | lastname-15420 | 15420 + firstname-15421 | lastname-15421 | 15421 + firstname-15422 | lastname-15422 | 15422 + firstname-15423 | lastname-15423 | 15423 + firstname-15424 | lastname-15424 | 15424 + firstname-15425 | lastname-15425 | 15425 + firstname-15426 | lastname-15426 | 15426 + firstname-15427 | lastname-15427 | 15427 + firstname-15428 | lastname-15428 | 15428 + firstname-15429 | lastname-15429 | 15429 + firstname-15430 | lastname-15430 | 15430 + firstname-15431 | lastname-15431 | 15431 + firstname-15432 | lastname-15432 | 15432 + firstname-15433 | lastname-15433 | 15433 + firstname-15434 | lastname-15434 | 15434 + firstname-15435 | lastname-15435 | 15435 + firstname-15436 | lastname-15436 | 15436 + firstname-15437 | lastname-15437 | 15437 + firstname-15438 | lastname-15438 | 15438 + firstname-15439 | lastname-15439 | 15439 + firstname-15440 | lastname-15440 | 15440 + firstname-15441 | lastname-15441 | 15441 + firstname-15442 | lastname-15442 | 15442 + firstname-15443 | lastname-15443 | 15443 + firstname-15444 | lastname-15444 | 15444 + firstname-15445 | lastname-15445 | 15445 + firstname-15446 | lastname-15446 | 15446 + firstname-15447 | lastname-15447 | 15447 + firstname-15448 | lastname-15448 | 15448 + firstname-15449 | lastname-15449 | 15449 + firstname-15450 | lastname-15450 | 15450 + firstname-15451 | lastname-15451 | 15451 + firstname-15452 | lastname-15452 | 15452 + firstname-15453 | lastname-15453 | 15453 + firstname-15454 | lastname-15454 | 15454 + firstname-15455 | lastname-15455 | 15455 + firstname-15456 | lastname-15456 | 15456 + firstname-15457 | lastname-15457 | 15457 + firstname-15458 | lastname-15458 | 15458 + firstname-15459 | lastname-15459 | 15459 + firstname-15460 | lastname-15460 | 15460 + firstname-15461 | lastname-15461 | 15461 + firstname-15462 | lastname-15462 | 15462 + firstname-15463 | lastname-15463 | 15463 + firstname-15464 | lastname-15464 | 15464 + firstname-15465 | lastname-15465 | 15465 + firstname-15466 | lastname-15466 | 15466 + firstname-15467 | lastname-15467 | 15467 + firstname-15468 | lastname-15468 | 15468 + firstname-15469 | lastname-15469 | 15469 + firstname-15470 | lastname-15470 | 15470 + firstname-15471 | lastname-15471 | 15471 + firstname-15472 | lastname-15472 | 15472 + firstname-15473 | lastname-15473 | 15473 + firstname-15474 | lastname-15474 | 15474 + firstname-15475 | lastname-15475 | 15475 + firstname-15476 | lastname-15476 | 15476 + firstname-15477 | lastname-15477 | 15477 + firstname-15478 | lastname-15478 | 15478 + firstname-15479 | lastname-15479 | 15479 + firstname-15480 | lastname-15480 | 15480 + firstname-15481 | lastname-15481 | 15481 + firstname-15482 | lastname-15482 | 15482 + firstname-15483 | lastname-15483 | 15483 + firstname-15484 | lastname-15484 | 15484 + firstname-15485 | lastname-15485 | 15485 + firstname-15486 | lastname-15486 | 15486 + firstname-15487 | lastname-15487 | 15487 + firstname-15488 | lastname-15488 | 15488 + firstname-15489 | lastname-15489 | 15489 + firstname-15490 | lastname-15490 | 15490 + firstname-15491 | lastname-15491 | 15491 + firstname-15492 | lastname-15492 | 15492 + firstname-15493 | lastname-15493 | 15493 + firstname-15494 | lastname-15494 | 15494 + firstname-15495 | lastname-15495 | 15495 + firstname-15496 | lastname-15496 | 15496 + firstname-15497 | lastname-15497 | 15497 + firstname-15498 | lastname-15498 | 15498 + firstname-15499 | lastname-15499 | 15499 + firstname-155 | lastname-155 | 155 + firstname-15500 | lastname-15500 | 15500 + firstname-15501 | lastname-15501 | 15501 + firstname-15502 | lastname-15502 | 15502 + firstname-15503 | lastname-15503 | 15503 + firstname-15504 | lastname-15504 | 15504 + firstname-15505 | lastname-15505 | 15505 + firstname-15506 | lastname-15506 | 15506 + firstname-15507 | lastname-15507 | 15507 + firstname-15508 | lastname-15508 | 15508 + firstname-15509 | lastname-15509 | 15509 + firstname-15510 | lastname-15510 | 15510 + firstname-15511 | lastname-15511 | 15511 + firstname-15512 | lastname-15512 | 15512 + firstname-15513 | lastname-15513 | 15513 + firstname-15514 | lastname-15514 | 15514 + firstname-15515 | lastname-15515 | 15515 + firstname-15516 | lastname-15516 | 15516 + firstname-15517 | lastname-15517 | 15517 + firstname-15518 | lastname-15518 | 15518 + firstname-15519 | lastname-15519 | 15519 + firstname-15520 | lastname-15520 | 15520 + firstname-15521 | lastname-15521 | 15521 + firstname-15522 | lastname-15522 | 15522 + firstname-15523 | lastname-15523 | 15523 + firstname-15524 | lastname-15524 | 15524 + firstname-15525 | lastname-15525 | 15525 + firstname-15526 | lastname-15526 | 15526 + firstname-15527 | lastname-15527 | 15527 + firstname-15528 | lastname-15528 | 15528 + firstname-15529 | lastname-15529 | 15529 + firstname-15530 | lastname-15530 | 15530 + firstname-15531 | lastname-15531 | 15531 + firstname-15532 | lastname-15532 | 15532 + firstname-15533 | lastname-15533 | 15533 + firstname-15534 | lastname-15534 | 15534 + firstname-15535 | lastname-15535 | 15535 + firstname-15536 | lastname-15536 | 15536 + firstname-15537 | lastname-15537 | 15537 + firstname-15538 | lastname-15538 | 15538 + firstname-15539 | lastname-15539 | 15539 + firstname-15540 | lastname-15540 | 15540 + firstname-15541 | lastname-15541 | 15541 + firstname-15542 | lastname-15542 | 15542 + firstname-15543 | lastname-15543 | 15543 + firstname-15544 | lastname-15544 | 15544 + firstname-15545 | lastname-15545 | 15545 + firstname-15546 | lastname-15546 | 15546 + firstname-15547 | lastname-15547 | 15547 + firstname-15548 | lastname-15548 | 15548 + firstname-15549 | lastname-15549 | 15549 + firstname-15550 | lastname-15550 | 15550 + firstname-15551 | lastname-15551 | 15551 + firstname-15552 | lastname-15552 | 15552 + firstname-15553 | lastname-15553 | 15553 + firstname-15554 | lastname-15554 | 15554 + firstname-15555 | lastname-15555 | 15555 + firstname-15556 | lastname-15556 | 15556 + firstname-15557 | lastname-15557 | 15557 + firstname-15558 | lastname-15558 | 15558 + firstname-15559 | lastname-15559 | 15559 + firstname-15560 | lastname-15560 | 15560 + firstname-15561 | lastname-15561 | 15561 + firstname-15562 | lastname-15562 | 15562 + firstname-15563 | lastname-15563 | 15563 + firstname-15564 | lastname-15564 | 15564 + firstname-15565 | lastname-15565 | 15565 + firstname-15566 | lastname-15566 | 15566 + firstname-15567 | lastname-15567 | 15567 + firstname-15568 | lastname-15568 | 15568 + firstname-15569 | lastname-15569 | 15569 + firstname-15570 | lastname-15570 | 15570 + firstname-15571 | lastname-15571 | 15571 + firstname-15572 | lastname-15572 | 15572 + firstname-15573 | lastname-15573 | 15573 + firstname-15574 | lastname-15574 | 15574 + firstname-15575 | lastname-15575 | 15575 + firstname-15576 | lastname-15576 | 15576 + firstname-15577 | lastname-15577 | 15577 + firstname-15578 | lastname-15578 | 15578 + firstname-15579 | lastname-15579 | 15579 + firstname-15580 | lastname-15580 | 15580 + firstname-15581 | lastname-15581 | 15581 + firstname-15582 | lastname-15582 | 15582 + firstname-15583 | lastname-15583 | 15583 + firstname-15584 | lastname-15584 | 15584 + firstname-15585 | lastname-15585 | 15585 + firstname-15586 | lastname-15586 | 15586 + firstname-15587 | lastname-15587 | 15587 + firstname-15588 | lastname-15588 | 15588 + firstname-15589 | lastname-15589 | 15589 + firstname-15590 | lastname-15590 | 15590 + firstname-15591 | lastname-15591 | 15591 + firstname-15592 | lastname-15592 | 15592 + firstname-15593 | lastname-15593 | 15593 + firstname-15594 | lastname-15594 | 15594 + firstname-15595 | lastname-15595 | 15595 + firstname-15596 | lastname-15596 | 15596 + firstname-15597 | lastname-15597 | 15597 + firstname-15598 | lastname-15598 | 15598 + firstname-15599 | lastname-15599 | 15599 + firstname-156 | lastname-156 | 156 + firstname-15600 | lastname-15600 | 15600 + firstname-15601 | lastname-15601 | 15601 + firstname-15602 | lastname-15602 | 15602 + firstname-15603 | lastname-15603 | 15603 + firstname-15604 | lastname-15604 | 15604 + firstname-15605 | lastname-15605 | 15605 + firstname-15606 | lastname-15606 | 15606 + firstname-15607 | lastname-15607 | 15607 + firstname-15608 | lastname-15608 | 15608 + firstname-15609 | lastname-15609 | 15609 + firstname-15610 | lastname-15610 | 15610 + firstname-15611 | lastname-15611 | 15611 + firstname-15612 | lastname-15612 | 15612 + firstname-15613 | lastname-15613 | 15613 + firstname-15614 | lastname-15614 | 15614 + firstname-15615 | lastname-15615 | 15615 + firstname-15616 | lastname-15616 | 15616 + firstname-15617 | lastname-15617 | 15617 + firstname-15618 | lastname-15618 | 15618 + firstname-15619 | lastname-15619 | 15619 + firstname-15620 | lastname-15620 | 15620 + firstname-15621 | lastname-15621 | 15621 + firstname-15622 | lastname-15622 | 15622 + firstname-15623 | lastname-15623 | 15623 + firstname-15624 | lastname-15624 | 15624 + firstname-15625 | lastname-15625 | 15625 + firstname-15626 | lastname-15626 | 15626 + firstname-15627 | lastname-15627 | 15627 + firstname-15628 | lastname-15628 | 15628 + firstname-15629 | lastname-15629 | 15629 + firstname-15630 | lastname-15630 | 15630 + firstname-15631 | lastname-15631 | 15631 + firstname-15632 | lastname-15632 | 15632 + firstname-15633 | lastname-15633 | 15633 + firstname-15634 | lastname-15634 | 15634 + firstname-15635 | lastname-15635 | 15635 + firstname-15636 | lastname-15636 | 15636 + firstname-15637 | lastname-15637 | 15637 + firstname-15638 | lastname-15638 | 15638 + firstname-15639 | lastname-15639 | 15639 + firstname-15640 | lastname-15640 | 15640 + firstname-15641 | lastname-15641 | 15641 + firstname-15642 | lastname-15642 | 15642 + firstname-15643 | lastname-15643 | 15643 + firstname-15644 | lastname-15644 | 15644 + firstname-15645 | lastname-15645 | 15645 + firstname-15646 | lastname-15646 | 15646 + firstname-15647 | lastname-15647 | 15647 + firstname-15648 | lastname-15648 | 15648 + firstname-15649 | lastname-15649 | 15649 + firstname-15650 | lastname-15650 | 15650 + firstname-15651 | lastname-15651 | 15651 + firstname-15652 | lastname-15652 | 15652 + firstname-15653 | lastname-15653 | 15653 + firstname-15654 | lastname-15654 | 15654 + firstname-15655 | lastname-15655 | 15655 + firstname-15656 | lastname-15656 | 15656 + firstname-15657 | lastname-15657 | 15657 + firstname-15658 | lastname-15658 | 15658 + firstname-15659 | lastname-15659 | 15659 + firstname-15660 | lastname-15660 | 15660 + firstname-15661 | lastname-15661 | 15661 + firstname-15662 | lastname-15662 | 15662 + firstname-15663 | lastname-15663 | 15663 + firstname-15664 | lastname-15664 | 15664 + firstname-15665 | lastname-15665 | 15665 + firstname-15666 | lastname-15666 | 15666 + firstname-15667 | lastname-15667 | 15667 + firstname-15668 | lastname-15668 | 15668 + firstname-15669 | lastname-15669 | 15669 + firstname-15670 | lastname-15670 | 15670 + firstname-15671 | lastname-15671 | 15671 + firstname-15672 | lastname-15672 | 15672 + firstname-15673 | lastname-15673 | 15673 + firstname-15674 | lastname-15674 | 15674 + firstname-15675 | lastname-15675 | 15675 + firstname-15676 | lastname-15676 | 15676 + firstname-15677 | lastname-15677 | 15677 + firstname-15678 | lastname-15678 | 15678 + firstname-15679 | lastname-15679 | 15679 + firstname-15680 | lastname-15680 | 15680 + firstname-15681 | lastname-15681 | 15681 + firstname-15682 | lastname-15682 | 15682 + firstname-15683 | lastname-15683 | 15683 + firstname-15684 | lastname-15684 | 15684 + firstname-15685 | lastname-15685 | 15685 + firstname-15686 | lastname-15686 | 15686 + firstname-15687 | lastname-15687 | 15687 + firstname-15688 | lastname-15688 | 15688 + firstname-15689 | lastname-15689 | 15689 + firstname-15690 | lastname-15690 | 15690 + firstname-15691 | lastname-15691 | 15691 + firstname-15692 | lastname-15692 | 15692 + firstname-15693 | lastname-15693 | 15693 + firstname-15694 | lastname-15694 | 15694 + firstname-15695 | lastname-15695 | 15695 + firstname-15696 | lastname-15696 | 15696 + firstname-15697 | lastname-15697 | 15697 + firstname-15698 | lastname-15698 | 15698 + firstname-15699 | lastname-15699 | 15699 + firstname-157 | lastname-157 | 157 + firstname-15700 | lastname-15700 | 15700 + firstname-15701 | lastname-15701 | 15701 + firstname-15702 | lastname-15702 | 15702 + firstname-15703 | lastname-15703 | 15703 + firstname-15704 | lastname-15704 | 15704 + firstname-15705 | lastname-15705 | 15705 + firstname-15706 | lastname-15706 | 15706 + firstname-15707 | lastname-15707 | 15707 + firstname-15708 | lastname-15708 | 15708 + firstname-15709 | lastname-15709 | 15709 + firstname-15710 | lastname-15710 | 15710 + firstname-15711 | lastname-15711 | 15711 + firstname-15712 | lastname-15712 | 15712 + firstname-15713 | lastname-15713 | 15713 + firstname-15714 | lastname-15714 | 15714 + firstname-15715 | lastname-15715 | 15715 + firstname-15716 | lastname-15716 | 15716 + firstname-15717 | lastname-15717 | 15717 + firstname-15718 | lastname-15718 | 15718 + firstname-15719 | lastname-15719 | 15719 + firstname-15720 | lastname-15720 | 15720 + firstname-15721 | lastname-15721 | 15721 + firstname-15722 | lastname-15722 | 15722 + firstname-15723 | lastname-15723 | 15723 + firstname-15724 | lastname-15724 | 15724 + firstname-15725 | lastname-15725 | 15725 + firstname-15726 | lastname-15726 | 15726 + firstname-15727 | lastname-15727 | 15727 + firstname-15728 | lastname-15728 | 15728 + firstname-15729 | lastname-15729 | 15729 + firstname-15730 | lastname-15730 | 15730 + firstname-15731 | lastname-15731 | 15731 + firstname-15732 | lastname-15732 | 15732 + firstname-15733 | lastname-15733 | 15733 + firstname-15734 | lastname-15734 | 15734 + firstname-15735 | lastname-15735 | 15735 + firstname-15736 | lastname-15736 | 15736 + firstname-15737 | lastname-15737 | 15737 + firstname-15738 | lastname-15738 | 15738 + firstname-15739 | lastname-15739 | 15739 + firstname-15740 | lastname-15740 | 15740 + firstname-15741 | lastname-15741 | 15741 + firstname-15742 | lastname-15742 | 15742 + firstname-15743 | lastname-15743 | 15743 + firstname-15744 | lastname-15744 | 15744 + firstname-15745 | lastname-15745 | 15745 + firstname-15746 | lastname-15746 | 15746 + firstname-15747 | lastname-15747 | 15747 + firstname-15748 | lastname-15748 | 15748 + firstname-15749 | lastname-15749 | 15749 + firstname-15750 | lastname-15750 | 15750 + firstname-15751 | lastname-15751 | 15751 + firstname-15752 | lastname-15752 | 15752 + firstname-15753 | lastname-15753 | 15753 + firstname-15754 | lastname-15754 | 15754 + firstname-15755 | lastname-15755 | 15755 + firstname-15756 | lastname-15756 | 15756 + firstname-15757 | lastname-15757 | 15757 + firstname-15758 | lastname-15758 | 15758 + firstname-15759 | lastname-15759 | 15759 + firstname-15760 | lastname-15760 | 15760 + firstname-15761 | lastname-15761 | 15761 + firstname-15762 | lastname-15762 | 15762 + firstname-15763 | lastname-15763 | 15763 + firstname-15764 | lastname-15764 | 15764 + firstname-15765 | lastname-15765 | 15765 + firstname-15766 | lastname-15766 | 15766 + firstname-15767 | lastname-15767 | 15767 + firstname-15768 | lastname-15768 | 15768 + firstname-15769 | lastname-15769 | 15769 + firstname-15770 | lastname-15770 | 15770 + firstname-15771 | lastname-15771 | 15771 + firstname-15772 | lastname-15772 | 15772 + firstname-15773 | lastname-15773 | 15773 + firstname-15774 | lastname-15774 | 15774 + firstname-15775 | lastname-15775 | 15775 + firstname-15776 | lastname-15776 | 15776 + firstname-15777 | lastname-15777 | 15777 + firstname-15778 | lastname-15778 | 15778 + firstname-15779 | lastname-15779 | 15779 + firstname-15780 | lastname-15780 | 15780 + firstname-15781 | lastname-15781 | 15781 + firstname-15782 | lastname-15782 | 15782 + firstname-15783 | lastname-15783 | 15783 + firstname-15784 | lastname-15784 | 15784 + firstname-15785 | lastname-15785 | 15785 + firstname-15786 | lastname-15786 | 15786 + firstname-15787 | lastname-15787 | 15787 + firstname-15788 | lastname-15788 | 15788 + firstname-15789 | lastname-15789 | 15789 + firstname-15790 | lastname-15790 | 15790 + firstname-15791 | lastname-15791 | 15791 + firstname-15792 | lastname-15792 | 15792 + firstname-15793 | lastname-15793 | 15793 + firstname-15794 | lastname-15794 | 15794 + firstname-15795 | lastname-15795 | 15795 + firstname-15796 | lastname-15796 | 15796 + firstname-15797 | lastname-15797 | 15797 + firstname-15798 | lastname-15798 | 15798 + firstname-15799 | lastname-15799 | 15799 + firstname-158 | lastname-158 | 158 + firstname-15800 | lastname-15800 | 15800 + firstname-15801 | lastname-15801 | 15801 + firstname-15802 | lastname-15802 | 15802 + firstname-15803 | lastname-15803 | 15803 + firstname-15804 | lastname-15804 | 15804 + firstname-15805 | lastname-15805 | 15805 + firstname-15806 | lastname-15806 | 15806 + firstname-15807 | lastname-15807 | 15807 + firstname-15808 | lastname-15808 | 15808 + firstname-15809 | lastname-15809 | 15809 + firstname-15810 | lastname-15810 | 15810 + firstname-15811 | lastname-15811 | 15811 + firstname-15812 | lastname-15812 | 15812 + firstname-15813 | lastname-15813 | 15813 + firstname-15814 | lastname-15814 | 15814 + firstname-15815 | lastname-15815 | 15815 + firstname-15816 | lastname-15816 | 15816 + firstname-15817 | lastname-15817 | 15817 + firstname-15818 | lastname-15818 | 15818 + firstname-15819 | lastname-15819 | 15819 + firstname-15820 | lastname-15820 | 15820 + firstname-15821 | lastname-15821 | 15821 + firstname-15822 | lastname-15822 | 15822 + firstname-15823 | lastname-15823 | 15823 + firstname-15824 | lastname-15824 | 15824 + firstname-15825 | lastname-15825 | 15825 + firstname-15826 | lastname-15826 | 15826 + firstname-15827 | lastname-15827 | 15827 + firstname-15828 | lastname-15828 | 15828 + firstname-15829 | lastname-15829 | 15829 + firstname-15830 | lastname-15830 | 15830 + firstname-15831 | lastname-15831 | 15831 + firstname-15832 | lastname-15832 | 15832 + firstname-15833 | lastname-15833 | 15833 + firstname-15834 | lastname-15834 | 15834 + firstname-15835 | lastname-15835 | 15835 + firstname-15836 | lastname-15836 | 15836 + firstname-15837 | lastname-15837 | 15837 + firstname-15838 | lastname-15838 | 15838 + firstname-15839 | lastname-15839 | 15839 + firstname-15840 | lastname-15840 | 15840 + firstname-15841 | lastname-15841 | 15841 + firstname-15842 | lastname-15842 | 15842 + firstname-15843 | lastname-15843 | 15843 + firstname-15844 | lastname-15844 | 15844 + firstname-15845 | lastname-15845 | 15845 + firstname-15846 | lastname-15846 | 15846 + firstname-15847 | lastname-15847 | 15847 + firstname-15848 | lastname-15848 | 15848 + firstname-15849 | lastname-15849 | 15849 + firstname-15850 | lastname-15850 | 15850 + firstname-15851 | lastname-15851 | 15851 + firstname-15852 | lastname-15852 | 15852 + firstname-15853 | lastname-15853 | 15853 + firstname-15854 | lastname-15854 | 15854 + firstname-15855 | lastname-15855 | 15855 + firstname-15856 | lastname-15856 | 15856 + firstname-15857 | lastname-15857 | 15857 + firstname-15858 | lastname-15858 | 15858 + firstname-15859 | lastname-15859 | 15859 + firstname-15860 | lastname-15860 | 15860 + firstname-15861 | lastname-15861 | 15861 + firstname-15862 | lastname-15862 | 15862 + firstname-15863 | lastname-15863 | 15863 + firstname-15864 | lastname-15864 | 15864 + firstname-15865 | lastname-15865 | 15865 + firstname-15866 | lastname-15866 | 15866 + firstname-15867 | lastname-15867 | 15867 + firstname-15868 | lastname-15868 | 15868 + firstname-15869 | lastname-15869 | 15869 + firstname-15870 | lastname-15870 | 15870 + firstname-15871 | lastname-15871 | 15871 + firstname-15872 | lastname-15872 | 15872 + firstname-15873 | lastname-15873 | 15873 + firstname-15874 | lastname-15874 | 15874 + firstname-15875 | lastname-15875 | 15875 + firstname-15876 | lastname-15876 | 15876 + firstname-15877 | lastname-15877 | 15877 + firstname-15878 | lastname-15878 | 15878 + firstname-15879 | lastname-15879 | 15879 + firstname-15880 | lastname-15880 | 15880 + firstname-15881 | lastname-15881 | 15881 + firstname-15882 | lastname-15882 | 15882 + firstname-15883 | lastname-15883 | 15883 + firstname-15884 | lastname-15884 | 15884 + firstname-15885 | lastname-15885 | 15885 + firstname-15886 | lastname-15886 | 15886 + firstname-15887 | lastname-15887 | 15887 + firstname-15888 | lastname-15888 | 15888 + firstname-15889 | lastname-15889 | 15889 + firstname-15890 | lastname-15890 | 15890 + firstname-15891 | lastname-15891 | 15891 + firstname-15892 | lastname-15892 | 15892 + firstname-15893 | lastname-15893 | 15893 + firstname-15894 | lastname-15894 | 15894 + firstname-15895 | lastname-15895 | 15895 + firstname-15896 | lastname-15896 | 15896 + firstname-15897 | lastname-15897 | 15897 + firstname-15898 | lastname-15898 | 15898 + firstname-15899 | lastname-15899 | 15899 + firstname-159 | lastname-159 | 159 + firstname-15900 | lastname-15900 | 15900 + firstname-15901 | lastname-15901 | 15901 + firstname-15902 | lastname-15902 | 15902 + firstname-15903 | lastname-15903 | 15903 + firstname-15904 | lastname-15904 | 15904 + firstname-15905 | lastname-15905 | 15905 + firstname-15906 | lastname-15906 | 15906 + firstname-15907 | lastname-15907 | 15907 + firstname-15908 | lastname-15908 | 15908 + firstname-15909 | lastname-15909 | 15909 + firstname-15910 | lastname-15910 | 15910 + firstname-15911 | lastname-15911 | 15911 + firstname-15912 | lastname-15912 | 15912 + firstname-15913 | lastname-15913 | 15913 + firstname-15914 | lastname-15914 | 15914 + firstname-15915 | lastname-15915 | 15915 + firstname-15916 | lastname-15916 | 15916 + firstname-15917 | lastname-15917 | 15917 + firstname-15918 | lastname-15918 | 15918 + firstname-15919 | lastname-15919 | 15919 + firstname-15920 | lastname-15920 | 15920 + firstname-15921 | lastname-15921 | 15921 + firstname-15922 | lastname-15922 | 15922 + firstname-15923 | lastname-15923 | 15923 + firstname-15924 | lastname-15924 | 15924 + firstname-15925 | lastname-15925 | 15925 + firstname-15926 | lastname-15926 | 15926 + firstname-15927 | lastname-15927 | 15927 + firstname-15928 | lastname-15928 | 15928 + firstname-15929 | lastname-15929 | 15929 + firstname-15930 | lastname-15930 | 15930 + firstname-15931 | lastname-15931 | 15931 + firstname-15932 | lastname-15932 | 15932 + firstname-15933 | lastname-15933 | 15933 + firstname-15934 | lastname-15934 | 15934 + firstname-15935 | lastname-15935 | 15935 + firstname-15936 | lastname-15936 | 15936 + firstname-15937 | lastname-15937 | 15937 + firstname-15938 | lastname-15938 | 15938 + firstname-15939 | lastname-15939 | 15939 + firstname-15940 | lastname-15940 | 15940 + firstname-15941 | lastname-15941 | 15941 + firstname-15942 | lastname-15942 | 15942 + firstname-15943 | lastname-15943 | 15943 + firstname-15944 | lastname-15944 | 15944 + firstname-15945 | lastname-15945 | 15945 + firstname-15946 | lastname-15946 | 15946 + firstname-15947 | lastname-15947 | 15947 + firstname-15948 | lastname-15948 | 15948 + firstname-15949 | lastname-15949 | 15949 + firstname-15950 | lastname-15950 | 15950 + firstname-15951 | lastname-15951 | 15951 + firstname-15952 | lastname-15952 | 15952 + firstname-15953 | lastname-15953 | 15953 + firstname-15954 | lastname-15954 | 15954 + firstname-15955 | lastname-15955 | 15955 + firstname-15956 | lastname-15956 | 15956 + firstname-15957 | lastname-15957 | 15957 + firstname-15958 | lastname-15958 | 15958 + firstname-15959 | lastname-15959 | 15959 + firstname-15960 | lastname-15960 | 15960 + firstname-15961 | lastname-15961 | 15961 + firstname-15962 | lastname-15962 | 15962 + firstname-15963 | lastname-15963 | 15963 + firstname-15964 | lastname-15964 | 15964 + firstname-15965 | lastname-15965 | 15965 + firstname-15966 | lastname-15966 | 15966 + firstname-15967 | lastname-15967 | 15967 + firstname-15968 | lastname-15968 | 15968 + firstname-15969 | lastname-15969 | 15969 + firstname-15970 | lastname-15970 | 15970 + firstname-15971 | lastname-15971 | 15971 + firstname-15972 | lastname-15972 | 15972 + firstname-15973 | lastname-15973 | 15973 + firstname-15974 | lastname-15974 | 15974 + firstname-15975 | lastname-15975 | 15975 + firstname-15976 | lastname-15976 | 15976 + firstname-15977 | lastname-15977 | 15977 + firstname-15978 | lastname-15978 | 15978 + firstname-15979 | lastname-15979 | 15979 + firstname-15980 | lastname-15980 | 15980 + firstname-15981 | lastname-15981 | 15981 + firstname-15982 | lastname-15982 | 15982 + firstname-15983 | lastname-15983 | 15983 + firstname-15984 | lastname-15984 | 15984 + firstname-15985 | lastname-15985 | 15985 + firstname-15986 | lastname-15986 | 15986 + firstname-15987 | lastname-15987 | 15987 + firstname-15988 | lastname-15988 | 15988 + firstname-15989 | lastname-15989 | 15989 + firstname-15990 | lastname-15990 | 15990 + firstname-15991 | lastname-15991 | 15991 + firstname-15992 | lastname-15992 | 15992 + firstname-15993 | lastname-15993 | 15993 + firstname-15994 | lastname-15994 | 15994 + firstname-15995 | lastname-15995 | 15995 + firstname-15996 | lastname-15996 | 15996 + firstname-15997 | lastname-15997 | 15997 + firstname-15998 | lastname-15998 | 15998 + firstname-15999 | lastname-15999 | 15999 + firstname-16 | lastname-16 | 16 + firstname-160 | lastname-160 | 160 + firstname-16000 | lastname-16000 | 16000 + firstname-161 | lastname-161 | 161 + firstname-162 | lastname-162 | 162 + firstname-163 | lastname-163 | 163 + firstname-164 | lastname-164 | 164 + firstname-165 | lastname-165 | 165 + firstname-166 | lastname-166 | 166 + firstname-167 | lastname-167 | 167 + firstname-168 | lastname-168 | 168 + firstname-169 | lastname-169 | 169 + firstname-17 | lastname-17 | 17 + firstname-170 | lastname-170 | 170 + firstname-171 | lastname-171 | 171 + firstname-172 | lastname-172 | 172 + firstname-173 | lastname-173 | 173 + firstname-174 | lastname-174 | 174 + firstname-175 | lastname-175 | 175 + firstname-176 | lastname-176 | 176 + firstname-177 | lastname-177 | 177 + firstname-178 | lastname-178 | 178 + firstname-179 | lastname-179 | 179 + firstname-18 | lastname-18 | 18 + firstname-180 | lastname-180 | 180 + firstname-181 | lastname-181 | 181 + firstname-182 | lastname-182 | 182 + firstname-183 | lastname-183 | 183 + firstname-184 | lastname-184 | 184 + firstname-185 | lastname-185 | 185 + firstname-186 | lastname-186 | 186 + firstname-187 | lastname-187 | 187 + firstname-188 | lastname-188 | 188 + firstname-189 | lastname-189 | 189 + firstname-19 | lastname-19 | 19 + firstname-190 | lastname-190 | 190 + firstname-191 | lastname-191 | 191 + firstname-192 | lastname-192 | 192 + firstname-193 | lastname-193 | 193 + firstname-194 | lastname-194 | 194 + firstname-195 | lastname-195 | 195 + firstname-196 | lastname-196 | 196 + firstname-197 | lastname-197 | 197 + firstname-198 | lastname-198 | 198 + firstname-199 | lastname-199 | 199 + firstname-2 | lastname-2 | 2 + firstname-20 | lastname-20 | 20 + firstname-200 | lastname-200 | 200 + firstname-201 | lastname-201 | 201 + firstname-202 | lastname-202 | 202 + firstname-203 | lastname-203 | 203 + firstname-204 | lastname-204 | 204 + firstname-205 | lastname-205 | 205 + firstname-206 | lastname-206 | 206 + firstname-207 | lastname-207 | 207 + firstname-208 | lastname-208 | 208 + firstname-209 | lastname-209 | 209 + firstname-21 | lastname-21 | 21 + firstname-210 | lastname-210 | 210 + firstname-211 | lastname-211 | 211 + firstname-212 | lastname-212 | 212 + firstname-213 | lastname-213 | 213 + firstname-214 | lastname-214 | 214 + firstname-215 | lastname-215 | 215 + firstname-216 | lastname-216 | 216 + firstname-217 | lastname-217 | 217 + firstname-218 | lastname-218 | 218 + firstname-219 | lastname-219 | 219 + firstname-22 | lastname-22 | 22 + firstname-220 | lastname-220 | 220 + firstname-221 | lastname-221 | 221 + firstname-222 | lastname-222 | 222 + firstname-223 | lastname-223 | 223 + firstname-224 | lastname-224 | 224 + firstname-225 | lastname-225 | 225 + firstname-226 | lastname-226 | 226 + firstname-227 | lastname-227 | 227 + firstname-228 | lastname-228 | 228 + firstname-229 | lastname-229 | 229 + firstname-23 | lastname-23 | 23 + firstname-230 | lastname-230 | 230 + firstname-231 | lastname-231 | 231 + firstname-232 | lastname-232 | 232 + firstname-233 | lastname-233 | 233 + firstname-234 | lastname-234 | 234 + firstname-235 | lastname-235 | 235 + firstname-236 | lastname-236 | 236 + firstname-237 | lastname-237 | 237 + firstname-238 | lastname-238 | 238 + firstname-239 | lastname-239 | 239 + firstname-24 | lastname-24 | 24 + firstname-240 | lastname-240 | 240 + firstname-241 | lastname-241 | 241 + firstname-242 | lastname-242 | 242 + firstname-243 | lastname-243 | 243 + firstname-244 | lastname-244 | 244 + firstname-245 | lastname-245 | 245 + firstname-246 | lastname-246 | 246 + firstname-247 | lastname-247 | 247 + firstname-248 | lastname-248 | 248 + firstname-249 | lastname-249 | 249 + firstname-25 | lastname-25 | 25 + firstname-250 | lastname-250 | 250 + firstname-251 | lastname-251 | 251 + firstname-252 | lastname-252 | 252 + firstname-253 | lastname-253 | 253 + firstname-254 | lastname-254 | 254 + firstname-255 | lastname-255 | 255 + firstname-256 | lastname-256 | 256 + firstname-257 | lastname-257 | 257 + firstname-258 | lastname-258 | 258 + firstname-259 | lastname-259 | 259 + firstname-26 | lastname-26 | 26 + firstname-260 | lastname-260 | 260 + firstname-261 | lastname-261 | 261 + firstname-262 | lastname-262 | 262 + firstname-263 | lastname-263 | 263 + firstname-264 | lastname-264 | 264 + firstname-265 | lastname-265 | 265 + firstname-266 | lastname-266 | 266 + firstname-267 | lastname-267 | 267 + firstname-268 | lastname-268 | 268 + firstname-269 | lastname-269 | 269 + firstname-27 | lastname-27 | 27 + firstname-270 | lastname-270 | 270 + firstname-271 | lastname-271 | 271 + firstname-272 | lastname-272 | 272 + firstname-273 | lastname-273 | 273 + firstname-274 | lastname-274 | 274 + firstname-275 | lastname-275 | 275 + firstname-276 | lastname-276 | 276 + firstname-277 | lastname-277 | 277 + firstname-278 | lastname-278 | 278 + firstname-279 | lastname-279 | 279 + firstname-28 | lastname-28 | 28 + firstname-280 | lastname-280 | 280 + firstname-281 | lastname-281 | 281 + firstname-282 | lastname-282 | 282 + firstname-283 | lastname-283 | 283 + firstname-284 | lastname-284 | 284 + firstname-285 | lastname-285 | 285 + firstname-286 | lastname-286 | 286 + firstname-287 | lastname-287 | 287 + firstname-288 | lastname-288 | 288 + firstname-289 | lastname-289 | 289 + firstname-29 | lastname-29 | 29 + firstname-290 | lastname-290 | 290 + firstname-291 | lastname-291 | 291 + firstname-292 | lastname-292 | 292 + firstname-293 | lastname-293 | 293 + firstname-294 | lastname-294 | 294 + firstname-295 | lastname-295 | 295 + firstname-296 | lastname-296 | 296 + firstname-297 | lastname-297 | 297 + firstname-298 | lastname-298 | 298 + firstname-299 | lastname-299 | 299 + firstname-3 | lastname-3 | 3 + firstname-30 | lastname-30 | 30 + firstname-300 | lastname-300 | 300 + firstname-301 | lastname-301 | 301 + firstname-302 | lastname-302 | 302 + firstname-303 | lastname-303 | 303 + firstname-304 | lastname-304 | 304 + firstname-305 | lastname-305 | 305 + firstname-306 | lastname-306 | 306 + firstname-307 | lastname-307 | 307 + firstname-308 | lastname-308 | 308 + firstname-309 | lastname-309 | 309 + firstname-31 | lastname-31 | 31 + firstname-310 | lastname-310 | 310 + firstname-311 | lastname-311 | 311 + firstname-312 | lastname-312 | 312 + firstname-313 | lastname-313 | 313 + firstname-314 | lastname-314 | 314 + firstname-315 | lastname-315 | 315 + firstname-316 | lastname-316 | 316 + firstname-317 | lastname-317 | 317 + firstname-318 | lastname-318 | 318 + firstname-319 | lastname-319 | 319 + firstname-32 | lastname-32 | 32 + firstname-320 | lastname-320 | 320 + firstname-321 | lastname-321 | 321 + firstname-322 | lastname-322 | 322 + firstname-323 | lastname-323 | 323 + firstname-324 | lastname-324 | 324 + firstname-325 | lastname-325 | 325 + firstname-326 | lastname-326 | 326 + firstname-327 | lastname-327 | 327 + firstname-328 | lastname-328 | 328 + firstname-329 | lastname-329 | 329 + firstname-33 | lastname-33 | 33 + firstname-330 | lastname-330 | 330 + firstname-331 | lastname-331 | 331 + firstname-332 | lastname-332 | 332 + firstname-333 | lastname-333 | 333 + firstname-334 | lastname-334 | 334 + firstname-335 | lastname-335 | 335 + firstname-336 | lastname-336 | 336 + firstname-337 | lastname-337 | 337 + firstname-338 | lastname-338 | 338 + firstname-339 | lastname-339 | 339 + firstname-34 | lastname-34 | 34 + firstname-340 | lastname-340 | 340 + firstname-341 | lastname-341 | 341 + firstname-342 | lastname-342 | 342 + firstname-343 | lastname-343 | 343 + firstname-344 | lastname-344 | 344 + firstname-345 | lastname-345 | 345 + firstname-346 | lastname-346 | 346 + firstname-347 | lastname-347 | 347 + firstname-348 | lastname-348 | 348 + firstname-349 | lastname-349 | 349 + firstname-35 | lastname-35 | 35 + firstname-350 | lastname-350 | 350 + firstname-351 | lastname-351 | 351 + firstname-352 | lastname-352 | 352 + firstname-353 | lastname-353 | 353 + firstname-354 | lastname-354 | 354 + firstname-355 | lastname-355 | 355 + firstname-356 | lastname-356 | 356 + firstname-357 | lastname-357 | 357 + firstname-358 | lastname-358 | 358 + firstname-359 | lastname-359 | 359 + firstname-36 | lastname-36 | 36 + firstname-360 | lastname-360 | 360 + firstname-361 | lastname-361 | 361 + firstname-362 | lastname-362 | 362 + firstname-363 | lastname-363 | 363 + firstname-364 | lastname-364 | 364 + firstname-365 | lastname-365 | 365 + firstname-366 | lastname-366 | 366 + firstname-367 | lastname-367 | 367 + firstname-368 | lastname-368 | 368 + firstname-369 | lastname-369 | 369 + firstname-37 | lastname-37 | 37 + firstname-370 | lastname-370 | 370 + firstname-371 | lastname-371 | 371 + firstname-372 | lastname-372 | 372 + firstname-373 | lastname-373 | 373 + firstname-374 | lastname-374 | 374 + firstname-375 | lastname-375 | 375 + firstname-376 | lastname-376 | 376 + firstname-377 | lastname-377 | 377 + firstname-378 | lastname-378 | 378 + firstname-379 | lastname-379 | 379 + firstname-38 | lastname-38 | 38 + firstname-380 | lastname-380 | 380 + firstname-381 | lastname-381 | 381 + firstname-382 | lastname-382 | 382 + firstname-383 | lastname-383 | 383 + firstname-384 | lastname-384 | 384 + firstname-385 | lastname-385 | 385 + firstname-386 | lastname-386 | 386 + firstname-387 | lastname-387 | 387 + firstname-388 | lastname-388 | 388 + firstname-389 | lastname-389 | 389 + firstname-39 | lastname-39 | 39 + firstname-390 | lastname-390 | 390 + firstname-391 | lastname-391 | 391 + firstname-392 | lastname-392 | 392 + firstname-393 | lastname-393 | 393 + firstname-394 | lastname-394 | 394 + firstname-395 | lastname-395 | 395 + firstname-396 | lastname-396 | 396 + firstname-397 | lastname-397 | 397 + firstname-398 | lastname-398 | 398 + firstname-399 | lastname-399 | 399 + firstname-4 | lastname-4 | 4 + firstname-40 | lastname-40 | 40 + firstname-400 | lastname-400 | 400 + firstname-401 | lastname-401 | 401 + firstname-402 | lastname-402 | 402 + firstname-403 | lastname-403 | 403 + firstname-404 | lastname-404 | 404 + firstname-405 | lastname-405 | 405 + firstname-406 | lastname-406 | 406 + firstname-407 | lastname-407 | 407 + firstname-408 | lastname-408 | 408 + firstname-409 | lastname-409 | 409 + firstname-41 | lastname-41 | 41 + firstname-410 | lastname-410 | 410 + firstname-411 | lastname-411 | 411 + firstname-412 | lastname-412 | 412 + firstname-413 | lastname-413 | 413 + firstname-414 | lastname-414 | 414 + firstname-415 | lastname-415 | 415 + firstname-416 | lastname-416 | 416 + firstname-417 | lastname-417 | 417 + firstname-418 | lastname-418 | 418 + firstname-419 | lastname-419 | 419 + firstname-42 | lastname-42 | 42 + firstname-420 | lastname-420 | 420 + firstname-421 | lastname-421 | 421 + firstname-422 | lastname-422 | 422 + firstname-423 | lastname-423 | 423 + firstname-424 | lastname-424 | 424 + firstname-425 | lastname-425 | 425 + firstname-426 | lastname-426 | 426 + firstname-427 | lastname-427 | 427 + firstname-428 | lastname-428 | 428 + firstname-429 | lastname-429 | 429 + firstname-43 | lastname-43 | 43 + firstname-430 | lastname-430 | 430 + firstname-431 | lastname-431 | 431 + firstname-432 | lastname-432 | 432 + firstname-433 | lastname-433 | 433 + firstname-434 | lastname-434 | 434 + firstname-435 | lastname-435 | 435 + firstname-436 | lastname-436 | 436 + firstname-437 | lastname-437 | 437 + firstname-438 | lastname-438 | 438 + firstname-439 | lastname-439 | 439 + firstname-44 | lastname-44 | 44 + firstname-440 | lastname-440 | 440 + firstname-441 | lastname-441 | 441 + firstname-442 | lastname-442 | 442 + firstname-443 | lastname-443 | 443 + firstname-444 | lastname-444 | 444 + firstname-445 | lastname-445 | 445 + firstname-446 | lastname-446 | 446 + firstname-447 | lastname-447 | 447 + firstname-448 | lastname-448 | 448 + firstname-449 | lastname-449 | 449 + firstname-45 | lastname-45 | 45 + firstname-450 | lastname-450 | 450 + firstname-451 | lastname-451 | 451 + firstname-452 | lastname-452 | 452 + firstname-453 | lastname-453 | 453 + firstname-454 | lastname-454 | 454 + firstname-455 | lastname-455 | 455 + firstname-456 | lastname-456 | 456 + firstname-457 | lastname-457 | 457 + firstname-458 | lastname-458 | 458 + firstname-459 | lastname-459 | 459 + firstname-46 | lastname-46 | 46 + firstname-460 | lastname-460 | 460 + firstname-461 | lastname-461 | 461 + firstname-462 | lastname-462 | 462 + firstname-463 | lastname-463 | 463 + firstname-464 | lastname-464 | 464 + firstname-465 | lastname-465 | 465 + firstname-466 | lastname-466 | 466 + firstname-467 | lastname-467 | 467 + firstname-468 | lastname-468 | 468 + firstname-469 | lastname-469 | 469 + firstname-47 | lastname-47 | 47 + firstname-470 | lastname-470 | 470 + firstname-471 | lastname-471 | 471 + firstname-472 | lastname-472 | 472 + firstname-473 | lastname-473 | 473 + firstname-474 | lastname-474 | 474 + firstname-475 | lastname-475 | 475 + firstname-476 | lastname-476 | 476 + firstname-477 | lastname-477 | 477 + firstname-478 | lastname-478 | 478 + firstname-479 | lastname-479 | 479 + firstname-48 | lastname-48 | 48 + firstname-480 | lastname-480 | 480 + firstname-481 | lastname-481 | 481 + firstname-482 | lastname-482 | 482 + firstname-483 | lastname-483 | 483 + firstname-484 | lastname-484 | 484 + firstname-485 | lastname-485 | 485 + firstname-486 | lastname-486 | 486 + firstname-487 | lastname-487 | 487 + firstname-488 | lastname-488 | 488 + firstname-489 | lastname-489 | 489 + firstname-49 | lastname-49 | 49 + firstname-490 | lastname-490 | 490 + firstname-491 | lastname-491 | 491 + firstname-492 | lastname-492 | 492 + firstname-493 | lastname-493 | 493 + firstname-494 | lastname-494 | 494 + firstname-495 | lastname-495 | 495 + firstname-496 | lastname-496 | 496 + firstname-497 | lastname-497 | 497 + firstname-498 | lastname-498 | 498 + firstname-499 | lastname-499 | 499 + firstname-5 | lastname-5 | 5 + firstname-50 | lastname-50 | 50 + firstname-500 | lastname-500 | 500 + firstname-501 | lastname-501 | 501 + firstname-502 | lastname-502 | 502 + firstname-503 | lastname-503 | 503 + firstname-504 | lastname-504 | 504 + firstname-505 | lastname-505 | 505 + firstname-506 | lastname-506 | 506 + firstname-507 | lastname-507 | 507 + firstname-508 | lastname-508 | 508 + firstname-509 | lastname-509 | 509 + firstname-51 | lastname-51 | 51 + firstname-510 | lastname-510 | 510 + firstname-511 | lastname-511 | 511 + firstname-512 | lastname-512 | 512 + firstname-513 | lastname-513 | 513 + firstname-514 | lastname-514 | 514 + firstname-515 | lastname-515 | 515 + firstname-516 | lastname-516 | 516 + firstname-517 | lastname-517 | 517 + firstname-518 | lastname-518 | 518 + firstname-519 | lastname-519 | 519 + firstname-52 | lastname-52 | 52 + firstname-520 | lastname-520 | 520 + firstname-521 | lastname-521 | 521 + firstname-522 | lastname-522 | 522 + firstname-523 | lastname-523 | 523 + firstname-524 | lastname-524 | 524 + firstname-525 | lastname-525 | 525 + firstname-526 | lastname-526 | 526 + firstname-527 | lastname-527 | 527 + firstname-528 | lastname-528 | 528 + firstname-529 | lastname-529 | 529 + firstname-53 | lastname-53 | 53 + firstname-530 | lastname-530 | 530 + firstname-531 | lastname-531 | 531 + firstname-532 | lastname-532 | 532 + firstname-533 | lastname-533 | 533 + firstname-534 | lastname-534 | 534 + firstname-535 | lastname-535 | 535 + firstname-536 | lastname-536 | 536 + firstname-537 | lastname-537 | 537 + firstname-538 | lastname-538 | 538 + firstname-539 | lastname-539 | 539 + firstname-54 | lastname-54 | 54 + firstname-540 | lastname-540 | 540 + firstname-541 | lastname-541 | 541 + firstname-542 | lastname-542 | 542 + firstname-543 | lastname-543 | 543 + firstname-544 | lastname-544 | 544 + firstname-545 | lastname-545 | 545 + firstname-546 | lastname-546 | 546 + firstname-547 | lastname-547 | 547 + firstname-548 | lastname-548 | 548 + firstname-549 | lastname-549 | 549 + firstname-55 | lastname-55 | 55 + firstname-550 | lastname-550 | 550 + firstname-551 | lastname-551 | 551 + firstname-552 | lastname-552 | 552 + firstname-553 | lastname-553 | 553 + firstname-554 | lastname-554 | 554 + firstname-555 | lastname-555 | 555 + firstname-556 | lastname-556 | 556 + firstname-557 | lastname-557 | 557 + firstname-558 | lastname-558 | 558 + firstname-559 | lastname-559 | 559 + firstname-56 | lastname-56 | 56 + firstname-560 | lastname-560 | 560 + firstname-561 | lastname-561 | 561 + firstname-562 | lastname-562 | 562 + firstname-563 | lastname-563 | 563 + firstname-564 | lastname-564 | 564 + firstname-565 | lastname-565 | 565 + firstname-566 | lastname-566 | 566 + firstname-567 | lastname-567 | 567 + firstname-568 | lastname-568 | 568 + firstname-569 | lastname-569 | 569 + firstname-57 | lastname-57 | 57 + firstname-570 | lastname-570 | 570 + firstname-571 | lastname-571 | 571 + firstname-572 | lastname-572 | 572 + firstname-573 | lastname-573 | 573 + firstname-574 | lastname-574 | 574 + firstname-575 | lastname-575 | 575 + firstname-576 | lastname-576 | 576 + firstname-577 | lastname-577 | 577 + firstname-578 | lastname-578 | 578 + firstname-579 | lastname-579 | 579 + firstname-58 | lastname-58 | 58 + firstname-580 | lastname-580 | 580 + firstname-581 | lastname-581 | 581 + firstname-582 | lastname-582 | 582 + firstname-583 | lastname-583 | 583 + firstname-584 | lastname-584 | 584 + firstname-585 | lastname-585 | 585 + firstname-586 | lastname-586 | 586 + firstname-587 | lastname-587 | 587 + firstname-588 | lastname-588 | 588 + firstname-589 | lastname-589 | 589 + firstname-59 | lastname-59 | 59 + firstname-590 | lastname-590 | 590 + firstname-591 | lastname-591 | 591 + firstname-592 | lastname-592 | 592 + firstname-593 | lastname-593 | 593 + firstname-594 | lastname-594 | 594 + firstname-595 | lastname-595 | 595 + firstname-596 | lastname-596 | 596 + firstname-597 | lastname-597 | 597 + firstname-598 | lastname-598 | 598 + firstname-599 | lastname-599 | 599 + firstname-6 | lastname-6 | 6 + firstname-60 | lastname-60 | 60 + firstname-600 | lastname-600 | 600 + firstname-601 | lastname-601 | 601 + firstname-602 | lastname-602 | 602 + firstname-603 | lastname-603 | 603 + firstname-604 | lastname-604 | 604 + firstname-605 | lastname-605 | 605 + firstname-606 | lastname-606 | 606 + firstname-607 | lastname-607 | 607 + firstname-608 | lastname-608 | 608 + firstname-609 | lastname-609 | 609 + firstname-61 | lastname-61 | 61 + firstname-610 | lastname-610 | 610 + firstname-611 | lastname-611 | 611 + firstname-612 | lastname-612 | 612 + firstname-613 | lastname-613 | 613 + firstname-614 | lastname-614 | 614 + firstname-615 | lastname-615 | 615 + firstname-616 | lastname-616 | 616 + firstname-617 | lastname-617 | 617 + firstname-618 | lastname-618 | 618 + firstname-619 | lastname-619 | 619 + firstname-62 | lastname-62 | 62 + firstname-620 | lastname-620 | 620 + firstname-621 | lastname-621 | 621 + firstname-622 | lastname-622 | 622 + firstname-623 | lastname-623 | 623 + firstname-624 | lastname-624 | 624 + firstname-625 | lastname-625 | 625 + firstname-626 | lastname-626 | 626 + firstname-627 | lastname-627 | 627 + firstname-628 | lastname-628 | 628 + firstname-629 | lastname-629 | 629 + firstname-63 | lastname-63 | 63 + firstname-630 | lastname-630 | 630 + firstname-631 | lastname-631 | 631 + firstname-632 | lastname-632 | 632 + firstname-633 | lastname-633 | 633 + firstname-634 | lastname-634 | 634 + firstname-635 | lastname-635 | 635 + firstname-636 | lastname-636 | 636 + firstname-637 | lastname-637 | 637 + firstname-638 | lastname-638 | 638 + firstname-639 | lastname-639 | 639 + firstname-64 | lastname-64 | 64 + firstname-640 | lastname-640 | 640 + firstname-641 | lastname-641 | 641 + firstname-642 | lastname-642 | 642 + firstname-643 | lastname-643 | 643 + firstname-644 | lastname-644 | 644 + firstname-645 | lastname-645 | 645 + firstname-646 | lastname-646 | 646 + firstname-647 | lastname-647 | 647 + firstname-648 | lastname-648 | 648 + firstname-649 | lastname-649 | 649 + firstname-65 | lastname-65 | 65 + firstname-650 | lastname-650 | 650 + firstname-651 | lastname-651 | 651 + firstname-652 | lastname-652 | 652 + firstname-653 | lastname-653 | 653 + firstname-654 | lastname-654 | 654 + firstname-655 | lastname-655 | 655 + firstname-656 | lastname-656 | 656 + firstname-657 | lastname-657 | 657 + firstname-658 | lastname-658 | 658 + firstname-659 | lastname-659 | 659 + firstname-66 | lastname-66 | 66 + firstname-660 | lastname-660 | 660 + firstname-661 | lastname-661 | 661 + firstname-662 | lastname-662 | 662 + firstname-663 | lastname-663 | 663 + firstname-664 | lastname-664 | 664 + firstname-665 | lastname-665 | 665 + firstname-666 | lastname-666 | 666 + firstname-667 | lastname-667 | 667 + firstname-668 | lastname-668 | 668 + firstname-669 | lastname-669 | 669 + firstname-67 | lastname-67 | 67 + firstname-670 | lastname-670 | 670 + firstname-671 | lastname-671 | 671 + firstname-672 | lastname-672 | 672 + firstname-673 | lastname-673 | 673 + firstname-674 | lastname-674 | 674 + firstname-675 | lastname-675 | 675 + firstname-676 | lastname-676 | 676 + firstname-677 | lastname-677 | 677 + firstname-678 | lastname-678 | 678 + firstname-679 | lastname-679 | 679 + firstname-68 | lastname-68 | 68 + firstname-680 | lastname-680 | 680 + firstname-681 | lastname-681 | 681 + firstname-682 | lastname-682 | 682 + firstname-683 | lastname-683 | 683 + firstname-684 | lastname-684 | 684 + firstname-685 | lastname-685 | 685 + firstname-686 | lastname-686 | 686 + firstname-687 | lastname-687 | 687 + firstname-688 | lastname-688 | 688 + firstname-689 | lastname-689 | 689 + firstname-69 | lastname-69 | 69 + firstname-690 | lastname-690 | 690 + firstname-691 | lastname-691 | 691 + firstname-692 | lastname-692 | 692 + firstname-693 | lastname-693 | 693 + firstname-694 | lastname-694 | 694 + firstname-695 | lastname-695 | 695 + firstname-696 | lastname-696 | 696 + firstname-697 | lastname-697 | 697 + firstname-698 | lastname-698 | 698 + firstname-699 | lastname-699 | 699 + firstname-7 | lastname-7 | 7 + firstname-70 | lastname-70 | 70 + firstname-700 | lastname-700 | 700 + firstname-701 | lastname-701 | 701 + firstname-702 | lastname-702 | 702 + firstname-703 | lastname-703 | 703 + firstname-704 | lastname-704 | 704 + firstname-705 | lastname-705 | 705 + firstname-706 | lastname-706 | 706 + firstname-707 | lastname-707 | 707 + firstname-708 | lastname-708 | 708 + firstname-709 | lastname-709 | 709 + firstname-71 | lastname-71 | 71 + firstname-710 | lastname-710 | 710 + firstname-711 | lastname-711 | 711 + firstname-712 | lastname-712 | 712 + firstname-713 | lastname-713 | 713 + firstname-714 | lastname-714 | 714 + firstname-715 | lastname-715 | 715 + firstname-716 | lastname-716 | 716 + firstname-717 | lastname-717 | 717 + firstname-718 | lastname-718 | 718 + firstname-719 | lastname-719 | 719 + firstname-72 | lastname-72 | 72 + firstname-720 | lastname-720 | 720 + firstname-721 | lastname-721 | 721 + firstname-722 | lastname-722 | 722 + firstname-723 | lastname-723 | 723 + firstname-724 | lastname-724 | 724 + firstname-725 | lastname-725 | 725 + firstname-726 | lastname-726 | 726 + firstname-727 | lastname-727 | 727 + firstname-728 | lastname-728 | 728 + firstname-729 | lastname-729 | 729 + firstname-73 | lastname-73 | 73 + firstname-730 | lastname-730 | 730 + firstname-731 | lastname-731 | 731 + firstname-732 | lastname-732 | 732 + firstname-733 | lastname-733 | 733 + firstname-734 | lastname-734 | 734 + firstname-735 | lastname-735 | 735 + firstname-736 | lastname-736 | 736 + firstname-737 | lastname-737 | 737 + firstname-738 | lastname-738 | 738 + firstname-739 | lastname-739 | 739 + firstname-74 | lastname-74 | 74 + firstname-740 | lastname-740 | 740 + firstname-741 | lastname-741 | 741 + firstname-742 | lastname-742 | 742 + firstname-743 | lastname-743 | 743 + firstname-744 | lastname-744 | 744 + firstname-745 | lastname-745 | 745 + firstname-746 | lastname-746 | 746 + firstname-747 | lastname-747 | 747 + firstname-748 | lastname-748 | 748 + firstname-749 | lastname-749 | 749 + firstname-75 | lastname-75 | 75 + firstname-750 | lastname-750 | 750 + firstname-751 | lastname-751 | 751 + firstname-752 | lastname-752 | 752 + firstname-753 | lastname-753 | 753 + firstname-754 | lastname-754 | 754 + firstname-755 | lastname-755 | 755 + firstname-756 | lastname-756 | 756 + firstname-757 | lastname-757 | 757 + firstname-758 | lastname-758 | 758 + firstname-759 | lastname-759 | 759 + firstname-76 | lastname-76 | 76 + firstname-760 | lastname-760 | 760 + firstname-761 | lastname-761 | 761 + firstname-762 | lastname-762 | 762 + firstname-763 | lastname-763 | 763 + firstname-764 | lastname-764 | 764 + firstname-765 | lastname-765 | 765 + firstname-766 | lastname-766 | 766 + firstname-767 | lastname-767 | 767 + firstname-768 | lastname-768 | 768 + firstname-769 | lastname-769 | 769 + firstname-77 | lastname-77 | 77 + firstname-770 | lastname-770 | 770 + firstname-771 | lastname-771 | 771 + firstname-772 | lastname-772 | 772 + firstname-773 | lastname-773 | 773 + firstname-774 | lastname-774 | 774 + firstname-775 | lastname-775 | 775 + firstname-776 | lastname-776 | 776 + firstname-777 | lastname-777 | 777 + firstname-778 | lastname-778 | 778 + firstname-779 | lastname-779 | 779 + firstname-78 | lastname-78 | 78 + firstname-780 | lastname-780 | 780 + firstname-781 | lastname-781 | 781 + firstname-782 | lastname-782 | 782 + firstname-783 | lastname-783 | 783 + firstname-784 | lastname-784 | 784 + firstname-785 | lastname-785 | 785 + firstname-786 | lastname-786 | 786 + firstname-787 | lastname-787 | 787 + firstname-788 | lastname-788 | 788 + firstname-789 | lastname-789 | 789 + firstname-79 | lastname-79 | 79 + firstname-790 | lastname-790 | 790 + firstname-791 | lastname-791 | 791 + firstname-792 | lastname-792 | 792 + firstname-793 | lastname-793 | 793 + firstname-794 | lastname-794 | 794 + firstname-795 | lastname-795 | 795 + firstname-796 | lastname-796 | 796 + firstname-797 | lastname-797 | 797 + firstname-798 | lastname-798 | 798 + firstname-799 | lastname-799 | 799 + firstname-8 | lastname-8 | 8 + firstname-80 | lastname-80 | 80 + firstname-800 | lastname-800 | 800 + firstname-801 | lastname-801 | 801 + firstname-802 | lastname-802 | 802 + firstname-803 | lastname-803 | 803 + firstname-804 | lastname-804 | 804 + firstname-805 | lastname-805 | 805 + firstname-806 | lastname-806 | 806 + firstname-807 | lastname-807 | 807 + firstname-808 | lastname-808 | 808 + firstname-809 | lastname-809 | 809 + firstname-81 | lastname-81 | 81 + firstname-810 | lastname-810 | 810 + firstname-811 | lastname-811 | 811 + firstname-812 | lastname-812 | 812 + firstname-813 | lastname-813 | 813 + firstname-814 | lastname-814 | 814 + firstname-815 | lastname-815 | 815 + firstname-816 | lastname-816 | 816 + firstname-817 | lastname-817 | 817 + firstname-818 | lastname-818 | 818 + firstname-819 | lastname-819 | 819 + firstname-82 | lastname-82 | 82 + firstname-820 | lastname-820 | 820 + firstname-821 | lastname-821 | 821 + firstname-822 | lastname-822 | 822 + firstname-823 | lastname-823 | 823 + firstname-824 | lastname-824 | 824 + firstname-825 | lastname-825 | 825 + firstname-826 | lastname-826 | 826 + firstname-827 | lastname-827 | 827 + firstname-828 | lastname-828 | 828 + firstname-829 | lastname-829 | 829 + firstname-83 | lastname-83 | 83 + firstname-830 | lastname-830 | 830 + firstname-831 | lastname-831 | 831 + firstname-832 | lastname-832 | 832 + firstname-833 | lastname-833 | 833 + firstname-834 | lastname-834 | 834 + firstname-835 | lastname-835 | 835 + firstname-836 | lastname-836 | 836 + firstname-837 | lastname-837 | 837 + firstname-838 | lastname-838 | 838 + firstname-839 | lastname-839 | 839 + firstname-84 | lastname-84 | 84 + firstname-840 | lastname-840 | 840 + firstname-841 | lastname-841 | 841 + firstname-842 | lastname-842 | 842 + firstname-843 | lastname-843 | 843 + firstname-844 | lastname-844 | 844 + firstname-845 | lastname-845 | 845 + firstname-846 | lastname-846 | 846 + firstname-847 | lastname-847 | 847 + firstname-848 | lastname-848 | 848 + firstname-849 | lastname-849 | 849 + firstname-85 | lastname-85 | 85 + firstname-850 | lastname-850 | 850 + firstname-851 | lastname-851 | 851 + firstname-852 | lastname-852 | 852 + firstname-853 | lastname-853 | 853 + firstname-854 | lastname-854 | 854 + firstname-855 | lastname-855 | 855 + firstname-856 | lastname-856 | 856 + firstname-857 | lastname-857 | 857 + firstname-858 | lastname-858 | 858 + firstname-859 | lastname-859 | 859 + firstname-86 | lastname-86 | 86 + firstname-860 | lastname-860 | 860 + firstname-861 | lastname-861 | 861 + firstname-862 | lastname-862 | 862 + firstname-863 | lastname-863 | 863 + firstname-864 | lastname-864 | 864 + firstname-865 | lastname-865 | 865 + firstname-866 | lastname-866 | 866 + firstname-867 | lastname-867 | 867 + firstname-868 | lastname-868 | 868 + firstname-869 | lastname-869 | 869 + firstname-87 | lastname-87 | 87 + firstname-870 | lastname-870 | 870 + firstname-871 | lastname-871 | 871 + firstname-872 | lastname-872 | 872 + firstname-873 | lastname-873 | 873 + firstname-874 | lastname-874 | 874 + firstname-875 | lastname-875 | 875 + firstname-876 | lastname-876 | 876 + firstname-877 | lastname-877 | 877 + firstname-878 | lastname-878 | 878 + firstname-879 | lastname-879 | 879 + firstname-88 | lastname-88 | 88 + firstname-880 | lastname-880 | 880 + firstname-881 | lastname-881 | 881 + firstname-882 | lastname-882 | 882 + firstname-883 | lastname-883 | 883 + firstname-884 | lastname-884 | 884 + firstname-885 | lastname-885 | 885 + firstname-886 | lastname-886 | 886 + firstname-887 | lastname-887 | 887 + firstname-888 | lastname-888 | 888 + firstname-889 | lastname-889 | 889 + firstname-89 | lastname-89 | 89 + firstname-890 | lastname-890 | 890 + firstname-891 | lastname-891 | 891 + firstname-892 | lastname-892 | 892 + firstname-893 | lastname-893 | 893 + firstname-894 | lastname-894 | 894 + firstname-895 | lastname-895 | 895 + firstname-896 | lastname-896 | 896 + firstname-897 | lastname-897 | 897 + firstname-898 | lastname-898 | 898 + firstname-899 | lastname-899 | 899 + firstname-9 | lastname-9 | 9 + firstname-90 | lastname-90 | 90 + firstname-900 | lastname-900 | 900 + firstname-901 | lastname-901 | 901 + firstname-902 | lastname-902 | 902 + firstname-903 | lastname-903 | 903 + firstname-904 | lastname-904 | 904 + firstname-905 | lastname-905 | 905 + firstname-906 | lastname-906 | 906 + firstname-907 | lastname-907 | 907 + firstname-908 | lastname-908 | 908 + firstname-909 | lastname-909 | 909 + firstname-91 | lastname-91 | 91 + firstname-910 | lastname-910 | 910 + firstname-911 | lastname-911 | 911 + firstname-912 | lastname-912 | 912 + firstname-913 | lastname-913 | 913 + firstname-914 | lastname-914 | 914 + firstname-915 | lastname-915 | 915 + firstname-916 | lastname-916 | 916 + firstname-917 | lastname-917 | 917 + firstname-918 | lastname-918 | 918 + firstname-919 | lastname-919 | 919 + firstname-92 | lastname-92 | 92 + firstname-920 | lastname-920 | 920 + firstname-921 | lastname-921 | 921 + firstname-922 | lastname-922 | 922 + firstname-923 | lastname-923 | 923 + firstname-924 | lastname-924 | 924 + firstname-925 | lastname-925 | 925 + firstname-926 | lastname-926 | 926 + firstname-927 | lastname-927 | 927 + firstname-928 | lastname-928 | 928 + firstname-929 | lastname-929 | 929 + firstname-93 | lastname-93 | 93 + firstname-930 | lastname-930 | 930 + firstname-931 | lastname-931 | 931 + firstname-932 | lastname-932 | 932 + firstname-933 | lastname-933 | 933 + firstname-934 | lastname-934 | 934 + firstname-935 | lastname-935 | 935 + firstname-936 | lastname-936 | 936 + firstname-937 | lastname-937 | 937 + firstname-938 | lastname-938 | 938 + firstname-939 | lastname-939 | 939 + firstname-94 | lastname-94 | 94 + firstname-940 | lastname-940 | 940 + firstname-941 | lastname-941 | 941 + firstname-942 | lastname-942 | 942 + firstname-943 | lastname-943 | 943 + firstname-944 | lastname-944 | 944 + firstname-945 | lastname-945 | 945 + firstname-946 | lastname-946 | 946 + firstname-947 | lastname-947 | 947 + firstname-948 | lastname-948 | 948 + firstname-949 | lastname-949 | 949 + firstname-95 | lastname-95 | 95 + firstname-950 | lastname-950 | 950 + firstname-951 | lastname-951 | 951 + firstname-952 | lastname-952 | 952 + firstname-953 | lastname-953 | 953 + firstname-954 | lastname-954 | 954 + firstname-955 | lastname-955 | 955 + firstname-956 | lastname-956 | 956 + firstname-957 | lastname-957 | 957 + firstname-958 | lastname-958 | 958 + firstname-959 | lastname-959 | 959 + firstname-96 | lastname-96 | 96 + firstname-960 | lastname-960 | 960 + firstname-961 | lastname-961 | 961 + firstname-962 | lastname-962 | 962 + firstname-963 | lastname-963 | 963 + firstname-964 | lastname-964 | 964 + firstname-965 | lastname-965 | 965 + firstname-966 | lastname-966 | 966 + firstname-967 | lastname-967 | 967 + firstname-968 | lastname-968 | 968 + firstname-969 | lastname-969 | 969 + firstname-97 | lastname-97 | 97 + firstname-970 | lastname-970 | 970 + firstname-971 | lastname-971 | 971 + firstname-972 | lastname-972 | 972 + firstname-973 | lastname-973 | 973 + firstname-974 | lastname-974 | 974 + firstname-975 | lastname-975 | 975 + firstname-976 | lastname-976 | 976 + firstname-977 | lastname-977 | 977 + firstname-978 | lastname-978 | 978 + firstname-979 | lastname-979 | 979 + firstname-98 | lastname-98 | 98 + firstname-980 | lastname-980 | 980 + firstname-981 | lastname-981 | 981 + firstname-982 | lastname-982 | 982 + firstname-983 | lastname-983 | 983 + firstname-984 | lastname-984 | 984 + firstname-985 | lastname-985 | 985 + firstname-986 | lastname-986 | 986 + firstname-987 | lastname-987 | 987 + firstname-988 | lastname-988 | 988 + firstname-989 | lastname-989 | 989 + firstname-99 | lastname-99 | 99 + firstname-990 | lastname-990 | 990 + firstname-991 | lastname-991 | 991 + firstname-992 | lastname-992 | 992 + firstname-993 | lastname-993 | 993 + firstname-994 | lastname-994 | 994 + firstname-995 | lastname-995 | 995 + firstname-996 | lastname-996 | 996 + firstname-997 | lastname-997 | 997 + firstname-998 | lastname-998 | 998 + firstname-999 | lastname-999 | 999 +(2000 rows) + +-- enable caching +SET columnar.enable_column_cache = 't'; +-- the results should be the same as above +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id < 1000 + GROUP BY firstname, + lastname +UNION +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id BETWEEN 15000 AND 16000 + GROUP BY firstname, + lastname + ORDER BY firstname; + firstname | lastname | sum +---------------+--------------+----- + firstname-1 | lastname-1 | 1 + firstname-10 | lastname-10 | 10 + firstname-100 | lastname-100 | 100 + firstname-101 | lastname-101 | 101 + firstname-102 | lastname-102 | 102 + firstname-103 | lastname-103 | 103 + firstname-104 | lastname-104 | 104 + firstname-105 | lastname-105 | 105 + firstname-106 | lastname-106 | 106 + firstname-107 | lastname-107 | 107 + firstname-108 | lastname-108 | 108 + firstname-109 | lastname-109 | 109 + firstname-11 | lastname-11 | 11 + firstname-110 | lastname-110 | 110 + firstname-111 | lastname-111 | 111 + firstname-112 | lastname-112 | 112 + firstname-113 | lastname-113 | 113 + firstname-114 | lastname-114 | 114 + firstname-115 | lastname-115 | 115 + firstname-116 | lastname-116 | 116 + firstname-117 | lastname-117 | 117 + firstname-118 | lastname-118 | 118 + firstname-119 | lastname-119 | 119 + firstname-12 | lastname-12 | 12 + firstname-120 | lastname-120 | 120 + firstname-121 | lastname-121 | 121 + firstname-122 | lastname-122 | 122 + firstname-123 | lastname-123 | 123 + firstname-124 | lastname-124 | 124 + firstname-125 | lastname-125 | 125 + firstname-126 | lastname-126 | 126 + firstname-127 | lastname-127 | 127 + firstname-128 | lastname-128 | 128 + firstname-129 | lastname-129 | 129 + firstname-13 | lastname-13 | 13 + firstname-130 | lastname-130 | 130 + firstname-131 | lastname-131 | 131 + firstname-132 | lastname-132 | 132 + firstname-133 | lastname-133 | 133 + firstname-134 | lastname-134 | 134 + firstname-135 | lastname-135 | 135 + firstname-136 | lastname-136 | 136 + firstname-137 | lastname-137 | 137 + firstname-138 | lastname-138 | 138 + firstname-139 | lastname-139 | 139 + firstname-14 | lastname-14 | 14 + firstname-140 | lastname-140 | 140 + firstname-141 | lastname-141 | 141 + firstname-142 | lastname-142 | 142 + firstname-143 | lastname-143 | 143 + firstname-144 | lastname-144 | 144 + firstname-145 | lastname-145 | 145 + firstname-146 | lastname-146 | 146 + firstname-147 | lastname-147 | 147 + firstname-148 | lastname-148 | 148 + firstname-149 | lastname-149 | 149 + firstname-15 | lastname-15 | 15 + firstname-150 | lastname-150 | 150 + firstname-151 | lastname-151 | 151 + firstname-152 | lastname-152 | 152 + firstname-153 | lastname-153 | 153 + firstname-154 | lastname-154 | 154 + firstname-155 | lastname-155 | 155 + firstname-156 | lastname-156 | 156 + firstname-157 | lastname-157 | 157 + firstname-158 | lastname-158 | 158 + firstname-159 | lastname-159 | 159 + firstname-16 | lastname-16 | 16 + firstname-160 | lastname-160 | 160 + firstname-161 | lastname-161 | 161 + firstname-162 | lastname-162 | 162 + firstname-163 | lastname-163 | 163 + firstname-164 | lastname-164 | 164 + firstname-165 | lastname-165 | 165 + firstname-166 | lastname-166 | 166 + firstname-167 | lastname-167 | 167 + firstname-168 | lastname-168 | 168 + firstname-169 | lastname-169 | 169 + firstname-17 | lastname-17 | 17 + firstname-170 | lastname-170 | 170 + firstname-171 | lastname-171 | 171 + firstname-172 | lastname-172 | 172 + firstname-173 | lastname-173 | 173 + firstname-174 | lastname-174 | 174 + firstname-175 | lastname-175 | 175 + firstname-176 | lastname-176 | 176 + firstname-177 | lastname-177 | 177 + firstname-178 | lastname-178 | 178 + firstname-179 | lastname-179 | 179 + firstname-18 | lastname-18 | 18 + firstname-180 | lastname-180 | 180 + firstname-181 | lastname-181 | 181 + firstname-182 | lastname-182 | 182 + firstname-183 | lastname-183 | 183 + firstname-184 | lastname-184 | 184 + firstname-185 | lastname-185 | 185 + firstname-186 | lastname-186 | 186 + firstname-187 | lastname-187 | 187 + firstname-188 | lastname-188 | 188 + firstname-189 | lastname-189 | 189 + firstname-19 | lastname-19 | 19 + firstname-190 | lastname-190 | 190 + firstname-191 | lastname-191 | 191 + firstname-192 | lastname-192 | 192 + firstname-193 | lastname-193 | 193 + firstname-194 | lastname-194 | 194 + firstname-195 | lastname-195 | 195 + firstname-196 | lastname-196 | 196 + firstname-197 | lastname-197 | 197 + firstname-198 | lastname-198 | 198 + firstname-199 | lastname-199 | 199 + firstname-2 | lastname-2 | 2 + firstname-20 | lastname-20 | 20 + firstname-200 | lastname-200 | 200 + firstname-201 | lastname-201 | 201 + firstname-202 | lastname-202 | 202 + firstname-203 | lastname-203 | 203 + firstname-204 | lastname-204 | 204 + firstname-205 | lastname-205 | 205 + firstname-206 | lastname-206 | 206 + firstname-207 | lastname-207 | 207 + firstname-208 | lastname-208 | 208 + firstname-209 | lastname-209 | 209 + firstname-21 | lastname-21 | 21 + firstname-210 | lastname-210 | 210 + firstname-211 | lastname-211 | 211 + firstname-212 | lastname-212 | 212 + firstname-213 | lastname-213 | 213 + firstname-214 | lastname-214 | 214 + firstname-215 | lastname-215 | 215 + firstname-216 | lastname-216 | 216 + firstname-217 | lastname-217 | 217 + firstname-218 | lastname-218 | 218 + firstname-219 | lastname-219 | 219 + firstname-22 | lastname-22 | 22 + firstname-220 | lastname-220 | 220 + firstname-221 | lastname-221 | 221 + firstname-222 | lastname-222 | 222 + firstname-223 | lastname-223 | 223 + firstname-224 | lastname-224 | 224 + firstname-225 | lastname-225 | 225 + firstname-226 | lastname-226 | 226 + firstname-227 | lastname-227 | 227 + firstname-228 | lastname-228 | 228 + firstname-229 | lastname-229 | 229 + firstname-23 | lastname-23 | 23 + firstname-230 | lastname-230 | 230 + firstname-231 | lastname-231 | 231 + firstname-232 | lastname-232 | 232 + firstname-233 | lastname-233 | 233 + firstname-234 | lastname-234 | 234 + firstname-235 | lastname-235 | 235 + firstname-236 | lastname-236 | 236 + firstname-237 | lastname-237 | 237 + firstname-238 | lastname-238 | 238 + firstname-239 | lastname-239 | 239 + firstname-24 | lastname-24 | 24 + firstname-240 | lastname-240 | 240 + firstname-241 | lastname-241 | 241 + firstname-242 | lastname-242 | 242 + firstname-243 | lastname-243 | 243 + firstname-244 | lastname-244 | 244 + firstname-245 | lastname-245 | 245 + firstname-246 | lastname-246 | 246 + firstname-247 | lastname-247 | 247 + firstname-248 | lastname-248 | 248 + firstname-249 | lastname-249 | 249 + firstname-25 | lastname-25 | 25 + firstname-250 | lastname-250 | 250 + firstname-251 | lastname-251 | 251 + firstname-252 | lastname-252 | 252 + firstname-253 | lastname-253 | 253 + firstname-254 | lastname-254 | 254 + firstname-255 | lastname-255 | 255 + firstname-256 | lastname-256 | 256 + firstname-257 | lastname-257 | 257 + firstname-258 | lastname-258 | 258 + firstname-259 | lastname-259 | 259 + firstname-26 | lastname-26 | 26 + firstname-260 | lastname-260 | 260 + firstname-261 | lastname-261 | 261 + firstname-262 | lastname-262 | 262 + firstname-263 | lastname-263 | 263 + firstname-264 | lastname-264 | 264 + firstname-265 | lastname-265 | 265 + firstname-266 | lastname-266 | 266 + firstname-267 | lastname-267 | 267 + firstname-268 | lastname-268 | 268 + firstname-269 | lastname-269 | 269 + firstname-27 | lastname-27 | 27 + firstname-270 | lastname-270 | 270 + firstname-271 | lastname-271 | 271 + firstname-272 | lastname-272 | 272 + firstname-273 | lastname-273 | 273 + firstname-274 | lastname-274 | 274 + firstname-275 | lastname-275 | 275 + firstname-276 | lastname-276 | 276 + firstname-277 | lastname-277 | 277 + firstname-278 | lastname-278 | 278 + firstname-279 | lastname-279 | 279 + firstname-28 | lastname-28 | 28 + firstname-280 | lastname-280 | 280 + firstname-281 | lastname-281 | 281 + firstname-282 | lastname-282 | 282 + firstname-283 | lastname-283 | 283 + firstname-284 | lastname-284 | 284 + firstname-285 | lastname-285 | 285 + firstname-286 | lastname-286 | 286 + firstname-287 | lastname-287 | 287 + firstname-288 | lastname-288 | 288 + firstname-289 | lastname-289 | 289 + firstname-29 | lastname-29 | 29 + firstname-290 | lastname-290 | 290 + firstname-291 | lastname-291 | 291 + firstname-292 | lastname-292 | 292 + firstname-293 | lastname-293 | 293 + firstname-294 | lastname-294 | 294 + firstname-295 | lastname-295 | 295 + firstname-296 | lastname-296 | 296 + firstname-297 | lastname-297 | 297 + firstname-298 | lastname-298 | 298 + firstname-299 | lastname-299 | 299 + firstname-3 | lastname-3 | 3 + firstname-30 | lastname-30 | 30 + firstname-300 | lastname-300 | 300 + firstname-301 | lastname-301 | 301 + firstname-302 | lastname-302 | 302 + firstname-303 | lastname-303 | 303 + firstname-304 | lastname-304 | 304 + firstname-305 | lastname-305 | 305 + firstname-306 | lastname-306 | 306 + firstname-307 | lastname-307 | 307 + firstname-308 | lastname-308 | 308 + firstname-309 | lastname-309 | 309 + firstname-31 | lastname-31 | 31 + firstname-310 | lastname-310 | 310 + firstname-311 | lastname-311 | 311 + firstname-312 | lastname-312 | 312 + firstname-313 | lastname-313 | 313 + firstname-314 | lastname-314 | 314 + firstname-315 | lastname-315 | 315 + firstname-316 | lastname-316 | 316 + firstname-317 | lastname-317 | 317 + firstname-318 | lastname-318 | 318 + firstname-319 | lastname-319 | 319 + firstname-32 | lastname-32 | 32 + firstname-320 | lastname-320 | 320 + firstname-321 | lastname-321 | 321 + firstname-322 | lastname-322 | 322 + firstname-323 | lastname-323 | 323 + firstname-324 | lastname-324 | 324 + firstname-325 | lastname-325 | 325 + firstname-326 | lastname-326 | 326 + firstname-327 | lastname-327 | 327 + firstname-328 | lastname-328 | 328 + firstname-329 | lastname-329 | 329 + firstname-33 | lastname-33 | 33 + firstname-330 | lastname-330 | 330 + firstname-331 | lastname-331 | 331 + firstname-332 | lastname-332 | 332 + firstname-333 | lastname-333 | 333 + firstname-334 | lastname-334 | 334 + firstname-335 | lastname-335 | 335 + firstname-336 | lastname-336 | 336 + firstname-337 | lastname-337 | 337 + firstname-338 | lastname-338 | 338 + firstname-339 | lastname-339 | 339 + firstname-34 | lastname-34 | 34 + firstname-340 | lastname-340 | 340 + firstname-341 | lastname-341 | 341 + firstname-342 | lastname-342 | 342 + firstname-343 | lastname-343 | 343 + firstname-344 | lastname-344 | 344 + firstname-345 | lastname-345 | 345 + firstname-346 | lastname-346 | 346 + firstname-347 | lastname-347 | 347 + firstname-348 | lastname-348 | 348 + firstname-349 | lastname-349 | 349 + firstname-35 | lastname-35 | 35 + firstname-350 | lastname-350 | 350 + firstname-351 | lastname-351 | 351 + firstname-352 | lastname-352 | 352 + firstname-353 | lastname-353 | 353 + firstname-354 | lastname-354 | 354 + firstname-355 | lastname-355 | 355 + firstname-356 | lastname-356 | 356 + firstname-357 | lastname-357 | 357 + firstname-358 | lastname-358 | 358 + firstname-359 | lastname-359 | 359 + firstname-36 | lastname-36 | 36 + firstname-360 | lastname-360 | 360 + firstname-361 | lastname-361 | 361 + firstname-362 | lastname-362 | 362 + firstname-363 | lastname-363 | 363 + firstname-364 | lastname-364 | 364 + firstname-365 | lastname-365 | 365 + firstname-366 | lastname-366 | 366 + firstname-367 | lastname-367 | 367 + firstname-368 | lastname-368 | 368 + firstname-369 | lastname-369 | 369 + firstname-37 | lastname-37 | 37 + firstname-370 | lastname-370 | 370 + firstname-371 | lastname-371 | 371 + firstname-372 | lastname-372 | 372 + firstname-373 | lastname-373 | 373 + firstname-374 | lastname-374 | 374 + firstname-375 | lastname-375 | 375 + firstname-376 | lastname-376 | 376 + firstname-377 | lastname-377 | 377 + firstname-378 | lastname-378 | 378 + firstname-379 | lastname-379 | 379 + firstname-38 | lastname-38 | 38 + firstname-380 | lastname-380 | 380 + firstname-381 | lastname-381 | 381 + firstname-382 | lastname-382 | 382 + firstname-383 | lastname-383 | 383 + firstname-384 | lastname-384 | 384 + firstname-385 | lastname-385 | 385 + firstname-386 | lastname-386 | 386 + firstname-387 | lastname-387 | 387 + firstname-388 | lastname-388 | 388 + firstname-389 | lastname-389 | 389 + firstname-39 | lastname-39 | 39 + firstname-390 | lastname-390 | 390 + firstname-391 | lastname-391 | 391 + firstname-392 | lastname-392 | 392 + firstname-393 | lastname-393 | 393 + firstname-394 | lastname-394 | 394 + firstname-395 | lastname-395 | 395 + firstname-396 | lastname-396 | 396 + firstname-397 | lastname-397 | 397 + firstname-398 | lastname-398 | 398 + firstname-399 | lastname-399 | 399 + firstname-4 | lastname-4 | 4 + firstname-40 | lastname-40 | 40 + firstname-400 | lastname-400 | 400 + firstname-401 | lastname-401 | 401 + firstname-402 | lastname-402 | 402 + firstname-403 | lastname-403 | 403 + firstname-404 | lastname-404 | 404 + firstname-405 | lastname-405 | 405 + firstname-406 | lastname-406 | 406 + firstname-407 | lastname-407 | 407 + firstname-408 | lastname-408 | 408 + firstname-409 | lastname-409 | 409 + firstname-41 | lastname-41 | 41 + firstname-410 | lastname-410 | 410 + firstname-411 | lastname-411 | 411 + firstname-412 | lastname-412 | 412 + firstname-413 | lastname-413 | 413 + firstname-414 | lastname-414 | 414 + firstname-415 | lastname-415 | 415 + firstname-416 | lastname-416 | 416 + firstname-417 | lastname-417 | 417 + firstname-418 | lastname-418 | 418 + firstname-419 | lastname-419 | 419 + firstname-42 | lastname-42 | 42 + firstname-420 | lastname-420 | 420 + firstname-421 | lastname-421 | 421 + firstname-422 | lastname-422 | 422 + firstname-423 | lastname-423 | 423 + firstname-424 | lastname-424 | 424 + firstname-425 | lastname-425 | 425 + firstname-426 | lastname-426 | 426 + firstname-427 | lastname-427 | 427 + firstname-428 | lastname-428 | 428 + firstname-429 | lastname-429 | 429 + firstname-43 | lastname-43 | 43 + firstname-430 | lastname-430 | 430 + firstname-431 | lastname-431 | 431 + firstname-432 | lastname-432 | 432 + firstname-433 | lastname-433 | 433 + firstname-434 | lastname-434 | 434 + firstname-435 | lastname-435 | 435 + firstname-436 | lastname-436 | 436 + firstname-437 | lastname-437 | 437 + firstname-438 | lastname-438 | 438 + firstname-439 | lastname-439 | 439 + firstname-44 | lastname-44 | 44 + firstname-440 | lastname-440 | 440 + firstname-441 | lastname-441 | 441 + firstname-442 | lastname-442 | 442 + firstname-443 | lastname-443 | 443 + firstname-444 | lastname-444 | 444 + firstname-445 | lastname-445 | 445 + firstname-446 | lastname-446 | 446 + firstname-447 | lastname-447 | 447 + firstname-448 | lastname-448 | 448 + firstname-449 | lastname-449 | 449 + firstname-45 | lastname-45 | 45 + firstname-450 | lastname-450 | 450 + firstname-451 | lastname-451 | 451 + firstname-452 | lastname-452 | 452 + firstname-453 | lastname-453 | 453 + firstname-454 | lastname-454 | 454 + firstname-455 | lastname-455 | 455 + firstname-456 | lastname-456 | 456 + firstname-457 | lastname-457 | 457 + firstname-458 | lastname-458 | 458 + firstname-459 | lastname-459 | 459 + firstname-46 | lastname-46 | 46 + firstname-460 | lastname-460 | 460 + firstname-461 | lastname-461 | 461 + firstname-462 | lastname-462 | 462 + firstname-463 | lastname-463 | 463 + firstname-464 | lastname-464 | 464 + firstname-465 | lastname-465 | 465 + firstname-466 | lastname-466 | 466 + firstname-467 | lastname-467 | 467 + firstname-468 | lastname-468 | 468 + firstname-469 | lastname-469 | 469 + firstname-47 | lastname-47 | 47 + firstname-470 | lastname-470 | 470 + firstname-471 | lastname-471 | 471 + firstname-472 | lastname-472 | 472 + firstname-473 | lastname-473 | 473 + firstname-474 | lastname-474 | 474 + firstname-475 | lastname-475 | 475 + firstname-476 | lastname-476 | 476 + firstname-477 | lastname-477 | 477 + firstname-478 | lastname-478 | 478 + firstname-479 | lastname-479 | 479 + firstname-48 | lastname-48 | 48 + firstname-480 | lastname-480 | 480 + firstname-481 | lastname-481 | 481 + firstname-482 | lastname-482 | 482 + firstname-483 | lastname-483 | 483 + firstname-484 | lastname-484 | 484 + firstname-485 | lastname-485 | 485 + firstname-486 | lastname-486 | 486 + firstname-487 | lastname-487 | 487 + firstname-488 | lastname-488 | 488 + firstname-489 | lastname-489 | 489 + firstname-49 | lastname-49 | 49 + firstname-490 | lastname-490 | 490 + firstname-491 | lastname-491 | 491 + firstname-492 | lastname-492 | 492 + firstname-493 | lastname-493 | 493 + firstname-494 | lastname-494 | 494 + firstname-495 | lastname-495 | 495 + firstname-496 | lastname-496 | 496 + firstname-497 | lastname-497 | 497 + firstname-498 | lastname-498 | 498 + firstname-499 | lastname-499 | 499 + firstname-5 | lastname-5 | 5 + firstname-50 | lastname-50 | 50 + firstname-500 | lastname-500 | 500 + firstname-501 | lastname-501 | 501 + firstname-502 | lastname-502 | 502 + firstname-503 | lastname-503 | 503 + firstname-504 | lastname-504 | 504 + firstname-505 | lastname-505 | 505 + firstname-506 | lastname-506 | 506 + firstname-507 | lastname-507 | 507 + firstname-508 | lastname-508 | 508 + firstname-509 | lastname-509 | 509 + firstname-51 | lastname-51 | 51 + firstname-510 | lastname-510 | 510 + firstname-511 | lastname-511 | 511 + firstname-512 | lastname-512 | 512 + firstname-513 | lastname-513 | 513 + firstname-514 | lastname-514 | 514 + firstname-515 | lastname-515 | 515 + firstname-516 | lastname-516 | 516 + firstname-517 | lastname-517 | 517 + firstname-518 | lastname-518 | 518 + firstname-519 | lastname-519 | 519 + firstname-52 | lastname-52 | 52 + firstname-520 | lastname-520 | 520 + firstname-521 | lastname-521 | 521 + firstname-522 | lastname-522 | 522 + firstname-523 | lastname-523 | 523 + firstname-524 | lastname-524 | 524 + firstname-525 | lastname-525 | 525 + firstname-526 | lastname-526 | 526 + firstname-527 | lastname-527 | 527 + firstname-528 | lastname-528 | 528 + firstname-529 | lastname-529 | 529 + firstname-53 | lastname-53 | 53 + firstname-530 | lastname-530 | 530 + firstname-531 | lastname-531 | 531 + firstname-532 | lastname-532 | 532 + firstname-533 | lastname-533 | 533 + firstname-534 | lastname-534 | 534 + firstname-535 | lastname-535 | 535 + firstname-536 | lastname-536 | 536 + firstname-537 | lastname-537 | 537 + firstname-538 | lastname-538 | 538 + firstname-539 | lastname-539 | 539 + firstname-54 | lastname-54 | 54 + firstname-540 | lastname-540 | 540 + firstname-541 | lastname-541 | 541 + firstname-542 | lastname-542 | 542 + firstname-543 | lastname-543 | 543 + firstname-544 | lastname-544 | 544 + firstname-545 | lastname-545 | 545 + firstname-546 | lastname-546 | 546 + firstname-547 | lastname-547 | 547 + firstname-548 | lastname-548 | 548 + firstname-549 | lastname-549 | 549 + firstname-55 | lastname-55 | 55 + firstname-550 | lastname-550 | 550 + firstname-551 | lastname-551 | 551 + firstname-552 | lastname-552 | 552 + firstname-553 | lastname-553 | 553 + firstname-554 | lastname-554 | 554 + firstname-555 | lastname-555 | 555 + firstname-556 | lastname-556 | 556 + firstname-557 | lastname-557 | 557 + firstname-558 | lastname-558 | 558 + firstname-559 | lastname-559 | 559 + firstname-56 | lastname-56 | 56 + firstname-560 | lastname-560 | 560 + firstname-561 | lastname-561 | 561 + firstname-562 | lastname-562 | 562 + firstname-563 | lastname-563 | 563 + firstname-564 | lastname-564 | 564 + firstname-565 | lastname-565 | 565 + firstname-566 | lastname-566 | 566 + firstname-567 | lastname-567 | 567 + firstname-568 | lastname-568 | 568 + firstname-569 | lastname-569 | 569 + firstname-57 | lastname-57 | 57 + firstname-570 | lastname-570 | 570 + firstname-571 | lastname-571 | 571 + firstname-572 | lastname-572 | 572 + firstname-573 | lastname-573 | 573 + firstname-574 | lastname-574 | 574 + firstname-575 | lastname-575 | 575 + firstname-576 | lastname-576 | 576 + firstname-577 | lastname-577 | 577 + firstname-578 | lastname-578 | 578 + firstname-579 | lastname-579 | 579 + firstname-58 | lastname-58 | 58 + firstname-580 | lastname-580 | 580 + firstname-581 | lastname-581 | 581 + firstname-582 | lastname-582 | 582 + firstname-583 | lastname-583 | 583 + firstname-584 | lastname-584 | 584 + firstname-585 | lastname-585 | 585 + firstname-586 | lastname-586 | 586 + firstname-587 | lastname-587 | 587 + firstname-588 | lastname-588 | 588 + firstname-589 | lastname-589 | 589 + firstname-59 | lastname-59 | 59 + firstname-590 | lastname-590 | 590 + firstname-591 | lastname-591 | 591 + firstname-592 | lastname-592 | 592 + firstname-593 | lastname-593 | 593 + firstname-594 | lastname-594 | 594 + firstname-595 | lastname-595 | 595 + firstname-596 | lastname-596 | 596 + firstname-597 | lastname-597 | 597 + firstname-598 | lastname-598 | 598 + firstname-599 | lastname-599 | 599 + firstname-6 | lastname-6 | 6 + firstname-60 | lastname-60 | 60 + firstname-600 | lastname-600 | 600 + firstname-601 | lastname-601 | 601 + firstname-602 | lastname-602 | 602 + firstname-603 | lastname-603 | 603 + firstname-604 | lastname-604 | 604 + firstname-605 | lastname-605 | 605 + firstname-606 | lastname-606 | 606 + firstname-607 | lastname-607 | 607 + firstname-608 | lastname-608 | 608 + firstname-609 | lastname-609 | 609 + firstname-61 | lastname-61 | 61 + firstname-610 | lastname-610 | 610 + firstname-611 | lastname-611 | 611 + firstname-612 | lastname-612 | 612 + firstname-613 | lastname-613 | 613 + firstname-614 | lastname-614 | 614 + firstname-615 | lastname-615 | 615 + firstname-616 | lastname-616 | 616 + firstname-617 | lastname-617 | 617 + firstname-618 | lastname-618 | 618 + firstname-619 | lastname-619 | 619 + firstname-62 | lastname-62 | 62 + firstname-620 | lastname-620 | 620 + firstname-621 | lastname-621 | 621 + firstname-622 | lastname-622 | 622 + firstname-623 | lastname-623 | 623 + firstname-624 | lastname-624 | 624 + firstname-625 | lastname-625 | 625 + firstname-626 | lastname-626 | 626 + firstname-627 | lastname-627 | 627 + firstname-628 | lastname-628 | 628 + firstname-629 | lastname-629 | 629 + firstname-63 | lastname-63 | 63 + firstname-630 | lastname-630 | 630 + firstname-631 | lastname-631 | 631 + firstname-632 | lastname-632 | 632 + firstname-633 | lastname-633 | 633 + firstname-634 | lastname-634 | 634 + firstname-635 | lastname-635 | 635 + firstname-636 | lastname-636 | 636 + firstname-637 | lastname-637 | 637 + firstname-638 | lastname-638 | 638 + firstname-639 | lastname-639 | 639 + firstname-64 | lastname-64 | 64 + firstname-640 | lastname-640 | 640 + firstname-641 | lastname-641 | 641 + firstname-642 | lastname-642 | 642 + firstname-643 | lastname-643 | 643 + firstname-644 | lastname-644 | 644 + firstname-645 | lastname-645 | 645 + firstname-646 | lastname-646 | 646 + firstname-647 | lastname-647 | 647 + firstname-648 | lastname-648 | 648 + firstname-649 | lastname-649 | 649 + firstname-65 | lastname-65 | 65 + firstname-650 | lastname-650 | 650 + firstname-651 | lastname-651 | 651 + firstname-652 | lastname-652 | 652 + firstname-653 | lastname-653 | 653 + firstname-654 | lastname-654 | 654 + firstname-655 | lastname-655 | 655 + firstname-656 | lastname-656 | 656 + firstname-657 | lastname-657 | 657 + firstname-658 | lastname-658 | 658 + firstname-659 | lastname-659 | 659 + firstname-66 | lastname-66 | 66 + firstname-660 | lastname-660 | 660 + firstname-661 | lastname-661 | 661 + firstname-662 | lastname-662 | 662 + firstname-663 | lastname-663 | 663 + firstname-664 | lastname-664 | 664 + firstname-665 | lastname-665 | 665 + firstname-666 | lastname-666 | 666 + firstname-667 | lastname-667 | 667 + firstname-668 | lastname-668 | 668 + firstname-669 | lastname-669 | 669 + firstname-67 | lastname-67 | 67 + firstname-670 | lastname-670 | 670 + firstname-671 | lastname-671 | 671 + firstname-672 | lastname-672 | 672 + firstname-673 | lastname-673 | 673 + firstname-674 | lastname-674 | 674 + firstname-675 | lastname-675 | 675 + firstname-676 | lastname-676 | 676 + firstname-677 | lastname-677 | 677 + firstname-678 | lastname-678 | 678 + firstname-679 | lastname-679 | 679 + firstname-68 | lastname-68 | 68 + firstname-680 | lastname-680 | 680 + firstname-681 | lastname-681 | 681 + firstname-682 | lastname-682 | 682 + firstname-683 | lastname-683 | 683 + firstname-684 | lastname-684 | 684 + firstname-685 | lastname-685 | 685 + firstname-686 | lastname-686 | 686 + firstname-687 | lastname-687 | 687 + firstname-688 | lastname-688 | 688 + firstname-689 | lastname-689 | 689 + firstname-69 | lastname-69 | 69 + firstname-690 | lastname-690 | 690 + firstname-691 | lastname-691 | 691 + firstname-692 | lastname-692 | 692 + firstname-693 | lastname-693 | 693 + firstname-694 | lastname-694 | 694 + firstname-695 | lastname-695 | 695 + firstname-696 | lastname-696 | 696 + firstname-697 | lastname-697 | 697 + firstname-698 | lastname-698 | 698 + firstname-699 | lastname-699 | 699 + firstname-7 | lastname-7 | 7 + firstname-70 | lastname-70 | 70 + firstname-700 | lastname-700 | 700 + firstname-701 | lastname-701 | 701 + firstname-702 | lastname-702 | 702 + firstname-703 | lastname-703 | 703 + firstname-704 | lastname-704 | 704 + firstname-705 | lastname-705 | 705 + firstname-706 | lastname-706 | 706 + firstname-707 | lastname-707 | 707 + firstname-708 | lastname-708 | 708 + firstname-709 | lastname-709 | 709 + firstname-71 | lastname-71 | 71 + firstname-710 | lastname-710 | 710 + firstname-711 | lastname-711 | 711 + firstname-712 | lastname-712 | 712 + firstname-713 | lastname-713 | 713 + firstname-714 | lastname-714 | 714 + firstname-715 | lastname-715 | 715 + firstname-716 | lastname-716 | 716 + firstname-717 | lastname-717 | 717 + firstname-718 | lastname-718 | 718 + firstname-719 | lastname-719 | 719 + firstname-72 | lastname-72 | 72 + firstname-720 | lastname-720 | 720 + firstname-721 | lastname-721 | 721 + firstname-722 | lastname-722 | 722 + firstname-723 | lastname-723 | 723 + firstname-724 | lastname-724 | 724 + firstname-725 | lastname-725 | 725 + firstname-726 | lastname-726 | 726 + firstname-727 | lastname-727 | 727 + firstname-728 | lastname-728 | 728 + firstname-729 | lastname-729 | 729 + firstname-73 | lastname-73 | 73 + firstname-730 | lastname-730 | 730 + firstname-731 | lastname-731 | 731 + firstname-732 | lastname-732 | 732 + firstname-733 | lastname-733 | 733 + firstname-734 | lastname-734 | 734 + firstname-735 | lastname-735 | 735 + firstname-736 | lastname-736 | 736 + firstname-737 | lastname-737 | 737 + firstname-738 | lastname-738 | 738 + firstname-739 | lastname-739 | 739 + firstname-74 | lastname-74 | 74 + firstname-740 | lastname-740 | 740 + firstname-741 | lastname-741 | 741 + firstname-742 | lastname-742 | 742 + firstname-743 | lastname-743 | 743 + firstname-744 | lastname-744 | 744 + firstname-745 | lastname-745 | 745 + firstname-746 | lastname-746 | 746 + firstname-747 | lastname-747 | 747 + firstname-748 | lastname-748 | 748 + firstname-749 | lastname-749 | 749 + firstname-75 | lastname-75 | 75 + firstname-750 | lastname-750 | 750 + firstname-751 | lastname-751 | 751 + firstname-752 | lastname-752 | 752 + firstname-753 | lastname-753 | 753 + firstname-754 | lastname-754 | 754 + firstname-755 | lastname-755 | 755 + firstname-756 | lastname-756 | 756 + firstname-757 | lastname-757 | 757 + firstname-758 | lastname-758 | 758 + firstname-759 | lastname-759 | 759 + firstname-76 | lastname-76 | 76 + firstname-760 | lastname-760 | 760 + firstname-761 | lastname-761 | 761 + firstname-762 | lastname-762 | 762 + firstname-763 | lastname-763 | 763 + firstname-764 | lastname-764 | 764 + firstname-765 | lastname-765 | 765 + firstname-766 | lastname-766 | 766 + firstname-767 | lastname-767 | 767 + firstname-768 | lastname-768 | 768 + firstname-769 | lastname-769 | 769 + firstname-77 | lastname-77 | 77 + firstname-770 | lastname-770 | 770 + firstname-771 | lastname-771 | 771 + firstname-772 | lastname-772 | 772 + firstname-773 | lastname-773 | 773 + firstname-774 | lastname-774 | 774 + firstname-775 | lastname-775 | 775 + firstname-776 | lastname-776 | 776 + firstname-777 | lastname-777 | 777 + firstname-778 | lastname-778 | 778 + firstname-779 | lastname-779 | 779 + firstname-78 | lastname-78 | 78 + firstname-780 | lastname-780 | 780 + firstname-781 | lastname-781 | 781 + firstname-782 | lastname-782 | 782 + firstname-783 | lastname-783 | 783 + firstname-784 | lastname-784 | 784 + firstname-785 | lastname-785 | 785 + firstname-786 | lastname-786 | 786 + firstname-787 | lastname-787 | 787 + firstname-788 | lastname-788 | 788 + firstname-789 | lastname-789 | 789 + firstname-79 | lastname-79 | 79 + firstname-790 | lastname-790 | 790 + firstname-791 | lastname-791 | 791 + firstname-792 | lastname-792 | 792 + firstname-793 | lastname-793 | 793 + firstname-794 | lastname-794 | 794 + firstname-795 | lastname-795 | 795 + firstname-796 | lastname-796 | 796 + firstname-797 | lastname-797 | 797 + firstname-798 | lastname-798 | 798 + firstname-799 | lastname-799 | 799 + firstname-8 | lastname-8 | 8 + firstname-80 | lastname-80 | 80 + firstname-800 | lastname-800 | 800 + firstname-801 | lastname-801 | 801 + firstname-802 | lastname-802 | 802 + firstname-803 | lastname-803 | 803 + firstname-804 | lastname-804 | 804 + firstname-805 | lastname-805 | 805 + firstname-806 | lastname-806 | 806 + firstname-807 | lastname-807 | 807 + firstname-808 | lastname-808 | 808 + firstname-809 | lastname-809 | 809 + firstname-81 | lastname-81 | 81 + firstname-810 | lastname-810 | 810 + firstname-811 | lastname-811 | 811 + firstname-812 | lastname-812 | 812 + firstname-813 | lastname-813 | 813 + firstname-814 | lastname-814 | 814 + firstname-815 | lastname-815 | 815 + firstname-816 | lastname-816 | 816 + firstname-817 | lastname-817 | 817 + firstname-818 | lastname-818 | 818 + firstname-819 | lastname-819 | 819 + firstname-82 | lastname-82 | 82 + firstname-820 | lastname-820 | 820 + firstname-821 | lastname-821 | 821 + firstname-822 | lastname-822 | 822 + firstname-823 | lastname-823 | 823 + firstname-824 | lastname-824 | 824 + firstname-825 | lastname-825 | 825 + firstname-826 | lastname-826 | 826 + firstname-827 | lastname-827 | 827 + firstname-828 | lastname-828 | 828 + firstname-829 | lastname-829 | 829 + firstname-83 | lastname-83 | 83 + firstname-830 | lastname-830 | 830 + firstname-831 | lastname-831 | 831 + firstname-832 | lastname-832 | 832 + firstname-833 | lastname-833 | 833 + firstname-834 | lastname-834 | 834 + firstname-835 | lastname-835 | 835 + firstname-836 | lastname-836 | 836 + firstname-837 | lastname-837 | 837 + firstname-838 | lastname-838 | 838 + firstname-839 | lastname-839 | 839 + firstname-84 | lastname-84 | 84 + firstname-840 | lastname-840 | 840 + firstname-841 | lastname-841 | 841 + firstname-842 | lastname-842 | 842 + firstname-843 | lastname-843 | 843 + firstname-844 | lastname-844 | 844 + firstname-845 | lastname-845 | 845 + firstname-846 | lastname-846 | 846 + firstname-847 | lastname-847 | 847 + firstname-848 | lastname-848 | 848 + firstname-849 | lastname-849 | 849 + firstname-85 | lastname-85 | 85 + firstname-850 | lastname-850 | 850 + firstname-851 | lastname-851 | 851 + firstname-852 | lastname-852 | 852 + firstname-853 | lastname-853 | 853 + firstname-854 | lastname-854 | 854 + firstname-855 | lastname-855 | 855 + firstname-856 | lastname-856 | 856 + firstname-857 | lastname-857 | 857 + firstname-858 | lastname-858 | 858 + firstname-859 | lastname-859 | 859 + firstname-86 | lastname-86 | 86 + firstname-860 | lastname-860 | 860 + firstname-861 | lastname-861 | 861 + firstname-862 | lastname-862 | 862 + firstname-863 | lastname-863 | 863 + firstname-864 | lastname-864 | 864 + firstname-865 | lastname-865 | 865 + firstname-866 | lastname-866 | 866 + firstname-867 | lastname-867 | 867 + firstname-868 | lastname-868 | 868 + firstname-869 | lastname-869 | 869 + firstname-87 | lastname-87 | 87 + firstname-870 | lastname-870 | 870 + firstname-871 | lastname-871 | 871 + firstname-872 | lastname-872 | 872 + firstname-873 | lastname-873 | 873 + firstname-874 | lastname-874 | 874 + firstname-875 | lastname-875 | 875 + firstname-876 | lastname-876 | 876 + firstname-877 | lastname-877 | 877 + firstname-878 | lastname-878 | 878 + firstname-879 | lastname-879 | 879 + firstname-88 | lastname-88 | 88 + firstname-880 | lastname-880 | 880 + firstname-881 | lastname-881 | 881 + firstname-882 | lastname-882 | 882 + firstname-883 | lastname-883 | 883 + firstname-884 | lastname-884 | 884 + firstname-885 | lastname-885 | 885 + firstname-886 | lastname-886 | 886 + firstname-887 | lastname-887 | 887 + firstname-888 | lastname-888 | 888 + firstname-889 | lastname-889 | 889 + firstname-89 | lastname-89 | 89 + firstname-890 | lastname-890 | 890 + firstname-891 | lastname-891 | 891 + firstname-892 | lastname-892 | 892 + firstname-893 | lastname-893 | 893 + firstname-894 | lastname-894 | 894 + firstname-895 | lastname-895 | 895 + firstname-896 | lastname-896 | 896 + firstname-897 | lastname-897 | 897 + firstname-898 | lastname-898 | 898 + firstname-899 | lastname-899 | 899 + firstname-9 | lastname-9 | 9 + firstname-90 | lastname-90 | 90 + firstname-900 | lastname-900 | 900 + firstname-901 | lastname-901 | 901 + firstname-902 | lastname-902 | 902 + firstname-903 | lastname-903 | 903 + firstname-904 | lastname-904 | 904 + firstname-905 | lastname-905 | 905 + firstname-906 | lastname-906 | 906 + firstname-907 | lastname-907 | 907 + firstname-908 | lastname-908 | 908 + firstname-909 | lastname-909 | 909 + firstname-91 | lastname-91 | 91 + firstname-910 | lastname-910 | 910 + firstname-911 | lastname-911 | 911 + firstname-912 | lastname-912 | 912 + firstname-913 | lastname-913 | 913 + firstname-914 | lastname-914 | 914 + firstname-915 | lastname-915 | 915 + firstname-916 | lastname-916 | 916 + firstname-917 | lastname-917 | 917 + firstname-918 | lastname-918 | 918 + firstname-919 | lastname-919 | 919 + firstname-92 | lastname-92 | 92 + firstname-920 | lastname-920 | 920 + firstname-921 | lastname-921 | 921 + firstname-922 | lastname-922 | 922 + firstname-923 | lastname-923 | 923 + firstname-924 | lastname-924 | 924 + firstname-925 | lastname-925 | 925 + firstname-926 | lastname-926 | 926 + firstname-927 | lastname-927 | 927 + firstname-928 | lastname-928 | 928 + firstname-929 | lastname-929 | 929 + firstname-93 | lastname-93 | 93 + firstname-930 | lastname-930 | 930 + firstname-931 | lastname-931 | 931 + firstname-932 | lastname-932 | 932 + firstname-933 | lastname-933 | 933 + firstname-934 | lastname-934 | 934 + firstname-935 | lastname-935 | 935 + firstname-936 | lastname-936 | 936 + firstname-937 | lastname-937 | 937 + firstname-938 | lastname-938 | 938 + firstname-939 | lastname-939 | 939 + firstname-94 | lastname-94 | 94 + firstname-940 | lastname-940 | 940 + firstname-941 | lastname-941 | 941 + firstname-942 | lastname-942 | 942 + firstname-943 | lastname-943 | 943 + firstname-944 | lastname-944 | 944 + firstname-945 | lastname-945 | 945 + firstname-946 | lastname-946 | 946 + firstname-947 | lastname-947 | 947 + firstname-948 | lastname-948 | 948 + firstname-949 | lastname-949 | 949 + firstname-95 | lastname-95 | 95 + firstname-950 | lastname-950 | 950 + firstname-951 | lastname-951 | 951 + firstname-952 | lastname-952 | 952 + firstname-953 | lastname-953 | 953 + firstname-954 | lastname-954 | 954 + firstname-955 | lastname-955 | 955 + firstname-956 | lastname-956 | 956 + firstname-957 | lastname-957 | 957 + firstname-958 | lastname-958 | 958 + firstname-959 | lastname-959 | 959 + firstname-96 | lastname-96 | 96 + firstname-960 | lastname-960 | 960 + firstname-961 | lastname-961 | 961 + firstname-962 | lastname-962 | 962 + firstname-963 | lastname-963 | 963 + firstname-964 | lastname-964 | 964 + firstname-965 | lastname-965 | 965 + firstname-966 | lastname-966 | 966 + firstname-967 | lastname-967 | 967 + firstname-968 | lastname-968 | 968 + firstname-969 | lastname-969 | 969 + firstname-97 | lastname-97 | 97 + firstname-970 | lastname-970 | 970 + firstname-971 | lastname-971 | 971 + firstname-972 | lastname-972 | 972 + firstname-973 | lastname-973 | 973 + firstname-974 | lastname-974 | 974 + firstname-975 | lastname-975 | 975 + firstname-976 | lastname-976 | 976 + firstname-977 | lastname-977 | 977 + firstname-978 | lastname-978 | 978 + firstname-979 | lastname-979 | 979 + firstname-98 | lastname-98 | 98 + firstname-980 | lastname-980 | 980 + firstname-981 | lastname-981 | 981 + firstname-982 | lastname-982 | 982 + firstname-983 | lastname-983 | 983 + firstname-984 | lastname-984 | 984 + firstname-985 | lastname-985 | 985 + firstname-986 | lastname-986 | 986 + firstname-987 | lastname-987 | 987 + firstname-988 | lastname-988 | 988 + firstname-989 | lastname-989 | 989 + firstname-99 | lastname-99 | 99 + firstname-990 | lastname-990 | 990 + firstname-991 | lastname-991 | 991 + firstname-992 | lastname-992 | 992 + firstname-993 | lastname-993 | 993 + firstname-994 | lastname-994 | 994 + firstname-995 | lastname-995 | 995 + firstname-996 | lastname-996 | 996 + firstname-997 | lastname-997 | 997 + firstname-998 | lastname-998 | 998 + firstname-999 | lastname-999 | 999 +(999 rows) + +-- disable caching +SET columnar.enable_column_cache = 'f'; +CREATE TABLE test_2 ( + value INT, + updated_value INT +) USING columnar; +INSERT INTO test_2 (value) + SELECT generate_series(1, 1000000, 1); +BEGIN; +SELECT SUM(value) + FROM test_2; + sum +-------------- + 500000500000 +(1 row) + +UPDATE test_2 + SET updated_value = value * 2; +SELECT SUM(updated_value) + FROM test_2; + sum +--------------- + 1000001000000 +(1 row) + +DELETE FROM test_2 + WHERE value % 2 = 0; +SELECT SUM(value) + FROM test_2; + sum +-------------- + 250000000000 +(1 row) + +COMMIT; +DROP TABLE test_2; +set columnar.enable_column_cache = 't'; +CREATE TABLE test_2 ( + value INT, + updated_value INT +) USING columnar; +INSERT INTO test_2 (value) + SELECT generate_series(1, 1000000, 1); +BEGIN; +SELECT SUM(value) + FROM test_2; + sum +-------------- + 500000500000 +(1 row) + +UPDATE test_2 + SET updated_value = value * 2; +SELECT SUM(updated_value) + FROM test_2; + sum +--------------- + 1000001000000 +(1 row) + +DELETE FROM test_2 + WHERE value % 2 = 0; +SELECT SUM(value) + FROM test_2; + sum +-------------- + 250000000000 +(1 row) + +COMMIT; +DROP TABLE test_2; diff --git a/columnar/src/test/regress/sql/columnar_cache.sql b/columnar/src/test/regress/sql/columnar_cache.sql new file mode 100644 index 00000000..e482cd1e --- /dev/null +++ b/columnar/src/test/regress/sql/columnar_cache.sql @@ -0,0 +1,111 @@ +CREATE TABLE big_table ( + id INT, + firstname TEXT, + lastname TEXT +) USING columnar; + +INSERT INTO big_table (id, firstname, lastname) + SELECT i, + CONCAT('firstname-', i), + CONCAT('lastname-', i) + FROM generate_series(1, 1000000) as i; + +-- get some baselines from multiple chunks +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id < 1000 + GROUP BY firstname, + lastname +UNION +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id BETWEEN 15000 AND 16000 + GROUP BY firstname, + lastname + ORDER BY firstname; + + +-- enable caching +SET columnar.enable_column_cache = 't'; + +-- the results should be the same as above +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id < 1000 + GROUP BY firstname, + lastname +UNION +SELECT firstname, + lastname, + SUM(id) + FROM big_table + WHERE id BETWEEN 15000 AND 16000 + GROUP BY firstname, + lastname + ORDER BY firstname; + +-- disable caching +SET columnar.enable_column_cache = 'f'; + +CREATE TABLE test_2 ( + value INT, + updated_value INT +) USING columnar; + +INSERT INTO test_2 (value) + SELECT generate_series(1, 1000000, 1); + +BEGIN; +SELECT SUM(value) + FROM test_2; + +UPDATE test_2 + SET updated_value = value * 2; + +SELECT SUM(updated_value) + FROM test_2; + +DELETE FROM test_2 + WHERE value % 2 = 0; + +SELECT SUM(value) + FROM test_2; +COMMIT; + +DROP TABLE test_2; + +set columnar.enable_column_cache = 't'; + +CREATE TABLE test_2 ( + value INT, + updated_value INT +) USING columnar; + +INSERT INTO test_2 (value) + SELECT generate_series(1, 1000000, 1); + +BEGIN; +SELECT SUM(value) + FROM test_2; + +UPDATE test_2 + SET updated_value = value * 2; + +SELECT SUM(updated_value) + FROM test_2; + +DELETE FROM test_2 + WHERE value % 2 = 0; + +SELECT SUM(value) + FROM test_2; +COMMIT; + +DROP TABLE test_2; +