koron / nvgd

Filterable (grep, head and tail) HTTP file server
MIT License
17 stars 2 forks source link

support 1000 columns in TRDSQL filter #80

Closed koron closed 1 year ago

koron commented 1 year ago

OK: 500 columns NG: 501 columns

Threshold is 500 columns.

koron commented 1 year ago
trdsql error: import: sql: expected 501 arguments, got 0: 

trdsqlでimport時のエラー

koron commented 1 year ago

trdsqlがSQLiteに対しては500カラムまでの制限をかけている。 どうしてそうするひつようがあるのか? 外すことはできないのか?

https://github.com/noborus/trdsql/blob/4a05ac286a6f161287b6d5b511b88fb9a8b279be/database.go#L81-L83

koron commented 1 year ago

どうしてそうするひつようがあるのか?

試しに1000に書き換えたら、問題なく動いた。なので必要性はないようだ。

koron commented 1 year ago

image

koron commented 1 year ago

mattn/go-sqlite3@v1.14.16 は SQLite v3.39.4 をバンドルしている。 そのため上記の記述が真ならば、すでにtrdsqlがbulkを指定する必要はない。

koron commented 1 year ago

https://www.sqlite.org/releaselog/3_32_0.html

Increase the default upper bound on the number of parameters from 999 to 32766.

制限がなくなったわけではなく、999から32766になったらしい。

koron commented 1 year ago

trdsqlにこの制限がかかったのは 2018-01-20 リリースの v0.4.0 https://github.com/noborus/trdsql/commit/b7a8f69853aeef18a134dfd1b478ebcbdfd3ea8a

この時 go.mod はまだないので mattn/go-sqlite3 のバージョンは固定できない。

ただ SQLite 3.23.0 のリリースが 2020-05-22 なので、ほぼ確実に 2018-01-20 時点のパラメーター数の上限は 999

なので既に必要のないモノである可能性が高い。

koron commented 1 year ago

32766 まで行けることの確認を試みたが、カラム数に上限2000があって阻まれた。

The default setting for SQLITE_MAX_COLUMN is 2000. You can change it at compile time to values as large as 32767. On the other hand, many experienced database designers will argue that a well-normalized database will never need more than 100 columns in a table.

https://www.sqlite.org/limits.html

koron commented 1 year ago
  1. とりあえず trdsql を fork して、2000までサポートしてしまう
  2. 本家 trdsql に2000にするPRを送る
koron commented 1 year ago

this will fix with https://github.com/koron/nvgd/pull/82