Clipper On Line • Ver Tópico - Atualizações do Letodbf

Atualizações do Letodbf

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores


Atualizações do Letodbf

Mensagempor Itamar M. Lins Jr. » 27 Jun 2018 18:06

Todos os erros reportados foram corrigidos.
Nota para o SKIP(0) fazer um commit na base de dados.

/* Encoding: UTF-8 (No BOM)  Notation (in 5th position):
     * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment

2018-06-27 18:00 UTC+0100 Rolf 'elch' Beckmann (elchs
  * include/
  * source/client/leto1.c
    + RDDI_CLEARBUFFER for RDDInfo: discard skip-buffer of all WA and
      refresh record-buffer with a skip( 0 )
    * add to refresh record buffer with a skip( 0 ) in DBI_CLEARBUFFER
    + leto_RelOptimized() ..
    ! .. for check all relationed WA are optimized in filter and relations;
      used in Leto_DbEval()

2018-06-26 19:50 UTC+0100 Rolf 'elch' Beckmann (elchs
  * source/client/leto1.c
    + add PRG functions LETO- _TABLELOCK, _TABLEUNLOCK for client side;
    * universalize LETO- _RECLOCK, _RECUNLOCK to handle also non-LETO WA
    + leto_LockValidate()
      automatic replace in Leto_DBEval() expression Harbour lock functions
      with LETO variants -- validate made lock is unlocked:
      rlock()/ dbrlock() => Leto_RecLock(); dbrunlock() => Leto_RecUnlock()
      flock() => Leto_TableLock(); dbunlock() => Leto_TableUnlock()

  * source/client/rddsys.prg

  * Readme.txt
    * a straying bracket :-(

2018-06-25 22:42 UTC+0100 Rolf 'elch' Beckmann (elchs
  * source/client/leto1.c
  * source/server/letofunc.c
    ! don't set <nNext> value -1, esp. not for non-LETO RDD method,
      instead check if param is given numeric -- similar for <nRec>
    * accept and go-to any given <nRecord> in leto_dbEval()
    * simplify two 'if' into one
    * tiny MsVc warning, as dbLockInfo.fResult is a HB_USHORT

2018-06-25 01:11 UTC+0100 Rolf 'elch' Beckmann (elchs
  * source/client/leto1.c
  * source/server/letofunc.c
    ! remove test, if <cbFor> and <cbWhile> return a boolean value:
      it would need to transmit 2 numeric params as in real usage,
      and may distract a logic in the CB, if its called the first time;
      so blocks can even return numeric values, analysed by hb_itemGetL()
    ! (hopefully) fixed GoTop behaviour with <cbWhile>

2018-06-24 18:58 UTC+0100 Rolf 'elch' Beckmann (elchs
  * include/
    + add optional 'INTO variable' option for delete and recall commands,
      will contain number of records processed.
    + add translate DbEval() => Leto_DBEval()

  * source/client/rddsys.prg
  * source/client/leto1.c
    + RDDI_LOCKRETRY as recommended constant for LetoDBf RDDI_LOCKTIMEOUT
    + add PRG functions LETO- _RECLOCK, _RECUNLOCK for client side;
      Leto_RecUnlock() return boolean if R-locked before
      add REQUESTs for these ( as possible only literally used in source )
  * source/server/letofunc.c
    % make <nNext> starting at active record depending on <lRest>, likely
      for <bWhile>: explicit given FALSE starts at table top (filter <bFor>)
    - remove to convert 'stringified' params nNext, nRec, lRest ...

  * source/server/letofunc.c
    ! server side auto-locking in leto_dbEval() to follow letodb.ini option
      Share_Tables; use server internal lock-functions instead 'real' locks
    % try an initial F-lock in leto_DbEval() if given 10th param <lStay> is
      given as non default: HB_FALSE
    * return boolean in Leto_RecUnlock(), -TableUnlock() if locked before

  * Readme.txt

2018-06-22 10:42 UTC+0100 Rolf 'elch' Beckmann (elchs
  * source/client/letocl.c
  * source/server/letofunc.c
    ! no DBGoTop() in letoEval()/ leto_dbEval() *if* given <while> condition
      ; THANKS Mario for pointing at misbehaviour
    ! check for <lNext> before above, start also at current record
    ! fix an ALIAS problem in leto_FindAlias() for server mode No_Save_WA=0
      when replacing universal 'field->' alias
    + boolean 10th param to Leto_DbEval() to stay at last processed record or
      goto back to the one when starting
    * move handling to go back to record as before out of letoEval() into
      Leto_DbEval(); then DbEval() can perform Harbour conform.
      move leto_PutRec() from here into letoEval()

2018-06-18 18:56 UTC+0100 Rolf 'elch' Beckmann (elchs
  * include/funcleto.h
  * include/leto_std.h
  * source/client/leto1.c
  * source/client/letocl.c
    % if DbRUnlock( nRecno ) is active record to update, add unlock to update
      like for DbUnlock()
    ! leto_dbEval() in data change mode need to call RDD method FieldPut()
      when executed at client, to set markers which fields to update;
      PP fill into FieldPut('fieldname'), leto_DbEval() convert to fieldpos
    + flag LETO_FLAG_UPD_ALL to update all non-extern stored fields
    * send outstanding updated record before to start leto_dbeval()
    * add numeric constant alternative to 2. param in Leto_DbDriver()

  * source/client/rddsys.prg
    * add function requests used in Leto_DbEval()

  * source/server/letofunc.c
    ! server mode No_Save_WA=0; ! NTX, AUTORDER == 0; then re-open production
      or open another index bag: missing set order to first in bag
      ; Thanks! to Theo for pointing bug for rare usage
    % leto_dbEval() in lock-mode: inital try one F-lock, if fails R-locks

2018-06-15 18:48 UTC+0100 Rolf 'elch' Beckmann (elchs
  ; ( maybe rare used ) bug fixes ! -- refresh server and client for news:
    # support named ( LETO extension ) and OS none-named temporary tables
    # server-side executable ( by stingified codeblocks <for> and <while> )
      'record processing commands' with new header file ""
    # transactions: ignore-to-unlock until commit' mode for easy integration
      to existing source with 'unlocks'
    # RDDI_AUTOLOCK in conjunction with a timeout value to get lock success,
      used in leto_DbEval() for shared opened tables -- whereas leto_DbEval()
      is fast server side query [opt. data change] into a sum or resultset!
    # performance for sequence: Rlock(); change data; DbUnlock()
      spares a network package ( 'unlock' send together with data update )

  * letodb.hbc
  + include/leto_std.h
  * include/letocl.h
  * include/
  * include/rddleto.h
  * source/client/leto1.c
    + new LETO_*:
      LetoDBf adapted/ optimized replicas of __db*() functions
    * + prep up! LETO_DBEVAL() to act at server if ever possible,
      to be a full replace for dbEval() *plus* LetoDBf extensions like
      to give back result-sets, using Leto_Var*(), AUTOLOCKing, ...
    * refine letoSort() and letoTrans() to use 'fOptimized' flag;
      do not send non-optimzed query ( with 'for/while'-codeblocks ! ),
      and instead execute it (must be) local at client.
      With string expressions for the evil-block, the for/while' expression,
      its tried as optimized at server -- if query then fails at server,
      - a local var or function in it - its tried at client ( if here the
        expressions are valid as a CB )
    ; General aim is to let Leto_Db*() functions act at server-side,
      very wanted for exactly case to 'filter' records at the bright! side.
      HB core functions __db*() omit the string alternative,
      and expressions are blockyfied in '', so ...
    * use new header file to pre-process Harbour __db*() commands
      ( by stringify their params ) into Leto_db*() variants
    * include new header '' in letodb.hbc
    * refine leto_mkCodeBlock() used in above
    + new LETO DBI_CHILDPARENT to check if a relation points to this WA
    + use DBI_ISTEMPORARY to set new flag in WA; return HB_SUCCESS
    + Leto_DbCreateTemp() to create 'temporary' tables, aka automatically
      deleted when closed. Without given filename, a unique file in the
      temporary OS path at server is created, else with given name relative
      to the server datapath. [ "mem:/temptable" without path in RAM ]
    + Leto_BeginTransaction( .T. ) [ given TRUE ]: not only all existing locks
      are unlocked, but following R-F-unlocks ignored until transaction end.
      This should it make easy to add transactions to existing source.
    * LetoDbAppend() during transaction ever to use: fUnLockAll = .F.
    + leto_Var[Decr|Incr](): optional increment amount as 4th param,
      so nice to sum up a value with e.g. flag: LETO_VCREAT
    + new RDDI_LOCKTIMEOUT, add RDDI_AUTOLOCK, changed Leto_SetLockTimeOut()
      to set value also at server

  * source/client/letomgmt.c
    + new LETO_FTS( [ cSearch[, lCaseInsensitive, [ lNoMemos ] ] ] )
      Full-Text-Search over all fields, default including also memofields

  * source/client/letocl.c
    ! more fix to 2017-06-09, LetoDbGoTo():
      instead looking up the cache for recno() > reccount() [out of space],
      ask the server for fresh data; ( sets in return also EOF/ BOF );
      THANKS for hint by Leon; -- reset 'found' flag to false in any! case
    ! fix data refresh: if DbRlock() not the active record,
      and its data is cached in (still) valid skipbuffer
    * minor add of field-types

  * source/client/rddsys.prg
    * link HB internal funtions needed in

  * include/srvleto.h
  * source/server/letofunc.c
  * source/server/server.prg
    + LETO_FTS() Full-Text-Search *all* fields, well for filter expressions
    ! fix to set from client a table trigger at server with DBI_TRIGGER
      ; a global server trigger ever have precedence, then do not set
    ! possibility to create temporary tables, deleted with closing them.
      Likely a DbCreate() with lKeepOpen flag, ever in 'exclusive' mode.
    * rework also server side part of leto_DbEdit(), and add same for
    + leto_dbJoin(): accepts named/ unnamed temporary table
    + new RDDI_LOCKTIMEOUT to query/ set a session iLockTimeOut,
      used in conjunction with added RDDI_AUTOLOCK in e.g. Leto_DbEval()
    * add a server name known to itself, existing config option 'SERVER'
    * add missing REQUESTs for Leto_Var[Inc|Dec]

  * source/server/letovars.c
    * make leto_VarIncr()/ leto_VarDevr() work also with decimals
    ! fix to create above from server side
    + optional given amount to increment or decrement -- if not given: '1'

  * tests/c_lang/test_dbf.c
    * new temporary param for LetoDbCreateTable()

  * tests/test_tr.prg
    * clean up of code which went into rddleto library

  * Readme.txt

2018-05-14 19:18 UTC+0100 Rolf 'elch' Beckmann (elchs
  * include/letocl.h
    * move #define LETO_DEFAULT_TIMEOUT from letocl.c

  * source/client/leto1.c
    ! re-set WA flags [EOF/BOF/FOUND] in letoOrderCreate(),
      e.g. clear an old EOF() flag -- bug-report by Itamar, THANKS !!
    * remove a doubled, obsolete WA set-flag in letoOrderListAdd()
    * clean up of function letoRddInfo():
      centralize pConnection determination, dissolve leto_MemoExt() herein;
      use connection pointer ( not ID ) as param for leto_MemoType() and
    * add experimental <iLockTimeOut> as optional 8th param of
      LETO_RECONNECT() [ in ms, temporary used for lock restore ]

  * source/client/letomgmn.c
    * change default in LETO_CONNECT() to LETO_DEFAULT_TIMEOUT ( 120 s )
      if timeout is given apply it also for an ready established connection;
      where nTimeOut '< 0' == -1 == infinite, '0' == LETO_DEFAULT_TIMEOUT
    * verify in Leto_VarExprCreate() a not aliased ( M-> or MEMVAR-> )
      memvar is not *also* a fieldname in active LETO workarea;
      take care of such memvar prefix to be removed in result

  * source/client/letocl.c
    ! fix compile time LETO_PASSWORD is verified for new connection
      in leto_RecvFirst() --> LETO_ERR_ACCESS
    * dissolve leto_NetName() into LetoConnectionOpen()
    * leto_RecvFirst():
      move a section out of LetoConnectionOpen() which belongs here;
      use initial timeout <default>: 6 s to establish a new connection
      ( else given_value in range: 100  <=> LETO_DEFAULT_TIMEOUT/10 [12 s] )

  * source/server/leto_2.c
  * source/server/letofunc.c
    * delete existing log earlier, just after connect ( leto_wUsLogDelete() )
      to possible log the 'intro' greating string for highest debug levels
    * increase a buffer

  * source/server/server.prg
  * Readme.txt
    * change default GT for all modes to: HB_GT_NUL, and remove ( mostly
      failure ) feedback as gone with immediate closing window
      ; this will not prevent a black-screen window created by Windows OS;
        to avoid use 'start /B' or similar ( see Readme.txt: 3.1 )

Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.

Mensagens: 3159
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 87 vezes
Mens.Curtidas: 129 vezes

Atualizações do Letodbf

Mensagempor fladimir » 28 Jun 2018 15:22


Vlw Itamar.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”

DESKTOP CONSOLE Harbour 3.4.0dev (4541270) (2016-06-28 07:05) | Console | MINGW | DBF | CDX | FastReport | MySQL
DESKTOP VISUAL... Harbour 3.2 | MinGW | Xailer 4.0.2 | MariaDB Nativo | Outros via ADO | FastReport
MOBILE Android/IOS e WEB - Outros
Avatar de usuário


Mensagens: 2115
Data de registro: 15 Nov 2006 19:21
Curtiu: 16 vezes
Mens.Curtidas: 100 vezes

Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante

Faça uma doação para o forum
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro