barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком DQL. Показать все сообщения
Показаны сообщения с ярлыком DQL. Показать все сообщения

понедельник, 20 мая 2013 г.

Утилита для выполнения DQL

Для тех, кому надоело выполнять DQL через DA, рекомендую бесплатную утилиту dqMan (http://www.fme.de/en/industry-sectors/solutions/dqman/). Для работы утилите требуется библиотека dmcl40.dll и dmcl.ini с настройками репозитория (берутся из установки Documentum DFC).

PS Поспешил немного с рекомендацией. Заставить это чудо корректно отображать русские символы в результатах select'а у меня не получилось, правка dmcl.ini не помогает, отображаются кракозябры. Да и вообще теперь оно у меня падает почему-то сразу после логина в репозитории, хотя я ничего ни в каких конфигах не менял.

пятница, 28 декабря 2012 г.

DQL: использование объединений типов и повторяющихся атрибутов в запросе

Если просто попробовать использовать в запросе несколько типов в объединении и выбирать при этом какой-нибудь повторяющийся атрибут (например, тот же "i_folder_id"), будет валится ошибка:
[DM_QUERY2_E_REPEAT_TYPE_JOIN]error: "Your query is selecting repeating attributes and joining types."
Выход - добавить в конец запроса "ENABLE (ROW_BASED)", тогда для каждого значения повторяющегося атрибута будет возвращена отдельная строка, и запрос выполнится без ошибок (но приведет, возможно, к дублированию одих и тех же объектов в разных строках).

пятница, 14 декабря 2012 г.

DQL: сравнение дат

Задача:

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

Решение:

Использовать функцию DATEFLOOR, например:
SELECT * FROM xxx WHERE DATEFLOOR(day,my_date_attr) = DATEFLOOR(day,DATE('12-12-2012'))
Нужно учитывать, что DATEFLOOR осуществляет округление до времени 00:00:00 по GMT, т.е. если текущий часовой пояс GMT+4, то DATEFLOOR(day,DATE('12-12-2012')) вернет не '12-12-2012 00:00:00', а '12-12-2012 04:00:00'. 

среда, 5 декабря 2012 г.

DFC: получение идентификатора объекта, созданного с помощью CREATE DQL-запроса

При выполнении CREATE DQL-запроса с помощью DfQuery идентификатор объекта возвращается как аттрибут "object_created" единственной строки результирующей коллекции:
IDfCollection col = query.execute(session, DfQuery.DF_QUERY);
col.next();
IDfId newId = col.getId("object_created");