!1922 为了从oracle迁移后用户名不发生变化,用户名支持井号
Merge pull request !1922 from zzy/master
This commit is contained in:
@ -227,6 +227,7 @@ static void check_outarg_info(const bool *have_assigend,
|
||||
const char *argmodes,const int proargnum);
|
||||
bool IsValidIdentClientKey(const char *input);
|
||||
bool IsValidIdent(char *input);
|
||||
bool IsValidIdentUsername(char *input);
|
||||
bool IsValidGroupname(const char *input);
|
||||
static void ParseUpdateMultiSet(List *set_target_list, SelectStmt *stmt, core_yyscan_t yyscanner);
|
||||
static char *GetTargetFuncArgTypeName(char *typeString, TypeName* t);
|
||||
@ -1237,7 +1238,7 @@ CreateRoleStmt:
|
||||
CreateRoleStmt *n = makeNode(CreateRoleStmt);
|
||||
n->stmt_type = ROLESTMT_ROLE;
|
||||
if (!isRestoreMode)
|
||||
IsValidIdent($3);
|
||||
IsValidIdentUsername($3);
|
||||
n->role = $3;
|
||||
n->options = $5;
|
||||
$$ = (Node *)n;
|
||||
@ -1555,7 +1556,7 @@ CreateUserStmt:
|
||||
{
|
||||
CreateRoleStmt *n = makeNode(CreateRoleStmt);
|
||||
n->stmt_type = ROLESTMT_USER;
|
||||
IsValidIdent($3);
|
||||
IsValidIdentUsername($3);
|
||||
n->role = $3;
|
||||
n->options = $5;
|
||||
$$ = (Node *)n;
|
||||
@ -14237,7 +14238,7 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
|
||||
RenameStmt *n = makeNode(RenameStmt);
|
||||
n->renameType = OBJECT_ROLE;
|
||||
n->subname = $3;
|
||||
IsValidIdent($6);
|
||||
IsValidIdentUsername($6);
|
||||
n->newname = $6;
|
||||
n->missing_ok = false;
|
||||
$$ = (Node *)n;
|
||||
@ -14247,7 +14248,7 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
|
||||
RenameStmt *n = makeNode(RenameStmt);
|
||||
n->renameType = OBJECT_USER;
|
||||
n->subname = $3;
|
||||
IsValidIdent($6);
|
||||
IsValidIdentUsername($6);
|
||||
n->newname = $6;
|
||||
n->missing_ok = false;
|
||||
$$ = (Node *)n;
|
||||
@ -26196,6 +26197,42 @@ IsValidIdent(char *input)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* judge if username is valid
|
||||
* Only letters, numbers, dollar signs ($), number signs (#) and the underscore are allowed in name
|
||||
* and The first character must be letter or underscore
|
||||
*/
|
||||
bool
|
||||
IsValidIdentUsername(char *input)
|
||||
{
|
||||
char c = input[0];
|
||||
/*The first character id numbers or dollar*/
|
||||
if ((c >= '0' && c <= '9') || c == '$')
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid name: %s", input)));
|
||||
return false;
|
||||
}
|
||||
|
||||
int len = strlen(input);
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
c = input[i];
|
||||
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_' || c == '$' || c == '#')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid name: %s", input)));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* judge if node group name is valid
|
||||
* Only ASCII character set is allowed in group name
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user