XBase itself does not provide an SQL interface. The Rekall driver accesses XBase files via the XBSQL library, which implements a limited subset of SQL.
XBase has a restricted set of types:
Logical.
Numeric: up to 16 digits with a sign, or 17 without.
Floating point: up to 17 digits, less space for a sign or decimal point.
Character: up to 254 characters, no null characters.
Date: eight characters, in the format YYYYMMDD.
Memo: up to 32760 characters, including nulls.
There are two other major restrictions. Firstly, XBase has no notion of not null columns, and does not distinguish an empty field from a null field.
Secondly, there is no notion of a primary key column. The driver works round this by mapping the pseudo-type Primary Key to a character field of length 22, provided that this is the first column in the table. It generates key values by concatenating the time at which the driver was started (expressed as seconds since 1970) with an index that increments for each record inserted. This is very likely (but not guaranteed) to be unique.
The driver can always retrieve information about a row which has just been inserted.
The advanced settings for the server dialog are described below.
Pack database files on closeBy default, when records are deleted from an XBase table, the record is not actually freed up, rather it is simply marked as deleted. This means that the files in which the tables are stored grow in size as records are deleted and added, and also has side effects related to indexes.
Setting this option will cause tables to be packed when Rekall exits, releasing unused space. Note that this is only done for tables for which one or more records have been deleted.
Note: The underlying XBase library has a real delete feature, however this does not appear to function correctly at present, and is not used.
Case sensitive matchingBy default, string matching for the (in)equality and like operators is case-insensitive. Setting this option makes the operation case sensitive.
Wrap names with [....]This option cases Rekall to wrap names in expressions with the [...] characters, hence the expression Client.ClientID = 12 becomes [Client].[ClientID] = 12. This notation, which is the same as used by Microsoft Access allows for names which contain the space character, and which sometimes appear as column names in XBase data files.
However, it does not help with other problematic names, for instance a column name that contains a period (.) character. Such names cannot be handled by Rekall, since there is no general way to decide whether such a character, appearing in an SQL expression, is part of a name or is a character in an operator.
Minimise memory usageSetting this option turns on a mode in the XBase wrapper library which reduces memory usage. Specifically, when a select query is executed, initially only information about selected rows is stored; data values are not actually retrieved until requested. This decreases memory usage at the expense of execution speed.