pull/1221/merge
Marco Slot 2017-06-08 15:43:18 +00:00 committed by GitHub
commit ed188ccf45
3 changed files with 66 additions and 6 deletions

View File

@ -658,6 +658,9 @@ shard_name(PG_FUNCTION_ARGS)
Oid relationId = InvalidOid; Oid relationId = InvalidOid;
int64 shardId = 0; int64 shardId = 0;
char *relationName = NULL; char *relationName = NULL;
Oid schemaId = InvalidOid;
char *schemaName = NULL;
char *qualifiedName = NULL;
/* /*
* Have to check arguments for NULLness as it can't be declared STRICT * Have to check arguments for NULLness as it can't be declared STRICT
@ -685,7 +688,6 @@ shard_name(PG_FUNCTION_ARGS)
errmsg("shard_id cannot be zero or negative value"))); errmsg("shard_id cannot be zero or negative value")));
} }
if (!OidIsValid(relationId)) if (!OidIsValid(relationId))
{ {
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@ -693,7 +695,6 @@ shard_name(PG_FUNCTION_ARGS)
} }
relationName = get_rel_name(relationId); relationName = get_rel_name(relationId);
if (relationName == NULL) if (relationName == NULL)
{ {
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@ -701,5 +702,10 @@ shard_name(PG_FUNCTION_ARGS)
} }
AppendShardIdToName(&relationName, shardId); AppendShardIdToName(&relationName, shardId);
PG_RETURN_TEXT_P(cstring_to_text(relationName));
schemaId = get_rel_namespace(relationId);
schemaName = get_namespace_name(schemaId);
qualifiedName = quote_qualified_identifier(schemaName, relationName);
PG_RETURN_TEXT_P(cstring_to_text(qualifiedName));
} }

View File

@ -40,9 +40,9 @@ ERROR: object_name cannot be null
SELECT shard_name(0, 666666); SELECT shard_name(0, 666666);
ERROR: object_name does not reference a valid relation ERROR: object_name does not reference a valid relation
SELECT shard_name('too_long_12345678901234567890123456789012345678901234567890'::regclass, 666666); SELECT shard_name('too_long_12345678901234567890123456789012345678901234567890'::regclass, 666666);
shard_name shard_name
----------------------------------------------------------------- ------------------------------------------------------------------------
too_long_12345678901234567890123456789012345678_e0119164_666666 public.too_long_12345678901234567890123456789012345678_e0119164_666666
(1 row) (1 row)
SELECT shard_name('too_long_12345678901234567890123456789012345678901234567890'::regclass, NULL); SELECT shard_name('too_long_12345678901234567890123456789012345678901234567890'::regclass, NULL);
@ -358,6 +358,15 @@ SELECT master_create_worker_shards(U&'elephant_!0441!043B!043E!043D!0441!043B!04
(1 row) (1 row)
-- Verify that quoting is used in shard_name
SELECT shard_name(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!'::regclass, min(shardid))
FROM pg_dist_shard
WHERE logicalrelid = U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!'::regclass;
shard_name
----------------------------------------------------------
public."elephant_слонслонслонсло_c8b737c2_2250000000002"
(1 row)
\c - - - :worker_1_port \c - - - :worker_1_port
\d elephant_* \d elephant_*
Index "public.elephant_слонслонслонсло_14d34928_2250000000002" Index "public.elephant_слонслонслонсло_14d34928_2250000000002"
@ -389,6 +398,32 @@ Indexes:
"elephant_слонслонслонсло_14d34928_2250000000003" PRIMARY KEY, btree (col1) "elephant_слонслонслонсло_14d34928_2250000000003" PRIMARY KEY, btree (col1)
\c - - - :master_port \c - - - :master_port
-- Verify that the shard_name UDF supports schemas
CREATE SCHEMA multi_name_lengths;
CREATE TABLE multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890 (
col1 integer not null,
col2 integer not null);
SELECT master_create_distributed_table('multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890', 'col1', 'hash');
master_create_distributed_table
---------------------------------
(1 row)
SELECT master_create_worker_shards('multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890', 2, 1);
master_create_worker_shards
-----------------------------
(1 row)
SELECT shard_name('multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890'::regclass, min(shardid))
FROM pg_dist_shard
WHERE logicalrelid = 'multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890'::regclass;
shard_name
------------------------------------------------------------------------------------
multi_name_lengths.too_long_1234567890123456789012345678901_e0119164_2250000000004
(1 row)
DROP TABLE multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890;
-- Clean up. -- Clean up.
DROP TABLE name_lengths CASCADE; DROP TABLE name_lengths CASCADE;
DROP TABLE U&"elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D" UESCAPE '!' CASCADE; DROP TABLE U&"elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D" UESCAPE '!' CASCADE;

View File

@ -147,10 +147,29 @@ CREATE TABLE U&"elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E
SELECT master_create_distributed_table(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!', 'col1', 'hash'); SELECT master_create_distributed_table(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!', 'col1', 'hash');
SELECT master_create_worker_shards(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!', '2', '2'); SELECT master_create_worker_shards(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!', '2', '2');
-- Verify that quoting is used in shard_name
SELECT shard_name(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!'::regclass, min(shardid))
FROM pg_dist_shard
WHERE logicalrelid = U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!'::regclass;
\c - - - :worker_1_port \c - - - :worker_1_port
\d elephant_* \d elephant_*
\c - - - :master_port \c - - - :master_port
-- Verify that the shard_name UDF supports schemas
CREATE SCHEMA multi_name_lengths;
CREATE TABLE multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890 (
col1 integer not null,
col2 integer not null);
SELECT master_create_distributed_table('multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890', 'col1', 'hash');
SELECT master_create_worker_shards('multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890', 2, 1);
SELECT shard_name('multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890'::regclass, min(shardid))
FROM pg_dist_shard
WHERE logicalrelid = 'multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890'::regclass;
DROP TABLE multi_name_lengths.too_long_12345678901234567890123456789012345678901234567890;
-- Clean up. -- Clean up.
DROP TABLE name_lengths CASCADE; DROP TABLE name_lengths CASCADE;
DROP TABLE U&"elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D" UESCAPE '!' CASCADE; DROP TABLE U&"elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D" UESCAPE '!' CASCADE;