Files
UUVPN/iOS-SwiftUI-Code/GRDB.swift-6.29.3/Tests/GRDBTests/DatabasePoolCollationTests.swift
T

40 lines
1.9 KiB
Swift

import XCTest
import GRDB
class DatabasePoolCollationTests: GRDBTestCase {
func testCollationIsSharedBetweenWriterAndReaders() throws {
dbConfiguration.prepareDatabase { db in
let collation1 = DatabaseCollation("collation1") { (string1, string2) in
return (string1 == string2) ? .orderedSame : ((string1 < string2) ? .orderedAscending : .orderedDescending)
}
db.add(collation: collation1)
let collation2 = DatabaseCollation("collation2") { (string1, string2) in
return (string1 == string2) ? .orderedSame : ((string1 < string2) ? .orderedDescending : .orderedAscending)
}
db.add(collation: collation2)
}
let dbPool = try makeDatabasePool()
try dbPool.write { db in
// Both collations are available in writer
try db.execute(sql: """
CREATE TABLE items (text TEXT COLLATE collation2);
INSERT INTO items (text) VALUES ('a');
INSERT INTO items (text) VALUES ('b');
INSERT INTO items (text) VALUES ('c');
""")
XCTAssertEqual(try String.fetchAll(db, sql: "SELECT text FROM items ORDER BY text"), ["c", "b", "a"])
XCTAssertEqual(try String.fetchAll(db, sql: "SELECT text FROM items ORDER BY text COLLATE collation1"), ["a", "b", "c"])
}
try dbPool.read { db in
// Both collations are available in reader
XCTAssertEqual(try String.fetchAll(db, sql: "SELECT text FROM items ORDER BY text"), ["c", "b", "a"])
XCTAssertEqual(try String.fetchAll(db, sql: "SELECT text FROM items ORDER BY text COLLATE collation1"), ["a", "b", "c"])
XCTAssertEqual(try String.fetchAll(db, sql: "SELECT text FROM items ORDER BY text COLLATE collation2"), ["c", "b", "a"])
}
}
}