0

R*tree 仮想テーブルを含む SQLite データベースがあります。このテーブルはかなり奇妙な動作をしており、何が問題なのか途方に暮れています。私が調査できる側面へのポインタをいただければ幸いです!

> dbGetQuery(con, 'PRAGMA integrity_check')
  integrity_check
1              ok

大丈夫そうです...

> dbGetQuery(con, 'SELECT * FROM peakLoc LIMIT 5')
  peakID scanStart scanEnd    mzMin    mzMax
1  18481      5540    5904 435.1880 435.2095
2  18429      5555    5644 408.7411 408.7459
3  18251      5621    5710 432.7190 432.7285
4  16415      6081    6173 432.2292 432.2470
5  16391      6089    6351 454.1823 454.1960

R*tree テーブルの一般的な外観

> dbGetQuery(con, 'SELECT MIN(scanEnd), MAX(scanEnd) FROM peakLoc')
  MIN(scanEnd) MAX(scanEnd)
1           51        19369

scanEnd の境界

> dbGetQuery(con, 'SELECT * FROM peakLoc WHERE scanEnd > 5000 LIMIT 5')
  peakID scanStart scanEnd    mzMin    mzMax
1  20987      4839    6284 410.1729 410.2035
2   6705      9827   10132 738.8564 738.8674
3  15190      6482    6756 615.3235 615.3395
4  15189      6482    6756 509.2193 509.2258
5  12001      7449    7710 855.4534 855.4631

ここまでは順調ですね...

> dbGetQuery(con, 'SELECT * FROM peakLoc WHERE scanEnd > 6000 LIMIT 5')
[1] peakID    scanStart scanEnd   mzMin     mzMax    
<0 rows> (or 0-length row.names)

記録はどこにありますか?

比較器が任意の大きな数になると、他の列でも同じことが起こります。この動作は R*tree テーブルにのみ存在します - 通常のテーブルは正常に動作します...

私が知らない R*tree モジュールの制約に出くわしたことがありますか? R*tree のすべてのレコードは 1 つの大きな挿入から来ており、R*tree が依存している基になるテーブルには触れていません...

編集: CL からの要求に応じて、再現可能な例を作成しようとしました。少なくとも私のシステムでは、次のようにすると同じ動作の R*tree が生成されます。

set.seed(1)
library(RSQLite)
con <- dbConnect(dbDriver('SQLite'), ':memory:')
dbGetQuery(con, 'CREATE VIRTUAL TABLE test USING rtree(id, xmin, xmax, ymin, ymax)')
x <- abs(rnorm(100))
y <- abs(rnorm(100))
data <- data.frame(id=1:100, xmin=x, xmax=x+2, ymin=y, ymax=y+3)
dbGetPreparedQuery(con, 'INSERT INTO test VALUES ($id, $xmin, $xmax, $ymin, $ymax)', bind.data=data)
dbGetQuery(con, 'SELECT max(xmax) FROM test')
dbGetQuery(con, 'SELECT * FROM test WHERE xmax > 4 LIMIT 5')
dbGetQuery(con, 'SELECT * FROM test WHERE +xmax > 4 LIMIT 5')

編集 2: 最初の編集で指定されたコマンドで作成されたデータベースは、次のリンクからダウンロードできます: https://dl.dropboxusercontent.com/u/2323585/testdb.sqlite

4

0 に答える 0