Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как получить структуру БД (Cache+Java) / 8 сообщений из 8, страница 1 из 1
27.11.2007, 19:42
    #34969943
Igor3T
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
Как можно получить структуру базы из явы? Или хотябы список классов.

Для чего это нужно: хочу написать универсальный поиск для базы Cache, т.е., грубо говоря, мое окошко поиска само формирует интерфейс для поиска, и осуществляет поиск по введенным параметрам. Это работает. Но хотелось бы чтобы оно еще и посмотрело какие классы есть в базе и добавило их в список для выбора.
...
Рейтинг: 0 / 0
27.11.2007, 21:07
    #34970103
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
посмотрите доку к классу %Dictionary.CompiledClass в этом %Persistent классе содержится описание всех классов, select * from %Dictionary.CompiledClass выдаст вам все (включая системные классы), надо будет ограничить c помощью Where Super %Like '%Persistent%' и "внаглую". Однако тут могут быть упущены классы которые наследованы от других хранимых классов, в этом случае у них в Super будет стоять имя вашего класса родителя. В общем универсальный запрос для хранимых классов, лично я, составить не могу. Однако копать, я думаю, надо в %Dictionary.CompiledClass (там же кстати есть ссылка на %Dictionary.CompiledProperty).
...
Рейтинг: 0 / 0
28.11.2007, 04:08
    #34970481
Грин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
А если воспользоваться запросом %Dictionary.ClassDefinition:Summary ? Он вроде все классы возвращает.
...
Рейтинг: 0 / 0
28.11.2007, 12:45
    #34971399
Александр Коблов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
ГринА если воспользоваться запросом %Dictionary.ClassDefinition:Summary ? Он вроде все классы возвращает.
ClassDefinition возвращает описания классов, так как они записаны в cls, а CompiledClass -- информация о уже скомпилированных классах.
Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
USER>s p=##class(%Dictionary.ClassDefinition).%OpenId("User.EMP")
 
USER>w p.SqlTableName
 
USER>s q=##class(%Dictionary.CompiledClass).%OpenId("User.EMP")
 
USER>w q.SqlTableName
EMP
В описании для класса User.EMP не указано свойство SqlTableName, но при компиляции оно определяется.
То же самое, если класс есть, но компилируется с ошибками(т.е. не компилируется), то в ClassDefinition он будет, а в CompiledClass --- нет
...
Рейтинг: 0 / 0
28.11.2007, 17:43
    #34972789
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
Igor3TКак можно получить структуру базы из явы? Или хотябы список классов.
Ответ существенно зависит от способа коннекта и от предоставляемых им возможностей.
Если у вас есть проекции классов, то нарисуйте себе классов с функциями и в этих функциях на серверной стороне делайте что хотите. Если коннект через JDBC то насколько я правильно ошибаюсь, он похож на ODBC и представляет интерфейс к SQL. Тогда нарисуйте себе каких хотите запросов, например:
http://karataev.nm.ru/cache/dodbc.html
...
Рейтинг: 0 / 0
29.11.2007, 02:31
    #34973521
Грин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
Александр КобловClassDefinition возвращает описания классов, так как они записаны в cls, а CompiledClass -- информация о уже скомпилированных классах.
Получается, что оба варианта отвечают на вопрос, при условии (!), что все классы успешно скомпилированы. Как следствие оба варианта предоставят все имена свойств и методов. Думаю, что для поставленной задачи значения свойств не нужны...
...
Рейтинг: 0 / 0
29.11.2007, 21:42
    #34976556
Igor3T
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
u78посмотрите доку к классу %Dictionary.CompiledClass в этом %Persistent классе содержится описание всех классов, select * from %Dictionary.CompiledClass выдаст вам все (включая системные классы), надо будет ограничить c помощью Where Super %Like '%Persistent%' и "внаглую". Однако тут могут быть упущены классы которые наследованы от других хранимых классов, в этом случае у них в Super будет стоять имя вашего класса родителя. В общем универсальный запрос для хранимых классов, лично я, составить не могу. Однако копать, я думаю, надо в %Dictionary.CompiledClass (там же кстати есть ссылка на %Dictionary.CompiledProperty).

Спасибо! Я поэкспериментировал немного, вот так лучше всего:
Код: plaintext
select * from %Dictionary.CompiledClass Where System =  0 


Запрос возвращает только те классы, что я создал, независимо от чего они унаследованы.

Не знаю, правильно ли так делать, но это работает.
...
Рейтинг: 0 / 0
13.12.2007, 05:14
    #35006154
dolphin278
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить структуру БД (Cache+Java)
Видимо, не совсем верно, т.к. будет возвращать и классы, не объявленные как хранимые. Лучше добавить ограничения, что ClassType = 'persistent', и Abstract = 0.

InterSystems CIS, консультант
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как получить структуру БД (Cache+Java) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]