mirror of https://github.com/citusdata/citus.git
GetFunctionAlterOwnerCommand: use format_procedure_qualified
distributed_functions: test a function with a quote in name AppendDefElemSet: quote variable namespull/3227/head
parent
a81e6a81ab
commit
3c10c27b13
|
@ -618,29 +618,10 @@ GetFunctionAlterOwnerCommand(const RegProcedure funcOid)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set search_path to NIL so that all objects outside of pg_catalog will be
|
* If the function exists we want to use format_procedure_qualified to
|
||||||
* schema-prefixed. pg_catalog will be added automatically when we call
|
|
||||||
* PushOverrideSearchPath(), since we set addCatalog to true;
|
|
||||||
*/
|
|
||||||
OverrideSearchPath *overridePath = GetOverrideSearchPath(CurrentMemoryContext);
|
|
||||||
overridePath->schemas = NIL;
|
|
||||||
overridePath->addCatalog = true;
|
|
||||||
|
|
||||||
PushOverrideSearchPath(overridePath);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the function exists we want to use pg_get_function_identity_arguments to
|
|
||||||
* serialize its canonical arguments
|
* serialize its canonical arguments
|
||||||
*/
|
*/
|
||||||
Datum functionSignatureDatum =
|
char *functionSignature = format_procedure_qualified(funcOid);
|
||||||
DirectFunctionCall1(regprocedureout, ObjectIdGetDatum(funcOid));
|
|
||||||
|
|
||||||
/* revert back to original search_path */
|
|
||||||
PopOverrideSearchPath();
|
|
||||||
|
|
||||||
/* regprocedureout returns cstring */
|
|
||||||
char *functionSignature = DatumGetCString(functionSignatureDatum);
|
|
||||||
|
|
||||||
char *functionOwner = GetUserNameFromId(procOwner, false);
|
char *functionOwner = GetUserNameFromId(procOwner, false);
|
||||||
|
|
||||||
appendStringInfo(alterCommand, "ALTER %s %s OWNER TO %s;",
|
appendStringInfo(alterCommand, "ALTER %s %s OWNER TO %s;",
|
||||||
|
|
|
@ -274,25 +274,27 @@ AppendDefElemSet(StringInfo buf, DefElem *def)
|
||||||
{
|
{
|
||||||
case VAR_SET_VALUE:
|
case VAR_SET_VALUE:
|
||||||
{
|
{
|
||||||
appendStringInfo(buf, " SET %s = %s", setStmt->name, setVariableArgs);
|
appendStringInfo(buf, " SET %s = %s", quote_identifier(setStmt->name),
|
||||||
|
setVariableArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VAR_SET_CURRENT:
|
case VAR_SET_CURRENT:
|
||||||
{
|
{
|
||||||
appendStringInfo(buf, " SET %s FROM CURRENT", setStmt->name);
|
appendStringInfo(buf, " SET %s FROM CURRENT", quote_identifier(
|
||||||
|
setStmt->name));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VAR_SET_DEFAULT:
|
case VAR_SET_DEFAULT:
|
||||||
{
|
{
|
||||||
appendStringInfo(buf, " SET %s TO DEFAULT", setStmt->name);
|
appendStringInfo(buf, " SET %s TO DEFAULT", quote_identifier(setStmt->name));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VAR_RESET:
|
case VAR_RESET:
|
||||||
{
|
{
|
||||||
appendStringInfo(buf, " RESET %s", setStmt->name);
|
appendStringInfo(buf, " RESET %s", quote_identifier(setStmt->name));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ CREATE FUNCTION add_without_param_names(integer, integer) RETURNS integer
|
||||||
LANGUAGE SQL
|
LANGUAGE SQL
|
||||||
IMMUTABLE
|
IMMUTABLE
|
||||||
RETURNS NULL ON NULL INPUT;
|
RETURNS NULL ON NULL INPUT;
|
||||||
CREATE FUNCTION add_mixed_param_names(integer, val1 integer) RETURNS integer
|
CREATE FUNCTION "add_mi'xed_param_names"(integer, "va'l1" integer) RETURNS integer
|
||||||
AS 'select $1 + $2;'
|
AS 'select $1 + $2;'
|
||||||
LANGUAGE SQL
|
LANGUAGE SQL
|
||||||
IMMUTABLE
|
IMMUTABLE
|
||||||
|
@ -168,21 +168,21 @@ select bool_or(hasmetadata) from pg_dist_node WHERE isactive AND noderole = 'pr
|
||||||
|
|
||||||
-- if not paremeters are supplied, we'd see that function doesn't have
|
-- if not paremeters are supplied, we'd see that function doesn't have
|
||||||
-- distribution_argument_index and colocationid
|
-- distribution_argument_index and colocationid
|
||||||
SELECT create_distributed_function('add_mixed_param_names(int, int)');
|
SELECT create_distributed_function('"add_mi''xed_param_names"(int, int)');
|
||||||
create_distributed_function
|
create_distributed_function
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT distribution_argument_index is NULL, colocationid is NULL from citus.pg_dist_object
|
SELECT distribution_argument_index is NULL, colocationid is NULL from citus.pg_dist_object
|
||||||
WHERE objid = 'add_mixed_param_names(int, int)'::regprocedure;
|
WHERE objid = 'add_mi''xed_param_names(int, int)'::regprocedure;
|
||||||
?column? | ?column?
|
?column? | ?column?
|
||||||
----------+----------
|
----------+----------
|
||||||
t | t
|
t | t
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- also show that we can use the function
|
-- also show that we can use the function
|
||||||
SELECT * FROM run_command_on_workers('SELECT function_tests.add_mixed_param_names(2,3);') ORDER BY 1,2;
|
SELECT * FROM run_command_on_workers('SELECT function_tests."add_mi''xed_param_names"(2,3);') ORDER BY 1,2;
|
||||||
nodename | nodeport | success | result
|
nodename | nodeport | success | result
|
||||||
-----------+----------+---------+--------
|
-----------+----------+---------+--------
|
||||||
localhost | 57637 | t | 5
|
localhost | 57637 | t | 5
|
||||||
|
@ -510,7 +510,7 @@ SELECT create_distributed_function('add_with_param_names(int, int)', '$3');
|
||||||
ERROR: cannot distribute the function "add_with_param_names" since the distribution argument is not valid
|
ERROR: cannot distribute the function "add_with_param_names" since the distribution argument is not valid
|
||||||
HINT: Either provide a valid function argument name or a valid "$paramIndex" to create_distributed_function()
|
HINT: Either provide a valid function argument name or a valid "$paramIndex" to create_distributed_function()
|
||||||
SELECT create_distributed_function('add_with_param_names(int, int)', '$1a');
|
SELECT create_distributed_function('add_with_param_names(int, int)', '$1a');
|
||||||
ERROR: invalid input syntax for integer: "1a"
|
ERROR: invalid input syntax for type integer: "1a"
|
||||||
-- non existing column name
|
-- non existing column name
|
||||||
SELECT create_distributed_function('add_with_param_names(int, int)', 'aaa');
|
SELECT create_distributed_function('add_with_param_names(int, int)', 'aaa');
|
||||||
ERROR: cannot distribute the function "add_with_param_names" since the distribution argument is not valid
|
ERROR: cannot distribute the function "add_with_param_names" since the distribution argument is not valid
|
||||||
|
|
|
@ -73,7 +73,7 @@ CREATE FUNCTION add_without_param_names(integer, integer) RETURNS integer
|
||||||
IMMUTABLE
|
IMMUTABLE
|
||||||
RETURNS NULL ON NULL INPUT;
|
RETURNS NULL ON NULL INPUT;
|
||||||
|
|
||||||
CREATE FUNCTION add_mixed_param_names(integer, val1 integer) RETURNS integer
|
CREATE FUNCTION "add_mi'xed_param_names"(integer, "va'l1" integer) RETURNS integer
|
||||||
AS 'select $1 + $2;'
|
AS 'select $1 + $2;'
|
||||||
LANGUAGE SQL
|
LANGUAGE SQL
|
||||||
IMMUTABLE
|
IMMUTABLE
|
||||||
|
@ -170,12 +170,12 @@ select bool_or(hasmetadata) from pg_dist_node WHERE isactive AND noderole = 'pr
|
||||||
|
|
||||||
-- if not paremeters are supplied, we'd see that function doesn't have
|
-- if not paremeters are supplied, we'd see that function doesn't have
|
||||||
-- distribution_argument_index and colocationid
|
-- distribution_argument_index and colocationid
|
||||||
SELECT create_distributed_function('add_mixed_param_names(int, int)');
|
SELECT create_distributed_function('"add_mi''xed_param_names"(int, int)');
|
||||||
SELECT distribution_argument_index is NULL, colocationid is NULL from citus.pg_dist_object
|
SELECT distribution_argument_index is NULL, colocationid is NULL from citus.pg_dist_object
|
||||||
WHERE objid = 'add_mixed_param_names(int, int)'::regprocedure;
|
WHERE objid = 'add_mi''xed_param_names(int, int)'::regprocedure;
|
||||||
|
|
||||||
-- also show that we can use the function
|
-- also show that we can use the function
|
||||||
SELECT * FROM run_command_on_workers('SELECT function_tests.add_mixed_param_names(2,3);') ORDER BY 1,2;
|
SELECT * FROM run_command_on_workers('SELECT function_tests."add_mi''xed_param_names"(2,3);') ORDER BY 1,2;
|
||||||
|
|
||||||
-- make sure that none of the active and primary nodes hasmetadata
|
-- make sure that none of the active and primary nodes hasmetadata
|
||||||
-- since the function doesn't have a parameter
|
-- since the function doesn't have a parameter
|
||||||
|
|
Loading…
Reference in New Issue