UniCommand различия для UniData - PullRequest
       33

UniCommand различия для UniData

1 голос
/ 09 сентября 2009

Я новичок в мире UniObjects, так как я был на .NET земле с момента его дебюта. После создания простого приложения, возвращающего список выбора оператора UniCommand, я заметил, что существуют некоторые существенные различия в том, как UniData и как UniObjects анализируют оценки UniCommand. Из того, что я обнаружил, похоже, что это различия в вкусе используемого PICK.

Я спрашиваю других программистов UniObjects (UniVerse или UniData), которые знают о различиях или знают о командах, которые можно выполнить, чтобы перечислить их здесь. Я спрашиваю об этом, потому что документацию о том, что может и не может быть командой, очень сложно найти.

Вот пример: (оба возвращают одинаковые результаты из одного и того же источника)

Что мы будем вводить в UniData: (ошибка парсера, если дано в UniCommand)

  • ВЫБРАТЬ ЦВЕТА = "СИНИЙ" *

Что следует ввести в UniCommand UniObject:

  • ВЫБРАТЬ ЦВЕТА С @ID, КАК "BLU ..."

Обратите внимание, что подстановочный знак UniData - это «]» (квадратная скобка), где UniCommand - это «...» (elipsis). Также обратите внимание, как UniData принимает оператор равенства и как UniCommand использует оператор LIKE и WITH.

Также, если у кого-либо есть ссылка на документ по всем доступным командам, он также может опубликовать его здесь.

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Команда ECLTYPE "U" работает с интерактивным сеансом из TCL, но я вижу, как сложно было бы постоянно установить из UniObjects.

Уловка из уст в уста из уст в уста, которую удобно знать, это глаголы в нижнем регистре всегда выполняются как ECLTYPE U. Таким образом, вы получите желаемое поведение, независимо от вида счет. Так что это должно работать нормально:

select COLORS WITH @ID LIKE "BLU..."
2 голосов
/ 09 сентября 2009

Различия, которые вы описываете, - это различия в ECLTYPE в UniData, который полностью независим от UniObjects. Если вы установите для ECLTYPE вашей учетной записи UniData значение «U», он примет синтаксис:

SELECT COLORS WITH @ID LIKE "BLU..."

Если вы установите ECLTYPE на «P», он примет синтаксис:

SELECT COLORS = "BLU]"

Состояния документации UniObjects для .NET:

"В системах UniData ECLTYPE U Лучший. Вы можете столкнуться с вариациями с другими ECLTYPE или UDT.OPTIONS Настройки ".

Из документации мне не ясно, выполняются ли UniCommands неизменно с использованием ECLTYPE "U" или есть параметр, позволяющий вам настроить тип анализатора. Вы можете попробовать выполнить команду ECLTYPE "P" из сеанса UniObjects, а затем посмотреть, анализируются ли последующие UniCommands с синтаксисом «P» как таковые.

2 голосов
/ 09 сентября 2009

Проблема в том, что ваша среда Unidata настроена на синтаксический анализ команд с анализатором PICK, но объект UniCommand выполняет собственный анализатор Unidata. (Синтаксис LIKE и ... взят из основного режима Unidata, который смоделирован из Prime Information.)

Я искал свойство в UniSession или UniCommand, которое могло бы изменить синтаксический анализатор, который используется для метода Execute, но не нашел его. Тем не менее, документация UniCommand гласит, что это эквивалентно основному утверждению EXECUTE. Эта и некоторые команды UDT.OPTIONS могут открыть путь к обходному пути, который позволит вам использовать синтаксис команды PICK, даже если UniObjects не поддерживает его напрямую.

Команда EXECUTE Unidata может принимать несколько команд, разделенных @AMs, и будет выполнять их одну за другой, возвращая только после того, как все будут обработаны. (Это что-то вроде минипроцесса.) Итак, соберите вашу команду, по крайней мере, с командой «UDT.OPTIONS 2 ON» в атрибуте 1, за которой следуют любые другие, которые вам могут понадобиться, и, наконец, желаемая команда PICK в последней приписывать. Затем отправьте всю связку одновременно с помощью метода Execute вашего объекта UniCommand.


Документация для UDT.OPTIONS 2 выглядит следующим образом:

Determines the parser the system uses to interpret UniQuery commands.
    ON System uses the Pick® parser.
    OFF System uses the UniData parser.

Существует несколько других UDT.OPTIONS, связанных с совместимостью PICK. Посмотрите документы, в частности файл udto.pdf, в разделе «Совместимость Pick®».


Все это говорит о том, что когда я использую UniObjects, я использовал его только для вызова базовых подпрограмм и обработки всего остального в подпрограммах на стороне сервера.

РЕДАКТИРОВАТЬ: Пример кода C #

UniSession s = UniObjects.OpenSession("machine", "user", "password", "/path/to/account", "udcs");
UniCommand c = s.CreateUniCommand();
c.Command = "UDT.OPTIONS 2 ON" + "\xfe" + "SELECT COLORS = \"BLU]\"";
c.Execute();

"\ xfe" является меткой атрибута. (Это CHAR (254) в разговорной речи.) Надеюсь, это поможет.

...