Skip to content

Commit

Permalink
Initial pg12, it compiles
Browse files Browse the repository at this point in the history
  • Loading branch information
serprex authored and mtuncer committed Nov 3, 2019
1 parent bda5583 commit db6cc99
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 22 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ ifndef MAJORVERSION
MAJORVERSION := $(basename $(VERSION))
endif

ifeq (,$(findstring $(MAJORVERSION), 9.3 9.4 9.5 9.6 10 11))
$(error PostgreSQL 9.3 or 9.4 or 9.5 or 9.6 or 10 or 11 is required to compile this extension)
ifeq (,$(findstring $(MAJORVERSION), 9.3 9.4 9.5 9.6 10 11 12))
$(error PostgreSQL 9.3 to 12 is required to compile this extension)
endif

cstore.pb-c.c: cstore.proto
Expand Down
10 changes: 8 additions & 2 deletions cstore_compression.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,15 @@ DecompressBuffer(StringInfo buffer, CompressionType compressionType)
decompressedData = palloc0(decompressedDataSize);

#if PG_VERSION_NUM >= 90500
#if PG_VERSION_NUM >= 120000
decompressedByteCount = pglz_decompress(CSTORE_COMPRESS_RAWDATA(buffer->data),
compressedDataSize,
decompressedData, decompressedDataSize);
compressedDataSize, decompressedData,
decompressedDataSize, true);
#else
decompressedByteCount = pglz_decompress(CSTORE_COMPRESS_RAWDATA(buffer->data),
compressedDataSize, decompressedData,
decompressedDataSize);
#endif

if (decompressedByteCount < 0)
{
Expand Down
61 changes: 52 additions & 9 deletions cstore_fdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,14 @@
#include "optimizer/pathnode.h"
#include "optimizer/planmain.h"
#include "optimizer/restrictinfo.h"
#if PG_VERSION_NUM >= 120000
#include "access/heapam.h"
#include "access/tableam.h"
#include "executor/tuptable.h"
#include "optimizer/optimizer.h"
#else
#include "optimizer/var.h"
#endif
#include "parser/parser.h"
#include "parser/parsetree.h"
#include "parser/parse_coerce.h"
Expand All @@ -55,7 +62,11 @@
#include "utils/memutils.h"
#include "utils/lsyscache.h"
#include "utils/rel.h"
#if PG_VERSION_NUM >= 120000
#include "utils/snapmgr.h"
#else
#include "utils/tqual.h"
#endif


/* local functions forward declarations */
Expand Down Expand Up @@ -94,6 +105,7 @@ static bool DirectoryExists(StringInfo directoryName);
static void CreateDirectory(StringInfo directoryName);
static void RemoveCStoreDatabaseDirectory(Oid databaseOid);
static StringInfo OptionNamesString(Oid currentContextId);
static HeapTuple GetSlotHeapTuple(TupleTableSlot *tts);
static CStoreFdwOptions * CStoreGetOptions(Oid foreignTableId);
static char * CStoreGetOptionValue(Oid foreignTableId, const char *optionName);
static void ValidateForeignTableOptions(char *filename, char *compressionTypeString,
Expand Down Expand Up @@ -148,7 +160,6 @@ static bool CStoreIsForeignScanParallelSafe(PlannerInfo *root, RelOptInfo *rel,
RangeTblEntry *rte);
#endif


/* declarations for dynamic loading */
PG_MODULE_MAGIC;

Expand Down Expand Up @@ -579,7 +590,11 @@ CopyIntoCStoreTable(const CopyStmt *copyStatement, const char *queryString)
{
/* read the next row in tupleContext */
MemoryContext oldContext = MemoryContextSwitchTo(tupleContext);
#if PG_VERSION_NUM >= 120000
nextRowFound = NextCopyFrom(copyState, NULL, columnValues, columnNulls);
#else
nextRowFound = NextCopyFrom(copyState, NULL, columnValues, columnNulls, NULL);
#endif
MemoryContextSwitchTo(oldContext);

/* write the row to the cstore file */
Expand Down Expand Up @@ -793,7 +808,7 @@ FindCStoreTables(List *tableList)
}


/*
/*
* OpenRelationsForTruncate opens and locks relations for tables to be truncated.
*
* It also performs a permission checks to see if the user has truncate privilege
Expand Down Expand Up @@ -971,9 +986,15 @@ DistributedTable(Oid relationId)
bool distributedTable = false;
Oid partitionOid = InvalidOid;
Relation heapRelation = NULL;
#if PG_VERSION_NUM >= 120000
TableScanDesc scanDesc = NULL;
#define heap_beginscan table_beginscan
#define heap_endscan table_endscan
#else
HeapScanDesc scanDesc = NULL;
#endif
const int scanKeyCount = 1;
ScanKeyData scanKey[scanKeyCount];
ScanKeyData scanKey[1];
HeapTuple heapTuple = NULL;

bool missingOK = true;
Expand Down Expand Up @@ -1115,7 +1136,7 @@ CreateDirectory(StringInfo directoryName)

/*
* RemoveCStoreDatabaseDirectory removes CStore directory previously
* created for this database.
* created for this database.
* However it does not remove 'cstore_fdw' directory even if there
* are no other databases left.
*/
Expand Down Expand Up @@ -1366,6 +1387,18 @@ OptionNamesString(Oid currentContextId)
return optionNamesString;
}

/*
* GetSlotHeapTuple abstracts getting HeapTuple from TupleTableSlot between versions
*/
static HeapTuple
GetSlotHeapTuple(TupleTableSlot *tts)
{
#if PG_VERSION_NUM >= 120000
return tts->tts_ops->copy_heap_tuple(tts);
#else
return tts->tts_tuple;
#endif
}

/*
* CStoreGetOptions returns the option values to be used when reading and writing
Expand Down Expand Up @@ -1526,7 +1559,7 @@ static char *
CStoreDefaultFilePath(Oid foreignTableId)
{
Relation relation = relation_open(foreignTableId, AccessShareLock);
RelFileNode relationFileNode = relation->rd_node;
RelFileNode relationFileNode = relation->rd_node;

Oid databaseOid = relationFileNode.dbNode;
Oid relationFileOid = relationFileNode.relNode;
Expand Down Expand Up @@ -2078,7 +2111,9 @@ CStoreAcquireSampleRows(Relation relation, int logLevel,
/* set up tuple slot */
columnValues = palloc0(columnCount * sizeof(Datum));
columnNulls = palloc0(columnCount * sizeof(bool));
#if PG_VERSION_NUM >= 110000
#if PG_VERSION_NUM >= 120000
scanTupleSlot = MakeTupleTableSlot(NULL, &TTSOpsVirtual);
#elif PG_VERSION_NUM >= 110000
scanTupleSlot = MakeTupleTableSlot(NULL);
#else
scanTupleSlot = MakeTupleTableSlot();
Expand Down Expand Up @@ -2123,7 +2158,11 @@ CStoreAcquireSampleRows(Relation relation, int logLevel,
MemoryContextSwitchTo(oldContext);

/* if there are no more records to read, break */
#if PG_VERSION_NUM >= 120000
if (TTS_EMPTY(scanTupleSlot))
#else
if (scanTupleSlot->tts_isempty)
#endif
{
break;
}
Expand Down Expand Up @@ -2298,14 +2337,18 @@ CStoreExecForeignInsert(EState *executorState, ResultRelInfo *relationInfo,
TupleTableSlot *tupleSlot, TupleTableSlot *planSlot)
{
TableWriteState *writeState = (TableWriteState*) relationInfo->ri_FdwState;
HeapTuple heapTuple;

Assert(writeState != NULL);

if(HeapTupleHasExternal(tupleSlot->tts_tuple))
heapTuple = GetSlotHeapTuple(tupleSlot);

if (HeapTupleHasExternal(heapTuple))
{
/* detoast any toasted attributes */
tupleSlot->tts_tuple = toast_flatten_tuple(tupleSlot->tts_tuple,
tupleSlot->tts_tupleDescriptor);
HeapTuple newTuple = toast_flatten_tuple(heapTuple,
tupleSlot->tts_tupleDescriptor);
ExecForceStoreHeapTuple(newTuple, tupleSlot, true);
}

slot_getallattrs(tupleSlot);
Expand Down
20 changes: 13 additions & 7 deletions cstore_reader.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,16 @@
#include "access/skey.h"
#include "commands/defrem.h"
#include "nodes/makefuncs.h"
#if PG_VERSION_NUM >= 120000
#include "nodes/pathnodes.h"
#include "nodes/nodeFuncs.h"
#include "optimizer/optimizer.h"
#else
#include "optimizer/clauses.h"
#include "optimizer/predtest.h"
#include "optimizer/restrictinfo.h"
#include "optimizer/var.h"
#endif
#include "optimizer/restrictinfo.h"
#include "port.h"
#include "storage/fd.h"
#include "utils/memutils.h"
Expand Down Expand Up @@ -80,7 +86,7 @@ static void DeserializeBlockData(StripeBuffers *stripeBuffers, uint64 blockIndex
TupleDesc tupleDescriptor);
static Datum ColumnDefaultValue(TupleConstr *tupleConstraints,
Form_pg_attribute attributeForm);
static int64 FileSize(FILE *file);
static int64 FILESize(FILE *file);
static StringInfo ReadFromFile(FILE *file, uint64 offset, uint32 size);
static void ResetUncompressedBlockData(ColumnBlockData **blockDataArray,
uint32 columnCount);
Expand Down Expand Up @@ -181,7 +187,7 @@ CStoreReadFooter(StringInfo tableFooterFilename)
errhint("Try copying in data to the table.")));
}

footerFileSize = FileSize(tableFooterFile);
footerFileSize = FILESize(tableFooterFile);
if (footerFileSize < CSTORE_POSTSCRIPT_SIZE_LENGTH)
{
ereport(ERROR, (errmsg("invalid cstore file")));
Expand Down Expand Up @@ -362,7 +368,7 @@ CreateEmptyBlockDataArray(uint32 columnCount, bool *columnMask, uint32 blockRowC
blockDataArray[columnIndex] = blockData;
}
}

return blockDataArray;
}

Expand All @@ -387,7 +393,7 @@ FreeColumnBlockDataArray(ColumnBlockData **blockDataArray, uint32 columnCount)
pfree(blockData);
}
}

pfree(blockDataArray);
}

Expand Down Expand Up @@ -947,7 +953,7 @@ GetOperatorByType(Oid typeId, Oid accessMethodId, int16 strategyNumber)
}


/*
/*
* UpdateConstraint updates the base constraint with the given min/max values.
* The function is copied from CitusDB's shard pruning logic.
*/
Expand Down Expand Up @@ -1289,7 +1295,7 @@ ColumnDefaultValue(TupleConstr *tupleConstraints, Form_pg_attribute attributeFor

/* Returns the size of the given file handle. */
static int64
FileSize(FILE *file)
FILESize(FILE *file)
{
int64 fileSize = 0;
int fseekResult = 0;
Expand Down
8 changes: 6 additions & 2 deletions cstore_writer.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@
#include "access/nbtree.h"
#include "catalog/pg_collation.h"
#include "commands/defrem.h"
#if PG_VERSION_NUM >= 120000
#include "optimizer/optimizer.h"
#else
#include "optimizer/var.h"
#endif
#include "port.h"
#include "storage/fd.h"
#include "utils/memutils.h"
Expand Down Expand Up @@ -482,7 +486,7 @@ CreateEmptyStripeSkipList(uint32 stripeMaxRowCount, uint32 blockRowCount,

/*
* FlushStripe flushes current stripe data into the file. The function first ensures
* the last data block for each column is properly serialized and compressed. Then,
* the last data block for each column is properly serialized and compressed. Then,
* the function creates the skip list and footer buffers. Finally, the function
* flushes the skip list, data, and footer buffers to the file.
*/
Expand Down Expand Up @@ -751,7 +755,7 @@ SerializeSingleDatum(StringInfo datumBuffer, Datum datum, bool datumTypeByValue,
Assert(!datumTypeByValue);
memcpy(currentDatumDataPointer, DatumGetPointer(datum), datumLength);
}

datumBuffer->len += datumLengthAligned;
}

Expand Down

0 comments on commit db6cc99

Please sign in to comment.