mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.2 KiB
130 lines
3.2 KiB
// 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") |
|
} |
|
}
|
|
|