OOTA's page

SQLite module

説明

GNU emacs(x64)で実装したダイナミックロード機能の実働サンプルです。emacsにSQLite機能を追加します。

ダウンロード

sqlite_dll-20120129.zip 使用許諾条件はGPL V2です。

インストール

sqlite3.dllを任意の場所に展開してください

コンパイル

  • ソースからコンパイルする場合はまず以下を入手してください。
    1. Miscrosoft SDK for windows 6.1とそれに付属のVC++2008

      emacs本体のVCランタイムとバージョンを合わせる必要があります

      Miscrosoft SDK for windows 6.1(Windows SDK for Windows Server 2008 and .NET Framework 3.5)
    2. SQlite 以下を入手後展開してください。

      sqlite-amalgamation
  • Miscrosoft SDK for windows 6.1のCMD Shellから以下のコマンドにてdllを生成します。"c:\Program Files\GNU\emacs23\bin\dl-nmake" "SQLITE3=SQLITEwを展開したパス"

使用法

いきなりですがサンプルコードです。

(defun trace (conn s)
  (insert (format "---- %s\n" s)))

(defun sqlite3-sample (dll-name)
  (interactive
   "fsqlite3.dll filename: ")
  (let* ((library-id
	  (load-dynamic-library dll-name))
	 (db-name ":memory:")
	 (conn (sqlite3-open 
	      db-name 
	      :sqlite-open-create :sqlite-open-readwrite))
	 (buffer (get-buffer-create "*SQLite sample output*"))
	 stmt)

    ;; create table
    (with-current-buffer buffer
      (pop-to-buffer buffer)
      (erase-buffer)

      (insert (prin1-to-string conn) "\n")
      (sqlite3-execute
       conn "create table files (name text, 'user' text, 'group' text, size integer)")


      
      (setq stmt
	    (sqlite3-prepare conn "insert into files values(?, ?, ?, ?)"))
      (insert (prin1-to-string stmt) "\n")
      
      (dolist (f (directory-files-and-attributes
		  (if (getenv "emacs_dir")
		      (expand-file-name "lisp" (getenv "emacs_dir"))
		    (car load-path))
		  nil nil t t))
	(sqlite3-step stmt nil (nth 0 f) (nth 3 f) (nth 4 f) (nth 8 f)))
      (sqlite3-finalize stmt)
      
      (setq stmt
	    (sqlite3-prepare conn "select * from files where name like 'f%.el' order by size" ))
      
      (let (result)
	(while (vectorp 
		(setq result (sqlite3-step stmt :sqlite-vector)))
	  
	  (insert (format "--> %s %s %s %s\n"
			  (aref result 0)
			  (aref result 1)
			  (aref result 2)
			  (aref result 3)))))
      (sqlite3-finalize stmt)
      (sqlite3-close conn)
      (unload-dynamic-library library-id))))
	

オブジェクト

  • sqlite3-connオブジェクト

    sqlite3-openで作成します
  • sqlite3-stmtオブジェクト

    sqlite3-prepare-statementで作成します
  • sqlite3-contextオブジェクト

    sqlite3-create-functionで作成される、スカラー関数または集約関数で使用します。

関数

SQLiteのCインターフェースとほぼ同一です。リターン値はエラーシンボル, ROW(vectorまたはalist), または文字列,数値などのSQL値、メタ情報を表す文字列です。

詳しくはload-dynamic-library後にdescribe-function(\C-h f)で確認してください。

  • sqlite3-open

    sqlite3_open_v2を呼び出します。ファイル名に続けてフラグを指定します。最後の引数がStringの場合はvfsオプションとしてsqlite3_open_v2に渡します。
  • sqlite3-enable-load-extension
  • sqlite3-close
  • sqlite3-execute
  • sqlite3-prepare
  • sqlite3-sql
  • sqlite3-bind

    sqlite3_bindを呼び出します。:名前を前置することで名前付けバインディングも利用できます。

    バインディング型は引数の型から判別しますが、:sqlite_integer, :sqlite_float, :sqlite_blob, :sqlite_text, :sqlite_nullを前置することで強制することも可能です。
  • sqlite3-step

    sqlite3_stepを呼び出します。

    第1引数で実行結果の返却方法を指定します。nilの場合は実行結果を表すエラーシンボル、:sqlite-vectorの場合は実行結果をベクター、:sqlite-alistの場合はalistで返します。

    第2引数が与えられた場合はsqlite3_step実行前にそれぞれの引数に対してsqlite3_bindを行います。
  • sqlite3-column-name
  • sqlite3-column-value
  • sqlite3-column-decltype
  • sqlite3-column-count
  • sqlite3-reset
  • sqlite3-finalize
  • sqlite3-result-blob
  • sqlite3-result-zeroblob
  • sqlite3-result-double
  • sqlite3-result-int
  • sqlite3-result-null
  • sqlite3-result-text
  • sqlite3-result-error
  • sqlite3-result-error-toobig
  • sqlite3-result-error-nomem
  • sqlite3-result-error-code
  • sqlite3-aggregate-context
  • sqlite3-create-function
  • sqlite3-trace
  • sqlite3-connection-list

    オープンしているデータベースコネクションのリストを返します。

フラグ

sqlite-openのファイル名に続けて任意の組み合わせを列挙します。

:sqlite_open_readonly, :sqlite_open_readwrite, :sqlite_open_create, :sqlite_open_deleteonclose, :sqlite_open_exclusive, :sqlite_open_autoproxy, :sqlite_open_uri, :sqlite_open_main_db, :sqlite_open_temp_db, :sqlite_open_transient_db, :sqlite_open_main_journal, :sqlite_open_temp_journal, :sqlite_open_subjournal, :sqlite_open_master_journal, :sqlite_open_nomutex, :sqlite_open_fullmutex, :sqlite_open_sharedcache, :sqlite_open_privatecache, :sqlite_open_wal

エラーシンボル

SQLITE_OKはt, SQLITE_ERRORはnil, その他は以下のシンボルに対応します。

sqlite-done, sqlite-row, sqlite-notadb, sqlite-range, sqlite-format, sqlite-auth, sqlite-nolfs, sqlite-misuse, sqlite-mismatch, sqlite-constraint, sqlite-toobig, sqlite-schema, sqlite-empty, sqlite-protocol, sqlite-cantopen, sqlite-full, sqlite-notfound, sqlite-corrupt, sqlite-ioerr, sqlite-interrupt, sqlite-readonly, sqlite-nomem, sqlite-locked, sqlite-busy, sqlite-abort, sqlite-perm, sqlite-internal, sqlite-readonly-cantlock, sqlite-readonly-recovery, sqlite-corrupt-vtab, sqlite-cantopen-notempdir, sqlite-busy-recovery, sqlite-locked-sharedcache, sqlite-ioerr-seek, sqlite-ioerr-shmmap, sqlite-ioerr-shmlock, sqlite-ioerr-shmsize, sqlite-ioerr-shmopen, sqlite-ioerr-dir-close, sqlite-ioerr-close, sqlite-ioerr-lock, sqlite-ioerr-checkreservedlock, sqlite-ioerr-access, sqlite-ioerr-nomem, sqlite-ioerr-blocked, sqlite-ioerr-delete, sqlite-ioerr-rdlock, sqlite-ioerr-unlock, sqlite-ioerr-fstat, sqlite-ioerr-truncate, sqlite-ioerr-dir-fsync, sqlite-ioerr-fsync, sqlite-ioerr-write, sqlite-ioerr-short-read, sqlite-ioerr-read,
Design downloaded from free website templates.