StarQ component.- Structure / Queue / Componente mapped Database
Helper for easily integrating LightningDB into WINDEV projects.
https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database
Component In/Out:
List of Procedures
The StarQ component proposes the following sets of procedures:
Set of Procedures 'lmdb'
LmdbErrorCheck
BinaryData
CompData
DbSerialize
DbDeserialize
lmdb_dll_init
AllocSpace
TransferSpace
GetPageSize <specify the procedure action>
StandardSize <specify the procedure action>
Set of Procedures 'index'
Ascending
Descending
Composite
Using
List of Classes
The StarQ component proposes the following classes:
List of Constants
The StarQ component proposes the following constants:
Set of Procedures 'lmdb'
MDB_FIXEDMAP mmap at a fixed address (experimental)
MDB_NOSUBDIR no environment directory
MDB_NOSYNC don't fsync after commit
MDB_RDONLY read only
MDB_NOMETASYNC don't fsync metapage after commit
MDB_WRITEMAP use writable mmap
MDB_MAPASYNC use asynchronous msync when #MDB_WRITEMAP is used
MDB_NOTLS tie reader locktable slots to #MDB_txn objects instead of to threads
MDB_NOLOCK don't do any locking, caller must manage their own locks
MDB_NORDAHEAD don't do readahead (no effect on Windows)
MDB_NOMEMINIT don't initialize malloc'd memory before writing to datafile
MDB_REVERSEKEY use reverse string keys
MDB_DUPSORT use sorted duplicates
MDB_INTEGERKEY numeric keys in native byte order.
MDB_DUPFIXED with #MDB_DUPSORT, sorted dup items have fixed size
MDB_INTEGERDUP with #MDB_DUPSORT, dups are numeric (28,10) in native byte order
MDB_REVERSEDUP with #MDB_DUPSORT, use reverse string dups
MDB_CREATE create DB if not already existing
MDB_NOOVERWRITE For put: Don't write if the key already exists.
MDB_NODUPDATA Only for #MDB_DUPSORT<br>
MDB_CURRENT For mdb_cursor_put: overwrite the current key/data pair
MDB_RESERVE For put: Just reserve space for data, don't copy it. Return a
MDB_APPEND Data is being appended, don't split full pages.
MDB_APPENDDUP Duplicate data is being appended, don't split full pages.
MDB_MULTIPLE Store multiple data items in one call. Only for #MDB_DUPFIXED.
MDB_FIRST < Position at first key/data item
MDB_FIRST_DUP < Position at first data item of current key.
MDB_GET_BOTH < Position at key/data pair. Only for #MDB_DUPSORT
MDB_GET_BOTH_RANGE < position at key, nearest data. Only for #MDB_DUPSORT
MDB_GET_CURRENT < Return key/data at current cursor position
MDB_GET_MULTIPLE < Return all the duplicate data items at the current
MDB_LAST < Position at last key/data item
MDB_LAST_DUP < Position at last data item of current key.
MDB_NEXT < Position at next data item
MDB_NEXT_DUP < Position at next data item of current key.
MDB_NEXT_MULTIPLE < Return all duplicate data items at the next
MDB_NEXT_NODUP < Position at first data item of next key
MDB_PREV < Position at previous data item
MDB_PREV_DUP < Position at previous data item of current key.
MDB_PREV_NODUP < Position at last data item of previous key
MDB_SET < Position at specified key
MDB_SET_KEY < Position at specified key, return key + data
MDB_SET_RANGE < Position at first key greater than or equal to specified key.
MDB_SUCCESS Successful result
MDB_KEYEXIST key/data pair already exists
MDB_NOTFOUND key/data pair not found = EOF
MDB_PAGE_NOTFOUND Requested page not found - this usually indicates corruption
MDB_CORRUPTED Located page was wrong type
MDB_PANIC Update of meta page failed, probably I/O error
MDB_VERSION_MISMATCH Environment version mismatch
MDB_INVALID File is not a valid MDB file
MDB_MAP_FULL Environment mapsize reached
MDB_DBS_FULL Environment maxdbs reached
MDB_READERS_FULL Environment maxreaders reached
MDB_TLS_FULL Too many TLS keys in use - Windows only
MDB_TXN_FULL Txn has too many dirty pages
MDB_CURSOR_FULL Cursor stack too deep - internal error
MDB_PAGE_FULL Page has not enough space - internal error
MDB_MAP_RESIZED Database contents grew beyond environment mapsize
MDB_INCOMPATIBLE MDB_INCOMPATIBLE: Operation and DB incompatible, or DB flags changed
MDB_BAD_RSLOT Invalid reuse of reader locktable slot
MDB_BAD_TXN Transaction cannot recover - it must be aborted
MDB_BAD_VALSIZE Too big key/data, key is empty, or wrong DUPFIXED size
MDB_LAST_ERRCODE
MDB_MB
MDB_GB
LMDB_64_DLL
LMDB_32_DLL
List of Global Variables
The StarQ component proposes the following global variables:
Set of Procedures 'lmdb'
mdb_version
mdb_strerror
mdb_env_create
mdb_env_open
mdb_env_copy
mdb_env_copyfd
mdb_env_stat
mdb_env_info
mdb_env_sync
mdb_env_close
mdb_env_set_flags
mdb_env_get_flags
mdb_env_get_path
mdb_env_get_fd
mdb_env_set_mapsize
mdb_env_set_maxreaders
mdb_env_get_maxreaders
mdb_env_set_maxdbs
mdb_env_get_maxkeysize
mdb_env_set_userctx
mdb_env_get_userctx
mdb_env_set_assert
mdb_txn_begin
mdb_txn_env
mdb_txn_commit
mdb_txn_abort
mdb_txn_reset
mdb_txn_renew
mdb_dbi_open
mdb_stat
mdb_dbi_flags
mdb_dbi_close
mdb_drop
mdb_set_compare
mdb_set_dupsort
mdb_set_relfunc
mdb_set_relctx
mdb_get
mdb_put
mdb_del
mdb_cursor_open
mdb_cursor_close
mdb_cursor_renew
mdb_cursor_txn
mdb_cursor_dbi
mdb_cursor_get
mdb_cursor_put
mdb_cursor_del
mdb_cursor_count
mdb_cmp
mdb_dcmp
mdb_reader_list
mdb_reader_check
LMDB_DLL_INSTANCE
Set of Procedures 'index'
gnProcedureIndex
List of Structures
The StarQ component proposes the following structures:
Set of Procedures 'lmdb'
SYSTEM_INFO
STMDB_stat
STMDB_envinfo
STMDB_val
1 - Accessible Sets of Procedures
1.1 - Set of Procedures 'lmdb'
1.1.1 - Procedure 'LmdbErrorCheck'
Summary: Verify an error and throws an exception
1.1.2 - Procedure 'BinaryData'
Summary: Returns a binary data
1.1.3 - Procedure 'CompData'
Summary: Composite key data
1.1.4 - Procedure 'DbSerialize'
Summary: Serialize data
1.1.5 - Procedure 'DbDeserialize'
Summary: Serialize data
1.1.6 - Procedure 'lmdb_dll_init'
Summary: Inicializar LMDB
1.1.7 - Procedure 'AllocSpace'
Summary: Allocate space
1.1.8 - Procedure 'TransferSpace'
Summary: Transferir memoria
1.1.9 - Procedure 'GetPageSize'
Summary: <specify the procedure action>
Syntax:
[ <Result> = ] GetPageSize ()
Parameters:
None
Return Value:
real: <specify the possible values as well as their interpretation>
For instance:
Indicate an example.
1.1.10 - Procedure 'StandardSize'
Summary: <specify the procedure action>
Syntax:
[ <Result> = ] StandardSize (<Size>)
Parameters:
Size: <specify the role of Size>
Return Value:
8-byte int: <specify the possible values as well as their interpretation>
For instance:
Indicate an example.
1.2 - Set of Procedures 'index'
1.2.1 - Procedure 'Ascending'
Summary: Generates the binary representation of a value for Ascending order
1.2.2 - Procedure 'Descending'
Summary: Generates the binary representation of a value for Descending order
1.2.3 - Procedure 'Composite'
Summary: Generates a Composite representation of a value using several values
1.2.4 - Procedure 'Using'
Summary: Generates a Build Index procedure based on a single or several field names. Prefix with '-' on a field to specify descending order.
1 - Sets of Accessible Browser Procedures
<No browser procedure available in this component>
2 - Accessible Classes
2.1 - Class 'StarQEnv'
2.1.1 - Method 'Constructor'
Summary: Declare a shared environment. By default a temporal file and volatile (files will be deleted when closed).
2.1.2 - Method 'Destructor'
Summary: <specify the procedure action>
Syntax:
Destructor ()
Parameters:
None
Return Value:
None
For instance:
Indicate an example.
2.1.3 - Method 'Open'
Summary: Opens an environment or creates it if it does not exist, then open all related tables.
2.1.4 - Method 'Close'
Summary: Close an environment and all related tables.
2.1.5 - Method 'Create'
Summary: Create a new environment and declare all tables.
2.1.6 - Method 'GetFileName'
Summary: Get the file name for the database.
2.2 - Class 'StarQ'
2.2.1 - Method 'Constructor'
Summary: Declares a table with the primary key build procedure.
2.2.2 - Method 'Destructor'
Summary: <specify the procedure action>
Syntax:
Destructor ()
Parameters:
None
Return Value:
None
For instance:
Indicate an example.
2.2.3 - Method 'Put'
Summary: Insert or modify a record.
2.2.4 - Method 'RemoveInternal'
Summary: <specify the procedure action>
Syntax:
RemoveInternal (<Record> [, <IsChecked>])
Parameters:
Record: <specify the role of Record>
IsChecked (default value=0): <specify the role of IsChecked>
Return Value:
None
For instance:
Indicate an example.
2.2.5 - Method 'Index'
Summary: Declare a new Index.
2.2.6 - Method 'PutIndex'
Summary: <specify the procedure action>
Syntax:
PutIndex (<nIdx> is int, <Record>, <PkValue>)
Parameters:
nIdx (int): <specify the role of nIdx>
Record: <specify the role of Record>
PkValue: <specify the role of PkValue>
Return Value:
None
For instance:
Indicate an example.
2.2.7 - Method 'Get'
Summary: Find a record on the primary key, and fetch it.
2.2.8 - Method 'FirstPK'
Summary: Locate the cursor at the beginning the primary key, and fetch the record.
2.2.9 - Method 'Exist'
Summary: Check the existence of a record on the primary key.
2.2.10 - Method 'PkValue'
Summary: <specify the procedure action>
Syntax:
[ <Result> = ] PkValue (<Record>)
Parameters:
Record: <specify the role of Record>
Return Value:
Unspecified Type: <specify the possible values as well as their interpretation>
For instance:
Indicate an example.
2.2.11 - Method 'RemoveIndex'
Summary: <specify the procedure action>
Syntax:
RemoveIndex (<nIdx> is int, <Record>, <PkValue>)
Parameters:
nIdx (int): <specify the role of nIdx>
Record: <specify the role of Record>
PkValue: <specify the role of PkValue>
Return Value:
None
For instance:
Indicate an example.
2.2.12 - Method 'Open'
Summary: Opens the table.
2.2.13 - Method 'Close'
Summary: Close the table.
2.2.14 - Method 'CloseIndex'
Summary: <specify the procedure action>
Syntax:
CloseIndex (<nIdx> is int)
Parameters:
nIdx (int): <specify the role of nIdx>
Return Value:
None
For instance:
Indicate an example.
2.2.15 - Method 'OpenIndex'
Summary: <specify the procedure action>
Syntax:
OpenIndex (<nIdx> is int)
Parameters:
nIdx (int): <specify the role of nIdx>
Return Value:
None
For instance:
Indicate an example.
2.2.16 - Method 'CheckOpened'
Summary: <specify the procedure action>
Syntax:
CheckOpened ( [<IsNot> is boolean])
Parameters:
IsNot (boolean - default value=0): <specify the role of IsNot>
Return Value:
None
For instance:
Indicate an example.
2.2.17 - Method 'CursorGet'
Summary: <specify the procedure action>
Syntax:
[ <Result> = ] CursorGet (<nIdx> is int, <Record> [, <nFlags> is int])
Parameters:
nIdx (int): <specify the role of nIdx>
Record: <specify the role of Record>
nFlags (int - default value=0): <specify the role of nFlags>
Return Value:
boolean: <specify the possible values as well as their interpretation>
For instance:
Indicate an example.
2.2.18 - Method 'Next'
Summary: Move the cursor to the next record, and fetch it.
2.2.19 - Method 'Previous'
Summary: Moves the cursor to the previous record and fetches it.
2.2.20 - Method 'Last'
Summary: Locate the cursor at the ending of an index, and fetch the record.
2.2.21 - Method 'Set'
Summary: Seeks for the closest next record based on an index and fetches it.
2.2.22 - Method 'NewScanIndex'
Summary: <specify the procedure action>
Syntax:
NewScanIndex (<nIdx> is int)
Parameters:
nIdx (int): <specify the role of nIdx>
Return Value:
None
For instance:
Indicate an example.
2.2.23 - Method 'CloseScanIndex'
Summary: <specify the procedure action>
Syntax:
CloseScanIndex ()
Parameters:
None
Return Value:
None
For instance:
Indicate an example.
2.2.24 - Method 'First'
Summary: Locate the cursor at the beginning of an index, and fetch the record.
2.2.25 - Method 'LastPK'
Summary: Locate the cursor at the ending of the primary key, and fetch the record.
2.2.26 - Method 'SetPK'
Summary: Seeks for the closest next record based on the primary key.
2.2.27 - Method 'IndexCount'
Summary: Count the number of indexes in the table, including the primary key.
2.2.28 - Method 'Count'
Summary: Number of rows in the table.
2.2.29 - Method 'Create'
Summary: Create a new table.
2.2.30 - Method 'Remove'
Summary: Removes a Record.
3 - Accessible Pages
<No page available in this component>
3 - Accessible Windows
<No window is available in this component>
4 - Accessible Reports
<No report available in this component>
5 - Manipulation of Accessible Elements
To handle a component element (window, etc.) by programming, the element must be handled as any other project element:
- to call a procedure: use the usual syntax:
ComponentProcedure(Param1,Param2)
- to use a class: declare a class type variable:
MyVariable is object ComponentClass
Then, the variable can be used as any other usual object variable.
- to open a window: use the Open function and specify the required parameters.
Open(ComponentWindow [, Param1, Param2])
- to print a report: use the iPrintReport function and specify the required parameters.
iPrintReport(ComponentReport [, Param1, Param2])
//CODE
// Our record definition
RecordType is Structure
Key is int
Description is string
END
// Our StarQ database handler, using our primary key field 'Key'
RecordQ is StarQ(index.Using("Key"))
// Declare an Index named 'Description'
IdxName is int = RecordQ.Index(index.Using("Description"))
// Initialize LMDB.DLL
lmdb.lmdb_dll_init()
// Creates and Open the database
RecordQ.Create()
Record is RecordType
// Create sample 1000 rows
FOR i = 1 _TO_ 1000
Record.Key = i
Record.Description = "This is a description for " + i
RecordQ.Put(Record)
END
// The data will be displayed in Description order
RecordQ.First(IdxName, Record)
// Add the first record to the table
TableAddLine(Table, Record.Key, Record.Description)