Generate PARTITIONED BY SQL for partitioned tables.
Expressions not yet supported.
This commit is contained in:
parent
61f90668d8
commit
2c899bd799
8 changed files with 243 additions and 41 deletions
|
|
@ -5,6 +5,9 @@
|
|||
#include "PgNamespaceObject.h"
|
||||
#include <QString>
|
||||
#include <libpq-fe.h>
|
||||
#include <boost/container/small_vector.hpp>
|
||||
|
||||
class PgAttribute;
|
||||
|
||||
enum class RelPersistence {
|
||||
Permanent, // p
|
||||
|
|
@ -30,6 +33,37 @@ enum class RelKind
|
|||
|
||||
void operator<<(RelKind &s, const Pgsql::Value &v);
|
||||
|
||||
enum class PartitioningStrategy
|
||||
{
|
||||
Hash, // h
|
||||
List, // l
|
||||
Range // r
|
||||
};
|
||||
|
||||
void operator<<(PartitioningStrategy &s, const Pgsql::Value &v);
|
||||
|
||||
QString PartitionStrategyKeyword(PartitioningStrategy ps);
|
||||
|
||||
class PartitioningKeyItem
|
||||
{
|
||||
public:
|
||||
int16_t attNum;
|
||||
Oid opClass;
|
||||
Oid collation;
|
||||
// expre nodetree
|
||||
QString expression; // pg_get_expr(pg_node_tree, relation_oid)
|
||||
};
|
||||
using PartitioningKeyItems = boost::container::small_vector<PartitioningKeyItem, 3>;
|
||||
|
||||
class PgPartitionedTable
|
||||
{
|
||||
public:
|
||||
PartitioningStrategy strategy;
|
||||
Oid defaultPartition;
|
||||
|
||||
PartitioningKeyItems keyColumns;
|
||||
};
|
||||
|
||||
|
||||
class PgClass: public PgNamespaceObject {
|
||||
public:
|
||||
|
|
@ -51,6 +85,7 @@ public:
|
|||
std::vector<QString> options;
|
||||
QString viewdef;
|
||||
QString partitionBoundaries;
|
||||
PgPartitionedTable partitionedTable; // ignore if RelKind != PartitionedTable
|
||||
|
||||
using PgNamespaceObject::PgNamespaceObject;
|
||||
|
||||
|
|
@ -59,6 +94,7 @@ public:
|
|||
QString typeName() const override;
|
||||
QString aclAllPattern() const override;
|
||||
|
||||
|
||||
protected:
|
||||
virtual QString ddlTypeName() const override;
|
||||
|
||||
|
|
@ -68,6 +104,11 @@ private:
|
|||
QString createTableSql() const;
|
||||
QString generateBodySql(bool isPartition) const;
|
||||
QString generateInheritsSql() const;
|
||||
QString partitionBySql() const;
|
||||
QString partitionKeySql() const;
|
||||
QString partitionKeyItemSql(
|
||||
const PartitioningKeyItem &keyItem
|
||||
) const;
|
||||
QString getPartitionOfName() const;
|
||||
QString generateTablespaceSql() const;
|
||||
QString createViewSql() const;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue