aboutsummaryrefslogtreecommitdiff
path: root/ext/rtree/rtree.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2018-08-29 20:52:40 +0000
committerdrh <drh@noemail.net>2018-08-29 20:52:40 +0000
commit17f19eadb82a2463c68f852ef7cb591cf61605a9 (patch)
tree09704b49ac422befdaf9aa692606bf9108020b53 /ext/rtree/rtree.c
parent9d67afc421b726ec02fb422deadee31247f6aac3 (diff)
downloadsqlite-17f19eadb82a2463c68f852ef7cb591cf61605a9.tar.gz
sqlite-17f19eadb82a2463c68f852ef7cb591cf61605a9.zip
Fixes to the UPDATE logic in Geopoly.
FossilOrigin-Name: 7c3cee0a2a5ccacff27400c38bd708f7b9b968eb013a8fa685d876dfe85e12a6
Diffstat (limited to 'ext/rtree/rtree.c')
-rw-r--r--ext/rtree/rtree.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c
index 091c0bc6b..06efdc71f 100644
--- a/ext/rtree/rtree.c
+++ b/ext/rtree/rtree.c
@@ -127,6 +127,7 @@ struct Rtree {
u8 nBytesPerCell; /* Bytes consumed per cell */
u8 inWrTrans; /* True if inside write transaction */
u8 nAux; /* # of auxiliary columns in %_rowid */
+ u8 nAuxNotNull; /* Number of initial not-null aux columns */
int iDepth; /* Current depth of the r-tree structure */
char *zDb; /* Name of database containing r-tree table */
char *zName; /* Name of r-tree table */
@@ -3453,7 +3454,11 @@ static int rtreeSqlInit(
sqlite3_str_appendf(p, "UPDATE \"%w\".\"%w_rowid\"SET ", zDb, zPrefix);
for(ii=0; ii<pRtree->nAux; ii++){
if( ii ) sqlite3_str_append(p, ",", 1);
- sqlite3_str_appendf(p,"a%d=?%d",ii,ii+2);
+ if( ii<pRtree->nAuxNotNull ){
+ sqlite3_str_appendf(p,"a%d=coalesce(?%d,a%d)",ii,ii+2,ii);
+ }else{
+ sqlite3_str_appendf(p,"a%d=?%d",ii,ii+2);
+ }
}
sqlite3_str_appendf(p, " WHERE rowid=?1");
zSql = sqlite3_str_finish(p);