Re: I/O support for composite types

Поиск
Список
Период
Сортировка
От Thomas Hallgren
Тема Re: I/O support for composite types
Дата
Msg-id 40C214BA.60200@mailblocks.com
обсуждение исходный текст
Ответ на I/O support for composite types  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: I/O support for composite types  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Tom Lane wrote:
> I am inclined to define this similarly to the representation for arrays;
> however, we need to allow for NULLs.  I suggest
> 
>     {item,item,item}
> 
> The separator is always comma (it can't be type-specific since the items
> might have different types).  Backslashes and double quotes can be used
> in the usual ways to quote characters in the item strings.  If an item
> string is completely empty it is taken as NULL; to write an actual
> empty-string value, you must write "".  There is an ambiguity whether
> '{}' represents a zero-column row or a one-column row containing a NULL,
> but I don't think this is a problem since the input converter will
> always know how many columns it is expecting.
> 
> There are a couple of fine points of the array I/O behavior that I think
> we should not emulate.  One is that leading whitespace in an item string
> is discarded.  This seems inconsistent, mainly because trailing
> whitespace isn't discarded.  In the cases where it really makes sense to
> discard whitespace (namely numeric datatypes), the underlying datatype's
> input converter can do that just fine, and so I suggest that the record
> converter itself should not discard whitespace.  It seems OK to ignore
> whitespace before and after the outer braces, however.
> 
> The other fine point has to do with double quoting.  In the array code,
>     {a"b""c"d}
> is legal input representing an item 'abcd'.  I think it would be more
> consistent with usual SQL conventions to treat it as meaning 'ab"cd',
> that is a doubled double quote within double quotes should represent a
> double quote not nothing.  Anyone have a strong feeling one way or the
> other?

Why not use standard C semantics for the textual representation with 
your addition that empty items are NULL? It becomes fairly stright 
forward, IMO highly readable, and the rules to define both arrays and 
complex types are well known and documented.

Here's an array of two composite elements of the same type. The last two 
items of the second element is NULL. The type is {int, double, string, char}

{  {12, 123.4, "some string with \"a qouted string\" inside of it", 'c'},  {13, -3.2,,}
}

This will also allow you to distinguish strings from identifiers. That 
might prove extremely important if you ever plan to serialize self 
referencing structures (a structure could then represent itself as 
ref_<oid> or something and thereby refer to itself).

Kind regards,

Thomas Hallgren



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: Official Freeze Date for 7.5: July 1st, 2004
Следующее
От: Tom Lane
Дата:
Сообщение: Re: I/O support for composite types