Support expressions as partitioning keys
This commit is contained in:
parent
2c899bd799
commit
3cc28231f9
2 changed files with 9 additions and 7 deletions
|
|
@ -1,8 +1,6 @@
|
|||
#include "PgClassContainer.h"
|
||||
#include "Pgsql_Connection.h"
|
||||
#include "Pgsql_Col.h"
|
||||
#include "PgDatabaseCatalog.h"
|
||||
#include "PgNamespaceContainer.h"
|
||||
#include <iterator>
|
||||
|
||||
std::string PgClassContainer::getLoadQuery() const
|
||||
|
|
@ -18,13 +16,12 @@ std::string PgClassContainer::getLoadQuery() const
|
|||
q += ", relhasoids ";
|
||||
if (minimumVersion(100000))
|
||||
q +=
|
||||
", pg_get_expr(relpartbound, oid)"
|
||||
", partstrat, partnatts, partattrs, partclass, partcollation"; // TODO: , partexprs";
|
||||
", pg_get_expr(relpartbound, pg_class.oid)"
|
||||
", partstrat, partnatts, partattrs, partclass, partcollation "
|
||||
", pg_get_expr(partexprs, partrelid) AS partexprs";
|
||||
if (minimumVersion(110000))
|
||||
q += ", partdefid";
|
||||
|
||||
// pg_get_expr must be called on each element in partexprs
|
||||
|
||||
q +=
|
||||
"\nFROM pg_catalog.pg_class \n"
|
||||
" LEFT JOIN pg_catalog.pg_description AS d ON (objoid=pg_class.oid AND objsubid=0) \n";
|
||||
|
|
@ -46,9 +43,11 @@ namespace {
|
|||
std::vector<int16_t> attNums;
|
||||
std::vector<Oid> attOpClass;
|
||||
std::vector<Oid> attCollation;
|
||||
std::vector<QString> expressions;
|
||||
|
||||
PartitioningKeyItems Build()
|
||||
{
|
||||
int expr_idx = 0;
|
||||
PartitioningKeyItems result(attCount);
|
||||
for (int attIdx = 0; attIdx < attCount; ++attIdx)
|
||||
{
|
||||
|
|
@ -56,6 +55,8 @@ namespace {
|
|||
item.attNum = attNums[attIdx];
|
||||
item.opClass = attOpClass[attIdx];
|
||||
item.collation = attCollation[attIdx];
|
||||
if (item.attNum == 0)
|
||||
item.expression = expressions[expr_idx++];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
@ -111,6 +112,7 @@ PgClass PgClassContainer::loadElem(const Pgsql::Row &row)
|
|||
col.getAsVector<int16_t>(std::back_inserter(kibuilder.attNums));
|
||||
col.getAsVector<Oid>(std::back_inserter(kibuilder.attOpClass));
|
||||
col.getAsVector<Oid>(std::back_inserter(kibuilder.attCollation));
|
||||
col.getAsVector<QString>(std::back_inserter(kibuilder.expressions));
|
||||
|
||||
pt.keyColumns = kibuilder.Build();
|
||||
if (minimumVersion(110000))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue