blob: 6c342806a27eaf0d26e11e3ba42d84b868ac3c7f [file] [log] [blame]
/*-------------------------------------------------------------------------
*
* pg_compress.h
*
* Representation of compression algorithms for user extensibility of
* compression used by the storage layer.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*-------------------------------------------------------------------------
*/
#ifndef PG_COMPRESSION
#define PG_COMPRESSION
#include "catalog/genbki.h"
#include "utils/relcache.h"
/* TIDYCAT_BEGINDEF
CREATE TABLE pg_compression
with (relid=3056, reltype_oid=3057, CamelCase=Compression)
(
compname name,
compconstructor regproc,
compdestructor regproc,
compcompressor regproc,
compdecompressor regproc,
compvalidator regproc,
compowner oid
);
create unique index on pg_compression(oid) with (indexid=3058, CamelCase=CompressionOid);
create unique index on pg_compression(compname) with (indexid=3059, CamelCase=CompressionCompname);
alter table pg_compression add fk compconstructor on pg_proc(oid);
alter table pg_compression add fk compdestructor on pg_proc(oid);
alter table pg_compression add fk compcompressor on pg_proc(oid);
alter table pg_compression add fk compdecompressor on pg_proc(oid);
alter table pg_compression add fk compvalidator on pg_proc(oid);
alter table pg_compression add fk compowner on pg_authid(oid);
TIDYCAT_ENDDEF
*/
/* TIDYCAT_BEGIN_CODEGEN
WARNING: DO NOT MODIFY THE FOLLOWING SECTION:
Generated by ./tidycat.pl version 31
on Thu Sep 1 16:43:17 2011
*/
/*
TidyCat Comments for pg_compression:
Table has an Oid column.
Table has static type (see pg_types.h).
*/
/* ----------------
* pg_compression definition. cpp turns this into
* typedef struct FormData_pg_compression
* ----------------
*/
#define CompressionRelationId 3056
CATALOG(pg_compression,3056)
{
NameData compname;
regproc compconstructor;
regproc compdestructor;
regproc compcompressor;
regproc compdecompressor;
regproc compvalidator;
Oid compowner;
} FormData_pg_compression;
/* ----------------
* Form_pg_compression corresponds to a pointer to a tuple with
* the format of pg_compression relation.
* ----------------
*/
typedef FormData_pg_compression *Form_pg_compression;
/* ----------------
* compiler constants for pg_compression
* ----------------
*/
#define Natts_pg_compression 7
#define Anum_pg_compression_compname 1
#define Anum_pg_compression_compconstructor 2
#define Anum_pg_compression_compdestructor 3
#define Anum_pg_compression_compcompressor 4
#define Anum_pg_compression_compdecompressor 5
#define Anum_pg_compression_compvalidator 6
#define Anum_pg_compression_compowner 7
/* TIDYCAT_END_CODEGEN */
/* Initial contents */
/* DATA(insert OID = 3069 ( snappy gp_snappy_constructor gp_snappy_destructor gp_snappy_compress gp_snappy_decompress gp_snappy_validator PGUID )); */
DATA(insert OID = 3060 ( zlib gp_zlib_constructor gp_zlib_destructor gp_zlib_compress gp_zlib_decompress gp_zlib_validator PGUID ));
DATA(insert OID = 3061 ( quicklz gp_quicklz_constructor gp_quicklz_destructor gp_quicklz_compress gp_quicklz_decompress gp_quicklz_validator PGUID ));
DATA(insert OID = 3062 ( rle_type gp_rle_type_constructor gp_rle_type_destructor gp_rle_type_compress gp_rle_type_decompress gp_rle_type_validator PGUID ));
DATA(insert OID = 3063 ( none gp_dummy_compression_constructor gp_dummy_compression_destructor gp_dummy_compression_compress gp_dummy_compression_decompress gp_dummy_compression_validator PGUID ));
#define NUM_COMPRESS_FUNCS 5
#define COMPRESSION_CONSTRUCTOR 0
#define COMPRESSION_DESTRUCTOR 1
#define COMPRESSION_COMPRESS 2
#define COMPRESSION_DECOMPRESS 3
#define COMPRESSION_VALIDATOR 4
typedef struct CompressionState
{
/*
* Allows a constructor to tell the calling level the maximum storage
* required for input of the given size. Different algorithms need
* different maximum buffers.
*/
size_t (*desired_sz)(size_t input);
void *opaque; /* algorithm specific stuff opaque to the caller */
} CompressionState;
typedef struct StorageAttributes
{
char *comptype; /* compresstype field */
int complevel; /* compresslevel field */
size_t blocksize; /* blocksize field */
Oid typid; /* Oid of the type being compressed */
} StorageAttributes;
extern CompressionState *callCompressionConstructor(PGFunction constructor,
TupleDesc tupledesc,
StorageAttributes *sa,
bool is_compress);
extern void callCompressionDestructor(PGFunction destructor, CompressionState *state);
extern void callCompressionActuator(PGFunction func, const void *src,
int32 src_sz, char *dst, int32 dst_sz,
int32 *dst_used, CompressionState *state);
extern void callCompressionValidator(PGFunction func, char *comptype,
int32 complevel, int32 blocksize,
Oid typid);
extern bool compresstype_is_valid(char *compresstype);
extern List *default_column_encoding_clause(void);
extern PGFunction *GetCompressionImplementation(char *comptype);
extern bool is_storage_encoding_directive(char *name);
#endif /* PG_COMPRESSION */