Golang SQLCipher driver conforming to the built-in database/sql interface and using the latest sqlite3 code.
Switch branches/tags
Nothing to show
Clone or download
Permalink
Failed to load latest commit information.
_example Upgrade to the latest sqlcipher. May 23, 2018
tool bump sqlite 3.22.0 Feb 7, 2018
.gitignore add *.o Aug 11, 2016
.travis.yml remove libsqlite3 from travis. May 23, 2018
LICENSE Update sqlcipher to 3.11.0 Jul 7, 2016
README.md Update travis config. May 23, 2018
backup.go fix breaking compatibility. Mar 21, 2017
backup_test.go Test the error reporting when preparing to perform a backup. Sep 23, 2016
callback.go Merge branch 'master' into master Aug 30, 2017
callback_test.go Move argument converters to callback.go, and optimize return value ha… Aug 21, 2015
doc.go Update sqlcipher to 3.11.0 Jul 7, 2016
error.go fix breaking compatibility. Mar 21, 2017
error_test.go fix error message Nov 18, 2017
sqlite3-binding.c Upgrade to the latest sqlcipher. May 23, 2018
sqlite3-binding.h Upgrade to the latest sqlcipher. May 23, 2018
sqlite3.go Upgrade to the latest sqlcipher. May 23, 2018
sqlite3_context.go rename Mar 5, 2017
sqlite3_fts3_test.go FTS4 is not available on Trusty Apr 22, 2016
sqlite3_fts5.go Conditional build for the FTS5 Extension Mar 7, 2016
sqlite3_go18.go Add static_mock.go to allow building with CGO_ENABLED=0 Feb 1, 2018
sqlite3_go18_test.go Fix race in ExecContext Nov 21, 2017
sqlite3_icu.go remove trailing space Nov 4, 2016
sqlite3_json1.go Conditional build for the JSON1 Extension Feb 28, 2016
sqlite3_libsqlite3.go support Solaris Aug 30, 2017
sqlite3_load_extension.go disable extension when loading failed Mar 20, 2017
sqlite3_omit_load_extension.go Disable LoadExtension when omit_load_extension is specified Apr 18, 2016
sqlite3_other.go support Solaris Aug 30, 2017
sqlite3_solaris.go add build constraint for solaris Jan 22, 2018
sqlite3_test.go Upgrade to the latest sqlcipher. May 23, 2018
sqlite3_trace.go fix type of event code Jan 29, 2018
sqlite3_type.go go vet && golint Nov 6, 2016
sqlite3_vtable.go Adding unit test for VTable Insert/Update/Delete Apr 7, 2017
sqlite3_vtable_test.go Adding unit test for VTable Insert/Update/Delete Apr 7, 2017
sqlite3_windows.go Fix compile for old mingw32 Dec 29, 2015
sqlite3ext.h Upgrade to the latest sqlcipher. May 23, 2018
static_mock.go Add static_mock.go to allow building with CGO_ENABLED=0 Feb 1, 2018
wercker.yml Install libssl-dev Feb 3, 2017

README.md

go-sqlcipher

Build Status

SQLCipher driver conforming to the built-in database/sql interface and using the latest sqlite3 code.

which is 3.20.1

Working with sqlcipher version which is 3.4.2

It's wrapper with

  • go-sqlite3 sqlite3 driver for go that using database/sql.
  • SQLCipher SQLCipher is an SQLite extension that provides 256 bit AES encryption of database files.
  • Using openssl as the 256 bit AES encryption.

Have't build test in a windows machine or linux machine Working in my macbook-air

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.3.0
Thread model: posix

OpenSSL 0.9.8zd 8 Jan 2015
built on: Mar  9 2015
platform: darwin64-x86_64-llvm
options:  bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) blowfish(idx)
compiler: -arch x86_64 -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -O3 -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DMD32_REG_T=int -DOPENSSL_NO_IDEA -DOPENSSL_PIC -DOPENSSL_THREADS -DZLIB -mmacosx-version-min=10.6
OPENSSLDIR: "/System/Library/OpenSSL"

Installation

This package can be installed with the go get command:

go get github.com/xeodou/go-sqlcipher

go-sqlcipher is cgo package. If you want to build your app using go-sqlcipher, you need gcc. However, if you install go-sqlcipher with go install github.com/xeodou/go-sqlcipher, you don't need gcc to build your app anymore.

Documentation

API documentation can be found here: http://godoc.org/github.com/xeodou/go-sqlcipher

Examples can be found under the ./_example directory

FAQ

The golang code is copy from go-sqlite3 If you have some issue, maybe you can find from https://github.com/mattn/go-sqlite3/issues

Here is some help from go-sqlite3 project.

  • Want to build go-sqlite3 with libsqlite3 on my linux.

    Use go build --tags "libsqlite3 linux"

  • Want to build go-sqlite3 with libsqlite3 on OS X.

    Install sqlite3 from homebrew: brew install sqlite3

    Use go build --tags "libsqlite3 darwin"

  • Want to build go-sqlite3 with icu extension.

    Use go build --tags "icu"

    Available extensions: json1, fts5, icu

  • Can't build go-sqlite3 on windows 64bit.

    Probably, you are using go 1.0, go1.0 has a problem when it comes to compiling/linking on windows 64bit. See: https://github.com/mattn/go-sqlite3/issues/27

  • Getting insert error while query is opened.

    You can pass some arguments into the connection string, for example, a URI. See: #39

  • Do you want to cross compile? mingw on Linux or Mac?

    See: #106 See also: http://www.limitlessfx.com/cross-compile-golang-app-for-windows-from-linux.html

  • Want to get time.Time with current locale

    Use _loc=auto in SQLite3 filename schema like file:foo.db?_loc=auto.

  • Can I use this in multiple routines concurrently?

    Yes for readonly. But, No for writable. See #50, #51, #209, #274.

  • Why is it racy if I use a sql.Open("sqlite3", ":memory:") database?

    Each connection to :memory: opens a brand new in-memory sql database, so if the stdlib's sql engine happens to open another connection and you've only specified ":memory:", that connection will see a brand new database. A workaround is to use "file::memory:?mode=memory&cache=shared". Every connection to this string will point to the same in-memory database. See #204 for more info.

  • Print some waring messages like warning: 'RAND_add' is deprecated: first deprecated in OS X 10.7

    You can ignore these messages.

License

MIT:

sqlite3-binding.c, sqlite3-binding.h, sqlite3ext.h

The -binding suffix was added to avoid build failures under gccgo.

In this repository, those files are amalgamation code that copied from SQLCipher. The license of those codes are depend on the license of SQLCipher.

In this repository, those files are an amalgamation of code that was copied from SQLite3. The license of that code is the same as the license of SQLite3.

Original repository https://github.com/mattn/go-sqlite3 is under MIT.

Author

xeodou