diff --git a/GRDB/Core/Database+Schema.swift b/GRDB/Core/Database+Schema.swift index 2a9a719d66..593a1fcd8e 100644 --- a/GRDB/Core/Database+Schema.swift +++ b/GRDB/Core/Database+Schema.swift @@ -141,7 +141,7 @@ extension Database { } } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Returns information about a table or a view func table(_ tableName: String) throws -> TableInfo? { for schemaID in try fetchSchemaIdentifiers() { @@ -575,7 +575,7 @@ extension Database { /// - precondition: table exists. private func fetchTableHasRowID(_ table: DatabaseObjectID) throws -> Bool { // Prefer PRAGMA table_list if available -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Maybe SQLCipher is too old: check actual version if sqlite3_libversion_number() >= 3037000 { return try self.table(for: table)!.isWithoutRowIDTable == false diff --git a/GRDB/Core/DatabaseWriter.swift b/GRDB/Core/DatabaseWriter.swift index e8bee4637f..59fe6ff5fd 100644 --- a/GRDB/Core/DatabaseWriter.swift +++ b/GRDB/Core/DatabaseWriter.swift @@ -552,7 +552,7 @@ extension DatabaseWriter { // This method is declared on DatabaseWriter instead of DatabaseReader, // so that it is not available on DatabaseSnaphot. VACUUM INTO is not // available inside the transaction that is kept open by DatabaseSnaphot. -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Creates a new database file at the specified path with a minimum /// amount of disk space. /// @@ -665,7 +665,7 @@ extension DatabaseWriter { try await writeWithoutTransaction { try $0.execute(sql: "VACUUM") } } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Creates a new database file at the specified path with a minimum /// amount of disk space. /// diff --git a/GRDB/Dump/Database+Dump.swift b/GRDB/Dump/Database+Dump.swift index 8876b8cb72..43d8bae205 100644 --- a/GRDB/Dump/Database+Dump.swift +++ b/GRDB/Dump/Database+Dump.swift @@ -324,7 +324,7 @@ extension Database { } private func isShadowTable(_ tableName: String) throws -> Bool { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Maybe SQLCipher is too old: check actual version if Database.sqliteLibVersionNumber >= 3037000 { guard let table = try table(tableName) else { diff --git a/GRDB/FTS/FTS3.swift b/GRDB/FTS/FTS3.swift index 1e02e2b9ff..815000551d 100644 --- a/GRDB/FTS/FTS3.swift +++ b/GRDB/FTS/FTS3.swift @@ -40,11 +40,11 @@ public struct FTS3 { /// the `remove_diacritics=1` tokenizer argument. case removeLegacy - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Remove diacritics from Latin script characters. This option matches /// the `remove_diacritics=2` tokenizer argument. case remove - #elseif !GRDBCIPHER + #else /// Remove diacritics from Latin script characters. This option matches /// the `remove_diacritics=2` tokenizer argument. @available(iOS 14, macOS 10.16, tvOS 14, *) // SQLite 3.27+ diff --git a/GRDB/FTS/FTS3TokenizerDescriptor.swift b/GRDB/FTS/FTS3TokenizerDescriptor.swift index 403e946ab9..bf9424c5c7 100644 --- a/GRDB/FTS/FTS3TokenizerDescriptor.swift +++ b/GRDB/FTS/FTS3TokenizerDescriptor.swift @@ -95,10 +95,10 @@ public struct FTS3TokenizerDescriptor: Sendable { break case .keep: arguments.append("remove_diacritics=0") - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC case .remove: arguments.append("remove_diacritics=2") - #elseif !GRDBCIPHER + #else case .remove: arguments.append("remove_diacritics=2") #endif diff --git a/GRDB/FTS/FTS5.swift b/GRDB/FTS/FTS5.swift index 19f1d2d4bc..127a43fef2 100644 --- a/GRDB/FTS/FTS5.swift +++ b/GRDB/FTS/FTS5.swift @@ -63,12 +63,12 @@ public struct FTS5 { /// Remove diacritics from Latin script characters. This /// option matches the raw "remove_diacritics=1" tokenizer argument. case removeLegacy - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Remove diacritics from Latin script characters. This /// option matches the raw "remove_diacritics=2" tokenizer argument, /// available from SQLite 3.27.0 case remove - #elseif !GRDBCIPHER + #else /// Remove diacritics from Latin script characters. This /// option matches the raw "remove_diacritics=2" tokenizer argument, /// available from SQLite 3.27.0 diff --git a/GRDB/FTS/FTS5TokenizerDescriptor.swift b/GRDB/FTS/FTS5TokenizerDescriptor.swift index 6eb1db5859..ce6a982ffb 100644 --- a/GRDB/FTS/FTS5TokenizerDescriptor.swift +++ b/GRDB/FTS/FTS5TokenizerDescriptor.swift @@ -182,10 +182,10 @@ public struct FTS5TokenizerDescriptor: Sendable { break case .keep: components.append(contentsOf: ["remove_diacritics", "0"]) - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC case .remove: components.append(contentsOf: ["remove_diacritics", "2"]) - #elseif !GRDBCIPHER + #else case .remove: components.append(contentsOf: ["remove_diacritics", "2"]) #endif diff --git a/GRDB/JSON/SQLJSONExpressible.swift b/GRDB/JSON/SQLJSONExpressible.swift index 71c3708fc6..62f9d566e0 100644 --- a/GRDB/JSON/SQLJSONExpressible.swift +++ b/GRDB/JSON/SQLJSONExpressible.swift @@ -154,7 +154,7 @@ extension SQLSpecificExpressible { } } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC extension SQLJSONExpressible { /// The `->>` SQL operator. /// diff --git a/GRDB/JSON/SQLJSONFunctions.swift b/GRDB/JSON/SQLJSONFunctions.swift index 406b7f1d47..e82f930ce3 100644 --- a/GRDB/JSON/SQLJSONFunctions.swift +++ b/GRDB/JSON/SQLJSONFunctions.swift @@ -1,4 +1,4 @@ -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // MARK: - JSON extension Database { diff --git a/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift b/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift index 12cd33ab64..2f3dda4605 100644 --- a/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift +++ b/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift @@ -646,7 +646,7 @@ extension QueryInterfaceRequest { // MARK: - Batch Delete and Fetch extension QueryInterfaceRequest { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Returns a `DELETE RETURNING` prepared statement. /// /// For example: @@ -1176,7 +1176,7 @@ extension QueryInterfaceRequest { // MARK: - Batch Update and Fetch extension QueryInterfaceRequest { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Returns an `UPDATE RETURNING` prepared statement. /// /// For example: diff --git a/GRDB/QueryInterface/SQL/SQLExpression.swift b/GRDB/QueryInterface/SQL/SQLExpression.swift index 8c823ea1be..337f688b54 100644 --- a/GRDB/QueryInterface/SQL/SQLExpression.swift +++ b/GRDB/QueryInterface/SQL/SQLExpression.swift @@ -517,7 +517,7 @@ public struct SQLExpression: Sendable { /// The `>>` bitwise right shift operator static let rightShift = BinaryOperator(">>") -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// The `->` SQL operator static let jsonExtractJSON = BinaryOperator("->", isJSONValue: true) @@ -2121,7 +2121,7 @@ extension SQLExpression { } } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Returns an expression suitable in JSON building contexts. var jsonBuilderExpression: SQLExpression { switch preferredJSONInterpretation { @@ -2373,7 +2373,7 @@ extension SQLSpecificExpressible { .desc(sqlExpression) } - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// An ordering term for ascending order (nulls last). public var ascNullsLast: SQLOrdering { .ascNullsLast(sqlExpression) @@ -2383,7 +2383,7 @@ extension SQLSpecificExpressible { public var descNullsFirst: SQLOrdering { .descNullsFirst(sqlExpression) } - #elseif !GRDBCIPHER + #else /// An ordering term for ascending order (nulls last). @available(iOS 14, macOS 10.16, tvOS 14, *) // SQLite 3.30+ public var ascNullsLast: SQLOrdering { diff --git a/GRDB/QueryInterface/SQL/SQLFunctions.swift b/GRDB/QueryInterface/SQL/SQLFunctions.swift index b30fe89b5a..3755e42555 100644 --- a/GRDB/QueryInterface/SQL/SQLFunctions.swift +++ b/GRDB/QueryInterface/SQL/SQLFunctions.swift @@ -10,7 +10,7 @@ public func abs(_ value: some SQLSpecificExpressible) -> SQLExpression { .function("ABS", [value.sqlExpression]) } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// The `AVG` SQL aggregate function. /// /// For example: @@ -163,7 +163,7 @@ public func max( .simpleFunction("MAX", [value1.sqlExpression, value2.sqlExpression] + values.map(\.sqlExpression)) } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// The `MAX` SQL aggregate function. /// /// For example: @@ -224,7 +224,7 @@ public func min( .simpleFunction("MIN", [value1.sqlExpression, value2.sqlExpression] + values.map(\.sqlExpression)) } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// The `MIN` SQL aggregate function. /// /// For example: @@ -269,7 +269,7 @@ public func min(_ value: some SQLSpecificExpressible) -> SQLExpression { } #endif -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// The `SUM` SQL aggregate function. /// /// For example: @@ -333,7 +333,7 @@ public func sum(_ value: some SQLSpecificExpressible) -> SQLExpression { } #endif -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// The `TOTAL` SQL aggregate function. /// /// For example: diff --git a/GRDB/QueryInterface/SQLGeneration/SQLTableGenerator.swift b/GRDB/QueryInterface/SQLGeneration/SQLTableGenerator.swift index 740b74dcce..29d72d96ad 100644 --- a/GRDB/QueryInterface/SQLGeneration/SQLTableGenerator.swift +++ b/GRDB/QueryInterface/SQLGeneration/SQLTableGenerator.swift @@ -120,7 +120,7 @@ struct SQLTableGenerator { var tableOptions: [String] = [] -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC if options.contains(.strict) { tableOptions.append("STRICT") } diff --git a/GRDB/QueryInterface/Schema/ColumnDefinition.swift b/GRDB/QueryInterface/Schema/ColumnDefinition.swift index 18ee6a9830..f179a3b840 100644 --- a/GRDB/QueryInterface/Schema/ColumnDefinition.swift +++ b/GRDB/QueryInterface/Schema/ColumnDefinition.swift @@ -350,7 +350,7 @@ public final class ColumnDefinition { return self } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Defines the column as a generated column. /// /// For example: diff --git a/GRDB/QueryInterface/Schema/TableAlteration.swift b/GRDB/QueryInterface/Schema/TableAlteration.swift index d967d073a0..fe0178fa68 100644 --- a/GRDB/QueryInterface/Schema/TableAlteration.swift +++ b/GRDB/QueryInterface/Schema/TableAlteration.swift @@ -79,7 +79,7 @@ public final class TableAlteration { alterations.append(.addColumnLiteral(literal)) } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Renames a column. /// /// For example: diff --git a/GRDB/QueryInterface/Schema/TableDefinition.swift b/GRDB/QueryInterface/Schema/TableDefinition.swift index 2395d62b08..1e1be731cb 100644 --- a/GRDB/QueryInterface/Schema/TableDefinition.swift +++ b/GRDB/QueryInterface/Schema/TableDefinition.swift @@ -15,7 +15,7 @@ public struct TableOptions: OptionSet, Sendable { /// Such tables can not be tracked with tools. public static let withoutRowID = TableOptions(rawValue: 1 << 2) -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Creates a [STRICT](https://www.sqlite.org/stricttables.html) table. public static let strict = TableOptions(rawValue: 1 << 3) #else diff --git a/GRDB/Record/MutablePersistableRecord+Insert.swift b/GRDB/Record/MutablePersistableRecord+Insert.swift index 59eaae1104..3859f51e93 100644 --- a/GRDB/Record/MutablePersistableRecord+Insert.swift +++ b/GRDB/Record/MutablePersistableRecord+Insert.swift @@ -90,7 +90,7 @@ extension MutablePersistableRecord { // MARK: - Insert and Fetch extension MutablePersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Executes an `INSERT RETURNING` statement, and returns a new record built /// from the inserted row. /// diff --git a/GRDB/Record/MutablePersistableRecord+Save.swift b/GRDB/Record/MutablePersistableRecord+Save.swift index a579884330..1489f48e67 100644 --- a/GRDB/Record/MutablePersistableRecord+Save.swift +++ b/GRDB/Record/MutablePersistableRecord+Save.swift @@ -86,7 +86,7 @@ extension MutablePersistableRecord { // MARK: - Save and Fetch extension MutablePersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Executes an `INSERT RETURNING` or `UPDATE RETURNING` statement, and /// returns a new record built from the saved row. /// diff --git a/GRDB/Record/MutablePersistableRecord+Update.swift b/GRDB/Record/MutablePersistableRecord+Update.swift index 3582579703..e193870700 100644 --- a/GRDB/Record/MutablePersistableRecord+Update.swift +++ b/GRDB/Record/MutablePersistableRecord+Update.swift @@ -213,7 +213,7 @@ extension MutablePersistableRecord { // MARK: - Update and Fetch extension MutablePersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Executes an `UPDATE RETURNING` statement on all columns, and returns a /// new record built from the updated row. /// @@ -839,7 +839,7 @@ extension MutablePersistableRecord { // MARK: - Internals extension MutablePersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC @inlinable // allow specialization so that empty callbacks are removed func updateChangesAndFetch( _ db: Database, diff --git a/GRDB/Record/MutablePersistableRecord+Upsert.swift b/GRDB/Record/MutablePersistableRecord+Upsert.swift index 335eea04e7..8adacf3cab 100644 --- a/GRDB/Record/MutablePersistableRecord+Upsert.swift +++ b/GRDB/Record/MutablePersistableRecord+Upsert.swift @@ -1,7 +1,7 @@ // MARK: - Upsert extension MutablePersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Executes an `INSERT ON CONFLICT DO UPDATE` statement. /// /// The upsert behavior is triggered by a violation of any uniqueness diff --git a/GRDB/Record/PersistableRecord+Insert.swift b/GRDB/Record/PersistableRecord+Insert.swift index be7f5a9fe7..27e76c2512 100644 --- a/GRDB/Record/PersistableRecord+Insert.swift +++ b/GRDB/Record/PersistableRecord+Insert.swift @@ -55,7 +55,7 @@ extension PersistableRecord { // MARK: - Insert and Fetch extension PersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Executes an `INSERT RETURNING` statement, and returns a new record built /// from the inserted row. /// diff --git a/GRDB/Record/PersistableRecord+Save.swift b/GRDB/Record/PersistableRecord+Save.swift index 80a9f3f815..c1ea9105b6 100644 --- a/GRDB/Record/PersistableRecord+Save.swift +++ b/GRDB/Record/PersistableRecord+Save.swift @@ -38,7 +38,7 @@ extension PersistableRecord { // MARK: - Save and Fetch extension PersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Executes an `INSERT RETURNING` or `UPDATE RETURNING` statement, and /// returns a new record built from the saved row. /// diff --git a/GRDB/Record/PersistableRecord+Upsert.swift b/GRDB/Record/PersistableRecord+Upsert.swift index fa7e42975a..bbe439fdfb 100644 --- a/GRDB/Record/PersistableRecord+Upsert.swift +++ b/GRDB/Record/PersistableRecord+Upsert.swift @@ -1,7 +1,7 @@ // MARK: - Upsert extension PersistableRecord { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC /// Executes an `INSERT ON CONFLICT DO UPDATE` statement. /// /// The upsert behavior is triggered by a violation of any uniqueness diff --git a/Tests/GRDBTests/FTS3TableBuilderTests.swift b/Tests/GRDBTests/FTS3TableBuilderTests.swift index 55ca5a8fcf..abfe6bbd75 100644 --- a/Tests/GRDBTests/FTS3TableBuilderTests.swift +++ b/Tests/GRDBTests/FTS3TableBuilderTests.swift @@ -86,8 +86,11 @@ class FTS3TableBuilderTests: GRDBTestCase { } } - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC func testUnicode61TokenizerDiacriticsRemove() throws { + guard Database.sqliteLibVersionNumber >= 3027000 else { + throw XCTSkip("remove_diacritics=2 is not available") + } let dbQueue = try makeDatabaseQueue() try dbQueue.inDatabase { db in try db.create(virtualTable: "documents", using: FTS3()) { t in @@ -96,10 +99,10 @@ class FTS3TableBuilderTests: GRDBTestCase { assertDidExecute(sql: "CREATE VIRTUAL TABLE \"documents\" USING fts3(tokenize=unicode61 \"remove_diacritics=2\")") } } - #elseif !GRDBCIPHER + #else func testUnicode61TokenizerDiacriticsRemove() throws { guard #available(iOS 14, macOS 10.16, tvOS 14, *) else { - throw XCTSkip() + throw XCTSkip("remove_diacritics=2 is not available") } let dbQueue = try makeDatabaseQueue() try dbQueue.inDatabase { db in diff --git a/Tests/GRDBTests/FTS3TokenizerTests.swift b/Tests/GRDBTests/FTS3TokenizerTests.swift index 3d61a6c8d1..67bc4d52fe 100644 --- a/Tests/GRDBTests/FTS3TokenizerTests.swift +++ b/Tests/GRDBTests/FTS3TokenizerTests.swift @@ -95,8 +95,35 @@ class FTS3TokenizerTests: GRDBTestCase { } } - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC func testUnicode61TokenizerDiacriticsRemove() throws { + guard Database.sqliteLibVersionNumber >= 3027000 else { + throw XCTSkip("remove_diacritics=2 is not available") + } + let dbQueue = try makeDatabaseQueue() + try dbQueue.inDatabase { db in + try db.create(virtualTable: "documents", using: FTS3()) { t in + t.tokenizer = .unicode61(diacritics: .remove) + } + + // simple match + XCTAssertTrue(match(db, "abcDÉF", "abcDÉF")) + + // English stemming + XCTAssertFalse(match(db, "database", "databases")) + + // diacritics in latin characters + XCTAssertTrue(match(db, "eéÉ", "Èèe")) + + // unicode case + XCTAssertTrue(match(db, "jérôme", "JÉRÔME")) + } + } + #else + func testUnicode61TokenizerDiacriticsRemove() throws { + guard #available(iOS 14, macOS 10.16, tvOS 14, *) else { + throw XCTSkip("remove_diacritics=2 is not available") + } let dbQueue = try makeDatabaseQueue() try dbQueue.inDatabase { db in try db.create(virtualTable: "documents", using: FTS3()) { t in diff --git a/Tests/GRDBTests/FTS4TableBuilderTests.swift b/Tests/GRDBTests/FTS4TableBuilderTests.swift index 653ce0b7a9..243a0e1086 100644 --- a/Tests/GRDBTests/FTS4TableBuilderTests.swift +++ b/Tests/GRDBTests/FTS4TableBuilderTests.swift @@ -87,8 +87,24 @@ class FTS4TableBuilderTests: GRDBTestCase { } // TODO: why only custom SQLite build? - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC func testUnicode61TokenizerDiacriticsRemove() throws { + guard Database.sqliteLibVersionNumber >= 3027000 else { + throw XCTSkip("remove_diacritics=2 is not available") + } + let dbQueue = try makeDatabaseQueue() + try dbQueue.inDatabase { db in + try db.create(virtualTable: "documents", using: FTS4()) { t in + t.tokenizer = .unicode61(diacritics: .remove) + } + assertDidExecute(sql: "CREATE VIRTUAL TABLE \"documents\" USING fts4(tokenize=unicode61 \"remove_diacritics=2\")") + } + } + #else + func testUnicode61TokenizerDiacriticsRemove() throws { + guard #available(iOS 14, macOS 10.16, tvOS 14, *) else { + throw XCTSkip("remove_diacritics=2 is not available") + } let dbQueue = try makeDatabaseQueue() try dbQueue.inDatabase { db in try db.create(virtualTable: "documents", using: FTS4()) { t in diff --git a/Tests/GRDBTests/FTS5TableBuilderTests.swift b/Tests/GRDBTests/FTS5TableBuilderTests.swift index 9e9db31624..248acd66df 100644 --- a/Tests/GRDBTests/FTS5TableBuilderTests.swift +++ b/Tests/GRDBTests/FTS5TableBuilderTests.swift @@ -143,8 +143,11 @@ class FTS5TableBuilderTests: GRDBTestCase { } } - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC func testUnicode61TokenizerDiacriticsRemove() throws { + guard Database.sqliteLibVersionNumber >= 3027000 else { + throw XCTSkip("remove_diacritics=2 is not available") + } let dbQueue = try makeDatabaseQueue() try dbQueue.inDatabase { db in try db.create(virtualTable: "documents", using: FTS5()) { t in @@ -154,10 +157,10 @@ class FTS5TableBuilderTests: GRDBTestCase { assertDidExecute(sql: "CREATE VIRTUAL TABLE \"documents\" USING fts5(content, tokenize='''unicode61'' ''remove_diacritics'' ''2''')") } } - #elseif !GRDBCIPHER + #else func testUnicode61TokenizerDiacriticsRemove() throws { guard #available(iOS 14, macOS 10.16, tvOS 14, *) else { - throw XCTSkip() + throw XCTSkip("remove_diacritics=2 is not available") } let dbQueue = try makeDatabaseQueue() @@ -363,7 +366,7 @@ class FTS5TableBuilderTests: GRDBTestCase { // Regression test for func testIssue1390() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } diff --git a/Tests/GRDBTests/FTS5TokenizerTests.swift b/Tests/GRDBTests/FTS5TokenizerTests.swift index 0837ee5c09..0443849143 100644 --- a/Tests/GRDBTests/FTS5TokenizerTests.swift +++ b/Tests/GRDBTests/FTS5TokenizerTests.swift @@ -173,8 +173,36 @@ class FTS5TokenizerTests: GRDBTestCase { } } - #if GRDBCUSTOMSQLITE + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC func testUnicode61TokenizerDiacriticsRemove() throws { + guard Database.sqliteLibVersionNumber >= 3027000 else { + throw XCTSkip("remove_diacritics=2 is not available") + } + let dbQueue = try makeDatabaseQueue() + try dbQueue.inDatabase { db in + try db.create(virtualTable: "documents", using: FTS5()) { t in + t.tokenizer = .unicode61(diacritics: .remove) + t.column("content") + } + + // simple match + XCTAssertTrue(match(db, "abcDÉF", "abcDÉF")) + + // English stemming + XCTAssertFalse(match(db, "database", "databases")) + + // diacritics in latin characters + XCTAssertTrue(match(db, "eéÉ", "Èèe")) + + // unicode case + XCTAssertTrue(match(db, "jérôme", "JÉRÔME")) + } + } + #else + func testUnicode61TokenizerDiacriticsRemove() throws { + guard #available(iOS 14, macOS 10.16, tvOS 14, *) else { + throw XCTSkip("remove_diacritics=2 is not available") + } let dbQueue = try makeDatabaseQueue() try dbQueue.inDatabase { db in try db.create(virtualTable: "documents", using: FTS5()) { t in diff --git a/Tests/GRDBTests/JSONColumnTests.swift b/Tests/GRDBTests/JSONColumnTests.swift index 763eed4aed..752b563cef 100644 --- a/Tests/GRDBTests/JSONColumnTests.swift +++ b/Tests/GRDBTests/JSONColumnTests.swift @@ -3,7 +3,7 @@ import GRDB final class JSONColumnTests: GRDBTestCase { func test_JSONColumn_derived_from_CodingKey() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -45,7 +45,7 @@ final class JSONColumnTests: GRDBTestCase { } func test_JSON_EXTRACT() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON_EXTRACT is not available") @@ -77,7 +77,7 @@ final class JSONColumnTests: GRDBTestCase { } func test_extraction_operators() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON operators are not available") diff --git a/Tests/GRDBTests/JSONExpressionsTests.swift b/Tests/GRDBTests/JSONExpressionsTests.swift index 0e9ed40e9b..749343d0a2 100644 --- a/Tests/GRDBTests/JSONExpressionsTests.swift +++ b/Tests/GRDBTests/JSONExpressionsTests.swift @@ -6,7 +6,7 @@ final class JSONExpressionsTests: GRDBTestCase { private let jsonFunction = (Database.sqliteLibVersionNumber >= 3045000) ? "JSONB" : "JSON" func test_Database_json() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -41,7 +41,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonb() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -74,7 +74,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_asJSON() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -135,7 +135,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonArray() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -190,7 +190,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonArray_from_SQLJSONExpressible() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -311,7 +311,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbArray() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -364,7 +364,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbArray_from_SQLJSONExpressible() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -483,7 +483,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonArrayLength() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -518,7 +518,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonArrayLength_atPath() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -561,7 +561,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonErrorPosition() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3042000 else { throw XCTSkip("JSON_ERROR_JSON is not available") @@ -594,7 +594,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonExtract_atPath() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -637,7 +637,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonExtract_atPaths() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -672,7 +672,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbExtract_atPath() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -713,7 +713,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbExtract_atPaths() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -746,7 +746,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonInsert() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -801,7 +801,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbInsert() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -862,7 +862,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonReplace() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -917,7 +917,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbReplace() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -978,7 +978,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonSet() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1033,7 +1033,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbSet() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -1094,7 +1094,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonObject_from_Dictionary() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1197,7 +1197,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonObject_from_Array() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1280,7 +1280,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonObject_from_KeyValuePairs() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1363,7 +1363,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbObject_from_Dictionary() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -1500,7 +1500,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbObject_from_Array() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -1610,7 +1610,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbObject_from_KeyValuePairs() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -1720,7 +1720,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonPatch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1763,7 +1763,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbPatch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -1804,7 +1804,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonRemove_atPath() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1847,7 +1847,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonRemove_atPaths() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1882,7 +1882,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbRemove_atPath() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -1923,7 +1923,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbRemove_atPaths() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -1956,7 +1956,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonType() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -1991,7 +1991,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonType_atPath() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2034,7 +2034,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonIsValid() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2069,7 +2069,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonIsValid_options() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSON_VALID options are not available") @@ -2103,7 +2103,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonQuote() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2150,7 +2150,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonGroupArray() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2181,7 +2181,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonGroupArray_from_JSON() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2209,7 +2209,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonGroupArray_from_JSONB() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -2235,7 +2235,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonGroupArray_filter() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2266,7 +2266,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonGroupArray_order() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3044000 else { throw XCTSkip("JSON support is not available") @@ -2303,7 +2303,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbGroupArray() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -2332,7 +2332,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbGroupArray_filter() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -2361,7 +2361,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbGroupArray_order() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -2398,7 +2398,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonGroupObject() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2425,7 +2425,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonGroupObject_filter() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2452,7 +2452,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbGroupObject() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -2477,7 +2477,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_Database_jsonbGroupObject_filter() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -2502,7 +2502,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_JSON_index_and_generated_columns() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3038000 else { throw XCTSkip("JSON support is not available") @@ -2562,7 +2562,7 @@ final class JSONExpressionsTests: GRDBTestCase { } func test_JSONB_index_and_generated_columns() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3045000 else { throw XCTSkip("JSONB is not available") @@ -2620,7 +2620,7 @@ final class JSONExpressionsTests: GRDBTestCase { // TODO: Enable when those apis are ready. // func test_ColumnAssignment() throws { -// #if GRDBCUSTOMSQLITE || GRDBCIPHER +// #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // // Prevent SQLCipher failures // guard Database.sqliteLibVersionNumber >= 3038000 else { // throw XCTSkip("JSON support is not available") diff --git a/Tests/GRDBTests/MutablePersistableRecordTests.swift b/Tests/GRDBTests/MutablePersistableRecordTests.swift index d31e22ba4a..5e5fd6f6e3 100644 --- a/Tests/GRDBTests/MutablePersistableRecordTests.swift +++ b/Tests/GRDBTests/MutablePersistableRecordTests.swift @@ -1256,7 +1256,7 @@ class MutablePersistableRecordTests: GRDBTestCase { extension MutablePersistableRecordTests { func test_insertAndFetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1277,7 +1277,7 @@ extension MutablePersistableRecordTests { } func test_insertAndFetch_as() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1327,7 +1327,7 @@ extension MutablePersistableRecordTests { } func test_insertAndFetch_selection_fetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1414,7 +1414,7 @@ extension MutablePersistableRecordTests { } func test_insertAndFetch_fetch_select() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1509,7 +1509,7 @@ extension MutablePersistableRecordTests { extension MutablePersistableRecordTests { func test_saveAndFetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1530,7 +1530,7 @@ extension MutablePersistableRecordTests { } func test_saveAndFetch_as() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1656,7 +1656,7 @@ extension MutablePersistableRecordTests { } func test_saveAndFetch_selection_fetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1786,7 +1786,7 @@ extension MutablePersistableRecordTests { extension MutablePersistableRecordTests { func test_updateAndFetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1837,7 +1837,7 @@ extension MutablePersistableRecordTests { } func test_updateAndFetch_as() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1887,7 +1887,7 @@ extension MutablePersistableRecordTests { } func test_updateAndFetch_selection_fetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1941,7 +1941,7 @@ extension MutablePersistableRecordTests { } func test_updateAndFetch_columns_selection_fetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1995,7 +1995,7 @@ extension MutablePersistableRecordTests { } func test_updateChangesAndFetch_modify() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -2056,7 +2056,7 @@ extension MutablePersistableRecordTests { } func test_updateChangesAndFetch_as_modify() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -2116,7 +2116,7 @@ extension MutablePersistableRecordTests { } func test_updateChangesAndFetch_selection_fetch_modify() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -2186,7 +2186,7 @@ extension MutablePersistableRecordTests { extension MutablePersistableRecordTests { func test_upsert() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } @@ -2335,7 +2335,7 @@ extension MutablePersistableRecordTests { } func test_upsertAndFetch_do_update_set_where() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } @@ -2491,7 +2491,7 @@ extension MutablePersistableRecordTests { } func test_upsertAndFetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } @@ -2594,7 +2594,7 @@ extension MutablePersistableRecordTests { } func test_upsertAndFetch_as() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } diff --git a/Tests/GRDBTests/PersistableRecordTests.swift b/Tests/GRDBTests/PersistableRecordTests.swift index 80dfaa9ee6..6be773caa0 100644 --- a/Tests/GRDBTests/PersistableRecordTests.swift +++ b/Tests/GRDBTests/PersistableRecordTests.swift @@ -1335,7 +1335,7 @@ extension PersistableRecordTests { extension PersistableRecordTests { func test_insertAndFetch_as() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1384,7 +1384,7 @@ extension PersistableRecordTests { } func test_insertAndFetch_selection_fetch_column() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1433,7 +1433,7 @@ extension PersistableRecordTests { } func test_insertAndFetch_selection_fetch_column_DatabaseComponents() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1484,7 +1484,7 @@ extension PersistableRecordTests { } func test_insertAndFetch_selection_fetch_allColumns() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1533,7 +1533,7 @@ extension PersistableRecordTests { } func test_insertAndFetch_selection_fetch_allColumns_DatabaseComponents() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1584,7 +1584,7 @@ extension PersistableRecordTests { } func test_insertAndFetch_selection_fetch_allColumns_excluding() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1633,7 +1633,7 @@ extension PersistableRecordTests { } func test_insertAndFetch_selection_fetch_allColumns_excluding_DatabaseComponents() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1688,7 +1688,7 @@ extension PersistableRecordTests { extension PersistableRecordTests { func test_saveAndFetch_as() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1811,7 +1811,7 @@ extension PersistableRecordTests { } func test_saveAndFetch_selection_fetch_column() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1934,7 +1934,7 @@ extension PersistableRecordTests { } func test_saveAndFetch_selection_fetch_allColumns() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -2059,7 +2059,7 @@ extension PersistableRecordTests { } func test_saveAndFetch_selection_fetch_allColumns_excluding() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -2188,7 +2188,7 @@ extension PersistableRecordTests { extension PersistableRecordTests { func test_upsert() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } @@ -2325,7 +2325,7 @@ extension PersistableRecordTests { } func test_upsertAndFetch_do_update_set_where() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } @@ -2470,7 +2470,7 @@ extension PersistableRecordTests { } func test_upsertAndFetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } @@ -2573,7 +2573,7 @@ extension PersistableRecordTests { } func test_upsertAndFetch_as() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } diff --git a/Tests/GRDBTests/QueryInterfaceExpressionsTests.swift b/Tests/GRDBTests/QueryInterfaceExpressionsTests.swift index b1e7a1b4d7..dd8d60035c 100644 --- a/Tests/GRDBTests/QueryInterfaceExpressionsTests.swift +++ b/Tests/GRDBTests/QueryInterfaceExpressionsTests.swift @@ -2412,7 +2412,7 @@ class QueryInterfaceExpressionsTests: GRDBTestCase { } func testAvgExpression_filter() throws { - #if GRDBCUSTOMSQLITE || GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3030000 else { throw XCTSkip("FILTER clause on aggregate functions is not available") @@ -2518,7 +2518,7 @@ class QueryInterfaceExpressionsTests: GRDBTestCase { } func testAggregateMinExpression_filter() throws { - #if GRDBCUSTOMSQLITE || GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3030000 else { throw XCTSkip("FILTER clause on aggregate functions is not available") @@ -2580,7 +2580,7 @@ class QueryInterfaceExpressionsTests: GRDBTestCase { } func testAggregateMaxExpression_filter() throws { - #if GRDBCUSTOMSQLITE || GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3030000 else { throw XCTSkip("FILTER clause on aggregate functions is not available") @@ -2625,7 +2625,7 @@ class QueryInterfaceExpressionsTests: GRDBTestCase { } func testSumExpression_filter() throws { - #if GRDBCUSTOMSQLITE || GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3030000 else { throw XCTSkip("FILTER clause on aggregate functions is not available") @@ -2652,7 +2652,7 @@ class QueryInterfaceExpressionsTests: GRDBTestCase { "SELECT SUM(\"age\" / 2) FILTER (WHERE \"age\" > 0) FROM \"readers\"") } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC func testSumExpression_order() throws { // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3044000 else { @@ -2706,7 +2706,7 @@ class QueryInterfaceExpressionsTests: GRDBTestCase { } func testTotalExpression_filter() throws { - #if GRDBCUSTOMSQLITE || GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3030000 else { throw XCTSkip("FILTER clause on aggregate functions is not available") @@ -2733,7 +2733,7 @@ class QueryInterfaceExpressionsTests: GRDBTestCase { "SELECT TOTAL(\"age\" / 2) FILTER (WHERE \"age\" > 0) FROM \"readers\"") } -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC func testTotalExpression_order() throws { // Prevent SQLCipher failures guard Database.sqliteLibVersionNumber >= 3044000 else { diff --git a/Tests/GRDBTests/QueryInterfaceRequestTests.swift b/Tests/GRDBTests/QueryInterfaceRequestTests.swift index cf93a8f6e5..6e5149c72f 100644 --- a/Tests/GRDBTests/QueryInterfaceRequestTests.swift +++ b/Tests/GRDBTests/QueryInterfaceRequestTests.swift @@ -948,27 +948,29 @@ class QueryInterfaceRequestTests: GRDBTestCase { sql(dbQueue, tableRequest.order { abs($0.age) }), "SELECT * FROM \"readers\" ORDER BY ABS(\"age\")") - #if GRDBCUSTOMSQLITE - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.age.ascNullsLast)), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.age.ascNullsLast }), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order(\.age.ascNullsLast)), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.age.descNullsFirst)), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.age.descNullsFirst }), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order(\.age.descNullsFirst)), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - #elseif !GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC + if Database.sqliteLibVersionNumber >= 3030000 { + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.age.ascNullsLast)), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.age.ascNullsLast }), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order(\.age.ascNullsLast)), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.age.descNullsFirst)), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.age.descNullsFirst }), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order(\.age.descNullsFirst)), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + } + #else if #available(iOS 14, macOS 10.16, tvOS 14, *) { XCTAssertEqual( sql(dbQueue, tableRequest.order(Columns.age.ascNullsLast)), @@ -1013,20 +1015,22 @@ class QueryInterfaceRequestTests: GRDBTestCase { XCTAssertEqual( sql(dbQueue, tableRequest.order { $0.name.collating(collation) }), "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE localized_case_insensitive") - #if GRDBCUSTOMSQLITE - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).ascNullsLast)), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).ascNullsLast }), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).descNullsFirst)), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).descNullsFirst }), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") - #elseif !GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC + if Database.sqliteLibVersionNumber >= 3030000 { + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).ascNullsLast)), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).ascNullsLast }), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).descNullsFirst)), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).descNullsFirst }), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") + } + #else if #available(iOS 14, macOS 10.16, tvOS 14, *) { XCTAssertEqual( sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).ascNullsLast)), @@ -1092,20 +1096,22 @@ class QueryInterfaceRequestTests: GRDBTestCase { XCTAssertEqual( sql(dbQueue, tableRequest.order { abs($0.age) }.reversed()), "SELECT * FROM \"readers\" ORDER BY ABS(\"age\") DESC") - #if GRDBCUSTOMSQLITE - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.age.descNullsFirst).reversed()), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.age.descNullsFirst }.reversed()), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.age.ascNullsLast).reversed()), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.age.ascNullsLast }.reversed()), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - #elseif !GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC + if Database.sqliteLibVersionNumber >= 3030000 { + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.age.descNullsFirst).reversed()), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.age.descNullsFirst }.reversed()), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.age.ascNullsLast).reversed()), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.age.ascNullsLast }.reversed()), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + } + #else if #available(iOS 14, macOS 10.16, tvOS 14, *) { XCTAssertEqual( sql(dbQueue, tableRequest.order(Columns.age.descNullsFirst).reversed()), @@ -1143,20 +1149,22 @@ class QueryInterfaceRequestTests: GRDBTestCase { XCTAssertEqual( sql(dbQueue, tableRequest.order { $0.name.collating(collation) }.reversed()), "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE localized_case_insensitive DESC") - #if GRDBCUSTOMSQLITE - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).ascNullsLast).reversed()), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).ascNullsLast }.reversed()), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).descNullsFirst).reversed()), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).descNullsFirst }.reversed()), - "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") - #elseif !GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC + if Database.sqliteLibVersionNumber >= 3030000 { + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).ascNullsLast).reversed()), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).ascNullsLast }.reversed()), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).descNullsFirst).reversed()), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, tableRequest.order { $0.name.collating(.nocase).descNullsFirst }.reversed()), + "SELECT * FROM \"readers\" ORDER BY \"name\" COLLATE NOCASE ASC NULLS LAST") + } + #else if #available(iOS 14, macOS 10.16, tvOS 14, *) { XCTAssertEqual( sql(dbQueue, tableRequest.order(Columns.name.collating(.nocase).ascNullsLast).reversed()), diff --git a/Tests/GRDBTests/SingletonRecordTest.swift b/Tests/GRDBTests/SingletonRecordTest.swift index 0be0c8f097..3f4e3ba271 100644 --- a/Tests/GRDBTests/SingletonRecordTest.swift +++ b/Tests/GRDBTests/SingletonRecordTest.swift @@ -187,7 +187,7 @@ class SingletonRecordTest: GRDBTestCase { } func test_upsert_in_empty_database() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } @@ -210,7 +210,7 @@ class SingletonRecordTest: GRDBTestCase { } func test_upsert_in_populated_database() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("UPSERT is not available") } diff --git a/Tests/GRDBTests/TableDefinitionTests.swift b/Tests/GRDBTests/TableDefinitionTests.swift index 30e8174ea2..f666eec2d2 100644 --- a/Tests/GRDBTests/TableDefinitionTests.swift +++ b/Tests/GRDBTests/TableDefinitionTests.swift @@ -50,7 +50,7 @@ class TableDefinitionTests: GRDBTestCase { guard Database.sqliteLibVersionNumber >= 3037000 else { throw XCTSkip("STRICT tables are not available") } - #if !GRDBCUSTOMSQLITE && !GRDBCIPHER + #if !GRDBCUSTOMSQLITE && !SQLITE_HAS_CODEC guard #available(iOS 15.4, macOS 12.4, tvOS 15.4, watchOS 8.5, *) else { throw XCTSkip("STRICT tables are not available") } @@ -357,7 +357,7 @@ class TableDefinitionTests: GRDBTestCase { } func testColumnGeneratedAs() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3031000 else { throw XCTSkip("Generated columns are not available") } @@ -834,7 +834,7 @@ class TableDefinitionTests: GRDBTestCase { } func testAlterTableAddGeneratedVirtualColumn() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3031000 else { throw XCTSkip("Generated columns are not available") } @@ -873,7 +873,7 @@ class TableDefinitionTests: GRDBTestCase { guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("ALTER TABLE DROP COLUMN is not available") } - #if !GRDBCUSTOMSQLITE && !GRDBCIPHER + #if !GRDBCUSTOMSQLITE && !SQLITE_HAS_CODEC guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { throw XCTSkip("ALTER TABLE DROP COLUMN is not available") } @@ -897,7 +897,7 @@ class TableDefinitionTests: GRDBTestCase { guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("ALTER TABLE DROP COLUMN is not available") } - #if !GRDBCUSTOMSQLITE && !GRDBCIPHER + #if !GRDBCUSTOMSQLITE && !SQLITE_HAS_CODEC guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { throw XCTSkip("ALTER TABLE DROP COLUMN is not available") } diff --git a/Tests/GRDBTests/TableRecord+QueryInterfaceRequestTests.swift b/Tests/GRDBTests/TableRecord+QueryInterfaceRequestTests.swift index a40d67b05a..dcfb1e6737 100644 --- a/Tests/GRDBTests/TableRecord+QueryInterfaceRequestTests.swift +++ b/Tests/GRDBTests/TableRecord+QueryInterfaceRequestTests.swift @@ -341,27 +341,29 @@ class TableRecordQueryInterfaceRequestTests: GRDBTestCase { sql(dbQueue, Reader.order { abs($0.age) }), "SELECT * FROM \"readers\" ORDER BY ABS(\"age\")") - #if GRDBCUSTOMSQLITE - XCTAssertEqual( - sql(dbQueue, Reader.order(Columns.age.ascNullsLast)), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, Reader.order { $0.age.ascNullsLast }), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - XCTAssertEqual( - sql(dbQueue, Reader.order(\.age.ascNullsLast)), - "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") - - XCTAssertEqual( - sql(dbQueue, Reader.order(Columns.age.descNullsFirst)), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, Reader.order { $0.age.descNullsFirst }), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - XCTAssertEqual( - sql(dbQueue, Reader.order(\.age.descNullsFirst)), - "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") - #elseif !GRDBCIPHER + #if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC + if Database.sqliteLibVersionNumber >= 3030000 { + XCTAssertEqual( + sql(dbQueue, Reader.order(Columns.age.ascNullsLast)), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, Reader.order { $0.age.ascNullsLast }), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + XCTAssertEqual( + sql(dbQueue, Reader.order(\.age.ascNullsLast)), + "SELECT * FROM \"readers\" ORDER BY \"age\" ASC NULLS LAST") + + XCTAssertEqual( + sql(dbQueue, Reader.order(Columns.age.descNullsFirst)), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, Reader.order { $0.age.descNullsFirst }), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + XCTAssertEqual( + sql(dbQueue, Reader.order(\.age.descNullsFirst)), + "SELECT * FROM \"readers\" ORDER BY \"age\" DESC NULLS FIRST") + } + #else if #available(iOS 14, macOS 10.16, tvOS 14, *) { XCTAssertEqual( sql(dbQueue, Reader.order(Columns.age.ascNullsLast)), diff --git a/Tests/GRDBTests/TableRecordDeleteTests.swift b/Tests/GRDBTests/TableRecordDeleteTests.swift index 386cc3cdfd..fdbc26fc89 100644 --- a/Tests/GRDBTests/TableRecordDeleteTests.swift +++ b/Tests/GRDBTests/TableRecordDeleteTests.swift @@ -445,7 +445,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchStatement_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -479,7 +479,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchStatement_view() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -513,7 +513,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchCursor_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -564,7 +564,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchCursor_view() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -617,7 +617,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchArray_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -645,7 +645,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchArray_view() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -675,7 +675,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchSet_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -701,7 +701,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchSet_view() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -729,7 +729,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchIds_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -752,7 +752,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testRequestDeleteAndFetchIds_view() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -839,7 +839,7 @@ class TableRecordDeleteTests: GRDBTestCase { // TODO: duplicate test with views? func testJoinedRequestDeleteAndFetch() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -1006,7 +1006,7 @@ class TableRecordDeleteTests: GRDBTestCase { } func testGroupedRequestDeleteAndFetchCursor() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } diff --git a/Tests/GRDBTests/TableRecordUpdateTests.swift b/Tests/GRDBTests/TableRecordUpdateTests.swift index 3ee0155377..dfa9b76dcc 100644 --- a/Tests/GRDBTests/TableRecordUpdateTests.swift +++ b/Tests/GRDBTests/TableRecordUpdateTests.swift @@ -416,7 +416,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchStatement_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -455,7 +455,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchStatement_view() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -494,7 +494,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchStatement_DatabaseComponents_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -532,7 +532,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchStatement_DatabaseComponents_view() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -571,7 +571,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchCursor_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -608,7 +608,7 @@ class TableRecordUpdateTests: GRDBTestCase { throw XCTSkip("RETURNING and INSTEAD OF are buggy") } -#if !GRDBCUSTOMSQLITE && !GRDBCIPHER +#if !GRDBCUSTOMSQLITE && !SQLITE_HAS_CODEC guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { throw XCTSkip("RETURNING clause is not available") } @@ -638,7 +638,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchCursor_DatabaseComponents_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -674,7 +674,7 @@ class TableRecordUpdateTests: GRDBTestCase { throw XCTSkip("RETURNING and INSTEAD OF are buggy") } -#if !GRDBCUSTOMSQLITE && !GRDBCIPHER +#if !GRDBCUSTOMSQLITE && !SQLITE_HAS_CODEC guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { throw XCTSkip("RETURNING clause is not available") } @@ -700,7 +700,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchAll_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -737,7 +737,7 @@ class TableRecordUpdateTests: GRDBTestCase { throw XCTSkip("RETURNING and INSTEAD OF are buggy") } -#if !GRDBCUSTOMSQLITE && !GRDBCIPHER +#if !GRDBCUSTOMSQLITE && !SQLITE_HAS_CODEC guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { throw XCTSkip("RETURNING clause is not available") } @@ -764,7 +764,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchAll_DatabaseComponents_table() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -801,7 +801,7 @@ class TableRecordUpdateTests: GRDBTestCase { throw XCTSkip("RETURNING and INSTEAD OF are buggy") } -#if !GRDBCUSTOMSQLITE && !GRDBCIPHER +#if !GRDBCUSTOMSQLITE && !SQLITE_HAS_CODEC guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { throw XCTSkip("RETURNING clause is not available") } @@ -828,7 +828,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchSet() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } @@ -854,7 +854,7 @@ class TableRecordUpdateTests: GRDBTestCase { } func testRequestUpdateAndFetchSet_DatabaseComponents() throws { -#if GRDBCUSTOMSQLITE || GRDBCIPHER +#if GRDBCUSTOMSQLITE || SQLITE_HAS_CODEC guard Database.sqliteLibVersionNumber >= 3035000 else { throw XCTSkip("RETURNING clause is not available") } diff --git a/Tests/GRDBTests/ValueObservationTests.swift b/Tests/GRDBTests/ValueObservationTests.swift index 03202b4480..6134d8453b 100644 --- a/Tests/GRDBTests/ValueObservationTests.swift +++ b/Tests/GRDBTests/ValueObservationTests.swift @@ -1046,7 +1046,7 @@ class ValueObservationTests: GRDBTestCase { // An attempt at finding a regression test for func testManyObservations() throws { // TODO: Fix flaky test with SQLCipher 3 - #if GRDBCIPHER + #if SQLITE_HAS_CODEC if Database.sqliteLibVersionNumber <= 3020001 { throw XCTSkip("Skip flaky test with SQLCipher 3") }