SQLite

PySQLite(1)

以前からSQLite3のdbファイルを読み込むプログラムを書いていますが、それに書きこむ機能も追加しています。とりあえずPySQLiteと呼んでいます。まだ、レコードの大きさに制限がありますが、書き込みができるようになりました(削除とアップデートはまだでき…

sqliteのデータベースファイルを読み込む(3)[LIMITの実装]

前回のソースコードにDBクラスを追加しました。LIMIT offset, limit句はcursorをoffsetまで進めて、limit回値を返します。つまりoffset回だけ、cursorを動かすことになるので、offsetを設定してもそれだけのコストはかかります。また、cursorのレベルで見れ…

sqliteのデータベースファイルを読み込む(2)

sqliteのdbファイルを読み込むpythonスクリプトを書いています。読み込むことがある程度できるようになったら、書き込みもできるようにもしたいです。前回から変わったところはselect文みたいにカラムを指定する(現在は何番目のカラムかを数字で指定する)こ…

sqliteのデータベースファイルを読み込む

前回から大きく変わったところはないですが、sqlite_master以外のテーブルも読み込むように変更しました。以前のようにデータベースファイルだけ指定すると、sqlite_masterのレコードが標準出力されます。 $./select.py test.db (1, 'table', 'Products', 'P…

sqlite_masterの中身を読み込む(2)

前回のものはページタイプ(INTKEY|LEAF_DATA|LEAF)のときのみ読み込めるスクリプトでしたが、ページタイプが(INTKEY|LEAF_DATA)のときも読み込めるように変更しました。例えばtracのデータベースファイルを読み込んでみると、次のように表示されます。 rowid…

bitstringを使ってみた

$ sqlite3 test.db SQLite version 3.7.7.1 2011-06-28 17:39:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> CREATE TABLE Products(name text, price integer, locale text); sqlite> CREATE TABLE People(name t…

sqlite_masterの中身を読み込む(1)

うまくいくときと、いかないときがあるのですが、sqlite_masterに書かれた内容を標準出力するプログラムを書きました(また直ったら更新すると思います)。現在のところは,リーフページのみ読み込めるのみです。まず読み込むためのsqlite3を使って読み込むファ…

64ビット整数を8ビット配列に格納

(uint64_t)64ビット整数を(uint8_t)8ビット配列に格納する際、8成分必要です。番兵を入れれば9成分でしょうか。同じ最大9成分でも、それぞれの成分の1ビット分を次があるかどうかを示すフラグにする方法も考えられます。メリットとしては、成分が少ないとき…

Insertion Sort

SQLiteのソースコードリーディングしているのですが、ぼくはソート・アルゴリズムについてあまり勉強したことがないので、アルゴリズムのところでいちいち躓いています。SQLiteで使われているアルゴリズムは本にも載っているような古典アルゴリズムがほとん…

マージソート(SQLite)

アルゴリズムの名前が分からないのですが、途中でマージは使われているのでマージソートの一種でしょうか。ぼくが見ているSQLiteのままのコード(pcache.cの457行目-のpcacheMergeDirtyListがmergeに、pcacheSortDirtyListがsortに対応します)だと一緒にする…

N-WAY MERGE の実装(2)

"ORDER BY"のときにSQLite中で動いているsort関数について調べているのですが、前回のは少しinputと結果が違っているようで、実はこんなのだと今のところ思っています。やっていることはcountの大きさのトーナメントを用意して、inputの配列の0-(count-1)成…

N-WAY MERGEの実装

SQLiteの中のソート関数(ORDER BYを書いたときに内部で動く関数)を読んでいたら、複数のソートされた配列をマージしていたので、それをpythonに焼き直してみました。アルゴリズムとしては、各配列の第0要素をエントリして、一番小さな数を決めるのにトーナメ…