aboutsummaryrefslogtreecommitdiff
path: root/sqlite3_opt_fts3_test.go
diff options
context:
space:
mode:
authorGert-Jan Timmer <gjr.timmer@gmail.com>2018-05-23 22:20:06 +0200
committerGert-Jan Timmer <gjr.timmer@gmail.com>2018-05-23 22:20:06 +0200
commitba97a23a7f0670fd1ff44e16ba61d10f66c6899d (patch)
tree602fc4ebb019f1a567e8872421f470f442e222bb /sqlite3_opt_fts3_test.go
parentMerge pull request #540 from mattn/open-mode (diff)
downloadgolite-ba97a23a7f0670fd1ff44e16ba61d10f66c6899d.tar.gz
golite-ba97a23a7f0670fd1ff44e16ba61d10f66c6899d.tar.xz
Rename
Renamed files containing current features.
Diffstat (limited to 'sqlite3_opt_fts3_test.go')
-rw-r--r--sqlite3_opt_fts3_test.go130
1 files changed, 130 insertions, 0 deletions
diff --git a/sqlite3_opt_fts3_test.go b/sqlite3_opt_fts3_test.go
new file mode 100644
index 0000000..e06fc5d
--- /dev/null
+++ b/sqlite3_opt_fts3_test.go
@@ -0,0 +1,130 @@
+// Copyright (C) 2015 Yasuhiro Matsumoto <mattn.jp@gmail.com>.
+//
+// Use of this source code is governed by an MIT-style
+// license that can be found in the LICENSE file.
+
+package sqlite3
+
+import (
+ "database/sql"
+ "os"
+ "testing"
+)
+
+func TestFTS3(t *testing.T) {
+ tempFilename := TempFilename(t)
+ defer os.Remove(tempFilename)
+ db, err := sql.Open("sqlite3", tempFilename)
+ if err != nil {
+ t.Fatal("Failed to open database:", err)
+ }
+ defer db.Close()
+
+ _, err = db.Exec("DROP TABLE foo")
+ _, err = db.Exec("CREATE VIRTUAL TABLE foo USING fts3(id INTEGER PRIMARY KEY, value TEXT)")
+ if err != nil {
+ t.Fatal("Failed to create table:", err)
+ }
+
+ _, err = db.Exec("INSERT INTO foo(id, value) VALUES(?, ?)", 1, `今日の 晩御飯は 天麩羅よ`)
+ if err != nil {
+ t.Fatal("Failed to insert value:", err)
+ }
+
+ _, err = db.Exec("INSERT INTO foo(id, value) VALUES(?, ?)", 2, `今日は いい 天気だ`)
+ if err != nil {
+ t.Fatal("Failed to insert value:", err)
+ }
+
+ rows, err := db.Query("SELECT id, value FROM foo WHERE value MATCH '今日* 天*'")
+ if err != nil {
+ t.Fatal("Unable to query foo table:", err)
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var id int
+ var value string
+
+ if err := rows.Scan(&id, &value); err != nil {
+ t.Error("Unable to scan results:", err)
+ continue
+ }
+
+ if id == 1 && value != `今日の 晩御飯は 天麩羅よ` {
+ t.Error("Value for id 1 should be `今日の 晩御飯は 天麩羅よ`, but:", value)
+ } else if id == 2 && value != `今日は いい 天気だ` {
+ t.Error("Value for id 2 should be `今日は いい 天気だ`, but:", value)
+ }
+ }
+
+ rows, err = db.Query("SELECT value FROM foo WHERE value MATCH '今日* 天麩羅*'")
+ if err != nil {
+ t.Fatal("Unable to query foo table:", err)
+ }
+ defer rows.Close()
+
+ var value string
+ if !rows.Next() {
+ t.Fatal("Result should be only one")
+ }
+
+ if err := rows.Scan(&value); err != nil {
+ t.Fatal("Unable to scan results:", err)
+ }
+
+ if value != `今日の 晩御飯は 天麩羅よ` {
+ t.Fatal("Value should be `今日の 晩御飯は 天麩羅よ`, but:", value)
+ }
+
+ if rows.Next() {
+ t.Fatal("Result should be only one")
+ }
+}
+
+func TestFTS4(t *testing.T) {
+ tempFilename := TempFilename(t)
+ defer os.Remove(tempFilename)
+ db, err := sql.Open("sqlite3", tempFilename)
+ if err != nil {
+ t.Fatal("Failed to open database:", err)
+ }
+ defer db.Close()
+
+ _, err = db.Exec("DROP TABLE foo")
+ _, err = db.Exec("CREATE VIRTUAL TABLE foo USING fts4(tokenize=unicode61, id INTEGER PRIMARY KEY, value TEXT)")
+ switch {
+ case err != nil && err.Error() == "unknown tokenizer: unicode61":
+ t.Skip("FTS4 not supported")
+ case err != nil:
+ t.Fatal("Failed to create table:", err)
+ }
+
+ _, err = db.Exec("INSERT INTO foo(id, value) VALUES(?, ?)", 1, `février`)
+ if err != nil {
+ t.Fatal("Failed to insert value:", err)
+ }
+
+ rows, err := db.Query("SELECT value FROM foo WHERE value MATCH 'fevrier'")
+ if err != nil {
+ t.Fatal("Unable to query foo table:", err)
+ }
+ defer rows.Close()
+
+ var value string
+ if !rows.Next() {
+ t.Fatal("Result should be only one")
+ }
+
+ if err := rows.Scan(&value); err != nil {
+ t.Fatal("Unable to scan results:", err)
+ }
+
+ if value != `février` {
+ t.Fatal("Value should be `février`, but:", value)
+ }
+
+ if rows.Next() {
+ t.Fatal("Result should be only one")
+ }
+}