| Index: third_party/sqlite/src/ext/rtree/sqlite3rtree.h
|
| diff --git a/third_party/sqlite/src/ext/rtree/sqlite3rtree.h b/third_party/sqlite/src/ext/rtree/sqlite3rtree.h
|
| index cffb300092ef1d8bf89065067f9584b22633281f..5de0508d002380b2e94fadf88341104abf8e258d 100644
|
| --- a/third_party/sqlite/src/ext/rtree/sqlite3rtree.h
|
| +++ b/third_party/sqlite/src/ext/rtree/sqlite3rtree.h
|
| @@ -21,6 +21,16 @@ extern "C" {
|
| #endif
|
|
|
| typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
|
| +typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info;
|
| +
|
| +/* The double-precision datatype used by RTree depends on the
|
| +** SQLITE_RTREE_INT_ONLY compile-time option.
|
| +*/
|
| +#ifdef SQLITE_RTREE_INT_ONLY
|
| + typedef sqlite3_int64 sqlite3_rtree_dbl;
|
| +#else
|
| + typedef double sqlite3_rtree_dbl;
|
| +#endif
|
|
|
| /*
|
| ** Register a geometry callback named zGeom that can be used as part of an
|
| @@ -31,7 +41,7 @@ typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
|
| int sqlite3_rtree_geometry_callback(
|
| sqlite3 *db,
|
| const char *zGeom,
|
| - int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
|
| + int (*xGeom)(sqlite3_rtree_geometry*, int, sqlite3_rtree_dbl*,int*),
|
| void *pContext
|
| );
|
|
|
| @@ -43,11 +53,60 @@ int sqlite3_rtree_geometry_callback(
|
| struct sqlite3_rtree_geometry {
|
| void *pContext; /* Copy of pContext passed to s_r_g_c() */
|
| int nParam; /* Size of array aParam[] */
|
| - double *aParam; /* Parameters passed to SQL geom function */
|
| + sqlite3_rtree_dbl *aParam; /* Parameters passed to SQL geom function */
|
| void *pUser; /* Callback implementation user data */
|
| void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */
|
| };
|
|
|
| +/*
|
| +** Register a 2nd-generation geometry callback named zScore that can be
|
| +** used as part of an R-Tree geometry query as follows:
|
| +**
|
| +** SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zQueryFunc(... params ...)
|
| +*/
|
| +int sqlite3_rtree_query_callback(
|
| + sqlite3 *db,
|
| + const char *zQueryFunc,
|
| + int (*xQueryFunc)(sqlite3_rtree_query_info*),
|
| + void *pContext,
|
| + void (*xDestructor)(void*)
|
| +);
|
| +
|
| +
|
| +/*
|
| +** A pointer to a structure of the following type is passed as the
|
| +** argument to scored geometry callback registered using
|
| +** sqlite3_rtree_query_callback().
|
| +**
|
| +** Note that the first 5 fields of this structure are identical to
|
| +** sqlite3_rtree_geometry. This structure is a subclass of
|
| +** sqlite3_rtree_geometry.
|
| +*/
|
| +struct sqlite3_rtree_query_info {
|
| + void *pContext; /* pContext from when function registered */
|
| + int nParam; /* Number of function parameters */
|
| + sqlite3_rtree_dbl *aParam; /* value of function parameters */
|
| + void *pUser; /* callback can use this, if desired */
|
| + void (*xDelUser)(void*); /* function to free pUser */
|
| + sqlite3_rtree_dbl *aCoord; /* Coordinates of node or entry to check */
|
| + unsigned int *anQueue; /* Number of pending entries in the queue */
|
| + int nCoord; /* Number of coordinates */
|
| + int iLevel; /* Level of current node or entry */
|
| + int mxLevel; /* The largest iLevel value in the tree */
|
| + sqlite3_int64 iRowid; /* Rowid for current entry */
|
| + sqlite3_rtree_dbl rParentScore; /* Score of parent node */
|
| + int eParentWithin; /* Visibility of parent node */
|
| + int eWithin; /* OUT: Visiblity */
|
| + sqlite3_rtree_dbl rScore; /* OUT: Write the score here */
|
| +};
|
| +
|
| +/*
|
| +** Allowed values for sqlite3_rtree_query.eWithin and .eParentWithin.
|
| +*/
|
| +#define NOT_WITHIN 0 /* Object completely outside of query region */
|
| +#define PARTLY_WITHIN 1 /* Object partially overlaps query region */
|
| +#define FULLY_WITHIN 2 /* Object fully contained within query region */
|
| +
|
|
|
| #ifdef __cplusplus
|
| } /* end of the 'extern "C"' block */
|
|
|