• Andres Freund's avatar
    Make StringInfo available to frontend code. · 26aaf97b
    Andres Freund authored
    There's plenty places in frontend code that could benefit from a
    string buffer implementation. Some because it yields simpler and
    faster code, and some others because of the desire to share code
    between backend and frontend.
    
    While there is a string buffer implementation available to frontend
    code, libpq's PQExpBuffer, it is clunkier than stringinfo, it
    introduces a libpq dependency, doesn't allow for sharing between
    frontend and backend code, and has a higher API/ABI stability
    requirement due to being exposed via libpq.
    
    Therefore it seems best to just making StringInfo being usable by
    frontend code. There's not much to do for that, except for rewriting
    two subsequent elog/ereport calls into others types of error
    reporting, and deciding on a maximum string length.
    
    For the maximum string size I decided to privately define MaxAllocSize
    to the same value as used in the backend. It seems likely that we'll
    want to reconsider this for both backend and frontend code in the not
    too far away future.
    
    For now I've left stringinfo.h in lib/, rather than common/, to reduce
    the likelihood of unnecessary breakage. We could alternatively decide
    to provide a redirecting stringinfo.h in lib/, or just not provide
    compatibility.
    
    Author: Andres Freund
    Reviewed-By: Kyotaro Horiguchi, Daniel Gustafsson
    Discussion: https://postgr.es/m/20190920051857.2fhnvhvx4qdddviz@alap3.anarazel.de
    26aaf97b
stringinfo.c 8.5 KB