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.
exprTypmod(Node *expr)
        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;

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