Я тут решил реализовать один инструмент, использующий SqlDB, в частности, функции подстановки значения переменной в запрос, который содержит путь к переменной после символа
:. Например:
Код:
delete from divisions where id = :PrivMod.rec.id
При этом, я подставлял значение в rec типа ANYPTR свой конкретный объект.
Однако процедура SqlDB.Compile использует Meta.LookupPath, которая не поддерживает проход по таким абстрактным записям.
Как одно из решений можно предложить такой патч.
В процедуре Meta.LookupPath заменить:
Код:
IF i.typ = recTyp THEN i.Lookup(name, i) ELSE SetUndef(i) END
на
Код:
CASE i.typ OF
recTyp:
i.Lookup(name, i)
|ptrTyp, anyPtrTyp:
i.Deref(i);
ASSERT(i.obj=varObj, 40);
i.Lookup(name, i)
ELSE
SetUndef(i)
END
Нехорошо это, конечно, патчить такие важные модули. Возможно, выгоднее будет пропатчить SqlDB, тогда данный патч можно рассматривать, как доказательство предположения о неполноте процедуры LookupPath. Проблема в том, что ни тот ни другой модуль нельзя просто так выкинуть и заменить на новый.