On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
alkresin
moderator


Пост N: 31
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 31.01.08 11:36. Заголовок: Leto DB Server(продолжение)


Только что открыл на Sourceforge новый проект - Leto DB Server - https://sourceforge.net/projects/letodb

Это мультиплатформенный ( Windows, Unix/Linux ) сервер баз данных, предоставляющий клиентским программам доступ к dbf/cdx файлам, находящимся на удаленном сервере ( можно и на локальном компьютере запускать - в отладочных целях ). В общем, как ADS :).

Проект - на стадии разработки, не все даже базовые функции еще реализованы, до оптимизации дело еще не дошло. Но работает :).
Крутится у меня на сервере несколько дней, подключал до 15 клиентов, пока не падает. Мои программы работают с ним нормально.

Преимущества по сравнению с обычным файл-сервером:
1) Безопасность - базы могут быть в каталоге, недоступном для клиентских компьютеров - никто их случайно не удалит и не повредит.
2) Поскольку базы открываются серверной программой, а не клиентской, ее целостности ничего не грозит при случайном отключении клиентского компьютера.
3) значительное уменьшение сетевого траффика.
4) Должен быть, по идее, выигрыш в скорости.
5) Возможность контроля за пользователями с помощью утилиты manage ( можно придумать и другие формы контроля ).
6) Можно будет сделать транзакции, stored procedures на Харборе, ... и вообще все в наших руках :).

Кто хочет участвовать в разработке, тестировании - пишите.



Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]


Pasha
Администратор




Пост N: 1589
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.07.10 22:54. Заголовок: В Harbour вместо HB_..


В Harbour вместо HB_FT_PICTURE определен HB_FT_IMAGE. Сейчас поменяю

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 387
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 13.07.10 08:41. Заголовок: Уже просто компиляци..



 цитата:
Уже просто компиляция вернет ошибку (нет функции Some_UDF)


Вот пример:

Function Main
Private x := 2, b, s := "x == 1 .and. f1()"

b := &( "{||" + s + "}" ) // Проходит нормально
? eval(b) // Проходит нормально
x := 1
? eval(b) // Ошибка появляется только теперь


 цитата:
При строгой проверке (ключ -w3) без "FIELD->" макрокоманда "SET FILTER" не компиляется

return nil
Ну так можно объявить FIELD ... в начале функции.

Спасибо: 0 
Профиль
AlexMyr



Пост N: 19
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 13.07.10 09:45. Заголовок: Blob поле создается,..


Blob поле создается, но на
BLOBIMPORT( nPos, cPixFile )
выдает ошибку

Error LETO/0 Operation not supported
Called from DBFILEPUT(0)
Called from SHOWPIX(20)

Спасибо: 0 
Профиль
alx_on
постоянный участник


Пост N: 96
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 13.07.10 09:57. Заголовок: alkresin пишет: ? e..


alkresin пишет:

 цитата:
? eval(b) // Ошибка появляется только теперь


Как все сложно :) Не проверил до конца, теперь верю...
Хорошо, поставим вопрос по другому: без лето аналогичная ситуация? Да.
Зачем перекладывать на сервер проблему кривого написания фильтра?
Даже внешне правильно написанный может упасть:
Private x := 2, y := 1, b, s := "if(x==2,.T.,y) == .T."
Где "y" ошибочно написанное имя поля (цифра 1 для примера падения).

Было бы замечательно прикрутить UDF, а со строгой проверкой это невозможно


 цитата:
Ну так можно объявить FIELD ... в начале функции


В макросах это невозможно (да и не нужно). Но общий стиль написания кода необходимо сохранить
(для быстрого понимания - где поле, а где переменная или константа)

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 389
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 13.07.10 10:54. Заголовок: Хорошо, поставим воп..



 цитата:
Хорошо, поставим вопрос по другому: без лето аналогичная ситуация? Да.


Нет. Без leto это все отлично выполняется ( при условии наличия в коде клиентской программы соответствующих udf или переменных ). С leto -благодаря parsefilter это ловится и фильтр формируется на стороне клиента - и потому отрабатывает нормально. Без parsefilter сервер бы взял обработку фильтра на себя и при достижении записи с соответствующим значением SOME_FIELD попытался бы выполнить эту UDF, что привело бы ко всяким неприятностям.

 цитата:
Зачем перекладывать на сервер проблему кривого написания фильтра?


Да не криво написан этот фильтр. Что кривого в том, что вызов UDF стоит не в начале ?

 цитата:
Было бы замечательно прикрутить UDF, а со строгой проверкой это невозможно


Почему невозможно ? Наоборот - именно благодаря этой строгой проверке фильтр классифицируется как не optimized и благополучно выполняется на стороне клиента.

Спасибо: 0 
Профиль
alx_on
постоянный участник


Пост N: 97
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 13.07.10 12:01. Заголовок: Я говорю о проблеме ..


Я говорю о проблеме в целом - невозможности (на текущий момент) написать серверный вариант UDF
Это не претензия к лето, такая реализация harbour (где компиляция и выполнение - две совершенно разные вещи).
Это не плохо и не хорошо. Так было нужно в некоторых случаях (в зависимости от окружения при запуске).
Сейчас нет возможности более тонко контролировать этот процесс (могу ошибаться)
Было бы неплохо каким то образом реализовать проверку в более общем варианте,
т.е. проверять возможность выполнения на стороне сервера UDF (и не только UDF).

Простейший (очень тупой) пример: "if(LEFT(XXX,4)=='1234',.T.,.F.)"
Может выполняться на сервере, но не выполняется (повысило бы скорость обработки таблицы в разы при наличии
большого кол-ва не попадающих под фильтр записей)

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 390
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 13.07.10 12:18. Заголовок: Сейчас нет возможнос..



 цитата:
Сейчас нет возможности более тонко контролировать этот процесс (могу ошибаться)
Было бы неплохо каким то образом реализовать проверку в более общем варианте,
т.е. проверять возможность выполнения на стороне сервера UDF (и не только UDF).


Вы имеете ввиду возможность просто послать на сервер строку для проверки возможности ее выполнения на нем ?
Такой функции действительно нет, но ее очень просто реализовать.


 цитата:
Простейший (очень тупой) пример: "if(LEFT(XXX,4)=='1234',.T.,.F.)"
Может выполняться на сервере, но не выполняется


Почему не выполняется ? Я проверил ( заменив XXX на имя поля ) - выполняется...

Спасибо: 0 
Профиль
alx_on
постоянный участник


Пост N: 98
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 13.07.10 13:01. Заголовок: alkresin пишет: Вы ..


alkresin пишет:

 цитата:
Вы имеете ввиду возможность просто послать на сервер строку для проверки


Нет, расширить возможности leto_ParseFilter

 цитата:
Я проверил ( заменив XXX на имя поля ) - выполняется...


Странно, у меня LETO_ISFLTOPTIM() возвращает .F.

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 391
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.07.10 11:54. Заголовок: Нет, расширить возмо..



 цитата:
Нет, расширить возможности leto_ParseFilter


Я понимаю, что эта функция сейчас довольно проста, но все-таки - чего именно в ней не хватает ( кроме обработки field-> ) ?

 цитата:
Странно, у меня LETO_ISFLTOPTIM() возвращает .F.


Проверьте еще раз, не должно такого быть. Функции left() и if/iif вызываются в server.prg, так что они 100% прилинкованы.

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 392
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.07.10 11:57. Заголовок: Что-то мне последние..


Что-то мне последние дни пришло несколько писем с жалобами на то, что leto не компилируется с xHarbour 1.2.1 :

Error E2141 source\client\leto1.c 140: Declaration syntax error
Warning W8019 source\client\leto1.c 4496: Code has no effect in function letoRegisterRDD
Error E2379 source\client\leto1.c 4496: Statement missing ; in function letoRegisterRDD
Error E2451 source\client\leto1.c 4500: Undefined symbol 'errCode' in function letoRegisterRDD
Error E2451 source\client\leto1.c 4500: Undefined symbol 'letoTable' in function letoRegisterRDD
Error E2141 source\client\leto1.c 4527: Declaration syntax error
Error E2451 source\client\leto1.c 4820: Undefined symbol 'pModuleSymbols' in function leto1__InitSymbols
Error E2451 source\client\leto1.c 4823: Undefined symbol 'hb_letoRddInit' in function _hb_leto_rdd_init_

Кто-нибудь здесь использует xHarbour ?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1594
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.07.10 12:38. Заголовок: xHarbour почему-то п..


xHarbour почему-то перестал видеть ERRCODE. Я попробую собрать с этой версией, это как раз CVS

Спасибо: 0 
Профиль
Sergey Spirin
постоянный участник


Пост N: 395
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.07.10 13:29. Заголовок: Pasha пишет: xHarbo..


Pasha пишет:

 цитата:
xHarbour почему-то перестал видеть ERRCODE. Я попробую собрать с этой версией, это как раз CVS



По моему, его давно переименовали в HB_ERRCODE. У меня в свое время фаст из-за этого не компилился.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1595
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.07.10 15:10. Заголовок: Так в разных харбора..


Так в разных харборах, старых и новых, может быть по разному:

и так

typedef unsigned int HB_ERRCODE;

и так

typedef USHORT HB_ERRCODE;

и так

typedef USHORT ERRCODE;

Может быть использовать LETO_ERRCODE, как в letbdb/source/errint.c ?


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1596
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.07.10 22:48. Заголовок: Сборку для xHb модул..


Сборку для xHb модулей С я поправил, собирается с Harbour SVN, со старым Harbour тоже должно собираться
Не будет собираться с xHarbour, когда еще не было hbverbld.h, а он появился года 3 назад
Остался вопрос со сборкой server.prg под xHarbour, ругается на строке 111
Если я заменю эту конструкцию, как в комментариях, не пойдет сборка под старым Harbour
Я понимаю, что это недостаток препроцессора xHarbour, но как решить этот вопрос пока не придумал

Спасибо: 0 
Профиль
alx_on
постоянный участник


Пост N: 99
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 16.07.10 09:30. Заголовок: alkresin пишет: Про..


alkresin пишет:

 цитата:
Проверьте еще раз, не должно такого быть. Функции left() и if/iif вызываются в server.prg, так что они 100% прилинкованы



Проверил еще раз, результат:

LETO_ISFLTOPTIM= .F.
DBFILTER= if(LEFT(DACC,4)=='1208',.T.,.F.)

Вот пример (вырезано мое лишнее):
Скрытый текст


Спасибо: 0 
Профиль
AlexMyr



Пост N: 24
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 16.07.10 16:18. Заголовок: alx_on пишет: Вот п..


alx_on пишет:

 цитата:
Вот пример (вырезано мое лишнее):
Скрытый текст



Тоже бы проверил, но пример не самодостаточный - нет создания базы и наполнения ее данными. Да и базу для проверки уж лучше просто в cPath+"/journ___.dbf"

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 393
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 16.07.10 17:43. Заголовок: Остался вопрос со сб..



 цитата:
Остался вопрос со сборкой server.prg под xHarbour, ругается на строке 111


Не только. Вот еще мне прислали:

Error: Unresolved external '_hb_GetSetStructPtr' referenced from
C:\LETODB\OBJ\B32\LETOFUNC.OBJ

 цитата:
Если я заменю эту конструкцию, как в комментариях, не пойдет сборка под старым Harbour
Я понимаю, что это недостаток препроцессора xHarbour, но как решить этот вопрос пока не придумал


А может отказаться от использования этого "hbextcdp.ch" и ограничиться простым перечислением страниц ?
Если какая-то окажется не включена - кому надо включит.


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1598
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.07.10 20:04. Заголовок: Надо было снять комм..


Надо было снять комментарий с #define HARBOUR_VER_AFTER_101
Но я уже поправил сборку и без такого вмешательства
А насчет hbextcdp.ch, может быть в letodb/include приготовить 2 файла: letocdph.ch и letocdpx.ch,
и затем средствами make копировать их в letodb/include/hbextcdp.ch, если не существует HB_PATH/include/hbextcdp.ch ?
Что-то вроде if not exist ... copy ... ?

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 394
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.07.10 13:54. Заголовок: А насчет hbextcdp.ch..



 цитата:
А насчет hbextcdp.ch, может быть в letodb/include приготовить 2 файла: letocdph.ch и letocdpx.ch,
и затем средствами make копировать их в letodb/include/hbextcdp.ch, если не существует HB_PATH/include/hbextcdp.ch ?


А как это сделать для hbmk2 ?

Можно создать letodb/include/hbextcdp.ch, включив туда какой-то минимальный набор страниц, общий для всех компиляторов/версий и написать в readme, что при отсутствии нужной страницы надо руками дополнить этот файл.

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 395
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.07.10 13:59. Заголовок: Павел, а зачем вот э..


Павел, а зачем вот это сделано:

2010-07-09 19:10 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru)
....
* added control SkipBuf value to RecCount limit

Это ж лишняя файловая операция, а смысл ? Все равно ведь по eof останов происходит...

Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 698
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет