home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Java / Java.zip / rdb084r2.zip / RXDbase.doc < prev    next >
Text File  |  1997-03-19  |  25KB  |  725 lines

  1. RXDbase: A NetRexx DB class implementation  0.84 - Max Marsiglietti 1996,97.
  2.  
  3. This is the official RXDbase documentation. You'll find here all the 
  4. informations you need for using the RXDbase library for NetRexx.
  5.  
  6. To get best results in visualization of this document, use a monospaced font.
  7. English is not my language, as ever. :)
  8.  
  9. INDEX:
  10.  1.... Introduction
  11.   1.1.   - What is RXDbase.
  12.  
  13.  
  14.  2.... Use of the RXDbase class 
  15.   2.1    - in Java.
  16.   2.2    - in NetRexx.
  17.   2.3    - A detailed explanation of all the methods.
  18.    2.3.2   ** RXDbase constructors in NetRexx **
  19.    2.3.3   ** The CONNECT command **
  20.    2.3.4   ** The DISCONNECT command **
  21.    2.3.5   ** The STATUS command **
  22.    2.3.6   ** The SAVEREC command **
  23.    2.3.7   ** The LOADREC command **
  24.    2.3.8   ** The MODIREC command **
  25.    2.3.9   ** The DELEREC command **
  26.    2.3.10  ** The GETDBINFO command **
  27.    2.3.11  ** The GETDBSTATS command **
  28.    2.3.12  ** The DELETEDB command **
  29.    2.3.13  ** The GLOBALREBUILDIDX command **
  30.    2.3.14  ** The REBUILDIDX command **
  31.    2.3.15  ** The ADDFIELD command **
  32.    2.3.16  ** The DELFIELD command **
  33.    2.3.17  ** The MODFIELDIDX command **
  34.    2.3.18  ** The PACK command **
  35.    2.3.19  ** The GETDBSTATUS command **
  36.    2.3.20  ** The DEFINEFILTER command **
  37.  
  38.  3.... Other stuff
  39.   3.1    - This package contents.
  40.   3.2    - License.
  41.   3.3    - Contacting the author.
  42.   3.4    - Release History.
  43.  
  44.  
  45.  
  46. 1. I N T R O D U C T I O N
  47. --------------------------
  48.  
  49. Notice: NetRexx, OS/2 are copyright of IBM Corp.
  50.         JAVA is a copyright of SUN Microsystems, Inc.
  51.  
  52. Other trademarks in this document are owned by the respective companies.
  53. Whatever. :)
  54.  
  55. NetRexx is a great language, promising to be a 'better Java than Java';
  56. it lacks nonetheless the file I/O APIs.
  57. That's why I've started some months ago to develop RXFile, a NetRexx class
  58. that implements linein, stream, chars and all the rest, plus some other
  59. bonuses. Opening and closing files all day long is anyway no great fun;
  60. there is the need to have a little database handy for all those situations
  61. where JDBC is overkill. Why not to do it directly in NetRexx, then?
  62.  
  63.  
  64.  
  65. 1.1 What is RXDbase.
  66. --------------------
  67.  
  68. My goal is to provide a simple yet efficient database class which will have
  69. the following features:
  70.  
  71.  *) Fixed length fields (this feat may be removed by popular demand).
  72.  *) ISAM and B+Tree indexing.
  73.  *) string-oriented.
  74.  *) easy to use.
  75.  
  76. I did drop the following feature:
  77.  
  78.  *) will have some tools to link a dbase to another (i.e. client + article = sale)
  79.  
  80. Because I plan to insert it into a separate package, to make them better than a timid
  81. attempt to link a couple of databases.
  82.  
  83. It requires RXFile up-to-date, but one copy of this latter is always distributed 
  84. with the RXDbase package; it can be used both from Java (by installing the NetRexx
  85. classes) that from NetRexx (NetRexx is really a translator that generates Java code).
  86. If you ask me what of the two to use, I'll tell you 'NetRexx'.
  87.  
  88. Check by yourself at http://www2.hursley.ibm.com/netrexx/
  89.  
  90.  
  91.  
  92. 2. U S E  O F  T H E  R X D B A S E  C L A S S 
  93. ----------------------------------------------
  94.  
  95.  
  96. 2.1 In JAVA:
  97. ------------
  98.  
  99. Just make sure that your Java environment variables
  100. knows where RXDbase.class is stored, then you can just
  101. add this line to your source:
  102.  
  103. import RXDbase;
  104.  
  105. along with the required NetRexx imports.
  106.  
  107.  
  108. 2.2 In NetRexx:
  109. ---------------
  110.  
  111.  import RXDbase
  112.  
  113. Is required in your NetRexx source file.
  114.  
  115.  
  116.  
  117. 2.3 A detailed explanation of all the methods.
  118. ----------------------------------------------
  119.  
  120.  Why did I state 'methods', and not also 'properties' or 'exceptions' ?
  121. Simply put, the RXDbase class has no public properties (variables), 
  122. and doesn't throw exceptions. Instead, it has methods to find out
  123. if there have been errors, and to query the value of some properties.
  124.  
  125.  
  126. 2.3.1 Before we begin
  127. ---------------------
  128.  
  129. Warning: in this version (0.4) I have changed the syntax of most functions.
  130. This was done because I've added indexes; a great amount of new code has
  131. been written, and while I've managed to keep this package very simple to
  132. use, I had nonetheless to change something also at functions level.
  133. If I can, I'll try not to change anymore the syntax of the functions in
  134. the future; I am pretty confident to succeed, since only a few things
  135. are missing from the code base.
  136. The data format also has changed, so you can't migrate your existing database 
  137. to this new release format. I _promise_ not to change this format anymore.
  138.  
  139. Update: As of release 0.55 I had to change the file format of the RXDbase, because the RXDbase itself has completed the beta stage. RXDbase was given to an Italian firm which produces OS/2 software - it will be included in a commercial package. 
  140. But since RXDbase was derived from a Rexx library that I developed some years ago independently from that firm, I am now porting directly that library, while maintaining the RXDbase syntax and structures. The only thing that will change is the file format, and this already happened it this release. Speaking about file format you will notice that starting from this release I have dropped the use of a .def file, and I don't plan to return to it since the new file format works better without. One advantage of the new file format is that the database can be seen more easily by the programs that can read ascii databases, such as StarOffice from Star Division. 
  141.  
  142. Update: As of release 0.81 I had to change the file format - once again - to accomodate for the presence
  143. on two new features: NO NULLS and NO DUPLICATES.
  144.  
  145. Note: As you may know, the newline sequence is not standard among the operating
  146. systems. I.e., in Unix it's \n, in DOS-Win-OS/2 is \r\n, in Macs is \r etc.
  147. Since the RXDbase format is something like:
  148.  
  149. Y:N|field|..|field<newline>
  150.  
  151. [Where 'Y' at the begin of the line means that the record is valid, and
  152. 'N' means that the record is currently about to be discarded (it is
  153. marked as deleted)]
  154.  
  155. You may think you have to care about what <newline> you will have to use;
  156. the answer is no, RXDbase automatically sets the correct newline 
  157. (currently \n, \r and \r\n are supported, since I know of these) for your system.
  158.  
  159. Cute heh?
  160.  
  161. Limitations: 
  162. *) you cannot have currently more than 1000 fields in a record [upped from 256].
  163. *) you have to have at least an index, but you can choose the type (ISAM or B+Tree).
  164.    (Current limitation: only the ISAM indexing has been implemented)
  165. *) the database name can't be bigger than 4 characters. (yes, I know..)
  166. *) still to do: B+Tree indexing, some neat 'search' function, expanding
  167.    the docs/examples,  providing a function to correct errors in the
  168.    database.
  169.  
  170. In this document all the calls are documented with Java parameter/return
  171. convention. You should be able to guess the correspondant NetRexx syntax.
  172. If you need more help, look at the examples.
  173.  
  174. A note about names:
  175. a database is a collection of records, a record is a collection of fields.
  176.  
  177.     the whole database
  178.  ------------|-------------
  179. /                          \
  180. -------------+-------------+
  181. Massimiliano | Marsiglietti|  <--- A record (_that_ person)
  182. -------------+-------------|
  183. Cristina     | Severi      |
  184. -------------+-------------+
  185.   |
  186.   \---- A field (name of a person)
  187.  
  188.  
  189. 2.3.2 ** RXDbase constructors in NetRexx **
  190. -------------------------------------------
  191.  
  192. Note that the semicolon is optional:
  193.  
  194. MyDB = RXDbase();
  195.  
  196. or
  197.  
  198. MyDB = RXDbase(Rexx rName, Rexx[][] rRec)
  199. MyDB = RXDbase(Rexx rName)
  200.  
  201. The above two constructors works as in the CONNECT command.
  202.  
  203.  
  204. The default return strings for the following functions are: 
  205.  DBNOTSTARTED:              (can't work on nothing)
  206.  READY:                     (no errors)
  207.  SYNTAX ERROR:              (go figure)
  208.  ERROR:FILE ACCESS PROBLEMS (something weird at file level)
  209.  
  210. Unless stated otherwise. More error codes will be introduced as
  211. the RXDbase will be enhanced.
  212.  
  213.  
  214. 2.3.3   ** The CONNECT command **
  215. ---------------------------------
  216.  
  217. This command is the very first to issue, if you have not instantiated
  218. an RXDbase variable with the two-parameters or one-parameter constructor.
  219. If you have, you can omit this command.
  220.  
  221. Syntax:
  222. Rexx connect(Rexx rName, Rexx[][] rRec)
  223.  
  224. Where:
  225. rName is the name of the file _without_any_extension_ that is
  226. hosting/will host the database on the disk.
  227. RXDbase will add the file name extension '.dat' to this name.
  228.  
  229. rRec is a bi-dimensional Rexx array that has to be built this way:
  230.  
  231. rRec[0][0]   --> Number of fields in the database.
  232. rRec[n][0]   --> Length (a whole number stored in a Rexx variable) of field 'n'.
  233. rRec[n][1]   --> Name of field 'n' (it will be used later).
  234. rRec[n][2]   --> Indexing method of the field: it can be any of the following:
  235.                  ISAM = Indexed Sequential Access Method, good if you need
  236.                         to work on the database ordered on this field.
  237.                  B+TREE = Balanced binary tree. Useful if you need to look
  238.                           for a single item quickly. NOT YET IMPLEMENTED.
  239.                  NONE = when you don't do much operations on this field.
  240.  
  241. More on the indexing: if you want a field not to allow null values or duplicate
  242. values, you should append an '1' or a '0' to the indexing string like here:
  243.  
  244. ISAM00 = ISAM indexing, duplicate and null values are allowed.
  245. ISAM11 = ISAM indexing, duplicate and null values are NOT allowed.
  246. ISAM10 = ISAM indexing, duplicate values are NOT allowed, null values are.
  247. ISAM01 = ISAM indexing, duplicate values are allowed, null values are NOT.
  248. NONE0  = No indexing, null values are allowed.
  249. NONE1  = No indexing, null values are NOT allowed.
  250.  
  251. As you may have noticed, you cannot specify 'no duplicate values' for the
  252. no-index strategy of indexing.
  253.  
  254.  
  255. Notes: 
  256. *) you cannot have currently more than 1000 fields in a record.
  257. *) you have to have at least an index, but you can choose the type (ISAM or B+Tree).
  258.    (Current limitation: only the ISAM indexing has been implemented)
  259. *) the database name can't be bigger than 4 characters.
  260. *) when you create a database, several files will be created.
  261.    One, .dat is the real data base; then, you have a file for every index. 
  262.    This was done for speed.
  263.  
  264. Syntax:
  265. Rexx connect(Rexx rName)
  266.  
  267. This command simply connects to an existing database.
  268.  
  269.  
  270. 2.3.4   ** The DISCONNECT command **
  271. ------------------------------------
  272.  
  273. Simply put, this command closes all the db activities for the
  274. database being used.
  275.  
  276. Syntax:
  277. Rexx disconnect()
  278.  
  279.  
  280. 2.3.5   ** The STATUS command **
  281. --------------------------------
  282.  
  283. With this command, you can query the internal status of
  284. the database (ready, dbnotstarted, etc).
  285.  
  286. Syntax:
  287. Rexx status()
  288.  
  289.  
  290. 2.3.6   ** The SAVEREC command **
  291. ---------------------------------
  292.  
  293. This command lets you write a record on disk.
  294. All of the indexes are automatically updated.
  295.  
  296. Syntax:
  297. Rexx saverec(Rexx[][] rToSave, Rexx rMode)
  298.  
  299. Where rMode can only be 'overwrite' or 'append' (case isn't 
  300. significative). 
  301.  
  302. rToSave is to be built this way:
  303.  
  304. rToSave[0,0]  --> number of records to be written.
  305. rToSave[n,m]  --> field n of record m. 
  306.                   Warning: both n,m are to start from 1 (one).
  307.  
  308. Warning: When you specify 'overwrite', _the_whole_database_
  309. will be overwritten (deleted), and the indexes will be resetted.
  310.  
  311. Returns:
  312.  
  313. An appropriate error message is shown in case of errors, else you 
  314. will be returned a Rexx string, in which every character is
  315. either '0' or '1', where '0' means that the specified record
  316. was not succesfully saved (a null value where nulls weren't allowed,
  317. or a duplicate value where there sholdn't be any) and a '1' means
  318. that the record was saved succesfully.
  319. The position of the character is corresponding to the passed record 
  320. number, ie if I try to save 3 record and I get '010', that means
  321. that only the 2-nd record among the ones passed to SAVEREC was saved 
  322. succesfully.
  323.  
  324.  
  325.  
  326. 2.3.7   ** The LOADREC command **
  327. ---------------------------------
  328.  
  329. Loadrec loads in memory a number of records from the
  330. database.
  331.  
  332. Syntax:
  333. Rexx[][] loadrec(Rexx rIdx, Rexx rHowManyRec, Rexx rStart, boolean bForward)
  334.  
  335. Where:
  336. rIdx         --> an EXISTING index to use as a reference. It can be a number
  337.                  (i.e. rIdx = 1 means 'the index on the first field')
  338.                  or a name (that field's EXACT name, i.e. "Name").
  339. rHowManyRec  --> the number of the records to be loaded, ie '72'.
  340.                  It can also have the value 'ALL', meaning you
  341.                  want all of the records from rStart on.
  342. rStart       --> starting record. The first record is labeled '1'.
  343.                  A valid value for this variable is also 'LAST', which
  344.                  means 'go to the last record'.
  345. bForward     --> If "1", it means take rHowManyRec records starting from rStart on,
  346.                  else it means take them from rStart back.
  347.  
  348. It returns a bidimensional array which is made this way:
  349.  
  350. rArray[0,0]  --> number of returned records.
  351. rArray[0,1]  --> number of returned active records.
  352. rArray[n,m]  --> field n of record m (m = 1 to rArray[0,0]).
  353. rArray[N+1, m] --> "Y" or "N", depending on the given record: "Y" means active,
  354.                    "N" means deleted (only active records are returned, as of this
  355.                    release).
  356. rArray[N+2, m] --> position of the m-th record on the archive (NOT on the index).
  357. rArray[N+3, m] --> position of the m-th record on the used index (NOT on the archive);
  358.                    this information is meaningless if a filter (see DEFINEFILTER) 
  359.                    is present.
  360.  
  361. Notes:
  362.  
  363. When you have defined a filter (see DEFINEFILTER) only the
  364. rIdx parameter is meaningful.
  365.  
  366. When you delete a record, you only mark it 'deleted', 
  367. and in fact you can undelete it, unless you use the PACK 
  368. function.
  369.  
  370. The 'z+1'-th field, where 'z' is the total number of fields, 
  371. will be a 'V' or 'D'. The latter means 'Deleted', the former 'Valid'.
  372. You shouldn't get 'D'eleted records, since you load by means of
  373. the index, which doesn't tracks deleted fields.
  374.  
  375. The 'z+2'-th field, where 'z' is the total number of fields, 
  376. is the real record's position in the database.
  377.  
  378. The 'z+3'-th field, where 'z' is the total number of fields, 
  379. is the record's position in the index used for loadrec.
  380.  
  381.  
  382. 2.3.8   ** The MODIREC command **
  383. ---------------------------------
  384.  
  385. Modirec is used to modify one or more records in the database.
  386.  
  387. Syntax:
  388. Rexx modirec(Rexx[][] rToModi)
  389.  
  390. rToModi is to be built this way:
  391.  
  392. rToModi[0][0]  --> Number of records to be modified
  393. rToModi[n][m]  --> field n of the m-th record to be
  394.                    modified. n and m always start from 1 (one).
  395. rToModi[0][m]  --> ACTUAL number of the record in the database
  396.                    (NOT A NUMBER RELATIVE TO AN INDEX)
  397.                    to be overwritten. The first record in
  398.                    the database is marked as '1'.
  399.  
  400. Warning: this method doesn't update single fields,
  401. it overwrites whole records.
  402.  
  403. Note: there is not an order on the records to be modified,
  404. i.e. you can have:
  405.  
  406. rToModi[0][1] = 5
  407. rToModi[0][2] = 3
  408. rToModi[0][3] = 18
  409.  
  410. Returns:
  411.  
  412. An appropriate error message is shown in case of errors, else you 
  413. will be returned a Rexx string, in which every character is
  414. either '0' or '1', where '0' means that the specified record
  415. was not succesfully saved (a null value where nulls weren't allowed,
  416. or a duplicate value where there sholdn't be any) and a '1' means
  417. that the record was saved succesfully.
  418. The position of the character is corresponding to the passed record 
  419. number, ie if I try to save 3 record and I get '010', that means
  420. that only the 2-nd record among the ones passed to MODIREC was saved 
  421. succesfully.
  422.  
  423.  
  424.  
  425. 2.3.9   ** The DELEREC command **
  426. ---------------------------------
  427.  
  428. Delerec is used to delete/undelete one or more records.
  429.  
  430. Syntax:
  431. Rexx delerec(Rexx[] rToDele, boolean bDelete)
  432.  
  433. rToDele[0] has to be the total number of records to be
  434. (un)deleted, and rToDele[n] is the ACTUAL position of 
  435. the n-th record to be (un)deleted on the database
  436. (NOT A NUMBER RELATIVE TO AN INDEX). 
  437. The first record on the database is 1 (one).
  438.  
  439. When bDelete = 1, the records are to be deleted,
  440. when bDelete = 0, the records are to be undeleted.
  441.  
  442. No errors will come by deleting an already deleted record,
  443. or the other way around.
  444.  
  445. Modirec returns one of the standard RXDbase error codes.
  446.  
  447.  
  448. 2.3.10  ** The GETDBINFO command **
  449. -----------------------------------
  450.  
  451. This command returns the database structure (names and field
  452. length, along with the number of fields).
  453.  
  454. Syntax:
  455. Rexx[][] getdbinfo()
  456.  
  457. The returned values are: (let's say we stored the contents in rRec[][])
  458.  
  459. rRec[0][0]   --> Number of fields in the database.
  460. rRec[n][0]   --> Length (a whole number stored in a Rexx variable) of field 'n'.
  461. rRec[n][1]   --> Name of field 'n'.
  462. rRec[n][2]   --> Indexing method of the field: it can be any of the following:
  463.                  ISAMXX = Indexed Sequential Access Method, good if you need
  464.                           to work on the database ordered on this field.
  465.                           XX = 00, 01, 10, 11.
  466.                  B+TREE = Balanced binary tree. Useful if you need to look
  467.                           for a single item quickly. NOT YET IMPLEMENTED.
  468.                  NONEX = when you don't do much operations on this field.
  469.                          X = 0, 1.
  470. See the "connect" method for a listing of valid XX, X values.
  471.  
  472.  
  473.  
  474.  
  475. 2.3.11  ** The GETDBSTATS command **
  476. ------------------------------------
  477.  
  478. This command returns some useful statistics about the database.
  479.  
  480. Syntax:
  481. Rexx[] getdbstats()
  482.  
  483. This function returns a vector in which:
  484.  
  485. Element 0 is the db size in bytes.
  486. Element 1 is the record size in bytes.
  487. Element 2 is the total number of records in the database.
  488. Element 3 is the number of active records (not marked with 'D') in the database.
  489.  
  490.  
  491.  
  492. 2.3.12  ** The DELETEDB command **
  493. ----------------------------------
  494.  
  495. This command deletes an entire database, indexes and all.
  496.  
  497. Syntax:
  498. Rexx deletedb(Rexx rDbName)
  499.  
  500.  
  501.  
  502. 2.3.13  ** The GLOBALREBUILDIDX command **
  503. ---------------------------------------
  504.  
  505. With this command you can rebuild all the indexes of the database currently in use.
  506. Useful to correct errors, or to restore all the indexes after a backup+restore.
  507. (This way if you need to backup your archives, you can backup only the .dat file,
  508. and issueing the globalrebuildidx command after the restore you will get back all of
  509. your indexes).
  510.  
  511. Syntax:
  512. Rexx globalrebuildidx()
  513.  
  514. Note: It may take some time to execute.
  515.  
  516.  
  517.  
  518. 2.3.14  ** The REBUILDIDX command **
  519. ------------------------------------
  520.  
  521. This command is similar to globalrebuildidx, but must be invoked explicitly on an index.
  522.  
  523. Syntax:
  524.  
  525. Rexx rebuildidx(Rexx rFieldName)
  526.  
  527. Note: As ever, rFieldName can be the name of the field (ie, 'name') or the number which
  528. references the field (ie, '4', if the 4-th field is 'name').
  529.  
  530.  
  531.  
  532. 2.3.15  ** The ADDFIELD command **
  533. ----------------------------------
  534.  
  535. With this command you can add a field to a database; you can also specify an
  536. index, which will be built automatically for you.
  537.  
  538. Syntax:
  539.  
  540. Rexx addfield(Rexx rFieldName, Rexx rFieldLength, Rexx rFieldIndexingMethod)
  541.  
  542. Notes: Don't use names already in use in the same database, and specify a valid
  543. indexing method (currently supported: "ISAMxx" and "NONEx"); The new fields' contents
  544. will be blank for all records (of course).
  545. See the "connect" method for a listing of valid XX, X values.
  546.  
  547.  
  548.  
  549. 2.3.16  ** The DELFIELD command **
  550. ----------------------------------
  551.  
  552. With this command you can delete a field from a database, including indexes (if any).
  553.  
  554. Syntax:
  555.  
  556. Rexx delfield(Rexx rFieldName)
  557.  
  558. Note: As ever, rFieldName can be the name of the field (ie, 'name') or the number which
  559. references the field (ie, '4', if the 4-th field is 'name').
  560.  
  561. Warning: The field will disappear *physically* from the archive. No undo, no restore, zippo.
  562.  
  563.  
  564.  
  565. 2.3.17  ** The MODFIELDIDX command **
  566. -------------------------------------
  567.  
  568. Modfieldidx lets you modify the indexing method for a given, existing, field.
  569. It automatically rebuilds the index, if passing from no index to some kind of index.
  570. It is useful if you decide that you don't need anymore an index, or if you think
  571. that you should have put an index on a field at database definion time, but you
  572. didn't.
  573.  
  574. Syntax:
  575.  
  576. Rexx modfieldidx(Rexx rFieldName, Rexx rFieldIndexingMethod)
  577.  
  578. Note: rFieldIndexingMethod can be one of the following: "ISAMXX", "NONEX".
  579. See the "connect" method for a listing of valid XX, X values.
  580.  
  581.  
  582.  
  583. 2.3.18  ** The PACK command **
  584. ------------------------------
  585.  
  586. When you delete a record by means of the DELEREC function, that record doesn't physically
  587. get deleted from the archive, it is instead marked as 'deleted'.
  588. PACK does what the name says, it permanently deletes records from the archive, updating
  589. automatically all the indexes.
  590.  
  591. Syntax:
  592.  
  593. Rexx pack()
  594.  
  595.  
  596.  
  597. 2.3.19  ** The GETDBSTATUS command **
  598. -------------------------------------
  599.  
  600. This command lets you retrieve the RXDbase revision and the presence of a filter.
  601.  
  602. Syntax:
  603.  
  604. Rexx[] getdbstatus()
  605.  
  606. Returns:
  607.  
  608. rVar[0] = "No Filter" or "Filter Present" or "No DB loaded"
  609. rVar[1] = RXDbase version number (e.g. "RXDbase 0.84 Max Marsiglietti 1997").
  610.  
  611.  
  612.  
  613. 2.3.20  ** The DEFINEFILTER command **
  614. --------------------------------------
  615.  
  616. By means of this command you can specify a filter with which all subsequent LOADREC calls
  617. will have to comply.
  618.  
  619. Syntax:
  620.  
  621. Rexx definefilter(Rexx[])
  622.  
  623. Parameters:
  624.  
  625. rVar[0] = number of filter conditions.
  626. rVar[1] .. [N] = The filter conditions.
  627.  
  628. Note:
  629. Valid filter conditions are:
  630. <fieldname> <operator> <value>
  631.  
  632. Where <fieldname> is a valid field name, e.g. 'Name'.
  633.       <operator> can be one of the following: =,<>,>,>=,<,<=
  634.       <value> is a valid value for that field, e.g. 'Robert'
  635.  
  636. Wildcards are allowed only for the = and <> operators, and they are represented by
  637. the symbol '*', which means "every number of any character".
  638. So, Ro* can be Robert, Ronald, etc. 
  639.     *t can be Matt, Robert, etc.
  640.     M*t can be Matt, mount, etc. (The search is always case-insensitive)
  641.  
  642. You can use only one '*' on a given filter (e.g. you can't query for "Name = *u*i*l*"),
  643. with the notable exception of the form *value*, which means "find a substring anywhere
  644. that is equal to 'value'".
  645. Example: "Telephone = *555*" will search for all phone numbers with a 555 in them.
  646.  
  647. Your filter conditions will not produce anything until the next LOADREC command is issued,
  648. from them on all the calls to LOADREC will use your filter. When requesting records, if
  649. a filter condition is present, the infos about the absolute position on the index of the
  650. records will not be meaningful.
  651.  
  652. If you specify a filter condition when another one is in use, the first one will be
  653. dropped, and the most recent one will be used.
  654.  
  655. Passing an array which has as the 0-th element the null string or the "" value will reset
  656. the filter conditions.
  657.  
  658.  
  659.  
  660. 3. O T H E R   S T U F F
  661. ------------------------
  662.  
  663.  
  664.  
  665. 3.1 THIS PACKAGE CONTENTS
  666. -------------------------
  667.  
  668. This package should contain:
  669.  
  670.  RXDbase.doc   .. this document.
  671.  RXDbase.class .. the RXDbase class for NetRexx (and Java).
  672.  *.nrx         .. Examples for the RXDbase class.
  673.  RIOXXX.ZIP    .. Latest version (XXX) of RXfile.
  674.  MaxBase.*     .. Latest MaxBase .class file, readme.
  675.  Readme.1st    .. Last addenda. Start there, please.
  676.  
  677.  
  678. 3.2 LICENSE
  679. ------------
  680.  
  681. This is all still up in the air. In the meantime, you can freely
  682. use this release in your programs, be them for personal use and/or 
  683. commercial use, provided that you give the author notice of this.
  684. I am not responsible or liable in any way for any damages 
  685. deriving from the use of this product. Use it at your own risk.
  686. (I strongly recommend you think twice before basing your work on alfa code)
  687. The sources are not provided, and you cannot modify or disassemble
  688. the class, in any way. Also, if you re-distribute this program, you cannot
  689. charge any money for it, apart from media costs (eg. diskette cost), and you
  690. can not re-distribute single parts of the original .zip file, or repackage 
  691. with purposes differents from changing the compression strategy.
  692. If you plan to use this class on a project of yours, you must give credits
  693. to the author (Max Marsiglietti) of this.
  694.  
  695. RXDBase is (c) Max Marsiglietti 1996.
  696.  
  697.  
  698.  
  699. 3.3 CONTACTING THE AUTHOR
  700. -------------------------
  701.  
  702. If you find any bug, or have suggestions, please 
  703. report all of your comments to:
  704.  
  705.  Max Marsiglietti, 
  706.  
  707.  E-mail:
  708.   maxmars@pianeta.it (Internet), 2:332/529.12 (Fidonet)
  709.  
  710.  Snail Mail:
  711.   V.Landino 13, 
  712.   41049, Sassuolo (MO)
  713.   Italy.
  714.  
  715.  
  716.  
  717. 3.4 History
  718. -----------
  719.  
  720. Still in alfa. Will write something here from 1.0 on.
  721.  
  722. Thanks, and good work with RXDbase!
  723.  
  724. EOF
  725.