Форум » LetoDB, HbNetio. » Leto DB Server » Ответить

Leto DB Server

Pasha: Добавил функцию: LETO_GROUPBY(cGroup, cFields, [cFilter], [xScopeTop], [xScopeBottom]) cGroup - имя поля, по которому группируются данные; cFields - список числовых полей через запятую, которые суммируются. Символ # обозначает к-во записей в группе Функция возвращает двумерный массив строк. 1-й элемент каждой строки - значение поля cGroup, следующие элементы суммы полей, заданных в cFields, или к-во записей в группе

Ответов - 232, стр: 1 2 3 4 5 6 7 8 9 10 11 12 All

AlexMyr: Паша, а на сервер обновления не сбрасывали?

Pasha: Конечно Но мы работаем не с основной revision Надо при checkout указать revision - не Head. а выбрать rel-1-mt1 revision

AlexMyr: Понял, спасибо.


leo: А где на SVN находится Letodb?

AlexMyr: Почему на svn? На CVS: cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb login cvs -z3 -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb co -P modulename

Pasha: Добавил для leto_udf возможность передачи произвольного числа параметров любых типов на сервер, а также возврата результата любого типа. Для этого используются функции hb_serialize и hb_deserialize. Поскольку сервер сейчас собирается только под Harbour, для сборки клиента под xHarbour добавил версии этих функций от Harbour Также добавил функцию на сервере: LETO_RECLOCK( nUserStru [, nRecord] ) которая может вызываться из udf-функций udf-функция может вернуть в качестве результата клиенту значение текущей записи с помощью вызова функции LETO_REC(). Клиент при этом должен вызвать функцию Leto_ParseRec для установки текущей записи. Пример вызова с клиента: Leto_ParseRec( Leto_Udf("UDF_AppendRec", <cFieldName>, [<cOrder>|<nOrder>]) ) Также в tests добавил пример udf-функции.

AlexMyr: Паша, скачал rel-1-mt, собираю с hbmk2: letodb.exe собирается, потом ищу библиотеку rddleto - не нахожу, нету даже папки lib, смотрю в корне валяется libletodb в rddleto.hbp вместо -olib/rddleto указано -oletodb. Соответсвенно не собираются тесты т.к. в rddleto.hbc указано libs=rddleto. Идут какие-то изменения? В readme ничего не нашел, все по старому и структура каталогов и названия библиотек.

Pasha: Библиотека стала так называться при сборке через hbmk2 после 2011-04-29 15:27 UTC+0300 Alexander Okhotnikov (alxokhotnikov/at/gmail.com)

Pasha: В настоящее время можно на сервере в подгружаемом файле letoudf.prg писать полноценные udf-функции. UDF-функции с клиента можно передать произвольное количество параметров любых типов. В функциях можно использовать обычные методы rdd, за исключением блокировок - вместо rlock/dbrlock/dbunlock надо использовать leto_reclock() и leto_recunlock(), поскольку блокировки выполняются не средствами rdd, а средствами leto. Эти функции могут после выполнения каких-либо действий возвращать клиенту новую текущую запись с помощью вызова leto_Rec(), а клиент в свою очередь может принять эту текущую запись с помощью leto_parserec Пример парочки таких функций я выложил: одна добавляет запись с заполняет значение ключевого поля, вторая - удаляет записи по указанному фильтру. Но все это работает в текущей рабочей области. Теперь как сделать работу в udf-функции с несколькими рабочими областями. Вызов серверного алиаса через leto_alias мне не очень нравится, поэтому возникла другая идея. Сделать на клиенте функцию leto_areaid(), и передавать на сервер номера рабочих областей в качестве параметров. В udf-функции эти номера можно использовать для вызова leto_SelectArea( nuserStru, nAreaId ), и в дальнейшем использовать это рабочую область Для leto_reclock, leto_recunlock и leto_rec ввести еще один необязательный параметр - nAreaId udf-функция могла бы возвращать массив с данными нескольких рабочх областей: {cRecBuf1, cRecBuf2, ...}, а на клиенте можно было бы обрабатывать этот массив вызовами leto_ParseRec Только надо будет доработать leto_FreeArea, чтобы при завершении udf-функции освобождать рабочие области (кроме текущей). Какие будут предложения ? Может быть, есть способ получше ?

AlexMyr: Pasha пишет: Библиотека стала так называться при сборке через hbmk2 после 2011-04-29 15:27 UTC+0300 Alexander Okhotnikov (alxokhotnikov/at/gmail.com) Да я уже вижу, а смысл?

AlexMyr: Pasha пишет: Какие будут предложения ? Может быть, есть способ получше ? Я думаю, что очень мало людей думает об этом, потому как сделаете так и будет.

alx_on: Pasha пишет: Вызов серверного алиаса через leto_alias мне не очень нравится Чем плохо? Скорость (больше ничего на ум не приходит)? Ведь нагляднее и проще передать алиас. Для leto_reclock, leto_recunlock и leto_rec ввести еще один необязательный параметр - nAreaId. udf-функция могла бы возвращать массив с данными нескольких рабочх областей Излишний функционал (к тому же с переделкой протокола). Я вижу это так: 1. Открыли на клиенте все таблицы (либо сделать функцию открытия на сервере) 2. Вызвали leto_alias и leto_SelectArea (можно даже в переменной сохранить AreaID для скорости) 3. Собрали результат 4. Повторили п.2 для следующего параметра 5. Вернули массив Ведь это обычный clipper/harbour -код Только надо будет доработать leto_FreeArea, чтобы при завершении udf-функции освобождать рабочие области (кроме текущей) leto_FreeArea отдает ВСЕ раб.области, открытые в этом потоке. Какие будут предложения ? Может быть, есть способ получше ? Единственная доработка, которая требуется, на мой взгляд (сам не использую пока UDF) - это открытие таблиц в UDF

alx_on: AlexMyr пишет: Идут какие-то изменения? В readme ничего не нашел, все по старому и структура каталогов и названия библиотек Я, честно говоря, выложил версию с потоками "на посмотреть". Т.е. в корне папки исходников ничего не трогал. А оно как все завертелось! У меня свои скрипты компиляции клиента. Можете Вы у себя переделаеть rddleto.hbp и rddleto.hbc? Опубликуете в этом форуме - я выложу на CVS.

AlexMyr: alx_on пишет: Я, честно говоря, выложил версию с потоками "на посмотреть". Ясно, а все доработки потом перейдут в основную ветку или как?

Pasha: AlexMyr пишет: Ясно, а все доработки потом перейдут в основную ветку или как? Версия с потоками куда перспективнее, и она просто должна стать основной. Поэтому letodb без потоков даже не хочется трогать. Хотелось бы, чтобы на новую версию посмотрел А.Кресин.

AlexMyr: Pasha пишет: Хотелось бы, чтобы на новую версию посмотрел А.Кресин. А написать Александру не пытались? Что-то давно он сюда не заглядывал.

Pasha: alx_on пишет: Чем плохо? Скорость (больше ничего на ум не приходит)? Ведь нагляднее и проще передать алиас. Тогда еще на сервере надо добавить функцию leto_areaid() для текущей р/о, для 2-го параметра в leto_selectarea

alx_on: Руки дошли до семейства LETO_VAR*() Переделал под текущую схему (с потоками) Вроде работает. Кто использует? Проверьте на реальном проекте на нюансы...

AlexMyr: Вот что получил при сборке (/* $Id: Changelog,v 1.350.2.14 2011/05/31 09:51:51 aokhotnikov Exp $ */): hbmk2: Compiling... hbmk2: C/C++ compiler command: gcc.exe -c -O3 -march=i586 -mtune=pentiumpro -fomit-frame-pointer -W -Wall -pipe -Ic:/dev/harbour/include -I../../../../include ../../../../bin/.hbmk/win/mingw/server.c ../../../../bin/.hbmk/win/mingw/errorsys.c ../../../../bin/.hbmk/win/mingw/common.c ../../../../source/server/errint.c ../../../../source/server/leto_win.c ../../../../source/server/letoacc.c ../../../../source/server/letovars.c ../../../../source/server/letofunc.c ../../../../source/server/leto_2.c ../../../../source/common/blowfish.c ../../../../source/common/common_c.c ../../../../bin/.hbmk/win/mingw/_hbmkaut_server.c ../../../../source/server/letofunc.c: In function 'letoFillTransInfo': ../../../../source/server/letofunc.c:6776:7: warning: format '%d' expects type 'int *', but argument 3 has type 'HB_USHORT *' ../../../../source/server/letofunc.c:6781:7: warning: format '%d' expects type 'int *', but argument 3 has type 'HB_USHORT *' ../../../../source/server/letofunc.c:6794:25: warning: format '%d' expects type 'int *', but argument 3 has type 'HB_USHORT *' ../../../../source/server/letofunc.c:6794:25: warning: format '%d' expects type 'int *', but argument 4 has type 'HB_USHORT *' ../../../../source/server/letofunc.c: In function 'leto_Trans': ../../../../source/server/letofunc.c:6865:16: warning: format '%d' expects type 'int *', but argument 3 has type 'HB_USHORT *' ../../../../source/server/letofunc.c:6885:32: warning: format '%d' expects type 'int *', but argument 3 has type 'HB_USHORT *' ../../../../source/server/letofunc.c:6885:32: warning: format '%d' expects type 'int *', but argument 4 has type 'HB_USHORT *' ../../../../source/server/letofunc.c: In function 'ParseCommand': ../../../../source/server/letofunc.c:7222:45: error: 'mutex_VARS' undeclared (first use in this function) ../../../../source/server/letofunc.c:7222:45: note: each undeclared identifier is reported only once for each function it appears in hbmk2: Error: Running C/C++ compiler. 1 gcc.exe -c -O3 -march=i586 -mtune=pentiumpro -fomit-frame-pointer -W -Wall -pipe -Ic:/dev/harbour/include -I../../../../include ../../../../bin/.hbmk/win/mingw/server.c ../../../../bin/.hbmk/win/mingw/errorsys.c ../../../../bin/.hbmk/win/mingw/common.c ../../../../source/server/errint.c ../../../../source/server/leto_win.c ../../../../source/server/letoacc.c ../../../../source/server/letovars.c ../../../../source/server/letofunc.c ../../../../source/server/leto_2.c ../../../../source/common/blowfish.c ../../../../source/common/common_c.c ../../../../bin/.hbmk/win/mingw/_hbmkaut_server.c

alx_on: AlexMyr Странно... Перевыложил



полная версия страницы