hi. + if (stmt->collClause) + collation = LookupCollation(pstate, + stmt->collClause->collname, + stmt->collClause->location); + else + collation = typcollation;;
two semi-colon. should be only one. ------------------<<>>>--------------- + /* locks the variable with an AccessShareLock */ + varid = IdentifyVariable(names, &attrname, ¬_unique, false); + if (not_unique) + ereport(ERROR, + (errcode(ERRCODE_AMBIGUOUS_PARAMETER), + errmsg("target \"%s\" of LET command is ambiguous", + NameListToString(names)), + parser_errposition(pstate, stmt->location))); the following are tests for the above "LET command is ambiguous" error message. create schema test; CREATE TYPE test AS (test int); CREATE variable test.test as test; set search_path to test; let test.test = 1; ------------------<<>>>--------------- + else + { + /* the last field of list can be star too */ + Assert(IsA(field2, A_Star)); + + /* + * In this case, the field1 should be variable name. But + * direct unboxing of composite session variables is not + * supported now, and then we don't need to try lookup + * related variable. + * + * Unboxing is supported by syntax (var).* + */ + return InvalidOid; + } I don't fully understand the above comments, add `elog(INFO, "%s:%d called", __FILE__, __LINE__); ` within the ELSE branch. Then I found out the ELSE branch doesn't have coverage tests. ------------------<<>>>--------------- + /* + * a.b.c can mean catalog.schema.variable or + * schema.variable.field. .... + /* + * a.b can mean "schema"."variable" or "variable"."field". + * Check both variants, and returns InvalidOid with + * not_unique flag, when both interpretations are + * possible. + */ here, we use the word "field", but the function IdentifyVariable above comment, we use word "attribute", for consistency's sake, we should use "attribute" instead of "field" +/* ----- + * IdentifyVariable - try to find a variable from a list of identifiers + * + * Returns the OID of the variable found, or InvalidOid. + * + * "names" is a list of up to four identifiers; possible meanings are: + * - variable (searched on the search_path) + * - schema.variable + * - variable.attribute (searched on the search_path) + * - schema.variable.attribute + * - database.schema.variable + * - database.schema.variable.attribute ------------------<<>>>---------------