Автор | Сообщение |
Dima
|
| |
Пост N: 2728
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 11:27. Заголовок: Leto DB Server (продолжение 9)
Продолжаем тут
|
|
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|
alkresin
|
| moderator
|
Пост N: 752
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.12.13 10:42. Заголовок: Павел, а зачем leto_..
Павел, а зачем leto_writelog() урезали ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3097
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.12.13 13:54. Заголовок: Там было 2 ветки: од..
Там было 2 ветки: одна через функции hb_fs*, другая - через hb_fopen Первая ветка выполняет все, что нужно. Тогда зачем нужна вторая ? Только лишний модуль цепляется.
|
|
|
alkresin
|
| moderator
|
Пост N: 753
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.12.13 15:53. Заголовок: Вторая ветка нужна д..
Вторая ветка нужна для того, чтобы реализовать синтаксис, как в printf, например: leto_writelog( NULL, 0, "Name: %s Number: %d\r\n", szFile, iNum ); Это часто бывает очень удобно - вся нужная информация одной строчкой кода.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3098
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.12.13 09:00. Заголовок: Верну..
Верну
|
|
|
Pasha
|
| Администратор
|
Пост N: 3101
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.12.13 17:22. Заголовок: А как сделать dll из..
А как сделать dll из letocl.c ? Прицепить к проекту src\vm\maindllh.c, и добавить префикс для экспортируемых функций ? А надо предусмотреть и создание so-библиотеки для *nix
|
|
|
Pasha
|
| Администратор
|
Пост N: 3105
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.12.13 15:44. Заголовок: Я в своих программах..
Я в своих программах использую вызов hb_iperrorcode, для диагностики ошибок коннекта с сервером. Сейчас этой функции нет. Может быть, на клиенте стоит добавить модуль вроде такого: hbiph.c #include "hbapi.h" int hb_iperrorcode( void ); HB_FUNC( HB_IPERRORCODE ) { hb_retni( hb_iperrorcode( ) ); } HB_FUNC( HB_IPERRORDESC ) { hb_retc( strerror( hb_iperrorcode( ) ) ); } Тогда переменная errorDesc из hbip.c получается не нужна, ее можно будет убрать.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3106
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.12.13 16:14. Заголовок: Для LetoMemoRead нуж..
Для LetoMemoRead нужен еще параметр - размер файла (для возможности передачи файлов, содержащих нулевой байт): char * LetoMemoRead( LETOCONNECTION * pConnection, char * szFile, unsigned long * ulLen ) И у меня что-то сваливается leto_MemoRead, размер файла десятки килобайт. Пока ищу причину.
|
|
|
alkresin
|
| moderator
|
Пост N: 754
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.12.13 19:32. Заголовок: Pasha пишет: А как ..
Pasha пишет: цитата: | А как сделать dll из letocl.c ? Прицепить к проекту src\vm\maindllh.c, и добавить префикс для экспортируемых функций ? |
| Еще не думал на эту тему. Наверное, просто поставить соответствующую опцию линкера. Maindllh.c тут, скорее всего, не нужен. цитата: | Я в своих программах использую вызов hb_iperrorcode, для диагностики ошибок коннекта с сервером. Сейчас этой функции нет. Может быть, на клиенте стоит добавить модуль вроде такого: |
| Да, стоит. цитата: | Для LetoMemoRead нужен еще параметр - размер файла (для возможности передачи файлов, содержащих нулевой байт): |
| Добавлю.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3107
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.12.13 17:41. Заголовок: Кажется, я понял при..
Кажется, я понял причину падения leto_MemoRead. Падение происходит на файлах размером больше 16К В leto_Recv() в этом случае вызывается realloc для перевыделения памяти s_szBuffer. А ниже стоит вызов iRet = hb_ipRecv( hSocket, ptr, lMsgLen ); У меня в рабочей программе падение есть, а в тестах - нет. После вызова realloc адрес в s_szBuffer может измениться, а может остаться прежним. Если он изменился, то ptr указывает на уже освобожденный участок памяти, и в результате происходит крэш.
|
|
|
alkresin
|
| moderator
|
Пост N: 755
Зарегистрирован: 06.07.06
|
|
Отправлено: 25.12.13 08:52. Заголовок: Да, вполне вероятно,..
Да, вполне вероятно, с realloc бывают такие неприятности. Я вставил там ptr = s_szBuffer; после realloc - теперь, может, заработает. Заодно и часть функций по работе с dbf через C client сделал - пока, правда, ходить по таблице еще нельзя.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3108
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.12.13 09:23. Заголовок: Да, теперь работает..
Да, теперь работает Думается, со временем из LETOAREA в LETOTABLE перекочует все, кроме area, pTable и lpdbPendingRel
|
|
|
|
alkresin
|
| moderator
|
Пост N: 756
Зарегистрирован: 06.07.06
|
|
Отправлено: 25.12.13 09:47. Заголовок: Да, наверное, по мер..
Да, наверное, по мере необходимости.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3109
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.12.13 09:56. Заголовок: Есть предложение пер..
Есть предложение переименовать несколько функций: LetoIsFileExist --> LetoFileExist LetoMakeDir --> LetoDirMake для выполнения соответствия LetoFile* / LetoDir* и LetoDbOpen --> LetoDbOpenTable LetoDbClose --> LetoDbCloseTable так как еще будут функции Open/Close Index
|
|
|
alkresin
|
| moderator
|
Пост N: 759
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.12.13 10:25. Заголовок: Согласен...
Согласен.
|
|
|
alkresin
|
| moderator
|
Пост N: 760
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.12.13 12:11. Заголовок: Павел, не могли бы в..
Павел, не могли бы вы пояснить мне строчки 1230-1239 из leto1.c, letoSeek(): if( pArea->area.dbfi.itmCobExpr != NULL && !pArea->area.dbfi.fOptimized ) { if( SELF_SKIPFILTER( ( AREAP ) pArea, ( bFindLast ? -1 : 1 ) ) == SUCCESS ) { PHB_ITEM pItem = leto_KeyEval( pArea, pTagInfo ); if( itmCompare( pItem, pKey, FALSE ) != 0 && ! bSoftSeek ) SELF_GOTO( ( AREAP ) pArea, 0 ); } }
|
|
|
Pasha
|
| Администратор
|
Пост N: 3110
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.12.13 12:45. Заголовок: Если фильтр не оптим..
Если фильтр не оптимизирован, то надо сделать seek на сервере, и затем отработать фильтр на клиенте с проверкой ключа.
|
|
|
alkresin
|
| moderator
|
Пост N: 761
Зарегистрирован: 06.07.06
|
|
Отправлено: 27.12.13 17:22. Заголовок: А что это за поля в ..
А что это за поля в LETOTAGINFO - uiFCount и puiFields ? Они инициализируются, но нигде не используются.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3111
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.12.13 18:38. Заголовок: Я планирую в дальней..
Я планирую в дальнейшем их использовать, поэтому и добавил. Сейчас при обновлении записи сбрасывается skip-буфер. Но, если обновляются неиндексные поля, его можно не сбрасывать, а использовать и далее, только пометить данную запись как измененную. Порядок записей в текущем ордере ведь не изменился. Это позволило бы существенно оптимизировать циклы вроде dbEval, while ! eof(), в которых выполняется обновление данных.
|
|
|
alkresin
|
| moderator
|
Пост N: 762
Зарегистрирован: 06.07.06
|
|
Отправлено: 04.01.14 09:25. Заголовок: Ну что ж, выделение ..
Ну что ж, выделение С клиента для letodb в значительной мере сделано - можно ходить по базе ( go, skip, filter, seek ), добавлять и менять записи. Еще надо кое-что доделать и почистить, но основная часть готова.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3195
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.01.14 13:49. Заголовок: alkresin пишет: но ..
alkresin пишет: Не смотря на праздники - работа идет !
|
|
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|