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>