@@ -657,11 +657,11 @@
657 657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
658 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
659 659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
660 660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION "3.7.12"
661 661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION_NUMBER 3007012
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2012-03-31 19:12:23 af602d87736b52802a4e760ffeeaa28112b99d9a"
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2012-04-17 09:09:33 8e2363ad76446e863d03ead91fd621e59d5cb495"
663 663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
664 664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
665 665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
666 666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version, sqlite3_sourceid
667 667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -2095,11 +2095,11 @@
2095 2095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database connection is opened. By default, URI handling is globally
2096 2096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** disabled. The default value may be changed by compiling with the
2097 2097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_USE_URI] symbol defined.
2098 2098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2099 2099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]]
2100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFNIG_GETPCACHE
2100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE
2101 2101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd> These options are obsolete and should not be used by new code.
2102 2102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** They are retained for backwards compatibility but are now no-ops.
2103 2103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dl>
2104 2104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2105 2105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
@@ -7533,11 +7533,15 @@
7533 7533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
7534 7534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7535 7535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_rtree_geometry_callback(
7536 7536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db,
7537 7537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zGeom,
7538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
7538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_RTREE_INT_ONLY
7539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry*, int n, sqlite3_int64 *a, int *pRes),
7540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
7541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry*, int n, double *a, int *pRes),
7542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
7539 7543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pContext
7540 7544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
7541 7545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7542 7546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7543 7547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -10933,11 +10937,10 @@
10933 10937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRef; /* Number of names resolved by this context */
10934 10938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nErr; /* Number of errors encountered while resolving names */
10935 10939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 allowAgg; /* Aggregate functions allowed here */
10936 10940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 hasAgg; /* True if aggregates are seen */
10937 10941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 isCheck; /* True if resolving names in a CHECK constraint */
10938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDepth; /* Depth of subquery recursion. 1 for no recursion */
10939 10942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AggInfo *pAggInfo; /* Information about aggregates at this level */
10940 10943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NameContext *pNext; /* Next outer name context. NULL for outermost */
10941 10944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
10942 10945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10943 10946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -11399,10 +11402,11 @@
11399 11402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */
11400 11403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse; /* Parser context. */
11401 11404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
union { /* Extra data for callback */
11402 11405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NameContext *pNC; /* Naming context */
11403 11406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* Integer value */
11407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcList *pSrcList; /* FROM clause */
11404 11408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} u;
11405 11409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
11406 11410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11407 11411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Forward declarations */
11408 11412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3WalkExpr(Walker*, Expr*);
@@ -11767,11 +11771,11 @@
11767 11771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int);
11768 11772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int);
11769 11773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*);
11770 11774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int);
11771 11775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*);
11772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int);
11776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,u8);
11773 11777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3*);
11774 11778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void);
11775 11779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void);
11776 11780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3*);
11777 11781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*);
@@ -24995,12 +24999,12 @@
24995 24999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DEFAULT_FILE_PERMISSIONS
24996 25000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_DEFAULT_FILE_PERMISSIONS 0644
24997 25001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24998 25002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24999 25003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Default permissions when creating auto proxy dir
25001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
25004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Default permissions when creating auto proxy dir
25005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
25002 25006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
25003 25007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755
25004 25008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
25005 25009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25006 25010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -25550,11 +25554,11 @@
25550 25554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
25551 25555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
25552 25556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25553 25557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25554 25558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Invoke open(). Do so multiple times, until it either succeeds or
25555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** files for some reason other than EINTR.
25559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fails for some reason other than EINTR.
25556 25560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
25557 25561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the file creation mode "m" is 0 then set it to the default for
25558 25562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite. The default is SQLITE_DEFAULT_FILE_PERMISSIONS (normally
25559 25563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 0644) as modified by the system umask. If m is not 0, then
25560 25564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** make the file creation mode be exactly m ignoring the umask.
@@ -25566,24 +25570,33 @@
25566 25570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** transaction crashes and leaves behind hot journals, then any
25567 25571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** process that is able to write to the database will also be able to
25568 25572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** recover the hot journals.
25569 25573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25570 25574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int robust_open(const char *z, int f, mode_t m){
25571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
25575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fd;
25572 25576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mode_t m2;
25573 25577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mode_t origM = 0;
25574 25578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m==0 ){
25575 25579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m2 = SQLITE_DEFAULT_FILE_PERMISSIONS;
25576 25580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
25577 25581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m2 = m;
25578 25582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
origM = osUmask(0);
25579 25583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
25580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{ rc = osOpen(z,f,m2); }while( rc<0 && errno==EINTR );
25584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{
25585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(O_CLOEXEC)
25586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fd = osOpen(z,f|O_CLOEXEC,m2);
25587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
25588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fd = osOpen(z,f,m2);
25589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
25590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( fd<0 && errno==EINTR );
25581 25591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m ){
25582 25592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osUmask(origM);
25583 25593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
25584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
25594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
25595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fd>=0 ) osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
25596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
25597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return fd;
25585 25598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
25586 25599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25587 25600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25588 25601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Helper functions to obtain and relinquish the global mutex. The
25589 25602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** global mutex is used to protect the unixInodeInfo and
@@ -28374,13 +28387,10 @@
28374 28387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
28375 28388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ii>0 ){
28376 28389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDirname[ii] = '\0';
28377 28390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
28378 28391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fd>=0 ){
28379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef FD_CLOEXEC
28380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
28381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
28382 28392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
28383 28393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28384 28394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28385 28395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pFd = fd;
28386 28396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
@@ -28459,11 +28469,11 @@
28459 28469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the user has configured a chunk-size for this file, truncate the
28460 28470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file so that it consists of an integer number of chunks (i.e. the
28461 28471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** actual file size after the operation may be larger than the requested
28462 28472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** size).
28463 28473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
28464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile->szChunk ){
28474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFile->szChunk>0 ){
28465 28475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
28466 28476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28467 28477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28468 28478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = robust_ftruncate(pFile->h, (off_t)nByte);
28469 28479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
@@ -30221,14 +30231,10 @@
30221 30231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else{
30222 30232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->openFlags = openFlags;
30223 30233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30224 30234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
30225 30235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef FD_CLOEXEC
30227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
30228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
30229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
30230 30236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
noLock = eType!=SQLITE_OPEN_MAIN_DB;
30231 30237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30232 30238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30233 30239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
30234 30240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fstatfs(fd, &fsInfo) == -1 ){
@@ -38001,10 +38007,15 @@
38001 38007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define ROWSET_ENTRY_PER_CHUNK \
38002 38008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry))
38003 38009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38004 38010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38005 38011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Each entry in a RowSet is an instance of the following object.
38012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
38013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This same object is reused to store a linked list of trees of RowSetEntry
38014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** objects. In that alternative use, pRight points to the next entry
38015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the list, pLeft points to the tree, and v is unused. The
38016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** RowSet.pForest value points to the head of this forest list.
38006 38017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38007 38018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry {
38008 38019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 v; /* ROWID value for this entry */
38009 38020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pRight; /* Right subtree (larger entries) or list */
38010 38021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pLeft; /* Left subtree (smaller entries) */
@@ -38030,16 +38041,22 @@
38030 38041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetChunk *pChunk; /* List of all chunk allocations */
38031 38042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db; /* The database connection */
38032 38043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pEntry; /* List of entries using pRight */
38033 38044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pLast; /* Last entry on the pEntry list */
38034 38045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pFresh; /* Source of new entry objects */
38035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct RowSetEntry *pTree; /* Binary tree of entries */
38046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetEntry *pForest; /* List of binary trees of entries */
38036 38047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 nFresh; /* Number of objects on pFresh */
38037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 isSorted; /* True if pEntry is sorted */
38048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 rsFlags; /* Various flags */
38038 38049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 iBatch; /* Current insert batch */
38039 38050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
38040 38051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
38053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Allowed values for RowSet.rsFlags
38054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
38055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ROWSET_SORTED 0x01 /* True if RowSet.pEntry is sorted */
38056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ROWSET_NEXT 0x02 /* True if sqlite3RowSetNext() has been called */
38057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38041 38058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38042 38059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Turn bulk memory into a RowSet object. N bytes of memory
38043 38060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are available at pSpace. The db pointer is used as a memory context
38044 38061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for any subsequent allocations that need to occur.
38045 38062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return a pointer to the new RowSet object.
@@ -38056,14 +38073,14 @@
38056 38073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = pSpace;
38057 38074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pChunk = 0;
38058 38075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->db = db;
38059 38076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pEntry = 0;
38060 38077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pLast = 0;
38061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pTree = 0;
38078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pForest = 0;
38062 38079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p);
38063 38080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry));
38064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->isSorted = 1;
38081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->rsFlags = ROWSET_SORTED;
38065 38082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iBatch = 0;
38066 38083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p;
38067 38084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38068 38085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38069 38086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -38079,12 +38096,37 @@
38079 38096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38080 38097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pChunk = 0;
38081 38098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nFresh = 0;
38082 38099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pEntry = 0;
38083 38100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pLast = 0;
38084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pTree = 0;
38085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->isSorted = 1;
38101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pForest = 0;
38102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->rsFlags = ROWSET_SORTED;
38103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
38106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Allocate a new RowSetEntry object that is associated with the
38107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** given RowSet. Return a pointer to the new and completely uninitialized
38108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** objected.
38109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
38110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In an OOM situation, the RowSet.db->mallocFailed flag is set and this
38111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine returns NULL.
38112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
38113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static struct RowSetEntry *rowSetEntryAlloc(RowSet *p){
38114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
38115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nFresh==0 ){
38116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetChunk *pNew;
38117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew));
38118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew==0 ){
38119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
38120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->pNextChunk = p->pChunk;
38122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pChunk = pNew;
38123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pFresh = pNew->aEntry;
38124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nFresh = ROWSET_ENTRY_PER_CHUNK;
38125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nFresh--;
38127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p->pFresh++;
38086 38128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38087 38129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38088 38130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38089 38131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Insert a new value into a RowSet.
38090 38132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -38092,34 +38134,25 @@
38092 38134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** memory allocation fails.
38093 38135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38094 38136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){
38095 38137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pEntry; /* The new entry */
38096 38138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pLast; /* The last prior entry */
38097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p!=0 );
38098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nFresh==0 ){
38099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct RowSetChunk *pNew;
38100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew));
38101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNew==0 ){
38102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
38103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->pNextChunk = p->pChunk;
38105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pChunk = pNew;
38106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pFresh = pNew->aEntry;
38107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nFresh = ROWSET_ENTRY_PER_CHUNK;
38108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry = p->pFresh++;
38110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nFresh--;
38139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This routine is never called after sqlite3RowSetNext() */
38141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 && (p->rsFlags & ROWSET_NEXT)==0 );
38142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pEntry = rowSetEntryAlloc(p);
38144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pEntry==0 ) return;
38111 38145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEntry->v = rowid;
38112 38146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEntry->pRight = 0;
38113 38147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLast = p->pLast;
38114 38148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLast ){
38115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->isSorted && rowid<=pLast->v ){
38116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->isSorted = 0;
38149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (p->rsFlags & ROWSET_SORTED)!=0 && rowid<=pLast->v ){
38150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->rsFlags &= ~ROWSET_SORTED;
38117 38151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38118 38152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLast->pRight = pEntry;
38119 38153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
38120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->pEntry==0 ); /* Fires if INSERT after SMALLEST */
38121 38154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pEntry = pEntry;
38122 38155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38123 38156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pLast = pEntry;
38124 38157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38125 38158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -38127,11 +38160,11 @@
38127 38160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Merge two lists of RowSetEntry objects. Remove duplicates.
38128 38161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
38129 38162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The input lists are connected via pRight pointers and are
38130 38163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** assumed to each already be in sorted order.
38131 38164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static struct RowSetEntry *rowSetMerge(
38165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static struct RowSetEntry *rowSetEntryMerge(
38133 38166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pA, /* First sorted list to be merged */
38134 38167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pB /* Second sorted list to be merged */
38135 38168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
38136 38169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry head;
38137 38170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowSetEntry *pTail;
@@ -38161,36 +38194,33 @@
38161 38194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38162 38195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return head.pRight;
38163 38196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38164 38197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38165 38198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Sort all elements on the pEntry list of the RowSet into ascending order.
38199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Sort all elements on the list of RowSetEntry objects into order of
38200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** increasing v.
38167 38201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void rowSetSort(RowSet *p){
38202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static struct RowSetEntry *rowSetEntrySort(struct RowSetEntry *pIn){
38169 38203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int i;
38170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct RowSetEntry *pEntry;
38171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct RowSetEntry *aBucket[40];
38204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetEntry *pNext, *aBucket[40];
38172 38205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->isSorted==0 );
38174 38206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(aBucket, 0, sizeof(aBucket));
38175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( p->pEntry ){
38176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry = p->pEntry;
38177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pEntry = pEntry->pRight;
38178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry->pRight = 0;
38207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pIn ){
38208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNext = pIn->pRight;
38209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn->pRight = 0;
38179 38210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; aBucket[i]; i++){
38180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry = rowSetMerge(aBucket[i], pEntry);
38211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn = rowSetEntryMerge(aBucket[i], pIn);
38181 38212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aBucket[i] = 0;
38182 38213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aBucket[i] = pEntry;
38214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aBucket[i] = pIn;
38215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn = pNext;
38184 38216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry = 0;
38217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn = 0;
38186 38218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<sizeof(aBucket)/sizeof(aBucket[0]); i++){
38187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry = rowSetMerge(pEntry, aBucket[i]);
38219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn = rowSetEntryMerge(pIn, aBucket[i]);
38188 38220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pEntry = pEntry;
38190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pLast = 0;
38191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->isSorted = 1;
38221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pIn;
38192 38222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38193 38223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38194 38224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38195 38225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38196 38226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The input, pIn, is a binary tree (or subtree) of RowSetEntry objects.
@@ -38280,24 +38310,41 @@
38280 38310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38281 38311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p;
38282 38312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38283 38313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38284 38314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert the list in p->pEntry into a sorted list if it is not
38286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sorted already. If there is a binary tree on p->pTree, then
38287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** convert it into a list too and merge it into the p->pEntry list.
38315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Take all the entries on p->pEntry and on the trees in p->pForest and
38316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sort them all together into one big ordered list on p->pEntry.
38317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
38318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine should only be called once in the life of a RowSet.
38288 38319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38289 38320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void rowSetToList(RowSet *p){
38290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !p->isSorted ){
38291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rowSetSort(p);
38292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pTree ){
38294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct RowSetEntry *pHead, *pTail;
38295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rowSetTreeToList(p->pTree, &pHead, &pTail);
38296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pTree = 0;
38297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pEntry = rowSetMerge(p->pEntry, pHead);
38298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This routine is called only once */
38323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 && (p->rsFlags & ROWSET_NEXT)==0 );
38324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (p->rsFlags & ROWSET_SORTED)==0 ){
38326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pEntry = rowSetEntrySort(p->pEntry);
38327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* While this module could theoretically support it, sqlite3RowSetNext()
38330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is never called after sqlite3RowSetText() for the same RowSet. So
38331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** there is never a forest to deal with. Should this change, simply
38332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** remove the assert() and the #if 0. */
38333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pForest==0 );
38334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if 0
38335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( p->pForest ){
38336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetEntry *pTree = p->pForest->pLeft;
38337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTree ){
38338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetEntry *pHead, *pTail;
38339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rowSetTreeToList(pTree, &pHead, &pTail);
38340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pEntry = rowSetEntryMerge(p->pEntry, pHead);
38341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pForest = p->pForest->pRight;
38343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
38345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->rsFlags |= ROWSET_NEXT; /* Verify this routine is never called again */
38299 38346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38300 38347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38301 38348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38302 38349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Extract the smallest element from the RowSet.
38303 38350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Write the element into *pRowid. Return 1 on success. Return
@@ -38305,11 +38352,16 @@
38305 38352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
38306 38353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** After this routine has been called, the sqlite3RowSetInsert()
38307 38354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routine may not be called again.
38308 38355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38309 38356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){
38310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rowSetToList(p);
38357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
38358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Merge the forest into a single sorted list on first call */
38360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (p->rsFlags & ROWSET_NEXT)==0 ) rowSetToList(p);
38361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Return the next entry on the list */
38311 38363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pEntry ){
38312 38364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRowid = p->pEntry->v;
38313 38365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pEntry = p->pEntry->pRight;
38314 38366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pEntry==0 ){
38315 38367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3RowSetClear(p);
@@ -38321,30 +38373,70 @@
38321 38373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38322 38374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38323 38375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
38324 38376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check to see if element iRowid was inserted into the the rowset as
38325 38377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** part of any insert batch prior to iBatch. Return 1 or 0.
38378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
38379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If this is the first test of a new batch and if there exist entires
38380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on pRowSet->pEntry, then sort those entires into the forest at
38381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pRowSet->pForest so that they can be tested.
38326 38382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38327 38383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 iRowid){
38328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct RowSetEntry *p;
38384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetEntry *p, *pTree;
38385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This routine is never called after sqlite3RowSetNext() */
38387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pRowSet!=0 && (pRowSet->rsFlags & ROWSET_NEXT)==0 );
38388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Sort entries into the forest on the first test of a new batch
38390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
38329 38391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iBatch!=pRowSet->iBatch ){
38330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pRowSet->pEntry ){
38331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rowSetToList(pRowSet);
38332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRowSet->pTree = rowSetListToTree(pRowSet->pEntry);
38392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = pRowSet->pEntry;
38393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p ){
38394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetEntry **ppPrevTree = &pRowSet->pForest;
38395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pRowSet->rsFlags & ROWSET_SORTED)==0 ){
38396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = rowSetEntrySort(p);
38397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pTree = pRowSet->pForest; pTree; pTree=pTree->pRight){
38399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ppPrevTree = &pTree->pRight;
38400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTree->pLeft==0 ){
38401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTree->pLeft = rowSetListToTree(p);
38402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
38403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
38404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RowSetEntry *pAux, *pTail;
38405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rowSetTreeToList(pTree->pLeft, &pAux, &pTail);
38406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTree->pLeft = 0;
38407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = rowSetEntryMerge(pAux, p);
38408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTree==0 ){
38411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppPrevTree = pTree = rowSetEntryAlloc(pRowSet);
38412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTree ){
38413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTree->v = 0;
38414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTree->pRight = 0;
38415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTree->pLeft = rowSetListToTree(p);
38416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38333 38418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRowSet->pEntry = 0;
38334 38419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRowSet->pLast = 0;
38420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRowSet->rsFlags |= ROWSET_SORTED;
38335 38421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38336 38422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRowSet->iBatch = iBatch;
38337 38423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p = pRowSet->pTree;
38339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( p ){
38340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->v<iRowid ){
38341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p = p->pRight;
38342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( p->v>iRowid ){
38343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p = p->pLeft;
38344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
38345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
38424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Test to see if the iRowid value appears anywhere in the forest.
38426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return 1 if it does and 0 if not.
38427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
38428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pTree = pRowSet->pForest; pTree; pTree=pTree->pRight){
38429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = pTree->pLeft;
38430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( p ){
38431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->v<iRowid ){
38432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = p->pRight;
38433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( p->v>iRowid ){
38434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = p->pLeft;
38435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
38436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
38437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38346 38438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38347 38439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38348 38440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
38349 38441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38350 38442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -49148,16 +49240,22 @@
49148 49240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49149 49241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49150 49242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
49151 49243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This structure is passed around through all the sanity checking routines
49152 49244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in order to keep track of some global state information.
49245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
49246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The aRef[] array is allocated so that there is 1 bit for each page in
49247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the database. As the integrity-check proceeds, for each page used in
49248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the database the corresponding bit is set. This allows integrity-check to
49249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** detect pages that are used twice and orphaned pages (both of which
49250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** indicate corruption).
49153 49251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
49154 49252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct IntegrityCk IntegrityCk;
49155 49253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct IntegrityCk {
49156 49254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtShared *pBt; /* The tree being checked out */
49157 49255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pager *pPager; /* The associated pager. Also accessible by pBt->pPager */
49158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *anRef; /* Number of times each page is referenced */
49256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *aPgRef; /* 1 bit per page in the db (see above) */
49159 49257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pgno nPage; /* Number of pages in the database */
49160 49258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mxErr; /* Stop accumulating errors when this reaches zero */
49161 49259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nErr; /* Number of messages written to zErrMsg so far */
49162 49260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mallocFailed; /* A memory allocation error has occurred */
49163 49261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
StrAccum errMsg; /* Accumulate the error message text here */
@@ -56998,10 +57096,29 @@
56998 57096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
56999 57097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57000 57098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_INTEGRITY_CHECK */
57001 57099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57002 57100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_INTEGRITY_CHECK
57101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
57102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
57103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return non-zero if the bit in the IntegrityCk.aPgRef[] array that
57104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** corresponds to page iPg is already set.
57105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
57106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){
57107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 );
57108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (pCheck->aPgRef[iPg/8] & (1 << (iPg & 0x07)));
57109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
57110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
57111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
57112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set the bit in the IntegrityCk.aPgRef[] array that corresponds to page iPg.
57113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
57114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){
57115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 );
57116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCheck->aPgRef[iPg/8] |= (1 << (iPg & 0x07));
57117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
57118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
57119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
57003 57120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
57004 57121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add 1 to the reference count for page iPage. If this is the second
57005 57122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reference to the page, add an error message to pCheck->zErrMsg.
57006 57123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return 1 if there are 2 ore more references to the page and 0 if
57007 57124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if this is the first reference to the page.
@@ -57012,15 +57129,16 @@
57012 57129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iPage==0 ) return 1;
57013 57130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iPage>pCheck->nPage ){
57014 57131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage);
57015 57132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
57016 57133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCheck->anRef[iPage]==1 ){
57134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( getPageReferenced(pCheck, iPage) ){
57018 57135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage);
57019 57136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
57020 57137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (pCheck->anRef[iPage]++)>1;
57138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setPageReferenced(pCheck, iPage);
57139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
57022 57140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57023 57141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57024 57142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOVACUUM
57025 57143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
57026 57144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check that the entry in the pointer-map for page iChild maps to
@@ -57392,21 +57510,19 @@
57392 57510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnErr = 0;
57393 57511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sCheck.nPage==0 ){
57394 57512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeLeave(p);
57395 57513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
57396 57514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sCheck.anRef = sqlite3Malloc( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
57398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !sCheck.anRef ){
57515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
57516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sCheck.aPgRef = sqlite3MallocZero((sCheck.nPage / 8)+ 1);
57517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !sCheck.aPgRef ){
57399 57518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnErr = 1;
57400 57519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeLeave(p);
57401 57520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
57402 57521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
57404 57522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = PENDING_BYTE_PAGE(pBt);
57405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<=sCheck.nPage ){
57406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sCheck.anRef[i] = 1;
57407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
57523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<=sCheck.nPage ) setPageReferenced(&sCheck, i);
57408 57524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StrAccumInit(&sCheck.errMsg, zErr, sizeof(zErr), 20000);
57409 57525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sCheck.errMsg.useMalloc = 2;
57410 57526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57411 57527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check the integrity of the freelist
57412 57528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -57427,22 +57543,22 @@
57427 57543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57428 57544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Make sure every page in the file is referenced
57429 57545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
57430 57546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
57431 57547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_AUTOVACUUM
57432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sCheck.anRef[i]==0 ){
57548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( getPageReferenced(&sCheck, i)==0 ){
57433 57549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
57434 57550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57435 57551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
57436 57552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the database supports auto-vacuum, make sure no tables contain
57437 57553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** references to pointer-map pages.
57438 57554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
57439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sCheck.anRef[i]==0 &&
57555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( getPageReferenced(&sCheck, i)==0 &&
57440 57556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){
57441 57557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
57442 57558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sCheck.anRef[i]!=0 &&
57559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( getPageReferenced(&sCheck, i)!=0 &&
57444 57560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
57445 57561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i);
57446 57562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57447 57563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
57448 57564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -57459,11 +57575,11 @@
57459 57575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57460 57576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57461 57577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Clean up and report errors.
57462 57578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
57463 57579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeLeave(p);
57464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(sCheck.anRef);
57580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(sCheck.aPgRef);
57465 57581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sCheck.mallocFailed ){
57466 57582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StrAccumReset(&sCheck.errMsg);
57467 57583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnErr = sCheck.nErr+1;
57468 57584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
57469 57585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -73807,11 +73923,11 @@
73807 73923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
73808 73924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zId = pExpr->u.zToken;
73809 73925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nId = sqlite3Strlen30(zId);
73810 73926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0);
73811 73927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDef==0 ){
73812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pDef = sqlite3FindFunction(pParse->db, zId, nId, -1, enc, 0);
73928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDef = sqlite3FindFunction(pParse->db, zId, nId, -2, enc, 0);
73813 73929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDef==0 ){
73814 73930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
no_such_func = 1;
73815 73931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
73816 73932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wrong_num_args = 1;
73817 73933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -78277,11 +78393,11 @@
78277 78393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 2;
78278 78394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExprHasProperty(pA, EP_IntValue) ){
78279 78395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){
78280 78396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 2;
78281 78397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pA->op!=TK_COLUMN && pA->u.zToken ){
78398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pA->op!=TK_COLUMN && pA->op!=TK_AGG_COLUMN && pA->u.zToken ){
78283 78399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2;
78284 78400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strcmp(pA->u.zToken,pB->u.zToken)!=0 ){
78285 78401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 2;
78286 78402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78287 78403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -78313,10 +78429,45 @@
78313 78429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1;
78314 78430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ExprCompare(pExprA, pExprB) ) return 1;
78315 78431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78316 78432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
78317 78433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
78435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
78436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is the expression callback for sqlite3FunctionUsesOtherSrc().
78437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
78438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Determine if an expression references any table other than one of the
78439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tables in pWalker->u.pSrcList and abort if it does.
78440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
78441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int exprUsesOtherSrc(Walker *pWalker, Expr *pExpr){
78442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN ){
78443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
78444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcList *pSrc = pWalker->u.pSrcList;
78445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pSrc->nSrc; i++){
78446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->iTable==pSrc->a[i].iCursor ) return WRC_Continue;
78447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
78448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Abort;
78449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
78450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Continue;
78451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
78452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
78453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
78454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
78455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Determine if any of the arguments to the pExpr Function references
78456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** any SrcList other than pSrcList. Return true if they do. Return
78457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** false if pExpr has no argument or has only constant arguments or
78458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only references tables named in pSrcList.
78459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
78460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3FunctionUsesOtherSrc(Expr *pExpr, SrcList *pSrcList){
78461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Walker w;
78462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->op==TK_AGG_FUNCTION );
78463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&w, 0, sizeof(w));
78464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ w.xExprCallback = exprUsesOtherSrc;
78465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ w.u.pSrcList = pSrcList;
78466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WalkExprList(&w, pExpr->x.pList)!=WRC_Continue ) return 1;
78467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
78468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
78318 78469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
78319 78470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
78320 78471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add a new element to the pAggInfo->aCol[] array. Return the index of
78321 78472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the new element. Return a negative number if malloc fails.
78322 78473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -78429,13 +78580,11 @@
78429 78580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} /* end loop over pSrcList */
78430 78581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78431 78582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Prune;
78432 78583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78433 78584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_AGG_FUNCTION: {
78434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The pNC->nDepth==0 test causes aggregate functions in subqueries
78435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to be ignored */
78436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNC->nDepth==0 ){
78585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !sqlite3FunctionUsesOtherSrc(pExpr, pSrcList) ){
78437 78586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check to see if pExpr is a duplicate of another aggregate
78438 78587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function that is already in the pAggInfo structure
78439 78588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
78440 78589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func *pItem = pAggInfo->aFunc;
78441 78590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pAggInfo->nFunc; i++, pItem++){
@@ -78475,19 +78624,11 @@
78475 78624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78476 78625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78477 78626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Continue;
78478 78627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78479 78628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
78480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NameContext *pNC = pWalker->u.pNC;
78481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNC->nDepth==0 ){
78482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNC->nDepth++;
78483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3WalkSelect(pWalker, pSelect);
78484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNC->nDepth--;
78485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return WRC_Prune;
78486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
78487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return WRC_Continue;
78488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
78629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Continue;
78489 78630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78490 78631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
78491 78632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
78492 78633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Analyze the given expression looking for aggregate functions and
78493 78634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for variables that need to be added to the pParse->aAgg[] array.
@@ -78496,10 +78637,11 @@
78496 78637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine should only be called after the expression has been
78497 78638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** analyzed by sqlite3ResolveExprNames().
78498 78639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
78499 78640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
78500 78641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Walker w;
78642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&w, 0, sizeof(w));
78501 78643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xExprCallback = analyzeAggregate;
78502 78644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xSelectCallback = analyzeAggregatesInSelect;
78503 78645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.u.pNC = pNC;
78504 78646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNC->pSrcList!=0 );
78505 78647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkExpr(&w, pExpr);
@@ -85399,43 +85541,62 @@
85399 85541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* During the search for the best function definition, this procedure
85400 85542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is called to test how well the function passed as the first argument
85401 85543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** matches the request for a function with nArg arguments in a system
85402 85544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that uses encoding enc. The value returned indicates how well the
85403 85545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** request is matched. A higher value indicates a better match.
85546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
85547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If nArg is -1 that means to only return a match (non-zero) if p->nArg
85548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is also -1. In other words, we are searching for a function that
85549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** takes a variable number of arguments.
85550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
85551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If nArg is -2 that means that we are searching for any function
85552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** regardless of the number of arguments it uses, so return a positive
85553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** match score for any
85404 85554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
85405 85555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The returned value is always between 0 and 6, as follows:
85406 85556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
85407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 0: Not a match, or if nArg<0 and the function is has no implementation.
85408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 1: A variable arguments function that prefers UTF-8 when a UTF-16
85409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** encoding is requested, or vice versa.
85410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 2: A variable arguments function that uses UTF-16BE when UTF-16LE is
85411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** requested, or vice versa.
85412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 3: A variable arguments function using the same text encoding.
85413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 4: A function with the exact number of arguments requested that
85414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** prefers UTF-8 when a UTF-16 encoding is requested, or vice versa.
85415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 5: A function with the exact number of arguments requested that
85416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** prefers UTF-16LE when UTF-16BE is requested, or vice versa.
85417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 6: An exact match.
85557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0: Not a match.
85558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1: UTF8/16 conversion required and function takes any number of arguments.
85559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2: UTF16 byte order change required and function takes any number of args.
85560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3: encoding matches and function takes any number of arguments
85561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 4: UTF8/16 conversion required - argument count matches exactly
85562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 5: UTF16 byte order conversion required - argument count matches exactly
85563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 6: Perfect match: encoding and argument count match exactly.
85418 85564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
85565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If nArg==(-2) then any function with a non-null xStep or xFunc is
85566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a perfect match and any function with both xStep and xFunc NULL is
85567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a non-match.
85419 85568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
85420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int matchQuality(FuncDef *p, int nArg, u8 enc){
85421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int match = 0;
85422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nArg==-1 || p->nArg==nArg
85423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || (nArg==-1 && (p->xFunc!=0 || p->xStep!=0))
85424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
85569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FUNC_PERFECT_MATCH 6 /* The score for a perfect match */
85570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int matchQuality(
85571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FuncDef *p, /* The function we are evaluating for match quality */
85572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nArg, /* Desired number of arguments. (-1)==any */
85573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 enc /* Desired text encoding */
85574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
85575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int match;
85576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* nArg of -2 is a special case */
85578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nArg==(-2) ) return (p->xFunc==0 && p->xStep==0) ? 0 : FUNC_PERFECT_MATCH;
85579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Wrong number of arguments means "no match" */
85581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nArg!=nArg && p->nArg>=0 ) return 0;
85582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Give a better score to a function with a specific number of arguments
85584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than to function that accepts any number of arguments. */
85585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nArg==nArg ){
85586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ match = 4;
85587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
85425 85588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
match = 1;
85426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nArg==nArg || nArg==-1 ){
85427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- match = 4;
85428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
85429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( enc==p->iPrefEnc ){
85430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- match += 2;
85431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
85432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( (enc==SQLITE_UTF16LE && p->iPrefEnc==SQLITE_UTF16BE) ||
85433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (enc==SQLITE_UTF16BE && p->iPrefEnc==SQLITE_UTF16LE) ){
85434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- match += 1;
85435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
85436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
85589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
85590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Bonus points if the text encoding matches */
85592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( enc==p->iPrefEnc ){
85593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ match += 2; /* Exact encoding match */
85594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( (enc & p->iPrefEnc & 2)!=0 ){
85595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ match += 1; /* Both are UTF16, but with different byte orders */
85596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
85597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85437 85598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return match;
85438 85599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85439 85600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85440 85601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
85441 85602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Search a FuncDefHash for a function with the given name. Return
@@ -85487,17 +85648,16 @@
85487 85648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointer to the FuncDef structure that defines that function, or return
85488 85649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NULL if the function does not exist.
85489 85650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
85490 85651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the createFlag argument is true, then a new (blank) FuncDef
85491 85652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** structure is created and liked into the "db" structure if a
85492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** no matching function previously existed. When createFlag is true
85493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and the nArg parameter is -1, then only a function that accepts
85494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** any number of arguments will be returned.
85653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no matching function previously existed.
85495 85654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
85496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If createFlag is false and nArg is -1, then the first valid
85497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** function found is returned. A function is valid if either xFunc
85498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or xStep is non-zero.
85655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If nArg is -2, then the first valid function found is returned. A
85656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function is valid if either xFunc or xStep is non-zero. The nArg==(-2)
85657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** case is used to see if zName is a valid function name for some number
85658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of arguments. If nArg is -2, then createFlag must be 0.
85499 85659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
85500 85660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If createFlag is false, then a function with the required name and
85501 85661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** number of arguments may be returned even if the eTextRep flag does not
85502 85662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** match that requested.
85503 85663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -85505,18 +85665,19 @@
85505 85665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db, /* An open database */
85506 85666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName, /* Name of the function. Not null-terminated */
85507 85667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nName, /* Number of characters in the name */
85508 85668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg, /* Number of arguments. -1 means any number */
85509 85669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 enc, /* Preferred text encoding */
85510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int createFlag /* Create new entry if true and does not otherwise exist */
85670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 createFlag /* Create new entry if true and does not otherwise exist */
85511 85671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
85512 85672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDef *p; /* Iterator variable */
85513 85673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDef *pBest = 0; /* Best match found so far */
85514 85674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bestScore = 0; /* Score of best match */
85515 85675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int h; /* Hash value */
85516 85676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
85677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nArg>=(-2) );
85678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nArg>=(-1) || createFlag==0 );
85518 85679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
85519 85680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a);
85520 85681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85521 85682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* First search for a match amongst the application-defined functions.
85522 85683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -85558,11 +85719,11 @@
85558 85719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85559 85720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the createFlag parameter is true and the search did not reveal an
85560 85721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** exact match for the name, number of arguments and encoding, then add a
85561 85722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** new entry to the hash table and return it.
85562 85723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
85563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( createFlag && (bestScore<6 || pBest->nArg!=nArg) &&
85724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( createFlag && bestScore<FUNC_PERFECT_MATCH &&
85564 85725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(pBest = sqlite3DbMallocZero(db, sizeof(*pBest)+nName+1))!=0 ){
85565 85726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBest->zName = (char *)&pBest[1];
85566 85727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBest->nArg = (u16)nArg;
85567 85728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBest->iPrefEnc = enc;
85568 85729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pBest->zName, zName, nName);
@@ -97526,11 +97687,12 @@
97526 97687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
97527 97688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/***** If we reach this point, flattening is permitted. *****/
97528 97689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
97529 97690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Authorize the subquery */
97530 97691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = pSubitem->zName;
97531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
97692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
97693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( i==SQLITE_DENY );
97532 97694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = zSavedAuthContext;
97533 97695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
97534 97696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the sub-query is a compound SELECT statement, then (by restrictions
97535 97697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 17 and 18 above) it must be a UNION ALL and the parent query must
97536 97698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be of the form:
@@ -129049,11 +129211,10 @@
129049 129211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Advance to the next output block */
129050 129212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeaf->iBlock++;
129051 129213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeaf->key.n = 0;
129052 129214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeaf->block.n = 0;
129053 129215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nPrefix = 0;
129055 129216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSuffix = nTerm;
129056 129217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSpace = 1;
129057 129218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix;
129058 129219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSpace += sqlite3Fts3VarintLen(nDoclist) + nDoclist;
129059 129220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -132384,10 +132545,23 @@
132384 132545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132385 132546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Possible values for eCoordType: */
132386 132547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define RTREE_COORD_REAL32 0
132387 132548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define RTREE_COORD_INT32 1
132388 132549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
132551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_RTREE_INT_ONLY is defined, then this virtual table will
132552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only deal with integer coordinates. No floating point operations
132553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be done.
132554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
132555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_RTREE_INT_ONLY
132556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef sqlite3_int64 RtreeDValue; /* High accuracy coordinate */
132557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef int RtreeValue; /* Low accuracy coordinate */
132558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
132559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef double RtreeDValue; /* High accuracy coordinate */
132560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef float RtreeValue; /* Low accuracy coordinate */
132561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
132562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
132389 132563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
132390 132564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The minimum number of cells allowed for a node is a third of the
132391 132565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** maximum. In Gutman's notation:
132392 132566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
132393 132567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** m = M/3
@@ -132419,33 +132593,38 @@
132419 132593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nConstraint; /* Number of entries in aConstraint */
132420 132594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeConstraint *aConstraint; /* Search constraints. */
132421 132595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
132422 132596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132423 132597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
union RtreeCoord {
132424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float f;
132598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeValue f;
132425 132599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
132426 132600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
132427 132601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132428 132602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
132429 132603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The argument is an RtreeCoord. Return the value stored within the RtreeCoord
132430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** formatted as a double. This macro assumes that local variable pRtree points
132431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to the Rtree structure associated with the RtreeCoord.
132604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** formatted as a RtreeDValue (double or int64). This macro assumes that local
132605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** variable pRtree points to the Rtree structure associated with the
132606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** RtreeCoord.
132432 132607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
132433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define DCOORD(coord) ( \
132434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (pRtree->eCoordType==RTREE_COORD_REAL32) ? \
132435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((double)coord.f) : \
132436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((double)coord.i) \
132437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
132608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_RTREE_INT_ONLY
132609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DCOORD(coord) ((RtreeDValue)coord.i)
132610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
132611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DCOORD(coord) ( \
132612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (pRtree->eCoordType==RTREE_COORD_REAL32) ? \
132613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((double)coord.f) : \
132614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((double)coord.i) \
132615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
132616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
132438 132617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132439 132618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
132440 132619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A search constraint.
132441 132620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
132442 132621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RtreeConstraint {
132443 132622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCoord; /* Index of constrained coordinate */
132444 132623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int op; /* Constraining operation */
132445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double rValue; /* Constraint value. */
132446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
132624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue rValue; /* Constraint value. */
132625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry*, int, RtreeDValue*, int*);
132447 132626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_rtree_geometry *pGeom; /* Constraint callback argument for a MATCH */
132448 132627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
132449 132628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132450 132629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Possible values for RtreeConstraint.op */
132451 132630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define RTREE_EQ 0x41
@@ -132489,14 +132668,14 @@
132489 132668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the right-hand-side of an SQL MATCH operator used to constrain an
132490 132669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** r-tree query.
132491 132670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
132492 132671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RtreeMatchArg {
132493 132672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 magic; /* Always RTREE_GEOMETRY_MAGIC */
132494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
132673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry *, int, RtreeDValue*, int *);
132495 132674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pContext;
132496 132675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nParam;
132497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double aParam[1];
132676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue aParam[1];
132498 132677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
132499 132678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132500 132679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
132501 132680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When a geometry callback is created (see sqlite3_rtree_geometry_callback),
132502 132681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a single instance of the following structure is allocated. It is used
@@ -132504,11 +132683,11 @@
132504 132683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is eventually deleted by the destructor mechanism provided by
132505 132684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_create_function_v2() (which is called by s_r_g_c() to create
132506 132685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the geometry callback function).
132507 132686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
132508 132687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RtreeGeomCallback {
132509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
132688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry*, int, RtreeDValue*, int*);
132510 132689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pContext;
132511 132690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
132512 132691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132513 132692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef MAX
132514 132693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define MAX(x,y) ((x) < (y) ? (y) : (x))
@@ -133070,11 +133249,11 @@
133070 133249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeConstraint *pConstraint, /* MATCH constraint to test */
133071 133250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *pCell, /* Cell to test */
133072 133251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pbRes /* OUT: Test result */
133073 133252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
133074 133253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
133075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double aCoord[RTREE_MAX_DIMENSIONS*2];
133254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue aCoord[RTREE_MAX_DIMENSIONS*2];
133076 133255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCoord = pRtree->nDim*2;
133077 133256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133078 133257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pConstraint->op==RTREE_MATCH );
133079 133258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pConstraint->pGeom );
133080 133259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -133100,12 +133279,12 @@
133100 133279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
133101 133280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133102 133281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
133103 133282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; bRes==0 && ii<pCursor->nConstraint; ii++){
133104 133283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeConstraint *p = &pCursor->aConstraint[ii];
133105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]);
133106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]);
133284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]);
133285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]);
133107 133286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133108 133287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE
133109 133288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
133110 133289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
133111 133290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -133153,11 +133332,11 @@
133153 133332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pbEof = 0;
133154 133333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133155 133334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
133156 133335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pCursor->nConstraint; ii++){
133157 133336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeConstraint *p = &pCursor->aConstraint[ii];
133158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double coord = DCOORD(cell.aCoord[p->iCoord]);
133337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue coord = DCOORD(cell.aCoord[p->iCoord]);
133159 133338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
133160 133339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE
133161 133340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
133162 133341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
133163 133342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( p->op ){
@@ -133351,13 +133530,16 @@
133351 133530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
133352 133531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_int64(ctx, iRowid);
133353 133532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
133354 133533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCoord c;
133355 133534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCoord(pRtree, pCsr->pNode, pCsr->iCell, i-1, &c);
133535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_RTREE_INT_ONLY
133356 133536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
133357 133537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_double(ctx, c.f);
133358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
133538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
133539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
133540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
133359 133541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pRtree->eCoordType==RTREE_COORD_INT32 );
133360 133542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_int(ctx, c.i);
133361 133543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133362 133544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133363 133545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -133400,11 +133582,11 @@
133400 133582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_value_type(pValue)!=SQLITE_BLOB ) return SQLITE_ERROR;
133401 133583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133402 133584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check that the blob is roughly the right size. */
133403 133585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nBlob = sqlite3_value_bytes(pValue);
133404 133586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nBlob<(int)sizeof(RtreeMatchArg)
133405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || ((nBlob-sizeof(RtreeMatchArg))%sizeof(double))!=0
133587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || ((nBlob-sizeof(RtreeMatchArg))%sizeof(RtreeDValue))!=0
133406 133588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
133407 133589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
133408 133590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133409 133591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133410 133592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGeom = (sqlite3_rtree_geometry *)sqlite3_malloc(
@@ -133414,11 +133596,11 @@
133414 133596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pGeom, 0, sizeof(sqlite3_rtree_geometry));
133415 133597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = (RtreeMatchArg *)&pGeom[1];
133416 133598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133417 133599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(p, sqlite3_value_blob(pValue), nBlob);
133418 133600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->magic!=RTREE_GEOMETRY_MAGIC
133419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
133601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(RtreeDValue))
133420 133602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
133421 133603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pGeom);
133422 133604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
133423 133605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133424 133606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -133486,11 +133668,15 @@
133486 133668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = deserializeGeometry(argv[ii], p);
133487 133669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
133488 133670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
133489 133671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133490 133672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
133673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_RTREE_INT_ONLY
133674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->rValue = sqlite3_value_int64(argv[ii]);
133675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
133491 133676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->rValue = sqlite3_value_double(argv[ii]);
133677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
133492 133678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133493 133679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133494 133680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133495 133681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133496 133682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -133620,28 +133806,28 @@
133620 133806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133621 133807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133622 133808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
133623 133809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the N-dimensional volumn of the cell stored in *p.
133624 133810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
133625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static float cellArea(Rtree *pRtree, RtreeCell *p){
133626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float area = 1.0;
133811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){
133812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue area = (RtreeDValue)1;
133627 133813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
133628 133814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<(pRtree->nDim*2); ii+=2){
133629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- area = (float)(area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])));
133815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ area = (area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])));
133630 133816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133631 133817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return area;
133632 133818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133633 133819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133634 133820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
133635 133821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the margin length of cell p. The margin length is the sum
133636 133822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the objects size in each dimension.
133637 133823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
133638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static float cellMargin(Rtree *pRtree, RtreeCell *p){
133639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float margin = 0.0;
133824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){
133825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue margin = (RtreeDValue)0;
133640 133826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
133641 133827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<(pRtree->nDim*2); ii+=2){
133642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- margin += (float)(DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
133828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
133643 133829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133644 133830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return margin;
133645 133831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133646 133832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133647 133833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -133682,51 +133868,50 @@
133682 133868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133683 133869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133684 133870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
133685 133871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the amount cell p would grow by if it were unioned with pCell.
133686 133872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
133687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static float cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){
133688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float area;
133873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static RtreeDValue cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){
133874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue area;
133689 133875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell cell;
133690 133876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&cell, p, sizeof(RtreeCell));
133691 133877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
area = cellArea(pRtree, &cell);
133692 133878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cellUnion(pRtree, &cell, pCell);
133693 133879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (cellArea(pRtree, &cell)-area);
133694 133880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133695 133881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133696 133882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if VARIANT_RSTARTREE_CHOOSESUBTREE || VARIANT_RSTARTREE_SPLIT
133697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static float cellOverlap(
133883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static RtreeDValue cellOverlap(
133698 133884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Rtree *pRtree,
133699 133885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *p,
133700 133886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *aCell,
133701 133887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell,
133702 133888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iExclude
133703 133889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
133704 133890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
133705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float overlap = 0.0;
133891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue overlap = 0.0;
133706 133892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nCell; ii++){
133707 133893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if VARIANT_RSTARTREE_CHOOSESUBTREE
133708 133894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ii!=iExclude )
133709 133895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
133710 133896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iExclude==-1 );
133711 133897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(iExclude);
133712 133898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
133713 133899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
133714 133900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jj;
133715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float o = 1.0;
133901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue o = (RtreeDValue)1;
133716 133902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=0; jj<(pRtree->nDim*2); jj+=2){
133717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double x1;
133718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double x2;
133903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue x1, x2;
133719 133904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133720 133905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj]));
133721 133906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1]));
133722 133907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133723 133908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( x2<x1 ){
133724 133909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
o = 0.0;
133725 133910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
133726 133911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
133727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- o = o * (float)(x2-x1);
133912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o = o * (x2-x1);
133728 133913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133729 133914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133730 133915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
overlap += o;
133731 133916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133732 133917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -133733,24 +133918,23 @@
133733 133918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return overlap;
133734 133919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133735 133920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
133736 133921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133737 133922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if VARIANT_RSTARTREE_CHOOSESUBTREE
133738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static float cellOverlapEnlargement(
133923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static RtreeDValue cellOverlapEnlargement(
133739 133924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Rtree *pRtree,
133740 133925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *p,
133741 133926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *pInsert,
133742 133927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *aCell,
133743 133928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell,
133744 133929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iExclude
133745 133930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
133746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double before;
133747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double after;
133931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue before, after;
133748 133932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
before = cellOverlap(pRtree, p, aCell, nCell, iExclude);
133749 133933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cellUnion(pRtree, p, pInsert);
133750 133934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
after = cellOverlap(pRtree, p, aCell, nCell, iExclude);
133751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (float)(after-before);
133935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (after-before);
133752 133936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133753 133937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
133754 133938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133755 133939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133756 133940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -133770,15 +133954,15 @@
133770 133954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133771 133955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){
133772 133956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCell;
133773 133957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iBest = 0;
133774 133958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fMinGrowth = 0.0;
133776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fMinArea = 0.0;
133959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fMinGrowth = 0.0;
133960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fMinArea = 0.0;
133777 133961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if VARIANT_RSTARTREE_CHOOSESUBTREE
133778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fMinOverlap = 0.0;
133779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float overlap;
133962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fMinOverlap = 0.0;
133963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue overlap;
133780 133964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
133781 133965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133782 133966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell = NCELL(pNode);
133783 133967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell cell;
133784 133968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pChild;
@@ -133805,12 +133989,12 @@
133805 133989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is inserted into it. Resolve ties by choosing the entry with
133806 133990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the smallest area.
133807 133991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
133808 133992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iCell=0; iCell<nCell; iCell++){
133809 133993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bBest = 0;
133810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float growth;
133811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float area;
133994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue growth;
133995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue area;
133812 133996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pNode, iCell, &cell);
133813 133997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
growth = cellGrowth(pRtree, &cell, pCell);
133814 133998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
area = cellArea(pRtree, &cell);
133815 133999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133816 134000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if VARIANT_RSTARTREE_CHOOSESUBTREE
@@ -133933,30 +134117,30 @@
133933 134117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *piRightSeed
133934 134118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
133935 134119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
133936 134120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLeftSeed = 0;
133937 134121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iRightSeed = 1;
133938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float maxNormalInnerWidth = 0.0;
134122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue maxNormalInnerWidth = (RtreeDValue)0;
133939 134123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133940 134124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Pick two "seed" cells from the array of cells. The algorithm used
133941 134125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** here is the LinearPickSeeds algorithm from Gutman[1984]. The
133942 134126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** indices of the two seed cells in the array are stored in local
133943 134127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** variables iLeftSeek and iRightSeed.
133944 134128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
133945 134129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pRtree->nDim; i++){
133946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float x1 = DCOORD(aCell[0].aCoord[i*2]);
133947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float x2 = DCOORD(aCell[0].aCoord[i*2+1]);
133948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float x3 = x1;
133949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float x4 = x2;
134130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue x1 = DCOORD(aCell[0].aCoord[i*2]);
134131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue x2 = DCOORD(aCell[0].aCoord[i*2+1]);
134132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue x3 = x1;
134133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue x4 = x2;
133950 134134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jj;
133951 134135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133952 134136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCellLeft = 0;
133953 134137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCellRight = 0;
133954 134138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133955 134139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=1; jj<nCell; jj++){
133956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float left = DCOORD(aCell[jj].aCoord[i*2]);
133957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float right = DCOORD(aCell[jj].aCoord[i*2+1]);
134140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue left = DCOORD(aCell[jj].aCoord[i*2]);
134141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue right = DCOORD(aCell[jj].aCoord[i*2+1]);
133958 134142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133959 134143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( left<x1 ) x1 = left;
133960 134144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( right>x4 ) x4 = right;
133961 134145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( left>x3 ){
133962 134146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x3 = left;
@@ -133967,11 +134151,11 @@
133967 134151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCellLeft = jj;
133968 134152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133969 134153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133970 134154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133971 134155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( x4!=x1 ){
133972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float normalwidth = (x3 - x2) / (x4 - x1);
134156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue normalwidth = (x3 - x2) / (x4 - x1);
133973 134157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( normalwidth>maxNormalInnerWidth ){
133974 134158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLeftSeed = iCellLeft;
133975 134159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iRightSeed = iCellRight;
133976 134160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133977 134161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -133996,17 +134180,17 @@
133996 134180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aiUsed
133997 134181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
133998 134182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FABS(a) ((a)<0.0?-1.0*(a):(a))
133999 134183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134000 134184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSelect = -1;
134001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fDiff;
134185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fDiff;
134002 134186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
134003 134187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nCell; ii++){
134004 134188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aiUsed[ii]==0 ){
134005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float left = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
134006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float right = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
134007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float diff = FABS(right-left);
134189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue left = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
134190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue right = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
134191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue diff = FABS(right-left);
134008 134192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iSelect<0 || diff>fDiff ){
134009 134193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fDiff = diff;
134010 134194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSelect = ii;
134011 134195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134012 134196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -134029,17 +134213,17 @@
134029 134213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
134030 134214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jj;
134031 134215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134032 134216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLeftSeed = 0;
134033 134217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iRightSeed = 1;
134034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fWaste = 0.0;
134218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fWaste = 0.0;
134035 134219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134036 134220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nCell; ii++){
134037 134221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=ii+1; jj<nCell; jj++){
134038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float right = cellArea(pRtree, &aCell[jj]);
134039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float growth = cellGrowth(pRtree, &aCell[ii], &aCell[jj]);
134040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float waste = growth - right;
134222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue right = cellArea(pRtree, &aCell[jj]);
134223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue growth = cellGrowth(pRtree, &aCell[ii], &aCell[jj]);
134224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue waste = growth - right;
134041 134225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134042 134226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( waste>fWaste ){
134043 134227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLeftSeed = ii;
134044 134228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iRightSeed = jj;
134045 134229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fWaste = waste;
@@ -134070,11 +134254,11 @@
134070 134254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sorting algorithm.
134071 134255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
134072 134256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void SortByDistance(
134073 134257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aIdx,
134074 134258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nIdx,
134075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float *aDistance,
134259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue *aDistance,
134076 134260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aSpare
134077 134261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
134078 134262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nIdx>1 ){
134079 134263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLeft = 0;
134080 134264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iRight = 0;
@@ -134096,12 +134280,12 @@
134096 134280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iRight++;
134097 134281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( iRight==nRight ){
134098 134282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aIdx[iLeft+iRight] = aLeft[iLeft];
134099 134283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLeft++;
134100 134284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
134101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fLeft = aDistance[aLeft[iLeft]];
134102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fRight = aDistance[aRight[iRight]];
134285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fLeft = aDistance[aLeft[iLeft]];
134286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fRight = aDistance[aRight[iRight]];
134103 134287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fLeft<fRight ){
134104 134288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aIdx[iLeft+iRight] = aLeft[iLeft];
134105 134289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLeft++;
134106 134290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
134107 134291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aIdx[iLeft+iRight] = aRight[iRight];
@@ -134113,12 +134297,12 @@
134113 134297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0
134114 134298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check that the sort worked */
134115 134299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
134116 134300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jj;
134117 134301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=1; jj<nIdx; jj++){
134118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float left = aDistance[aIdx[jj-1]];
134119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float right = aDistance[aIdx[jj]];
134302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue left = aDistance[aIdx[jj-1]];
134303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue right = aDistance[aIdx[jj]];
134120 134304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( left<=right );
134121 134305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134122 134306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134123 134307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
134124 134308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -134157,14 +134341,14 @@
134157 134341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare);
134158 134342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134159 134343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(aSpare, aLeft, sizeof(int)*nLeft);
134160 134344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aLeft = aSpare;
134161 134345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( iLeft<nLeft || iRight<nRight ){
134162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double xleft1 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2]);
134163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double xleft2 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2+1]);
134164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double xright1 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2]);
134165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double xright2 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2+1]);
134346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xleft1 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2]);
134347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xleft2 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2+1]);
134348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xright1 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2]);
134349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xright2 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2+1]);
134166 134350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (iLeft!=nLeft) && ((iRight==nRight)
134167 134351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (xleft1<xright1)
134168 134352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (xleft1==xright1 && xleft2<xright2)
134169 134353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)){
134170 134354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aIdx[iLeft+iRight] = aLeft[iLeft];
@@ -134178,14 +134362,14 @@
134178 134362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0
134179 134363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check that the sort worked */
134180 134364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
134181 134365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jj;
134182 134366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=1; jj<nIdx; jj++){
134183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float xleft1 = aCell[aIdx[jj-1]].aCoord[iDim*2];
134184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float xleft2 = aCell[aIdx[jj-1]].aCoord[iDim*2+1];
134185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float xright1 = aCell[aIdx[jj]].aCoord[iDim*2];
134186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float xright2 = aCell[aIdx[jj]].aCoord[iDim*2+1];
134367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xleft1 = aCell[aIdx[jj-1]].aCoord[iDim*2];
134368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xleft2 = aCell[aIdx[jj-1]].aCoord[iDim*2+1];
134369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xright1 = aCell[aIdx[jj]].aCoord[iDim*2];
134370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue xright2 = aCell[aIdx[jj]].aCoord[iDim*2+1];
134187 134371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( xleft1<=xright1 && (xleft1<xright1 || xleft2<=xright2) );
134188 134372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134189 134373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134190 134374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
134191 134375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -134208,11 +134392,11 @@
134208 134392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aSpare;
134209 134393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
134210 134394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134211 134395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iBestDim = 0;
134212 134396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iBestSplit = 0;
134213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fBestMargin = 0.0;
134397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fBestMargin = 0.0;
134214 134398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134215 134399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int));
134216 134400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134217 134401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aaSorted = (int **)sqlite3_malloc(nByte);
134218 134402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !aaSorted ){
@@ -134229,13 +134413,13 @@
134229 134413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134230 134414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SortByDimension(pRtree, aaSorted[ii], nCell, ii, aCell, aSpare);
134231 134415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134232 134416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134233 134417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pRtree->nDim; ii++){
134234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float margin = 0.0;
134235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fBestOverlap = 0.0;
134236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fBestArea = 0.0;
134418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue margin = 0.0;
134419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fBestOverlap = 0.0;
134420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue fBestArea = 0.0;
134237 134421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iBestLeft = 0;
134238 134422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLeft;
134239 134423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134240 134424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(
134241 134425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nLeft=RTREE_MINCELLS(pRtree);
@@ -134243,12 +134427,12 @@
134243 134427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nLeft++
134244 134428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
134245 134429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell left;
134246 134430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell right;
134247 134431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int kk;
134248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float overlap;
134249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float area;
134432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue overlap;
134433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue area;
134250 134434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134251 134435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell));
134252 134436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell));
134253 134437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(kk=1; kk<(nCell-1); kk++){
134254 134438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( kk<nLeft ){
@@ -134327,11 +134511,11 @@
134327 134511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiUsed[iRightSeed] = 1;
134328 134512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134329 134513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=nCell-2; i>0; i--){
134330 134514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *pNext;
134331 134515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNext = PickNext(pRtree, aCell, nCell, pBboxLeft, pBboxRight, aiUsed);
134332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float diff =
134516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue diff =
134333 134517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cellGrowth(pRtree, pBboxLeft, pNext) -
134334 134518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cellGrowth(pRtree, pBboxRight, pNext)
134335 134519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
;
134336 134520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (RTREE_MINCELLS(pRtree)-NCELL(pRight)==i)
134337 134521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (diff>0.0 && (RTREE_MINCELLS(pRtree)-NCELL(pLeft)!=i))
@@ -134660,58 +134844,60 @@
134660 134844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iHeight
134661 134845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
134662 134846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aOrder;
134663 134847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aSpare;
134664 134848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *aCell;
134665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float *aDistance;
134849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue *aDistance;
134666 134850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell;
134667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float aCenterCoord[RTREE_MAX_DIMENSIONS];
134851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue aCenterCoord[RTREE_MAX_DIMENSIONS];
134668 134852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDim;
134669 134853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
134670 134854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
134855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n;
134671 134856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(aCenterCoord, 0, sizeof(float)*RTREE_MAX_DIMENSIONS);
134857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(aCenterCoord, 0, sizeof(RtreeDValue)*RTREE_MAX_DIMENSIONS);
134673 134858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134674 134859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCell = NCELL(pNode)+1;
134860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = (nCell+1)&(~1);
134675 134861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134676 134862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allocate the buffers used by this operation. The allocation is
134677 134863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** relinquished before this function returns.
134678 134864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
134679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aCell = (RtreeCell *)sqlite3_malloc(nCell * (
134680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sizeof(RtreeCell) + /* aCell array */
134681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sizeof(int) + /* aOrder array */
134682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sizeof(int) + /* aSpare array */
134683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sizeof(float) /* aDistance array */
134865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCell = (RtreeCell *)sqlite3_malloc(n * (
134866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof(RtreeCell) + /* aCell array */
134867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof(int) + /* aOrder array */
134868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof(int) + /* aSpare array */
134869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof(RtreeDValue) /* aDistance array */
134684 134870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
134685 134871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !aCell ){
134686 134872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
134687 134873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aOrder = (int *)&aCell[nCell];
134689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aSpare = (int *)&aOrder[nCell];
134690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aDistance = (float *)&aSpare[nCell];
134874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOrder = (int *)&aCell[n];
134875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSpare = (int *)&aOrder[n];
134876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aDistance = (RtreeDValue *)&aSpare[n];
134691 134877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134692 134878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nCell; ii++){
134693 134879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ii==(nCell-1) ){
134694 134880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&aCell[ii], pCell, sizeof(RtreeCell));
134695 134881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
134696 134882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pNode, ii, &aCell[ii]);
134697 134883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134698 134884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aOrder[ii] = ii;
134699 134885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iDim=0; iDim<pRtree->nDim; iDim++){
134700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2]);
134701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2+1]);
134886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2]);
134887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2+1]);
134702 134888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134703 134889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134704 134890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iDim=0; iDim<pRtree->nDim; iDim++){
134705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aCenterCoord[iDim] = (float)(aCenterCoord[iDim]/((float)nCell*2.0));
134891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCenterCoord[iDim] = (aCenterCoord[iDim]/(nCell*(RtreeDValue)2));
134706 134892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134707 134893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134708 134894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nCell; ii++){
134709 134895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aDistance[ii] = 0.0;
134710 134896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iDim=0; iDim<pRtree->nDim; iDim++){
134711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float coord = (float)(DCOORD(aCell[ii].aCoord[iDim*2+1]) -
134712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DCOORD(aCell[ii].aCoord[iDim*2]));
134897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeDValue coord = (DCOORD(aCell[ii].aCoord[iDim*2+1]) -
134898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DCOORD(aCell[ii].aCoord[iDim*2]));
134713 134899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]);
134714 134900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134715 134901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134716 134902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134717 134903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SortByDistance(aOrder, nCell, aDistance, aSpare);
@@ -134949,20 +135135,23 @@
134949 135135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nData>1 ){
134950 135136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
134951 135137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
134952 135138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Populate the cell.aCoord[] array. The first coordinate is azData[3]. */
134953 135139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nData==(pRtree->nDim*2 + 3) );
135140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_RTREE_INT_ONLY
134954 135141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
134955 135142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<(pRtree->nDim*2); ii+=2){
134956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cell.aCoord[ii].f = (float)sqlite3_value_double(azData[ii+3]);
134957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cell.aCoord[ii+1].f = (float)sqlite3_value_double(azData[ii+4]);
135143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cell.aCoord[ii].f = (RtreeValue)sqlite3_value_double(azData[ii+3]);
135144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cell.aCoord[ii+1].f = (RtreeValue)sqlite3_value_double(azData[ii+4]);
134958 135145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cell.aCoord[ii].f>cell.aCoord[ii+1].f ){
134959 135146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_CONSTRAINT;
134960 135147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto constraint;
134961 135148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134962 135149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
134963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
135150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
135151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
135152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
134964 135153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<(pRtree->nDim*2); ii+=2){
134965 135154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cell.aCoord[ii].i = sqlite3_value_int(azData[ii+3]);
134966 135155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cell.aCoord[ii+1].i = sqlite3_value_int(azData[ii+4]);
134967 135156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cell.aCoord[ii].i>cell.aCoord[ii+1].i ){
134968 135157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_CONSTRAINT;
@@ -135356,11 +135545,17 @@
135356 135545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
135357 135546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(&tree, &node, ii, &cell);
135358 135547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_snprintf(512-nCell,&zCell[nCell],"%lld", cell.iRowid);
135359 135548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCell = (int)strlen(zCell);
135360 135549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=0; jj<tree.nDim*2; jj++){
135361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_snprintf(512-nCell,&zCell[nCell]," %f",(double)cell.aCoord[jj].f);
135550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_RTREE_INT_ONLY
135551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_snprintf(512-nCell,&zCell[nCell], " %f",
135552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (double)cell.aCoord[jj].f);
135553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
135554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_snprintf(512-nCell,&zCell[nCell], " %d",
135555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cell.aCoord[jj].i);
135556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
135362 135557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCell = (int)strlen(zCell);
135363 135558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
135364 135559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
135365 135560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zText ){
135366 135561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zTextNew = sqlite3_mprintf("%s {%s}", zText, zCell);
@@ -135398,11 +135593,15 @@
135398 135593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
135399 135594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
135400 135595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
135401 135596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
135402 135597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
135598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_RTREE_INT_ONLY
135599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *c = (void *)RTREE_COORD_INT32;
135600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
135403 135601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *c = (void *)RTREE_COORD_REAL32;
135602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
135404 135603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_module_v2(db, "rtree", &rtreeModule, c, 0);
135405 135604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
135406 135605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
135407 135606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *c = (void *)RTREE_COORD_INT32;
135408 135607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0);
@@ -135432,11 +135631,11 @@
135432 135631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){
135433 135632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx);
135434 135633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeMatchArg *pBlob;
135435 135634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nBlob;
135436 135635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
135437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(double);
135636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(RtreeDValue);
135438 135637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob);
135439 135638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pBlob ){
135440 135639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error_nomem(ctx);
135441 135640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
135442 135641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
@@ -135443,11 +135642,15 @@
135443 135642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBlob->magic = RTREE_GEOMETRY_MAGIC;
135444 135643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBlob->xGeom = pGeomCtx->xGeom;
135445 135644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBlob->pContext = pGeomCtx->pContext;
135446 135645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBlob->nParam = nArg;
135447 135646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nArg; i++){
135647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_RTREE_INT_ONLY
135648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob->aParam[i] = sqlite3_value_int64(aArg[i]);
135649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
135448 135650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBlob->aParam[i] = sqlite3_value_double(aArg[i]);
135651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
135449 135652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
135450 135653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_blob(ctx, pBlob, nBlob, doSqlite3Free);
135451 135654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
135452 135655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
135453 135656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -135455,11 +135658,11 @@
135455 135658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Register a new geometry function for use with the r-tree MATCH operator.
135456 135659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
135457 135660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_rtree_geometry_callback(
135458 135661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db,
135459 135662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zGeom,
135460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *),
135663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry *, int, RtreeDValue *, int *),
135461 135664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pContext
135462 135665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
135463 135666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */
135464 135667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
135465 135668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allocate and populate the context object. */
135466 135669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!