mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-10-30 07:05:46 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| ** 2010 August 30
 | |
| **
 | |
| ** The author disclaims copyright to this source code.  In place of
 | |
| ** a legal notice, here is a blessing:
 | |
| **
 | |
| **    May you do good and not evil.
 | |
| **    May you find forgiveness for yourself and forgive others.
 | |
| **    May you share freely, never taking more than you give.
 | |
| **
 | |
| *************************************************************************
 | |
| */
 | |
| 
 | |
| #ifndef _SQLITE3RTREE_H_
 | |
| #define _SQLITE3RTREE_H_
 | |
| 
 | |
| #include <sqlite3.h>
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| 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
 | |
| ** R-Tree geometry query as follows:
 | |
| **
 | |
| **   SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
 | |
| */
 | |
| int sqlite3_rtree_geometry_callback(
 | |
|   sqlite3 *db,
 | |
|   const char *zGeom,
 | |
|   int (*xGeom)(sqlite3_rtree_geometry*, int, sqlite3_rtree_dbl*,int*),
 | |
|   void *pContext
 | |
| );
 | |
| 
 | |
| 
 | |
| /*
 | |
| ** A pointer to a structure of the following type is passed as the first
 | |
| ** argument to callbacks registered using rtree_geometry_callback().
 | |
| */
 | |
| struct sqlite3_rtree_geometry {
 | |
|   void *pContext;                 /* Copy of pContext passed to s_r_g_c() */
 | |
|   int nParam;                     /* Size of array aParam[] */
 | |
|   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: Visibility */
 | |
|   sqlite3_rtree_dbl rScore;         /* OUT: Write the score here */
 | |
|   /* The following fields are only available in 3.8.11 and later */
 | |
|   sqlite3_value **apSqlParam;       /* Original SQL values of parameters */
 | |
| };
 | |
| 
 | |
| /*
 | |
| ** 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 */
 | |
| #endif
 | |
| 
 | |
| #endif  /* ifndef _SQLITE3RTREE_H_ */
 |