mirror of https://github.com/citusdata/citus.git
commit
0b71697d88
|
@ -643,7 +643,7 @@ DistributionCreateCommand(DistTableCacheEntry *cacheEntry)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *partitionKeyColumnName = ColumnNameToColumn(relationId, partitionKeyString);
|
char *partitionKeyColumnName = ColumnToColumnName(relationId, partitionKeyString);
|
||||||
appendStringInfo(tablePartitionKeyString, "column_name_to_column(%s,%s)",
|
appendStringInfo(tablePartitionKeyString, "column_name_to_column(%s,%s)",
|
||||||
quote_literal_cstr(qualifiedRelationName),
|
quote_literal_cstr(qualifiedRelationName),
|
||||||
quote_literal_cstr(partitionKeyColumnName));
|
quote_literal_cstr(partitionKeyColumnName));
|
||||||
|
|
|
@ -715,7 +715,7 @@ ModifyQuerySupported(Query *queryTree, Query *originalQuery, bool multiShardQuer
|
||||||
DistTableCacheEntry *cacheEntry = DistributedTableCacheEntry(
|
DistTableCacheEntry *cacheEntry = DistributedTableCacheEntry(
|
||||||
distributedTableId);
|
distributedTableId);
|
||||||
char *partitionKeyString = cacheEntry->partitionKeyString;
|
char *partitionKeyString = cacheEntry->partitionKeyString;
|
||||||
char *partitionColumnName = ColumnNameToColumn(distributedTableId,
|
char *partitionColumnName = ColumnToColumnName(distributedTableId,
|
||||||
partitionKeyString);
|
partitionKeyString);
|
||||||
|
|
||||||
appendStringInfo(errorHint, "Consider using an equality filter on "
|
appendStringInfo(errorHint, "Consider using an equality filter on "
|
||||||
|
@ -2556,7 +2556,7 @@ BuildRoutesForInsert(Query *query, DeferredErrorMessage **planningError)
|
||||||
if (prunedShardIntervalCount != 1)
|
if (prunedShardIntervalCount != 1)
|
||||||
{
|
{
|
||||||
char *partitionKeyString = cacheEntry->partitionKeyString;
|
char *partitionKeyString = cacheEntry->partitionKeyString;
|
||||||
char *partitionColumnName = ColumnNameToColumn(distributedTableId,
|
char *partitionColumnName = ColumnToColumnName(distributedTableId,
|
||||||
partitionKeyString);
|
partitionKeyString);
|
||||||
StringInfo errorMessage = makeStringInfo();
|
StringInfo errorMessage = makeStringInfo();
|
||||||
StringInfo errorHint = makeStringInfo();
|
StringInfo errorHint = makeStringInfo();
|
||||||
|
|
|
@ -105,7 +105,7 @@ column_to_column_name(PG_FUNCTION_ARGS)
|
||||||
|
|
||||||
CheckCitusVersion(ERROR);
|
CheckCitusVersion(ERROR);
|
||||||
|
|
||||||
char *columnName = ColumnNameToColumn(relationId, columnNodeString);
|
char *columnName = ColumnToColumnName(relationId, columnNodeString);
|
||||||
|
|
||||||
text *columnText = cstring_to_text(columnName);
|
text *columnText = cstring_to_text(columnName);
|
||||||
|
|
||||||
|
@ -167,17 +167,22 @@ BuildDistributionKeyFromColumnName(Relation distributedRelation, char *columnNam
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ColumnNameToColumn returns the human-readable name of a column given a
|
* ColumnToColumnName returns the human-readable name of a column given a
|
||||||
* relation identifier and the column's internal textual (Var) representation.
|
* relation identifier and the column's internal textual (Var) representation.
|
||||||
* This function will raise an ERROR if no such column can be found or if the
|
* This function will raise an ERROR if no such column can be found or if the
|
||||||
* provided Var refers to a system column.
|
* provided Var refers to a system column.
|
||||||
*/
|
*/
|
||||||
char *
|
char *
|
||||||
ColumnNameToColumn(Oid relationId, char *columnNodeString)
|
ColumnToColumnName(Oid relationId, char *columnNodeString)
|
||||||
{
|
{
|
||||||
Node *columnNode = stringToNode(columnNodeString);
|
Node *columnNode = stringToNode(columnNodeString);
|
||||||
|
|
||||||
Assert(IsA(columnNode, Var));
|
if (columnNode == NULL || !IsA(columnNode, Var))
|
||||||
|
{
|
||||||
|
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("not a valid column")));
|
||||||
|
}
|
||||||
|
|
||||||
Var *column = (Var *) columnNode;
|
Var *column = (Var *) columnNode;
|
||||||
|
|
||||||
AttrNumber columnNumber = column->varattno;
|
AttrNumber columnNumber = column->varattno;
|
||||||
|
|
|
@ -21,6 +21,6 @@
|
||||||
/* Remaining metadata utility functions */
|
/* Remaining metadata utility functions */
|
||||||
extern Var * BuildDistributionKeyFromColumnName(Relation distributedRelation,
|
extern Var * BuildDistributionKeyFromColumnName(Relation distributedRelation,
|
||||||
char *columnName);
|
char *columnName);
|
||||||
extern char * ColumnNameToColumn(Oid relationId, char *columnNodeString);
|
extern char * ColumnToColumnName(Oid relationId, char *columnNodeString);
|
||||||
|
|
||||||
#endif /* DISTRIBUTION_COLUMN_H */
|
#endif /* DISTRIBUTION_COLUMN_H */
|
||||||
|
|
|
@ -203,6 +203,24 @@ SELECT partmethod, column_to_column_name(logicalrelid, partkey) FROM pg_dist_par
|
||||||
h | id
|
h | id
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
-- test column_to_column_name with illegal arguments
|
||||||
|
SELECT column_to_column_name(1204127312,'');
|
||||||
|
ERROR: not a valid column
|
||||||
|
SELECT column_to_column_name('customers','');
|
||||||
|
ERROR: not a valid column
|
||||||
|
SELECT column_to_column_name('pg_dist_node'::regclass, NULL);
|
||||||
|
column_to_column_name
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT column_to_column_name('pg_dist_node'::regclass,'{FROMEXPR :fromlist ({RANGETBLREF :rtindex 1 }) :quals <>}');
|
||||||
|
ERROR: not a valid column
|
||||||
|
-- test column_name_to_column with illegal arguments
|
||||||
|
SELECT column_name_to_column(1204127312,'');
|
||||||
|
ERROR: could not open relation with OID 1204127312
|
||||||
|
SELECT column_name_to_column('customers','notacolumn');
|
||||||
|
ERROR: column "notacolumn" of relation "customers" does not exist
|
||||||
-- make one huge shard and manually inspect shard row
|
-- make one huge shard and manually inspect shard row
|
||||||
SELECT create_monolithic_shard_row('customers') AS new_shard_id
|
SELECT create_monolithic_shard_row('customers') AS new_shard_id
|
||||||
\gset
|
\gset
|
||||||
|
|
|
@ -150,6 +150,16 @@ VALUES
|
||||||
SELECT partmethod, column_to_column_name(logicalrelid, partkey) FROM pg_dist_partition
|
SELECT partmethod, column_to_column_name(logicalrelid, partkey) FROM pg_dist_partition
|
||||||
WHERE logicalrelid = 'customers'::regclass;
|
WHERE logicalrelid = 'customers'::regclass;
|
||||||
|
|
||||||
|
-- test column_to_column_name with illegal arguments
|
||||||
|
SELECT column_to_column_name(1204127312,'');
|
||||||
|
SELECT column_to_column_name('customers','');
|
||||||
|
SELECT column_to_column_name('pg_dist_node'::regclass, NULL);
|
||||||
|
SELECT column_to_column_name('pg_dist_node'::regclass,'{FROMEXPR :fromlist ({RANGETBLREF :rtindex 1 }) :quals <>}');
|
||||||
|
|
||||||
|
-- test column_name_to_column with illegal arguments
|
||||||
|
SELECT column_name_to_column(1204127312,'');
|
||||||
|
SELECT column_name_to_column('customers','notacolumn');
|
||||||
|
|
||||||
-- make one huge shard and manually inspect shard row
|
-- make one huge shard and manually inspect shard row
|
||||||
SELECT create_monolithic_shard_row('customers') AS new_shard_id
|
SELECT create_monolithic_shard_row('customers') AS new_shard_id
|
||||||
\gset
|
\gset
|
||||||
|
|
Loading…
Reference in New Issue