postgres.git / summary / log / commit / refs

commit    9d1f44113dd82773e95f15061ad4bf2ad7acf4ce
Author:   Itagaki Takahiro <itagaki.takahiro@gmail.com>
Date:     Thu Jun 03 09:45:47 2010 +0000
First released in: 9.0.0, 8.0.26, 8.1.22, 8.2.18, 8.3.12, 8.4.5

    Fix dblink to treat connection names longer than NAMEDATALEN-2 (62 bytes).
    Now long names are adjusted with truncate_identifier() and NOTICE messages
    are raised if names are actually truncated.
    
    Backported to release 8.0.


contrib/dblink/dblink.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 256bcad41cd..b239ba33163 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -48,6 +48,7 @@ #include "nodes/execnodes.h" #include "nodes/pg_list.h" #include "parser/parse_type.h" +#include "parser/scansup.h" #include "tcop/tcopprot.h" #include "utils/builtins.h" #include "utils/fmgroids.h" @@ -2075,13 +2076,13 @@ static remoteConn * getConnectionByName(const char *name) { remoteConnHashEnt *hentry; - char key[NAMEDATALEN]; + char *key; if (!remoteConnHash) remoteConnHash = createConnHash(); - MemSet(key, 0, NAMEDATALEN); - snprintf(key, NAMEDATALEN - 1, "%s", name); + key = pstrdup(name); + truncate_identifier(key, strlen(key), true); hentry = (remoteConnHashEnt *) hash_search(remoteConnHash, key, HASH_FIND, NULL); @@ -2107,13 +2108,13 @@ createNewConnection(const char *name, remoteConn * con) { remoteConnHashEnt *hentry; bool found; - char key[NAMEDATALEN]; + char *key; if (!remoteConnHash) remoteConnHash = createConnHash(); - MemSet(key, 0, NAMEDATALEN); - snprintf(key, NAMEDATALEN - 1, "%s", name); + key = pstrdup(name); + truncate_identifier(key, strlen(key), true); hentry = (remoteConnHashEnt *) hash_search(remoteConnHash, key, HASH_ENTER, &found); @@ -2136,14 +2137,13 @@ deleteConnection(const char *name) { remoteConnHashEnt *hentry; bool found; - char key[NAMEDATALEN]; + char *key; if (!remoteConnHash) remoteConnHash = createConnHash(); - MemSet(key, 0, NAMEDATALEN); - snprintf(key, NAMEDATALEN - 1, "%s", name); - + key = pstrdup(name); + truncate_identifier(key, strlen(key), true); hentry = (remoteConnHashEnt *) hash_search(remoteConnHash, key, HASH_REMOVE, &found); [parent: de57ea162c78]