Re: Extending SQL in C using VARIABLE length type

Поиск
Список
Период
Сортировка
От Carsten Kropf
Тема Re: Extending SQL in C using VARIABLE length type
Дата
Msg-id 3212D811-1E14-4D8F-B2F0-BF3B47774E2D@fh-hof.de
обсуждение исходный текст
Ответ на Re: Extending SQL in C using VARIABLE length type  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
Thanks for this hint, I already got it to work in the meantime.
My approach now (based on the fact, that PointND is indeed a variable length type) is to have the following structure:
struct Range
{
    int vl_len_;
    struct PointND limits[1];
};
whereas now vl_len_ stores the total size of the structure (including the size of the limiting points) and the points
themselveskeep the layout contained in one of my previous mails. 
I programmed some macros to access the lower point (limits[0]) and the upper point (limits[1]), respectively.
This approach works also when putting it into a table, whereas it will not be like this, if I will be doing the whole
thingfor productive implementation. Each of the two points contains a vl_len_ field and a dimension field whereas the
dimensionshave to be the same for each point. So, according the storage of the range structure, this would yield an
overheadof 2 * vl_len_ and once the dimension field each of which is int32. So, in total, we would have an overhead of
12Bytes for each Range stored somewhere compared to a Range that has just one-dimensional offsets to show the
upper/lowerbound, as seen in cube. 
regards
    Carsten Kropf
Am 11.02.2010 um 16:39 schrieb Tom Lane:

> Carsten Kropf <ckropf2@fh-hof.de> writes:
>> Thanks a lot so far. I adopted my structures and am now storing two fields (v_len_ and dimensions) and the storage
isnow working properly. If I now would try to combine two of these points to a range (like cube) including an upper and
alower bound n-dimensional point structure, I don't get the point how to achieve this. 
>
> Well, you can either make that a separate data type with its own
> specialized functions for extracting the points, or you can make it into
> an array, or possibly a composite type (record).  The example code seems
> to be headed towards the first of these but maybe you should consider
> the alternatives.
>
> The main problem with your example code seems to be that it's confusing
> a struct with a pointer to a struct.  If you made the struct members
> be "struct PointND" rather than pointer to same, it would probably
> work, as long as points aren't actually variable-length.  Otherwise
> you'd need to deal with the fact that "lower" isn't really at a fixed
> offset in the larger struct.
>
>             regards, tom lane
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general


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

Предыдущее
От: "Greg Sabino Mullane"
Дата:
Сообщение: Re: Versions RSS page is missing version(s)
Следующее
От: Moe
Дата:
Сообщение: Re: Searching a DB index.. possible?