I'm working on user-defined typmod and try to move all typmod calculations into type-specific functions. But there is a strange place:

/*
 *  exprTypmod -
 *    returns the type-specific attrmod of the expression, if it can be
 *    determined.  In most cases, it can't and we return -1.
 */
int32
exprTypmod(Node *expr)
{
<skip>
        case T_Const:
            {
                /* Be smart about string constants... */
                Const      *con = (Const *) expr;

                switch (con->consttype)
                {
                    case BPCHAROID:
                        if (!con->constisnull)
                        {
int32 len = VARSIZE(DatumGetPointer(con->constvalue)) - VARHDRSZ;

                            /* if multi-byte, take len and find # characters */
                            if (pg_database_encoding_max_length() > 1)
len = pg_mbstrlen_with_len(VARDATA(DatumGetPointer(con->constvalue)), len);
                            return len + VARHDRSZ;
                        }
                        break;
                    default:
                        break;
                }
            }
            break;


So, I can't understand why it's needed at all. First, it's returns length as typmod, second, it looks like optimization, but I don't believe in significant benefits... It's a constant coming from query. Am I missing something?



--
Teodor Sigaev                                   E-mail: [EMAIL PROTECTED]
                                                   WWW: http://www.sigaev.ru/

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to