Annotation of embedaddon/sqlite3/ext/rtree/README, revision 1.1.1.1

1.1       misho       1: 
                      2: This directory contains an SQLite extension that implements a virtual 
                      3: table type that allows users to create, query and manipulate r-tree[1] 
                      4: data structures inside of SQLite databases. Users create, populate 
                      5: and query r-tree structures using ordinary SQL statements.
                      6: 
                      7:     1.  SQL Interface
                      8: 
                      9:         1.1  Table Creation
                     10:         1.2  Data Manipulation
                     11:         1.3  Data Querying
                     12:         1.4  Introspection and Analysis
                     13: 
                     14:     2.  Compilation and Deployment
                     15: 
                     16:     3.  References
                     17: 
                     18: 
                     19: 1. SQL INTERFACE
                     20: 
                     21:   1.1 Table Creation.
                     22: 
                     23:     All r-tree virtual tables have an odd number of columns between
                     24:     3 and 11. Unlike regular SQLite tables, r-tree tables are strongly 
                     25:     typed. 
                     26: 
                     27:     The leftmost column is always the pimary key and contains 64-bit 
                     28:     integer values. Each subsequent column contains a 32-bit real
                     29:     value. For each pair of real values, the first (leftmost) must be 
                     30:     less than or equal to the second. R-tree tables may be 
                     31:     constructed using the following syntax:
                     32: 
                     33:       CREATE VIRTUAL TABLE <name> USING rtree(<column-names>)
                     34: 
                     35:     For example:
                     36: 
                     37:       CREATE VIRTUAL TABLE boxes USING rtree(boxno, xmin, xmax, ymin, ymax);
                     38:       INSERT INTO boxes VALUES(1, 1.0, 3.0, 2.0, 4.0);
                     39: 
                     40:     Constructing a virtual r-tree table <name> creates the following three
                     41:     real tables in the database to store the data structure:
                     42: 
                     43:       <name>_node
                     44:       <name>_rowid
                     45:       <name>_parent
                     46: 
                     47:     Dropping or modifying the contents of these tables directly will
                     48:     corrupt the r-tree structure. To delete an r-tree from a database,
                     49:     use a regular DROP TABLE statement:
                     50: 
                     51:       DROP TABLE <name>;
                     52: 
                     53:     Dropping the main r-tree table automatically drops the automatically
                     54:     created tables. 
                     55: 
                     56:   1.2 Data Manipulation (INSERT, UPDATE, DELETE).
                     57: 
                     58:     The usual INSERT, UPDATE or DELETE syntax is used to manipulate data
                     59:     stored in an r-tree table. Please note the following:
                     60: 
                     61:       * Inserting a NULL value into the primary key column has the
                     62:         same effect as inserting a NULL into an INTEGER PRIMARY KEY
                     63:         column of a regular table. The system automatically assigns
                     64:         an unused integer key value to the new record. Usually, this
                     65:         is one greater than the largest primary key value currently
                     66:         present in the table.
                     67: 
                     68:       * Attempting to insert a duplicate primary key value fails with
                     69:         an SQLITE_CONSTRAINT error.
                     70: 
                     71:       * Attempting to insert or modify a record such that the value
                     72:         stored in the (N*2)th column is greater than that stored in
                     73:         the (N*2+1)th column fails with an SQLITE_CONSTRAINT error.
                     74: 
                     75:       * When a record is inserted, values are always converted to 
                     76:         the required type (64-bit integer or 32-bit real) as if they
                     77:         were part of an SQL CAST expression. Non-numeric strings are
                     78:         converted to zero.
                     79: 
                     80:   1.3 Queries.
                     81: 
                     82:     R-tree tables may be queried using all of the same SQL syntax supported
                     83:     by regular tables. However, some query patterns are more efficient
                     84:     than others.
                     85: 
                     86:     R-trees support fast lookup by primary key value (O(logN), like 
                     87:     regular tables).
                     88: 
                     89:     Any combination of equality and range (<, <=, >, >=) constraints
                     90:     on spatial data columns may be used to optimize other queries. This
                     91:     is the key advantage to using r-tree tables instead of creating 
                     92:     indices on regular tables.
                     93: 
                     94:   1.4 Introspection and Analysis.
                     95: 
                     96:     TODO: Describe rtreenode() and rtreedepth() functions.
                     97: 
                     98: 
                     99: 2. COMPILATION AND USAGE
                    100: 
                    101:   The easiest way to compile and use the RTREE extension is to build
                    102:   and use it as a dynamically loadable SQLite extension. To do this
                    103:   using gcc on *nix:
                    104: 
                    105:     gcc -shared rtree.c -o libSqliteRtree.so
                    106: 
                    107:   You may need to add "-I" flags so that gcc can find sqlite3ext.h
                    108:   and sqlite3.h. The resulting shared lib, libSqliteRtree.so, may be
                    109:   loaded into sqlite in the same way as any other dynamicly loadable
                    110:   extension.
                    111: 
                    112: 
                    113: 3. REFERENCES
                    114: 
                    115:   [1]  Atonin Guttman, "R-trees - A Dynamic Index Structure For Spatial 
                    116:        Searching", University of California Berkeley, 1984.
                    117: 
                    118:   [2]  Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider, Bernhard Seeger,
                    119:        "The R*-tree: An Efficient and Robust Access Method for Points and
                    120:        Rectangles", Universitaet Bremen, 1990.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>