phreda4.github.io

:r4 web site

View on GitHub

Memory Data Base

Library for memory database with char separators, variable length registers.

^r4/lib/db2.txt

Library for make form for edit, include db2.

^r4/lib/formkit.txt

Database Definition

The database is a collection of records separated by the character ~, each field is separated by the character | and within the field you can separate value with the character _, this definition is arbitrary, and you could have chosen non-printable characters but you tried to simplify to edit the files with a common text editor

See the demo in apps/database agenda.

#dbagenda 0 "db/agenda/agenda.db"

#fkagenda 0 "db/agenda/agenda.fk"

#gragenda 0 0
$400 $201 $202 $203 $304 0
"Nombre|Movil|Particular|Trabajo|e-mail"

dbagenda define the file for store the db, fkagenda define the form for entry the datas and gragenda define a grid for view the db. The file db/agenda/agenda.fk define the field with type, for edit, and size. Remember the fields are positional, not for name, the name is decorative.

Agenda~
Nombre|A80~
Movil|A20|9999999999~ Particular|A20|9999999999~ Trabajo|A20|9999999999~
Email|A40~ Direccion|A40~

load the db and the form:

	mark
	'fkagenda fkload
	'dbagenda dbload

Log Version

There are words for make a db with a log file, every change in the db is append to a log file id disk and you can reconstruct the entire db or make a replicate with a timestamp.

Work with database

In lib/parse.txt you have word for select the correct field. The idea is keep the adress of register an search the next control char

::>>s | adr -- adr'	| go to next separator
::>>f | adr -- adr' | go to next field
::fld# | adr -- adr cnt	| cnt of fields
::>>fi | adr -- adr'	| next record
::reg# | adr -- adr cnt | count record

In lib/db2.txt

For traverse de database, vec is a word for operate over the register.

::dbmap | vec 'db -- ; vec | vec nro adri adrr -- vec nro adri | nro is from max to 0

::dbmapn | vec 'db -- ; vec | vec nro adri adrr -- vec nro adri | nro is 0 to max

For insert, update and delete registers. There are versions with log.

::dbinsert | 'db --   ; inserta memoria al final del archivo
::dbupdate | nroreg 'db --
::dbdelete | nro 'db --

For sort in diferents type of registers. For every db there are a index array, this word sort this index.

::dbsort | fld 'db -- ;
::dbsortstr | fld 'db -- ;
::dbsortdate | fld 'db --

For Filter, again, over the index array.

::dbfilterv | 'que 'db --

For searchany value

::dbsearchstr | "" nro 'db -- reg/0
::dbsearchany | "" nro 'db --  reg/0
::dbsearchnext | "" nro 'db --  reg/0

For example: I have a database of articles and I need to obtain the different suppliers of the articles, for this I will go through the database and get the different names of suppliers in a string arrangement.