OberonCore
https://forum.oberoncore.ru/

SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF CHAR
https://forum.oberoncore.ru/viewtopic.php?f=131&t=2711
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Вторник, 22 Июнь, 2010 15:01 ]
Заголовок сообщения:  SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF CHAR

Sql/Docu/DB писал(а):
PROCEDURE (t: Table) Read (row: INTEGER; VAR data: ANYREC)
NEW, ABSTRACT
Reads the row'th row of the result table into the interactor data.
... Pointers must not be NIL with the exception of POINTER TO ARRAY OF CHAR. If such a pointer is NIL or the bound array is too small to receive the corresponding string, a new array of suitable length is allocated automatically...
Говорится, что новый литерный массив создаётся автоматически если исходный либо NIL, либо неподходяще малого размера.

Однако, абстрактный интерфейс SqlDrivers таков, что массивы будут создаваться всегда
Цитата:
DEFINITION SqlDrivers;

...
String = POINTER TO ARRAY OF CHAR;

Table = POINTER TO ABSTRACT RECORD
...
(t: Table) ReadVarString (row, column: INTEGER; OUT str: String), NEW, ABSTRACT
END;
В SqlOdbc3.Table.ReadVarString есть замечание:
Цитата:
IF str = NIL THEN NEW(str, 1) END; (* allow recycling of string by making parameter a VAR again? *)
Т.е. так было сделано специально. Есть мысли, почему?

Автор:  Сергей Губанов [ Вторник, 22 Июнь, 2010 17:15 ]
Заголовок сообщения:  Re: SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF

Введение OUT-ссылки в язык было ошибкой: проконтролировать либо невозможно, либо надо поменять язык так, что станет не эффективно (как в C#). Вон в Обероне-07 есть только VAR и CONST ссылки и это правильно.

Автор:  Борис Рюмшин [ Вторник, 22 Июнь, 2010 18:09 ]
Заголовок сообщения:  Re: SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF

Нда, пожалуй...
но у меня такое подозрение, что IN и OUT чисто косметический эффект имеют, а так - оба эквивалент VAR... можно в компилятор глянуть.

Автор:  Евгений Темиргалеев [ Вторник, 22 Июнь, 2010 18:12 ]
Заголовок сообщения:  Re: SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF

OUT указатели зануляются

дописал:
IN - косметич. экв-н VAR (CONST в О7)
OUT - приводит к генерации доп. кода (инициализация указателей нулями), поэтому не эквив-н.

С тем, что без неявных занулейний лучше и достаточно только CONST/VAR - согласен. Уже наступал на грабли, когда ожидал зануления OUT BOOLEAN-а

Автор:  Борис Рюмшин [ Вторник, 22 Июнь, 2010 18:16 ]
Заголовок сообщения:  Re: SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF

При входе?
Тогда проверка может быть на NIL при выходе, в принципе... это не накладно.

Автор:  Сергей Губанов [ Среда, 23 Июнь, 2010 11:49 ]
Заголовок сообщения:  Re: SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF

Зачем рантаймовая проверка на NIL при выходе?

Автор:  Илья Ермаков [ Среда, 23 Июнь, 2010 12:02 ]
Заголовок сообщения:  Re: SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF

Не понял, для чего.

NIL - одно из допустимых значений указателя.
Значит, через OUT-параметр я имею право вернуть и NIL, в том числе. Более того, многие процедуры так и делают (CommStreams.NewStream, например).

Автор:  igor [ Среда, 23 Июнь, 2010 13:29 ]
Заголовок сообщения:  Re: SqlDB: Особ-ть чт-я из табл. в интерактор PTR TO ARR OF

Наверное следует пояснить, что в общем случае процедуре не всегда удаётся создать объект, который следует вернуть в OUT-параметре. В этом случае процедура вернёт NIL. Проверка может понадобиться в вызывающем блоке, после вызова процедуры.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/