Annotation of embedaddon/sqlite3/ext/rtree/README, revision 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>